5.3.7 • Published 8 months ago

tinybase v5.3.7

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago
import {createStore} from 'tinybase';

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);
import React from 'react';
import {createRoot} from 'react-dom/client';
import {useCell} from 'tinybase/ui-react';

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

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

store.setCell('pets', 'fido', 'color', 'walnut');
console.log(app.innerHTML);
// -> 'Color: walnut'

root.unmount();
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();
import {WebSocketServer, WebSocket} from 'ws';
import {createMergeableStore} from 'tinybase';
import {createWsServer} from 'tinybase/synchronizers/synchronizer-ws-server';
import {createWsSynchronizer} from 'tinybase/synchronizers/synchronizer-ws-client';

// On a server machine:
const server = createWsServer(
  new WebSocketServer({port: 8040}),
);

// On a client machine:
const store1 = createMergeableStore();
const synchronizer1 = await createWsSynchronizer(
  store1,
  new WebSocket('ws://localhost:8040'),
);
await synchronizer1.startSync();

// ...

synchronizer1.destroy();
server.destroy();
import {createSessionPersister} from 'tinybase/persisters/persister-browser';

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();
import {createQueries} from 'tinybase';

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();
import {createMetrics} from 'tinybase';

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();
import {createIndexes} from 'tinybase';

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();
import {createRelationships} from 'tinybase';

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();
import {createCheckpoints} from 'tinybase';

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 = () => {
  //...
};
5.3.7

8 months ago

5.4.0-beta.2

8 months ago

5.3.6

9 months ago

5.4.0-beta.1

9 months ago

5.3.5

9 months ago

5.3.0-beta.0

10 months ago

5.3.0-beta.2

10 months ago

5.3.0-beta.1

10 months ago

5.3.0-beta.3

10 months ago

5.2.3

10 months ago

5.2.2

10 months ago

5.2.1

10 months ago

5.2.0

10 months ago

5.3.4

9 months ago

5.3.3

9 months ago

5.3.2

9 months ago

5.3.1

10 months ago

5.3.0

10 months ago

5.2.0-beta.5

11 months ago

5.4.0-beta.0

10 months ago

5.0.5

12 months ago

5.0.4

12 months ago

5.0.3

1 year ago

5.0.2

1 year ago

4.8.9

1 year ago

5.0.1

1 year ago

5.0.0

1 year ago

5.1.5

11 months ago

5.1.4

11 months ago

5.1.3

11 months ago

5.1.2

11 months ago

5.1.1

12 months ago

5.1.0

12 months ago

5.2.0-beta.4

11 months ago

5.2.0-beta.3

11 months ago

5.2.0-beta.2

11 months ago

5.2.0-beta.1

11 months ago

5.2.0-beta.0

12 months ago

5.1.0-beta.0

1 year ago

5.1.0-beta.1

12 months ago

5.0.0-beta.22

1 year ago

5.0.0-beta.23

1 year ago

5.0.0-beta.20

1 year ago

5.0.0-beta.21

1 year ago

5.0.0-beta.26

1 year ago

5.0.0-beta.27

1 year ago

5.0.0-beta.24

1 year ago

5.0.0-beta.25

1 year ago

5.0.0-beta.28

1 year ago

4.8.10

1 year ago

4.8.12

1 year ago

4.8.11

1 year ago

4.8.14

1 year ago

4.8.13

1 year ago

4.8.16

1 year ago

4.8.15

1 year ago

4.8.17

1 year ago

5.0.0-beta.19

1 year ago

5.0.0-beta.17

1 year ago

5.0.0-beta.18

1 year ago

5.0.0-beta.16

1 year ago

4.8.8

1 year ago

5.0.0-beta.15

1 year ago

4.8.7

1 year ago

4.8.5

1 year ago

4.8.6

1 year ago

5.0.0-beta.13

1 year ago

5.0.0-beta.14

1 year ago

5.0.0-beta.12

1 year ago

5.0.0-beta.11

1 year ago

4.8.4

1 year ago

5.0.0-beta.10

1 year ago

4.8.3

1 year ago

5.0.0-beta.9

1 year ago

5.0.0-beta.8

1 year ago

5.0.0-beta.7

1 year ago

5.0.0-beta.6

1 year ago

4.8.2

1 year ago

4.8.1

1 year ago

4.8.0

1 year ago

4.7.4

1 year ago

4.7.3

1 year ago

4.7.2

1 year ago

5.0.0-beta.5

1 year ago

4.7.1

1 year ago

4.7.0

1 year ago

4.6.14

1 year ago

4.6.13

1 year ago

5.0.0-beta.4

1 year ago

4.6.12

1 year ago

4.6.11

1 year ago

5.0.0-beta.3

1 year ago

4.6.10

1 year ago

4.6.9

1 year ago

4.6.8

1 year ago

4.6.7

1 year ago

5.0.0-beta.2

1 year ago

4.6.6

1 year ago

4.6.5

1 year ago

4.6.4

1 year ago

4.6.3

1 year ago

5.0.0-beta.1

1 year ago

4.6.2

1 year ago

4.6.1

2 years ago

5.0.0-beta.0

2 years ago

4.5.12

2 years ago

4.6.0

2 years ago

4.6.0-beta.3

2 years ago

4.5.11

2 years ago

4.5.10

2 years ago

4.6.0-beta.2

2 years ago

4.6.0-beta.1

2 years ago

4.5.9

2 years ago

4.5.8

2 years ago

4.5.7

2 years ago

4.5.4

2 years ago

4.5.3

2 years ago

4.5.6

2 years ago

4.5.5

2 years ago

4.4.1

2 years ago

4.4.2

2 years ago

4.5.0

2 years ago

4.5.2

2 years ago

4.5.1

2 years ago

4.6.0-beta.0

2 years ago

4.5.0-beta.0

2 years ago

4.4.0

2 years ago

4.4.0-beta.1

2 years ago

4.4.0-beta.2

2 years ago

4.3.13

2 years ago

4.3.12

2 years ago

4.3.17

2 years ago

4.3.16

2 years ago

4.3.15

2 years ago

4.3.14

2 years ago

4.3.19

2 years ago

4.3.18

2 years ago

4.3.20

2 years ago

4.3.24

2 years ago

4.3.23

2 years ago

4.3.22

2 years ago

4.3.21

2 years ago

3.2.0

2 years ago

4.0.4

2 years ago

4.0.1

2 years ago

4.0.0

2 years ago

4.0.3

2 years ago

4.0.2

2 years ago

4.2.0-beta.0

2 years ago

4.2.0-beta.1

2 years ago

4.0.0-beta.5.1

2 years ago

3.1.6

2 years ago

3.1.5

2 years ago

3.1.4

2 years ago

4.3.2

2 years ago

4.3.1

2 years ago

4.3.4

2 years ago

4.3.3

2 years ago

4.3.0

2 years ago

4.3.0-beta.1

2 years ago

4.3.0-beta.0

2 years ago

4.0.0-beta.5.2

2 years ago

4.0.0-beta.5.3

2 years ago

4.3.9

2 years ago

4.4.0-beta.0

2 years ago

4.3.6

2 years ago

4.3.5

2 years ago

4.3.8

2 years ago

4.3.7

2 years ago

4.3.11

2 years ago

4.3.10

2 years ago

4.2.3

2 years ago

4.2.2

2 years ago

4.2.1

2 years ago

4.2.0

2 years ago

4.1.0-beta.0

2 years ago

4.1.0-beta.1

2 years ago

4.1.0-beta.4

2 years ago

4.1.0-beta.5

2 years ago

4.1.0-beta.2

2 years ago

4.1.0-beta.3

2 years ago

3.3.0

2 years ago

4.0.0-beta.5

2 years ago

4.0.0-beta.4

2 years ago

4.0.0-beta.3

2 years ago

4.1.4

2 years ago

4.1.3

2 years ago

4.1.0

2 years ago

4.1.2

2 years ago

4.1.1

2 years ago

3.0.4

2 years ago

3.0.3

2 years ago

3.0.2

2 years ago

3.0.1

2 years ago

3.0.6

2 years ago

3.0.5

2 years ago

3.0.0

2 years ago

3.0.0-beta.1

2 years ago

3.1.0-beta.1

2 years ago

3.1.0-beta.2

2 years ago

3.1.0-beta.3

2 years ago

3.1.0-beta.4

2 years ago

3.1.0-beta.5

2 years ago

3.1.0-beta.0

2 years ago

3.1.3

2 years ago

3.1.2

2 years ago

3.1.1

2 years ago

3.1.0

2 years ago

4.0.0-beta.2

2 years ago

4.0.0-beta.1

2 years ago

4.0.0-beta.0

2 years ago

3.2.0-beta.0

2 years ago

2.2.0-beta.0

3 years ago

2.2.0-beta.1

3 years ago

2.2.1

3 years ago

2.2.0

3 years ago

2.2.3

3 years ago

2.2.2

3 years ago

2.2.5

3 years ago

2.2.4

3 years ago

2.2.6

3 years ago

3.0.0-beta.0

3 years ago

2.1.1

3 years ago

2.0.0-beta.5

3 years ago

2.1.0

3 years ago

2.0.1

3 years ago

2.0.0-beta.4

3 years ago

2.0.0

3 years ago

2.1.0-beta.0

3 years ago

1.3.6

3 years ago

1.3.5

3 years ago

2.0.0-beta.2

3 years ago

2.0.0-beta.1

3 years ago

2.0.0-beta.0

3 years ago

2.0.0-beta.3

3 years ago

1.3.4

3 years ago

1.3.3

3 years ago

1.3.2

3 years ago

1.2.3

3 years ago

1.3.1

3 years ago

1.2.2

3 years ago

1.3.0

3 years ago

1.2.1

3 years ago

1.3.0-beta.0

3 years ago

1.2.0

3 years ago

1.2.0-beta.1

3 years ago

1.2.0-beta.0

3 years ago

1.1.0

3 years ago

1.1.0-beta.2

3 years ago

1.1.0-beta.1

3 years ago

1.1.0-beta.0

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago

0.9.4

3 years ago

0.9.3

4 years ago

0.9.2

4 years ago

0.9.1

4 years ago

0.9.0

4 years ago

0.0.0

4 years ago