@lab5e/loadabledata
TypeScript icon, indicating that this package has built-in type declarations

0.2.1 • Public • Published

LoadableData

Simple framework-agnostic wrapper around loadable data to help encapsulate and use state changes in a UI.

License Documentation npm bundle size (minified + gzip) loadabledata CI

Examples

We have a TSDoc that will include all documentation as well as the examples below.

Play around in codepen

Codepen example

Example: Vue in browser

<body>
  ...
  <div id="app" v-cloak>
    <span v-if="repositories.state.loading">Loading data</span>
    <span v-if="repositories.state.ready">
      Lab5e has {{ repositories.data.length }} public repositories!
    </span>
    <span v-if="repositories.state.error">{{ repositories.errorMessage }}</span>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  <script src="https://cdn.jsdelivr.net/npm/@lab5e/loadabledata"></script>
  <script>
    var app = new Vue({
      el: "#app",
      data() {
        return {
          repositories: loadabledata.fromUrl(
            "https://api.github.com/users/lab5e/repos",
            (error) => `Error trying to fetch data. Error: ${error}`,
          ),
        };
      },
    });
  </script>
</body>

Example: In ts

You must first install the dependency

npm i -S @lab5e/loadabledata

Then you can have a Lab5eRepos.vue-file which details the number of repositories Lab5e has publically available.

<template>
  <div>
    <span v-if="repositories.state.loading">Loading data</span>
    <span v-if="repositories.state.ready">
      Lab5e has {{ repositories.data.length }} public repositories!
    </span>
    <span v-if="repositories.state.error">{{ repositories.errorMessage }}</span>
  </div>
</template>

<script lang="ts">
  import { fromPromise, LoadableData } from "@lab5e/loadabledata";

  import Vue from "vue";
  export default Vue.extend({
    data(): { repositories: LoadableData<Repositories[]> } {
      return {
        repositories: fromUrl(
          "https://api.github.com/users/lab5e/repos",
          (error) => `Failed to list available todos. ${error}`,
          [],
        ),
      };
    },
  });
</script>

Development

We use TSDX for pretty much everything, and most npm scripts just proxy to tsdx.

Run single build

Use npm run build.

Run tests

To run tests, use npm test.

Configuration

Code quality is set up with prettier, husky, and lint-staged.

Jest

Jest tests are set up to run with npm test.

Watch mode

To run in watch mode run npm run test:watch

Coverage

To see coverage run npm run test:coverage

Bundle Analysis

size-limit is set up to calculate the real cost of your library with npm run size and visualize the bundle with npm run analyze.

Rollup

We us TSDX which uses Rollup as a bundler and generates multiple rollup configs for various module formats and build settings. See Optimizations for details.

We create UMD, CommonJS, and JavaScript Modules in our build. The appropriate paths are configured in package.json and dist/index.js

TypeScript

We use TypeScript for everything, giving us types for all the published packages.

Continuous Integration

GitHub Actions

  • main which installs deps w/ cache, lints, tests, and builds on all pushes against a Node and OS matrix
  • size which comments cost comparison of your library on every pull request using size-limit

Publishing to NPM

We use np. To publish a new version, write npx np and follow the interactive tutorial.

Readme

Keywords

none

Package Sidebar

Install

npm i @lab5e/loadabledata

Weekly Downloads

8

Version

0.2.1

License

Apache-2.0

Unpacked Size

71 kB

Total Files

18

Last publish

Collaborators

  • stalehd
  • pkkummermo