TinyBase logoTinyBase

Command Line

TinyBase v2.2 includes a command line tool to assist with common actions in a non-programmatic tool chain.

While this tool may add more functionality in the future, for now it is essentially limited to code generation, creating APIs from a file-based schema.

You can run the tinybase CLI using node's npx command:

npx tinybase

This will emit a list of the commands that are available:

tinybase <command>

Usage:

 tinybase help
 - print this message

 tinybase version
 - get the current TinyBase version

 tinybase getStoreApi <schemaFile> <storeName> <outputDir>
 - generate .d.ts, .ts, and .tsx files from a schema file

Currently there are three commands. help generates this message and version prints out the version of the installed tinybase module.

More interestingly, getStoreApi takes schemas (a TablesSchema and ValuesSchema, JSON-encoded in an array pair) from a file and emits .d.ts, .ts, and .tsx files for it (much as described in the Generating APIs guide).

For example, imagine if you have defined TinyBase TablesSchema and ValuesSchema objects in a file called schema.json:

[
  {
    "pets": {
      "species": {"type": "string", "default": "dog"},
      "price": {"type": "number"}
    }
  },
  {
    "open": {"type": "boolean", "default": false}
  }
]

The getStoreApi command takes a reference to that file, a name for the wrapped store (and file names), and an output directory (which must already exist):

npx tinybase getStoreApi schema.json shop api

This will list out the two files that have been generated:

             Definition: [...]/api/shop.d.ts
         Implementation: [...]/api/shop.ts
    UI React definition: [...]/api/shop-ui-react.d.ts
UI React implementation: [...]/api/shop-ui-react.tsx

These will contain the definition of the API:

//...
/**
 * 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; price?: number};
//...

And the implementation:

//...
export const createShop: typeof createShopDecl = () => {
  // ...
  const store = createStore().setTablesSchema({
    pets: {
      species: {type: 'string', default: 'dog'},
      price: {type: 'number'},
    },
  });
  return {
    hasPetsTable: (): boolean => store.hasTable('pets'),
    getPetsTable: (): PetsTable => store.getTable('pets') as PetsTable,
    // ...
  };
};

...and so on.

These four files, of course, can now be used to build and implement your own app.

We conclude this section on developer tools with a look at how you can inspect the content of your data. Please continue to the Inspecting Data guide.