@lab5e/loadabledata
v0.2.1
Published
Simple framework-agnostic wrapper around loadable data to help encapsulate and use state changes in a UI.
Downloads
15
Readme
LoadableData
Simple framework-agnostic wrapper around loadable data to help encapsulate and use state changes in a UI.
Examples
We have a TSDoc that will include all documentation as well as the examples below.
Play around in codepen
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 matrixsize
which comments cost comparison of your library on every pull request usingsize-limit
Publishing to NPM
We use np
. To publish a new version, write npx np
and follow the interactive tutorial.