4.8.7 • Published 11 days ago

tinybase v4.8.7

Weekly downloads
-
License
MIT
Repository
github
Last release
11 days ago
const store = createStore()
  .setValues({employees: 3})
  .setValue('open', true);

console.log(store.getValues());
// -> {employees: 3, open: true}
store
  .setTable('pets', {fido: {species: 'dog'}})
  .setCell('pets', 'fido', 'color', 'brown');

console.log(store.getRow('pets', 'fido'));
// -> {species: 'dog', color: 'brown'}
const listenerId = store.addTableListener('pets', () =>
  console.log('changed'),
);

store.setCell('pets', 'fido', 'sold', false);
// -> 'changed'

store.delListener(listenerId);
const App1 = () => {
  const color = useCell('pets', 'fido', 'color', store);
  return <>Color: {color}</>;
};

const app = document.createElement('div');
const root = ReactDOMClient.createRoot(app);
root.render(<App1 />);
console.log(app.innerHTML);
// -> 'Color: brown'

store.setCell('pets', 'fido', 'color', 'walnut');
console.log(app.innerHTML);
// -> 'Color: walnut'
store.setTablesSchema({
  pets: {
    species: {type: 'string'},
    color: {type: 'string'},
    sold: {type: 'boolean', default: false},
  },
});

store.setRow('pets', 'polly', {species: 'parrot'});
console.log(store.getRow('pets', 'polly'));
// -> {species: 'parrot', sold: false}

store.delTablesSchema();
const persister = createSessionPersister(store, 'demo');
await persister.save();

console.log(sessionStorage.getItem('demo'));
// ->
`
[
  {
    "pets":{
      "fido":{"species":"dog","color":"walnut","sold":false},
      "polly":{"species":"parrot","sold":false}
    }
  },
  {"employees":3,"open":true}
]
`;

persister.destroy();
sessionStorage.clear();
store
  .setTable('pets', {
    fido: {species: 'dog', ownerId: '1', price: 5},
    rex: {species: 'dog', ownerId: '2', price: 4},
    felix: {species: 'cat', ownerId: '2', price: 3},
    cujo: {species: 'dog', ownerId: '3', price: 4},
  })
  .setTable('owners', {
    1: {name: 'Alice', state: 'CA'},
    2: {name: 'Bob', state: 'CA'},
    3: {name: 'Carol', state: 'WA'},
  });

const queries = createQueries(store);
queries.setQueryDefinition(
  'prices',
  'pets',
  ({select, join, group}) => {
    select('species');
    select('owners', 'state');
    select('price');
    join('owners', 'ownerId');
    group('price', 'avg').as('avgPrice');
  },
);

queries
  .getResultSortedRowIds('prices', 'avgPrice', true)
  .forEach((rowId) => {
    console.log(queries.getResultRow('prices', rowId));
  });
// -> {species: 'dog', state: 'CA', avgPrice: 4.5}
// -> {species: 'dog', state: 'WA', avgPrice: 4}
// -> {species: 'cat', state: 'CA', avgPrice: 3}

queries.destroy();
store.setTable('species', {
  dog: {price: 5},
  cat: {price: 4},
  worm: {price: 1},
});

const metrics = createMetrics(store);
metrics.setMetricDefinition(
  'highestPrice', // metricId
  'species', //      tableId to aggregate
  'max', //          aggregation
  'price', //        cellId to aggregate
);

console.log(metrics.getMetric('highestPrice'));
// -> 5

metrics.addMetricListener('highestPrice', () =>
  console.log(metrics.getMetric('highestPrice')),
);
store.setCell('species', 'horse', 'price', 20);
// -> 20

metrics.destroy();
const indexes = createIndexes(store);
indexes.setIndexDefinition(
  'bySpecies', // indexId
  'pets', //      tableId to index
  'species', //   cellId to index
);

console.log(indexes.getSliceIds('bySpecies'));
// -> ['dog', 'cat']
console.log(indexes.getSliceRowIds('bySpecies', 'dog'));
// -> ['fido', 'rex', 'cujo']

indexes.addSliceIdsListener('bySpecies', () =>
  console.log(indexes.getSliceIds('bySpecies')),
);
store.setRow('pets', 'lowly', {species: 'worm'});
// -> ['dog', 'cat', 'worm']

indexes.destroy();
const relationships = createRelationships(store);
relationships.setRelationshipDefinition(
  'petSpecies', // relationshipId
  'pets', //       local tableId to link from
  'species', //    remote tableId to link to
  'species', //    cellId containing remote key
);

console.log(
  store.getCell(
    relationships.getRemoteTableId('petSpecies'),
    relationships.getRemoteRowId('petSpecies', 'fido'),
    'price',
  ),
);
// -> 5

relationships.destroy();
const checkpoints = createCheckpoints(store);

store.setCell('pets', 'felix', 'sold', false);
checkpoints.addCheckpoint('pre-sale');

store.setCell('pets', 'felix', 'sold', true);
console.log(store.getCell('pets', 'felix', 'sold'));
// -> true

checkpoints.goBackward();
console.log(store.getCell('pets', 'felix', 'sold'));
// -> false
const tools = createTools(store);
const [dTs, ts] = tools.getStoreApi('shop');

// -- shop.d.ts --
/* Represents the 'pets' Table. */
export type PetsTable = {[rowId: Id]: PetsRow};
/* Represents a Row when getting the content of the 'pets' Table. */
export type PetsRow = {species: string /* ... */};
//...

// -- shop.ts --
export const createShop: typeof createShopDecl = () => {
  //...
};
4.8.7

11 days ago

4.8.5

13 days ago

4.8.6

12 days ago

5.0.0-beta.13

13 days ago

5.0.0-beta.14

12 days ago

5.0.0-beta.12

14 days ago

5.0.0-beta.11

15 days ago

4.8.4

16 days ago

5.0.0-beta.10

16 days ago

4.8.3

22 days ago

5.0.0-beta.9

24 days ago

5.0.0-beta.8

26 days ago

5.0.0-beta.7

26 days ago

5.0.0-beta.6

27 days ago

4.8.2

27 days ago

4.8.1

1 month ago

4.8.0

1 month ago

4.7.4

1 month ago

4.7.3

1 month ago

4.7.2

2 months ago

5.0.0-beta.5

2 months ago

4.7.1

2 months ago

4.7.0

2 months ago

4.6.14

2 months ago

4.6.13

2 months ago

5.0.0-beta.4

2 months ago

4.6.12

2 months ago

4.6.11

3 months ago

5.0.0-beta.3

3 months ago

4.6.10

3 months ago

4.6.9

3 months ago

4.6.8

3 months ago

4.6.7

3 months ago

5.0.0-beta.2

3 months ago

4.6.6

3 months ago

4.6.5

3 months ago

4.6.4

4 months ago

4.6.3

4 months ago

5.0.0-beta.1

4 months ago

4.6.2

4 months ago

4.6.1

4 months ago

5.0.0-beta.0

4 months ago

4.5.12

4 months ago

4.6.0

4 months ago

4.6.0-beta.3

4 months ago

4.5.11

4 months ago

4.5.10

5 months ago

4.6.0-beta.2

5 months ago

4.6.0-beta.1

5 months ago

4.5.9

5 months ago

4.5.8

5 months ago

4.5.7

5 months ago

4.5.4

5 months ago

4.5.3

6 months ago

4.5.6

5 months ago

4.5.5

5 months ago

4.4.1

6 months ago

4.4.2

6 months ago

4.5.0

6 months ago

4.5.2

6 months ago

4.5.1

6 months ago

4.6.0-beta.0

6 months ago

4.5.0-beta.0

6 months ago

4.4.0

6 months ago

4.4.0-beta.1

6 months ago

4.4.0-beta.2

6 months ago

4.3.13

7 months ago

4.3.12

7 months ago

4.3.17

7 months ago

4.3.16

7 months ago

4.3.15

7 months ago

4.3.14

7 months ago

4.3.19

7 months ago

4.3.18

7 months ago

4.3.20

7 months ago

4.3.24

6 months ago

4.3.23

6 months ago

4.3.22

7 months ago

4.3.21

7 months ago

3.2.0

11 months ago

4.0.4

9 months ago

4.0.1

10 months ago

4.0.0

10 months ago

4.0.3

9 months ago

4.0.2

9 months ago

4.2.0-beta.0

9 months ago

4.2.0-beta.1

8 months ago

4.0.0-beta.5.1

11 months ago

3.1.6

11 months ago

3.1.5

12 months ago

3.1.4

12 months ago

4.3.2

8 months ago

4.3.1

8 months ago

4.3.4

8 months ago

4.3.3

8 months ago

4.3.0

8 months ago

4.3.0-beta.1

8 months ago

4.3.0-beta.0

8 months ago

4.0.0-beta.5.2

11 months ago

4.0.0-beta.5.3

11 months ago

4.3.9

7 months ago

4.4.0-beta.0

8 months ago

4.3.6

8 months ago

4.3.5

8 months ago

4.3.8

8 months ago

4.3.7

8 months ago

4.3.11

7 months ago

4.3.10

7 months ago

4.2.3

8 months ago

4.2.2

8 months ago

4.2.1

8 months ago

4.2.0

8 months ago

4.1.0-beta.0

10 months ago

4.1.0-beta.1

10 months ago

4.1.0-beta.4

9 months ago

4.1.0-beta.5

9 months ago

4.1.0-beta.2

10 months ago

4.1.0-beta.3

10 months ago

3.3.0

11 months ago

4.0.0-beta.5

11 months ago

4.0.0-beta.4

11 months ago

4.0.0-beta.3

11 months ago

4.1.4

8 months ago

4.1.3

8 months ago

4.1.0

9 months ago

4.1.2

9 months ago

4.1.1

9 months ago

3.0.4

1 year ago

3.0.3

1 year ago

3.0.2

1 year ago

3.0.1

1 year ago

3.0.6

1 year ago

3.0.5

1 year ago

3.0.0

1 year ago

3.0.0-beta.1

1 year ago

3.1.0-beta.1

1 year ago

3.1.0-beta.2

1 year ago

3.1.0-beta.3

1 year ago

3.1.0-beta.4

1 year ago

3.1.0-beta.5

1 year ago

3.1.0-beta.0

1 year ago

3.1.3

12 months ago

3.1.2

1 year ago

3.1.1

1 year ago

3.1.0

1 year ago

4.0.0-beta.2

12 months ago

4.0.0-beta.1

1 year ago

4.0.0-beta.0

1 year ago

3.2.0-beta.0

1 year ago

2.2.0-beta.0

1 year ago

2.2.0-beta.1

1 year ago

2.2.1

1 year ago

2.2.0

1 year ago

2.2.3

1 year ago

2.2.2

1 year ago

2.2.5

1 year ago

2.2.4

1 year ago

2.2.6

1 year ago

3.0.0-beta.0

1 year ago

2.1.1

2 years ago

2.0.0-beta.5

2 years ago

2.1.0

2 years ago

2.0.1

2 years ago

2.0.0-beta.4

2 years ago

2.0.0

2 years ago

2.1.0-beta.0

2 years ago

1.3.6

2 years ago

1.3.5

2 years ago

2.0.0-beta.2

2 years ago

2.0.0-beta.1

2 years ago

2.0.0-beta.0

2 years ago

2.0.0-beta.3

2 years ago

1.3.4

2 years ago

1.3.3

2 years ago

1.3.2

2 years ago

1.2.3

2 years ago

1.3.1

2 years ago

1.2.2

2 years ago

1.3.0

2 years ago

1.2.1

2 years ago

1.3.0-beta.0

2 years ago

1.2.0

2 years ago

1.2.0-beta.1

2 years ago

1.2.0-beta.0

2 years ago

1.1.0

2 years ago

1.1.0-beta.2

2 years ago

1.1.0-beta.1

2 years ago

1.1.0-beta.0

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago

0.9.4

2 years ago

0.9.3

2 years ago

0.9.2

2 years ago

0.9.1

2 years ago

0.9.0

2 years ago

0.0.0

2 years ago