@livestore/common 0.0.42-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/database.d.ts +32 -0
  3. package/dist/database.d.ts.map +1 -0
  4. package/dist/database.js +2 -0
  5. package/dist/database.js.map +1 -0
  6. package/dist/index.d.ts +4 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +4 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/schema/index.d.ts +42 -0
  11. package/dist/schema/index.d.ts.map +1 -0
  12. package/dist/schema/index.js +42 -0
  13. package/dist/schema/index.js.map +1 -0
  14. package/dist/schema/mutations.d.ts +81 -0
  15. package/dist/schema/mutations.d.ts.map +1 -0
  16. package/dist/schema/mutations.js +29 -0
  17. package/dist/schema/mutations.js.map +1 -0
  18. package/dist/schema/parse-utils.d.ts +6 -0
  19. package/dist/schema/parse-utils.d.ts.map +1 -0
  20. package/dist/schema/parse-utils.js +22 -0
  21. package/dist/schema/parse-utils.js.map +1 -0
  22. package/dist/schema/system-tables.d.ts +76 -0
  23. package/dist/schema/system-tables.d.ts.map +1 -0
  24. package/dist/schema/system-tables.js +12 -0
  25. package/dist/schema/system-tables.js.map +1 -0
  26. package/dist/schema/table-def.d.ts +100 -0
  27. package/dist/schema/table-def.d.ts.map +1 -0
  28. package/dist/schema/table-def.js +76 -0
  29. package/dist/schema/table-def.js.map +1 -0
  30. package/dist/sql-queries/index.d.ts +4 -0
  31. package/dist/sql-queries/index.d.ts.map +1 -0
  32. package/dist/sql-queries/index.js +4 -0
  33. package/dist/sql-queries/index.js.map +1 -0
  34. package/dist/sql-queries/misc.d.ts +2 -0
  35. package/dist/sql-queries/misc.d.ts.map +1 -0
  36. package/dist/sql-queries/misc.js +2 -0
  37. package/dist/sql-queries/misc.js.map +1 -0
  38. package/dist/sql-queries/sql-queries.d.ts +65 -0
  39. package/dist/sql-queries/sql-queries.d.ts.map +1 -0
  40. package/dist/sql-queries/sql-queries.js +181 -0
  41. package/dist/sql-queries/sql-queries.js.map +1 -0
  42. package/dist/sql-queries/sql-query-builder.d.ts +47 -0
  43. package/dist/sql-queries/sql-query-builder.d.ts.map +1 -0
  44. package/dist/sql-queries/sql-query-builder.js +60 -0
  45. package/dist/sql-queries/sql-query-builder.js.map +1 -0
  46. package/dist/sql-queries/types.d.ts +50 -0
  47. package/dist/sql-queries/types.d.ts.map +1 -0
  48. package/dist/sql-queries/types.js +5 -0
  49. package/dist/sql-queries/types.js.map +1 -0
  50. package/dist/util.d.ts +21 -0
  51. package/dist/util.d.ts.map +1 -0
  52. package/dist/util.js +33 -0
  53. package/dist/util.js.map +1 -0
  54. package/package.json +37 -0
  55. package/src/database.ts +37 -0
  56. package/src/index.ts +3 -0
  57. package/src/schema/index.ts +100 -0
  58. package/src/schema/mutations.ts +128 -0
  59. package/src/schema/parse-utils.ts +42 -0
  60. package/src/schema/system-tables.ts +22 -0
  61. package/src/schema/table-def.ts +274 -0
  62. package/src/sql-queries/index.ts +3 -0
  63. package/src/sql-queries/misc.ts +2 -0
  64. package/src/sql-queries/sql-queries.ts +335 -0
  65. package/src/sql-queries/sql-query-builder.ts +135 -0
  66. package/src/sql-queries/types.ts +97 -0
  67. package/src/util.ts +46 -0
  68. package/tsconfig.json +10 -0
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export * from './util.js';
2
+ export * from './database.js';
3
+ export * from './sql-queries/index.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,42 @@
1
+ import type { SqliteDsl } from 'effect-db-schema';
2
+ import { type MutationDef, type MutationDefMap, type MutationDefRecord, type RawSqlMutation } from './mutations.js';
3
+ import type { TableDef } from './table-def.js';
4
+ export * from './system-tables.js';
5
+ export * as DbSchema from './table-def.js';
6
+ export * as ParseUtils from './parse-utils.js';
7
+ export * from './mutations.js';
8
+ export type LiveStoreSchema<TDbSchema extends SqliteDsl.DbSchema = SqliteDsl.DbSchema, TMutationsDefRecord extends MutationDefRecord = MutationDefRecord> = {
9
+ /** Only used on type-level */
10
+ readonly _DbSchemaType: TDbSchema;
11
+ /** Only used on type-level */
12
+ readonly _MutationDefMapType: TMutationsDefRecord;
13
+ readonly tables: Map<string, TableDef>;
14
+ readonly mutations: MutationDefMap;
15
+ };
16
+ export type InputSchema = {
17
+ readonly tables: Record<string, TableDef> | ReadonlyArray<TableDef>;
18
+ readonly mutations?: ReadonlyArray<MutationDef.Any> | Record<string, MutationDef.Any>;
19
+ };
20
+ export declare const makeSchema: <TInputSchema extends InputSchema>(schema: TInputSchema) => LiveStoreSchema<DbSchemaFromInputSchemaTables<TInputSchema["tables"]>, MutationDefRecordFromInputSchemaMutations<TInputSchema["mutations"]>>;
21
+ /**
22
+ * In case of ...
23
+ * - array: we use the table name of each array item (= table definition) as the object key
24
+ * - object: we discard the keys of the input object and use the table name of each object value (= table definition) as the new object key
25
+ */
26
+ export type DbSchemaFromInputSchemaTables<TTables extends InputSchema['tables']> = TTables extends ReadonlyArray<TableDef> ? {
27
+ [K in TTables[number] as K['sqliteDef']['name']]: K['sqliteDef'];
28
+ } : TTables extends Record<string, TableDef> ? {
29
+ [K in keyof TTables as TTables[K]['sqliteDef']['name']]: TTables[K]['sqliteDef'];
30
+ } : never;
31
+ export type MutationDefRecordFromInputSchemaMutations<TMutations extends InputSchema['mutations']> = TMutations extends ReadonlyArray<MutationDef.Any> ? {
32
+ [K in TMutations[number] as K['name']]: K;
33
+ } & {
34
+ 'livestore.RawSql': RawSqlMutation;
35
+ } : TMutations extends {
36
+ [name: string]: MutationDef.Any;
37
+ } ? {
38
+ [K in keyof TMutations as TMutations[K]['name']]: TMutations[K];
39
+ } & {
40
+ 'livestore.RawSql': RawSqlMutation;
41
+ } : never;
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAEpB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,cAAc,oBAAoB,CAAA;AAClC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAA;AAC9C,cAAc,gBAAgB,CAAA;AAE9B,MAAM,MAAM,eAAe,CACzB,SAAS,SAAS,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,EACzD,mBAAmB,SAAS,iBAAiB,GAAG,iBAAiB,IAC/D;IACF,8BAA8B;IAC9B,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAA;IACjC,8BAA8B;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAA;IAEjD,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACtC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;IACnE,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAA;CACtF,CAAA;AAED,eAAO,MAAM,UAAU,0MA2CtB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,6BAA6B,CAAC,OAAO,SAAS,WAAW,CAAC,QAAQ,CAAC,IAC7E,OAAO,SAAS,aAAa,CAAC,QAAQ,CAAC,GACnC;KAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;CAAE,GACpE,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GACtC;KAAG,CAAC,IAAI,MAAM,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;CAAE,GACpF,KAAK,CAAA;AAEb,MAAM,MAAM,yCAAyC,CAAC,UAAU,SAAS,WAAW,CAAC,WAAW,CAAC,IAC/F,UAAU,SAAS,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,GAC7C;KAAG,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;CAAE,GAAG;IAAE,kBAAkB,EAAE,cAAc,CAAA;CAAE,GACtF,UAAU,SAAS;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,GAAG,CAAA;CAAE,GACpD;KAAG,CAAC,IAAI,MAAM,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;CAAE,GAAG;IAAE,kBAAkB,EAAE,cAAc,CAAA;CAAE,GAC5G,KAAK,CAAA"}
@@ -0,0 +1,42 @@
1
+ import { isReadonlyArray } from '@livestore/utils';
2
+ import { rawSqlMutation, } from './mutations.js';
3
+ import { systemTables } from './system-tables.js';
4
+ export * from './system-tables.js';
5
+ export * as DbSchema from './table-def.js';
6
+ export * as ParseUtils from './parse-utils.js';
7
+ export * from './mutations.js';
8
+ export const makeSchema = (
9
+ /** Note when using the object-notation for tables/mutations, the object keys are ignored and not used as table/mutation names */
10
+ schema) => {
11
+ const inputTables = Array.isArray(schema.tables)
12
+ ? schema.tables
13
+ : // TODO validate that table names are unique in this case
14
+ Object.values(schema.tables);
15
+ const tables = new Map();
16
+ for (const tableDef of inputTables) {
17
+ // TODO validate tables (e.g. index names are unique)
18
+ tables.set(tableDef.sqliteDef.ast.name, tableDef);
19
+ }
20
+ for (const tableDef of systemTables) {
21
+ tables.set(tableDef.sqliteDef.name, tableDef);
22
+ }
23
+ const mutations = new Map();
24
+ if (isReadonlyArray(schema.mutations)) {
25
+ for (const mutation of schema.mutations) {
26
+ mutations.set(mutation.name, mutation);
27
+ }
28
+ }
29
+ else {
30
+ for (const [name, mutation] of Object.entries(schema.mutations ?? {})) {
31
+ mutations.set(name, mutation);
32
+ }
33
+ }
34
+ mutations.set('livestore.RawSql', rawSqlMutation);
35
+ return {
36
+ _DbSchemaType: Symbol('livestore.DbSchemaType'),
37
+ _MutationDefMapType: Symbol('livestore.MutationDefMapType'),
38
+ tables,
39
+ mutations,
40
+ };
41
+ };
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIlD,OAAO,EAKL,cAAc,GACf,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGjD,cAAc,oBAAoB,CAAA;AAClC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAA;AAC9C,cAAc,gBAAgB,CAAA;AAoB9B,MAAM,CAAC,MAAM,UAAU,GAAG;AACxB,iIAAiI;AACjI,MAAoB,EAIpB,EAAE;IACF,MAAM,WAAW,GAA4B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QACvE,CAAC,CAAC,MAAM,CAAC,MAAM;QACf,CAAC,CAAC,yDAAyD;YACzD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAEhC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAA;IAE1C,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;QACnC,qDAAqD;QACrD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACnD,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,SAAS,GAAmB,IAAI,GAAG,EAAE,CAAA;IAE3C,IAAI,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACxC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;YACtE,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,SAAS,CAAC,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAA;IAEjD,OAAO;QACL,aAAa,EAAE,MAAM,CAAC,wBAAwB,CAAQ;QACtD,mBAAmB,EAAE,MAAM,CAAC,8BAA8B,CAAQ;QAClE,MAAM;QACN,SAAS;KACgB,CAAA;AAC7B,CAAC,CAAA"}
@@ -0,0 +1,81 @@
1
+ import { Schema } from '@livestore/utils/effect';
2
+ import type { BindValues } from '../sql-queries/sql-queries.js';
3
+ import type { LiveStoreSchema } from './index.js';
4
+ export type MutationDefMap = Map<string | 'livestore.RawSql', MutationDef.Any>;
5
+ export type MutationDefRecord = {
6
+ 'livestore.RawSql': RawSqlMutation;
7
+ [name: string]: MutationDef.Any;
8
+ };
9
+ export type InternalMutationSchema<TRecord extends MutationDefRecord = MutationDefRecord> = {
10
+ _DefRecord: TRecord;
11
+ map: Map<keyof TRecord, TRecord[keyof TRecord]>;
12
+ schemaHashMap: Map<keyof TRecord, number>;
13
+ };
14
+ export type MutationDef<TName extends string, TFrom, TTo> = {
15
+ name: TName;
16
+ schema: Schema.Schema<TTo, TFrom>;
17
+ sql: string | ((args: TTo) => string | {
18
+ sql: string;
19
+ /** Note args need to be manually encoded to `BindValues` when returning this argument */
20
+ bindValues: BindValues;
21
+ writeTables?: ReadonlySet<string>;
22
+ });
23
+ /** Helper function to construct mutation event */
24
+ (args: TTo): {
25
+ mutation: TName;
26
+ args: TTo;
27
+ id: string;
28
+ };
29
+ };
30
+ export declare namespace MutationDef {
31
+ type Any = MutationDef<string, any, any>;
32
+ }
33
+ export declare const defineMutation: <TName extends string, TFrom, TTo>(name: TName, schema: Schema.Schema<TTo, TFrom, never>, sql: string | ((args: TTo) => string | {
34
+ sql: string;
35
+ bindValues: BindValues;
36
+ writeTables?: ReadonlySet<string> | undefined;
37
+ })) => MutationDef<TName, TFrom, TTo>;
38
+ export declare const makeMutationDefRecord: <TInputRecord extends Record<string, MutationDef.Any>>(inputRecord: TInputRecord) => { [K in TInputRecord[keyof TInputRecord]["name"]]: Extract<TInputRecord[keyof TInputRecord], {
39
+ name: K;
40
+ }>; };
41
+ export declare const rawSqlMutation: MutationDef<"livestore.RawSql", {
42
+ readonly sql: string;
43
+ readonly bindValues?: {
44
+ readonly [x: string]: any;
45
+ } | undefined;
46
+ readonly writeTables?: readonly string[] | undefined;
47
+ }, {
48
+ readonly sql: string;
49
+ readonly bindValues?: {
50
+ readonly [x: string]: any;
51
+ } | undefined;
52
+ readonly writeTables?: ReadonlySet<string> | undefined;
53
+ }>;
54
+ export type RawSqlMutation = typeof rawSqlMutation;
55
+ export type RawSqlMutationEvent = ReturnType<typeof rawSqlMutation>;
56
+ export type MutationEvent<TMutationsDef extends MutationDef.Any> = {
57
+ mutation: TMutationsDef['name'];
58
+ args: Schema.Schema.To<TMutationsDef['schema']>;
59
+ id: string;
60
+ };
61
+ export declare namespace MutationEvent {
62
+ type Any = MutationEvent<MutationDef.Any>;
63
+ type ForSchema<TSchema extends LiveStoreSchema> = {
64
+ [K in keyof TSchema['_MutationDefMapType']]: MutationEvent<TSchema['_MutationDefMapType'][K]>;
65
+ }[keyof TSchema['_MutationDefMapType']];
66
+ }
67
+ export type MutationEventSchema<TMutationsDefRecord extends MutationDefRecord> = Schema.Schema<{
68
+ [K in keyof TMutationsDefRecord]: {
69
+ mutation: K;
70
+ args: Schema.Schema.To<TMutationsDefRecord[K]['schema']>;
71
+ id: string;
72
+ };
73
+ }[keyof TMutationsDefRecord], {
74
+ [K in keyof TMutationsDefRecord]: {
75
+ mutation: K;
76
+ args: Schema.Schema.From<TMutationsDefRecord[K]['schema']>;
77
+ id: string;
78
+ };
79
+ }[keyof TMutationsDefRecord]>;
80
+ export declare const makeMutationEventSchema: <TMutationsDefRecord extends MutationDefRecord>(mutationDefRecord: TMutationsDefRecord) => MutationEventSchema<TMutationsDefRecord>;
81
+ //# sourceMappingURL=mutations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutations.d.ts","sourceRoot":"","sources":["../../src/schema/mutations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { cuid } from '@livestore/utils/cuid';
2
+ import { Schema } from '@livestore/utils/effect';
3
+ // TODO possibly also allow for mutation event subsumption behaviour
4
+ export const defineMutation = (name, schema, sql) => {
5
+ const makeEvent = (args) => ({ mutation: name, args, id: cuid() });
6
+ Object.defineProperty(makeEvent, 'name', { value: name });
7
+ Object.defineProperty(makeEvent, 'schema', { value: schema });
8
+ Object.defineProperty(makeEvent, 'sql', { value: sql });
9
+ return makeEvent;
10
+ };
11
+ export const makeMutationDefRecord = (inputRecord) => {
12
+ const result = {};
13
+ for (const [name, def] of Object.entries(inputRecord)) {
14
+ result[name] = def;
15
+ }
16
+ result['livestore.RawSql'] = rawSqlMutation;
17
+ return result;
18
+ };
19
+ export const rawSqlMutation = defineMutation('livestore.RawSql', Schema.struct({
20
+ sql: Schema.string,
21
+ bindValues: Schema.optional(Schema.record(Schema.string, Schema.any)),
22
+ writeTables: Schema.optional(Schema.readonlySet(Schema.string)),
23
+ }), ({ sql, bindValues, writeTables }) => ({ sql, bindValues: bindValues ?? {}, writeTables }));
24
+ export const makeMutationEventSchema = (mutationDefRecord) => Schema.union(...Object.values(mutationDefRecord).map((def) => Schema.struct({
25
+ mutation: Schema.literal(def.name),
26
+ args: def.schema,
27
+ id: Schema.string,
28
+ })));
29
+ //# sourceMappingURL=mutations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutations.js","sourceRoot":"","sources":["../../src/schema/mutations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAwChD,oEAAoE;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,IAAW,EACX,MAAiC,EACjC,GAAkH,EAClF,EAAE;IAClC,MAAM,SAAS,GAAG,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;IAEvE,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACzD,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAC7D,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;IAEvD,OAAO,SAA2C,CAAA;AACpD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,WAAyB,EAGzB,EAAE;IACF,MAAM,MAAM,GAAQ,EAAE,CAAA;IAEtB,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;IACpB,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAG,cAAc,CAAA;IAE3C,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAC1C,kBAAkB,EAClB,MAAM,CAAC,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM;IAClB,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACrE,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CAChE,CAAC,EACF,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAC3F,CAAA;AAoCD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,iBAAsC,EACI,EAAE,CAC5C,MAAM,CAAC,KAAK,CACV,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC9C,MAAM,CAAC,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAClC,IAAI,EAAE,GAAG,CAAC,MAAM;IAChB,EAAE,EAAE,MAAM,CAAC,MAAM;CAClB,CAAC,CACH,CACK,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { ReadonlyArray } from '@livestore/utils/effect';
2
+ import { SqliteDsl as __SqliteDsl } from 'effect-db-schema';
3
+ import { type FromColumns, type FromTable, type TableDef } from './table-def.js';
4
+ export declare const many: <TTableDef extends TableDef>(table: TTableDef) => (rawRows: ReadonlyArray<any>) => readonly import("effect-db-schema").PrettifyFlat<import("effect-db-schema").Nullable<Pick<FromTable.RowDecodedAll<TTableDef>, keyof (TTableDef["sqliteDef"]["columns"] extends infer T extends __SqliteDsl.Columns ? { [K in keyof T as TTableDef["sqliteDef"]["columns"][K]["default"] extends true ? K : never]: {}; } : never)>> & Omit<FromTable.RowDecodedAll<TTableDef>, keyof (TTableDef["sqliteDef"]["columns"] extends infer T extends __SqliteDsl.Columns ? { [K in keyof T as TTableDef["sqliteDef"]["columns"][K]["default"] extends true ? K : never]: {}; } : never)>>[];
5
+ export declare const first: <TTableDef extends TableDef>(table: TTableDef, fallback?: import("effect-db-schema").PrettifyFlat<Pick<__SqliteDsl.FromColumns.RowDecodedAll<TTableDef["sqliteDef"]["columns"]>, keyof (TTableDef["sqliteDef"]["columns"] extends infer T extends __SqliteDsl.Columns ? { [K in keyof T as TTableDef["sqliteDef"]["columns"][K]["nullable"] extends true ? never : TTableDef["sqliteDef"]["columns"][K]["default"] extends import("effect/Option").Some<any> ? never : K]: {}; } : never)> & Partial<Omit<__SqliteDsl.FromColumns.RowDecodedAll<TTableDef["sqliteDef"]["columns"]>, keyof (TTableDef["sqliteDef"]["columns"] extends infer T_1 extends __SqliteDsl.Columns ? { [K in keyof T_1 as TTableDef["sqliteDef"]["columns"][K]["nullable"] extends true ? never : TTableDef["sqliteDef"]["columns"][K]["default"] extends import("effect/Option").Some<any> ? never : K]: {}; } : never)>>> | undefined) => (rawRows: ReadonlyArray<any>) => any;
6
+ //# sourceMappingURL=parse-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-utils.d.ts","sourceRoot":"","sources":["../../src/schema/parse-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE3D,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAA2B,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzG,eAAO,MAAM,IAAI,8DAEH,cAAc,GAAG,CAAC,2jBAE/B,CAAA;AAED,eAAO,MAAM,KAAK,g4BAKN,cAAc,GAAG,CAAC,QAuB3B,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { shouldNeverHappen } from '@livestore/utils';
2
+ import { pipe, ReadonlyRecord, Schema, TreeFormatter } from '@livestore/utils/effect';
3
+ import { getDefaultValuesDecoded } from './table-def.js';
4
+ export const many = (table) => {
5
+ return Schema.decodeSync(Schema.array(table.schema));
6
+ };
7
+ export const first = (table, fallback) => (rawRows) => {
8
+ const rows = Schema.decodeSync(Schema.array(table.schema))(rawRows);
9
+ if (rows.length === 0) {
10
+ const schemaDefaultValues = getDefaultValuesDecoded(table);
11
+ const defaultValuesResult = pipe(table.sqliteDef.columns, ReadonlyRecord.map((_column, columnName) => fallback?.[columnName] ?? schemaDefaultValues[columnName]), Schema.validateEither(table.schema));
12
+ if (defaultValuesResult._tag === 'Right') {
13
+ return defaultValuesResult.right;
14
+ }
15
+ else {
16
+ console.error('decode error', TreeFormatter.formatError(defaultValuesResult.left));
17
+ return shouldNeverHappen(`Expected query (for table ${table.sqliteDef.name}) to return at least one result but found none. Also can't fallback to default values as some were not provided.`);
18
+ }
19
+ }
20
+ return rows[0];
21
+ };
22
+ //# sourceMappingURL=parse-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-utils.js","sourceRoot":"","sources":["../../src/schema/parse-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAGrF,OAAO,EAAoC,uBAAuB,EAAiB,MAAM,gBAAgB,CAAA;AAEzG,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,KAAgB,EACmE,EAAE;IACrF,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAS,CAAA;AAC9D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,KAAK,GAChB,CACE,KAAgB,EAChB,QAA0E,EAC1E,EAAE,CACJ,CAAC,OAA2B,EAAE,EAAE;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAEnE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAA;QAE1D,MAAM,mBAAmB,GAAG,IAAI,CAC9B,KAAK,CAAC,SAAS,CAAC,OAAO,EACvB,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,CAAE,QAAgB,EAAE,CAAC,UAAU,CAAC,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC,EAC/G,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CACpC,CAAA;QAED,IAAI,mBAAmB,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACzC,OAAO,mBAAmB,CAAC,KAAK,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,aAAa,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAA;YAClF,OAAO,iBAAiB,CACtB,6BAA6B,KAAK,CAAC,SAAS,CAAC,IAAI,kHAAkH,CACpK,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,CAAC,CAAE,CAAA;AACjB,CAAC,CAAA"}
@@ -0,0 +1,76 @@
1
+ import { SqliteDsl } from 'effect-db-schema';
2
+ import type { FromTable } from './table-def.js';
3
+ export declare const SCHEMA_META_TABLE = "__livestore_schema";
4
+ declare const schemaMetaTable: import("./table-def.js").TableDef<SqliteDsl.TableDefinition<"__livestore_schema", {
5
+ tableName: {
6
+ columnType: "text";
7
+ schema: import("@effect/schema/Schema").Schema<string, string, never>;
8
+ default: import("effect/Option").None<never>;
9
+ nullable: false;
10
+ primaryKey: true;
11
+ };
12
+ schemaHash: {
13
+ columnType: "integer";
14
+ schema: import("@effect/schema/Schema").Schema<number, number, never>;
15
+ default: import("effect/Option").None<never>;
16
+ nullable: false;
17
+ primaryKey: false;
18
+ };
19
+ updatedAt: {
20
+ columnType: "text";
21
+ schema: import("@effect/schema/Schema").Schema<string, string, never>;
22
+ default: import("effect/Option").None<never>;
23
+ nullable: false;
24
+ primaryKey: false;
25
+ };
26
+ }>, false, {
27
+ isSingleton: false;
28
+ dynamicRegistration: false;
29
+ disableAutomaticIdColumn: true;
30
+ }, import("@effect/schema/Schema").Schema<{
31
+ readonly tableName: string;
32
+ readonly schemaHash: number;
33
+ readonly updatedAt: string;
34
+ }, {
35
+ readonly tableName: string;
36
+ readonly schemaHash: number;
37
+ readonly updatedAt: string;
38
+ }, never>>;
39
+ export type SchemaMetaRow = FromTable.RowDecoded<typeof schemaMetaTable>;
40
+ export declare const systemTables: import("./table-def.js").TableDef<SqliteDsl.TableDefinition<"__livestore_schema", {
41
+ tableName: {
42
+ columnType: "text";
43
+ schema: import("@effect/schema/Schema").Schema<string, string, never>;
44
+ default: import("effect/Option").None<never>;
45
+ nullable: false;
46
+ primaryKey: true;
47
+ };
48
+ schemaHash: {
49
+ columnType: "integer";
50
+ schema: import("@effect/schema/Schema").Schema<number, number, never>;
51
+ default: import("effect/Option").None<never>;
52
+ nullable: false;
53
+ primaryKey: false;
54
+ };
55
+ updatedAt: {
56
+ columnType: "text";
57
+ schema: import("@effect/schema/Schema").Schema<string, string, never>;
58
+ default: import("effect/Option").None<never>;
59
+ nullable: false;
60
+ primaryKey: false;
61
+ };
62
+ }>, false, {
63
+ isSingleton: false;
64
+ dynamicRegistration: false;
65
+ disableAutomaticIdColumn: true;
66
+ }, import("@effect/schema/Schema").Schema<{
67
+ readonly tableName: string;
68
+ readonly schemaHash: number;
69
+ readonly updatedAt: string;
70
+ }, {
71
+ readonly tableName: string;
72
+ readonly schemaHash: number;
73
+ readonly updatedAt: string;
74
+ }, never>>[];
75
+ export {};
76
+ //# sourceMappingURL=system-tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-tables.d.ts","sourceRoot":"","sources":["../../src/schema/system-tables.ts"],"names":[],"mappings":"AACA,OAAO,EAAiC,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG/C,eAAO,MAAM,iBAAiB,uBAAuB,CAAA;AAErD,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UASpB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAA;AAExE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAAoB,CAAA"}
@@ -0,0 +1,12 @@
1
+ // import { Schema as __Schema } from '@livestore/utils/effect'
2
+ import { SqliteDsl } from 'effect-db-schema';
3
+ import { table } from './table-def.js';
4
+ export const SCHEMA_META_TABLE = '__livestore_schema';
5
+ const schemaMetaTable = table(SCHEMA_META_TABLE, {
6
+ tableName: SqliteDsl.text({ primaryKey: true }),
7
+ schemaHash: SqliteDsl.integer({ nullable: false }),
8
+ /** ISO date format */
9
+ updatedAt: SqliteDsl.text({ nullable: false }),
10
+ }, { disableAutomaticIdColumn: true });
11
+ export const systemTables = [schemaMetaTable];
12
+ //# sourceMappingURL=system-tables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-tables.js","sourceRoot":"","sources":["../../src/schema/system-tables.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,OAAO,EAAiC,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAG3E,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAEtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAA;AAErD,MAAM,eAAe,GAAG,KAAK,CAC3B,iBAAiB,EACjB;IACE,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC/C,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClD,sBAAsB;IACtB,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;CAC/C,EACD,EAAE,wBAAwB,EAAE,IAAI,EAAE,CACnC,CAAA;AAID,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,eAAe,CAAC,CAAA"}
@@ -0,0 +1,100 @@
1
+ import { Schema } from '@livestore/utils/effect';
2
+ import type { Nullable, PrettifyFlat } from 'effect-db-schema';
3
+ import { SqliteDsl } from 'effect-db-schema';
4
+ export declare const blob: SqliteDsl.ColDefFn<"blob">, boolean: SqliteDsl.SpecializedColDefFn<"integer", false, boolean>, column: <TColumnType extends SqliteDsl.FieldColumnType>(columnType: TColumnType) => SqliteDsl.ColDefFn<TColumnType>, datetime: SqliteDsl.SpecializedColDefFn<"text", false, Date>, integer: SqliteDsl.ColDefFn<"integer">, isColumnDefinition: (value: unknown) => value is SqliteDsl.ColumnDefinition<any, any>, json: SqliteDsl.SpecializedColDefFn<"text", true, unknown>, real: SqliteDsl.ColDefFn<"real">, text: SqliteDsl.ColDefFn<"text">;
5
+ export { type SqliteDsl } from 'effect-db-schema';
6
+ export type StateType = 'singleton' | 'dynamic';
7
+ export type DefaultSqliteTableDef = SqliteDsl.TableDefinition<string, SqliteDsl.Columns>;
8
+ export type DefaultSqliteTableDefConstrained = SqliteDsl.TableDefinition<string, SqliteDsl.ConstraintColumns>;
9
+ export type TableDef<TSqliteDef extends DefaultSqliteTableDef = DefaultSqliteTableDefConstrained, TIsSingleColumn extends boolean = boolean, TOptions extends TableOptions = TableOptions, TSchema = Schema.Schema<SqliteDsl.AnyIfConstained<TSqliteDef['columns'], {
10
+ readonly [K in keyof TSqliteDef['columns']]: Schema.Schema.To<TSqliteDef['columns'][K]['schema']>;
11
+ }>, SqliteDsl.AnyIfConstained<TSqliteDef['columns'], {
12
+ readonly [K in keyof TSqliteDef['columns']]: Schema.Schema.From<TSqliteDef['columns'][K]['schema']>;
13
+ }>>> = {
14
+ sqliteDef: TSqliteDef;
15
+ isSingleColumn: TIsSingleColumn;
16
+ options: TOptions;
17
+ schema: TSchema;
18
+ };
19
+ export type TableOptionsInput = Partial<TableOptions & {
20
+ indexes: SqliteDsl.Index[];
21
+ }>;
22
+ export type TableOptions = {
23
+ /**
24
+ * Setting this to true will have the following consequences:
25
+ * - An `id` column will be added with `primaryKey: true` and `"singleton"` as default value and only allowed value
26
+ * - LiveStore will automatically create the singleton row when the table is created
27
+ * - LiveStore will fail if there is already a column defined with `primaryKey: true`
28
+ *
29
+ * @default false
30
+ */
31
+ isSingleton: boolean;
32
+ dynamicRegistration: boolean;
33
+ disableAutomaticIdColumn: boolean;
34
+ };
35
+ export declare const table: <TName extends string, TColumns extends SqliteDsl.ColumnDefinition<any, any> | SqliteDsl.Columns, const TOptionsInput extends Partial<TableOptions & {
36
+ indexes: SqliteDsl.Index[];
37
+ }> = Partial<TableOptions & {
38
+ indexes: SqliteDsl.Index[];
39
+ }>>(name: TName, columnOrColumns: TColumns, options?: TOptionsInput | undefined) => TableDef<SqliteDsl.TableDefinition<TName, PrettifyFlat<WithId<TColumns extends SqliteDsl.Columns ? TColumns : {
40
+ value: TColumns;
41
+ }, WithDefaults<TOptionsInput>>>>, TColumns extends SqliteDsl.ColumnDefinition<any, any> ? true : false, WithDefaults<TOptionsInput>, Schema.Schema<SqliteDsl.AnyIfConstained<PrettifyFlat<WithId<TColumns extends SqliteDsl.Columns ? TColumns : {
42
+ value: TColumns;
43
+ }, WithDefaults<TOptionsInput>>>, { readonly [K in keyof PrettifyFlat<WithId<TColumns extends SqliteDsl.Columns ? TColumns : {
44
+ value: TColumns;
45
+ }, WithDefaults<TOptionsInput>>>]: Schema.Schema.To<PrettifyFlat<WithId<TColumns extends SqliteDsl.Columns ? TColumns : {
46
+ value: TColumns;
47
+ }, WithDefaults<TOptionsInput>>>[K]["schema"]>; }>, SqliteDsl.AnyIfConstained<PrettifyFlat<WithId<TColumns extends SqliteDsl.Columns ? TColumns : {
48
+ value: TColumns;
49
+ }, WithDefaults<TOptionsInput>>>, { readonly [K_1 in keyof PrettifyFlat<WithId<TColumns extends SqliteDsl.Columns ? TColumns : {
50
+ value: TColumns;
51
+ }, WithDefaults<TOptionsInput>>>]: Schema.Schema.From<PrettifyFlat<WithId<TColumns extends SqliteDsl.Columns ? TColumns : {
52
+ value: TColumns;
53
+ }, WithDefaults<TOptionsInput>>>[K_1]["schema"]>; }>, never>>;
54
+ export declare const tableIsSingleton: <TTableDef extends TableDef<DefaultSqliteTableDefConstrained, boolean, TableOptions, Schema.Schema<any, any, never>>>(tableDef: TTableDef) => tableDef is TTableDef & {
55
+ options: {
56
+ isSingleton: true;
57
+ };
58
+ };
59
+ export declare const getDefaultValuesEncoded: <TTableDef extends TableDef<DefaultSqliteTableDefConstrained, boolean, TableOptions, Schema.Schema<any, any, never>>>(tableDef: TTableDef, fallbackValues?: Record<string, any>) => Record<string, any>;
60
+ export declare const getDefaultValuesDecoded: <TTableDef extends TableDef<DefaultSqliteTableDefConstrained, boolean, TableOptions, Schema.Schema<any, any, never>>>(tableDef: TTableDef, fallbackValues?: Record<string, any>) => Record<string, any>;
61
+ type WithId<TColumns extends SqliteDsl.Columns, TOptions extends TableOptions> = TColumns & (TOptions['disableAutomaticIdColumn'] extends true ? {} : TOptions['isSingleton'] extends true ? {
62
+ id: SqliteDsl.ColumnDefinition<'singleton', 'singleton'>;
63
+ } : {
64
+ id: SqliteDsl.ColumnDefinition<string, string>;
65
+ });
66
+ type WithDefaults<TOptionsInput extends TableOptionsInput> = {
67
+ isSingleton: TOptionsInput['isSingleton'] extends true ? true : false;
68
+ dynamicRegistration: TOptionsInput['dynamicRegistration'] extends true ? true : false;
69
+ disableAutomaticIdColumn: TOptionsInput['disableAutomaticIdColumn'] extends true ? true : false;
70
+ };
71
+ export declare namespace FromTable {
72
+ type RowDecoded<TTableDef extends TableDef> = PrettifyFlat<Nullable<Pick<RowDecodedAll<TTableDef>, NullableColumnNames<TTableDef>>> & Omit<RowDecodedAll<TTableDef>, NullableColumnNames<TTableDef>>>;
73
+ type NullableColumnNames<TTableDef extends TableDef> = FromColumns.NullableColumnNames<TTableDef['sqliteDef']['columns']>;
74
+ type Columns<TTableDef extends TableDef> = {
75
+ [K in keyof TTableDef['sqliteDef']['columns']]: TTableDef['sqliteDef']['columns'][K]['columnType'];
76
+ };
77
+ type RowEncodeNonNullable<TTableDef extends TableDef> = {
78
+ [K in keyof TTableDef['sqliteDef']['columns']]: Schema.Schema.From<TTableDef['sqliteDef']['columns'][K]['schema']>;
79
+ };
80
+ type RowEncoded<TTableDef extends TableDef> = PrettifyFlat<Nullable<Pick<RowEncodeNonNullable<TTableDef>, NullableColumnNames<TTableDef>>> & Omit<RowEncodeNonNullable<TTableDef>, NullableColumnNames<TTableDef>>>;
81
+ type RowDecodedAll<TTableDef extends TableDef> = {
82
+ [K in keyof TTableDef['sqliteDef']['columns']]: Schema.Schema.To<TTableDef['sqliteDef']['columns'][K]['schema']>;
83
+ };
84
+ }
85
+ export declare namespace FromColumns {
86
+ type RowDecoded<TColumns extends SqliteDsl.Columns> = PrettifyFlat<Nullable<Pick<RowDecodedAll<TColumns>, NullableColumnNames<TColumns>>> & Omit<RowDecodedAll<TColumns>, NullableColumnNames<TColumns>>>;
87
+ type RowDecodedAll<TColumns extends SqliteDsl.Columns> = {
88
+ [K in keyof TColumns]: Schema.Schema.To<TColumns[K]['schema']>;
89
+ };
90
+ type RowEncoded<TColumns extends SqliteDsl.Columns> = PrettifyFlat<Nullable<Pick<RowEncodeNonNullable<TColumns>, NullableColumnNames<TColumns>>> & Omit<RowEncodeNonNullable<TColumns>, NullableColumnNames<TColumns>>>;
91
+ type RowEncodeNonNullable<TColumns extends SqliteDsl.Columns> = {
92
+ [K in keyof TColumns]: Schema.Schema.From<TColumns[K]['schema']>;
93
+ };
94
+ type NullableColumnNames<TColumns extends SqliteDsl.Columns> = keyof {
95
+ [K in keyof TColumns as TColumns[K]['default'] extends true ? K : never]: {};
96
+ };
97
+ type RequiredInsertColumnNames<TColumns extends SqliteDsl.Columns> = SqliteDsl.FromColumns.RequiredInsertColumnNames<TColumns>;
98
+ type InsertRowDecoded<TColumns extends SqliteDsl.Columns> = SqliteDsl.FromColumns.InsertRowDecoded<TColumns>;
99
+ }
100
+ //# sourceMappingURL=table-def.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-def.d.ts","sourceRoot":"","sources":["../../src/schema/table-def.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,eAAO,MAAQ,IAAI,8BAAE,OAAO,4DAAE,MAAM,+GAAE,QAAQ,sDAAE,OAAO,iCAAE,kBAAkB,qEAAE,IAAI,wDAAE,IAAI,8BAAE,IAAI,4BAAc,CAAA;AAE3G,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,SAAS,CAAA;AAE/C,MAAM,MAAM,qBAAqB,GAAG,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;AACxF,MAAM,MAAM,gCAAgC,GAAG,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAA;AAyB7G,MAAM,MAAM,QAAQ,CAClB,UAAU,SAAS,qBAAqB,GAAG,gCAAgC,EAC3E,eAAe,SAAS,OAAO,GAAG,OAAO,EACzC,QAAQ,SAAS,YAAY,GAAG,YAAY,EAG5C,OAAO,GAAG,MAAM,CAAC,MAAM,CACrB,SAAS,CAAC,eAAe,CACvB,UAAU,CAAC,SAAS,CAAC,EACrB;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;CAAE,CACtG,EACD,SAAS,CAAC,eAAe,CACvB,UAAU,CAAC,SAAS,CAAC,EACrB;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;CAAE,CACxG,CACF,IACC;IACF,SAAS,EAAE,UAAU,CAAA;IACrB,cAAc,EAAE,eAAe,CAAA;IAC/B,OAAO,EAAE,QAAQ,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,YAAY,GAAG;IAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,CAAA;CAAE,CAAC,CAAA;AAEtF,MAAM,MAAM,YAAY,GAAG;IACzB;;;;;;;OAOG;IACH,WAAW,EAAE,OAAO,CAAA;IAEpB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,wBAAwB,EAAE,OAAO,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,KAAK;aAjBgD,UAAU,KAAK,EAAE;;aAAjB,UAAU,KAAK,EAAE;;;;;;;;;;;;;;;6DAyFlF,CAAA;AAED,eAAO,MAAM,gBAAgB;aAES;QAAE,WAAW,EAAE,IAAI,CAAA;KAAE;CAA2C,CAAA;AAEtG,eAAO,MAAM,uBAAuB,8JAEjB,OAAO,MAAM,EAAE,GAAG,CAAC,wBAkBnC,CAAA;AAEH,eAAO,MAAM,uBAAuB,8JAEjB,OAAO,MAAM,EAAE,GAAG,CAAC,wBAkBnC,CAAA;AAEH,KAAK,MAAM,CAAC,QAAQ,SAAS,SAAS,CAAC,OAAO,EAAE,QAAQ,SAAS,YAAY,IAAI,QAAQ,GACvF,CAAC,QAAQ,CAAC,0BAA0B,CAAC,SAAS,IAAI,GAC9C,EAAE,GACF,QAAQ,CAAC,aAAa,CAAC,SAAS,IAAI,GAClC;IACE,EAAE,EAAE,SAAS,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;CACzD,GACD;IACE,EAAE,EAAE,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/C,CAAC,CAAA;AAEV,KAAK,YAAY,CAAC,aAAa,SAAS,iBAAiB,IAAI;IAC3D,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,KAAK,CAAA;IACrE,mBAAmB,EAAE,aAAa,CAAC,qBAAqB,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,KAAK,CAAA;IACrF,wBAAwB,EAAE,aAAa,CAAC,0BAA0B,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,KAAK,CAAA;CAChG,CAAA;AAED,yBAAiB,SAAS,CAAC;IAEzB,KAAY,UAAU,CAAC,SAAS,SAAS,QAAQ,IAAI,YAAY,CAC/D,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,GACtE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC,CACjE,CAAA;IAED,KAAY,mBAAmB,CAAC,SAAS,SAAS,QAAQ,IAAI,WAAW,CAAC,mBAAmB,CAC3F,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAClC,CAAA;IAED,KAAY,OAAO,CAAC,SAAS,SAAS,QAAQ,IAAI;SAC/C,CAAC,IAAI,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;KACnG,CAAA;IAED,KAAY,oBAAoB,CAAC,SAAS,SAAS,QAAQ,IAAI;SAC5D,CAAC,IAAI,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;KACnH,CAAA;IAED,KAAY,UAAU,CAAC,SAAS,SAAS,QAAQ,IAAI,YAAY,CAC/D,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,GAC7E,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC,CACxE,CAAA;IAED,KAAY,aAAa,CAAC,SAAS,SAAS,QAAQ,IAAI;SACrD,CAAC,IAAI,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;KACjH,CAAA;CACF;AAED,yBAAiB,WAAW,CAAC;IAE3B,KAAY,UAAU,CAAC,QAAQ,SAAS,SAAS,CAAC,OAAO,IAAI,YAAY,CACvE,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,GACpE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAC/D,CAAA;IAED,KAAY,aAAa,CAAC,QAAQ,SAAS,SAAS,CAAC,OAAO,IAAI;SAC7D,CAAC,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;KAC/D,CAAA;IAED,KAAY,UAAU,CAAC,QAAQ,SAAS,SAAS,CAAC,OAAO,IAAI,YAAY,CACvE,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,GAC3E,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CACtE,CAAA;IAED,KAAY,oBAAoB,CAAC,QAAQ,SAAS,SAAS,CAAC,OAAO,IAAI;SACpE,CAAC,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;KACjE,CAAA;IAED,KAAY,mBAAmB,CAAC,QAAQ,SAAS,SAAS,CAAC,OAAO,IAAI,MAAM;SACzE,CAAC,IAAI,MAAM,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE;KAC7E,CAAA;IAED,KAAY,yBAAyB,CAAC,QAAQ,SAAS,SAAS,CAAC,OAAO,IACtE,SAAS,CAAC,WAAW,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IAE3D,KAAY,gBAAgB,CAAC,QAAQ,SAAS,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;CACpH"}
@@ -0,0 +1,76 @@
1
+ import { shouldNeverHappen } from '@livestore/utils';
2
+ import { pipe, ReadonlyRecord, Schema } from '@livestore/utils/effect';
3
+ import { SqliteDsl } from 'effect-db-schema';
4
+ export const { blob, boolean, column, datetime, integer, isColumnDefinition, json, real, text } = SqliteDsl;
5
+ export const table = (name, columnOrColumns,
6
+ // type?: TStateType,
7
+ options) => {
8
+ const tablePath = name;
9
+ const options_ = {
10
+ isSingleton: options?.isSingleton ?? false,
11
+ dynamicRegistration: options?.dynamicRegistration ?? false,
12
+ disableAutomaticIdColumn: options?.disableAutomaticIdColumn ?? false,
13
+ };
14
+ const columns = (SqliteDsl.isColumnDefinition(columnOrColumns) ? { value: columnOrColumns } : columnOrColumns);
15
+ if (options_.disableAutomaticIdColumn === true) {
16
+ if (columns.id === undefined && options_.isSingleton === true) {
17
+ shouldNeverHappen(`Cannot create table ${name} with "isSingleton: true" because there is no column with name "id" and "disableAutomaticIdColumn: true" is set`);
18
+ }
19
+ }
20
+ else if (columns.id === undefined && ReadonlyRecord.some(columns, (_) => _.primaryKey === true) === false) {
21
+ if (options_.isSingleton) {
22
+ columns.id = SqliteDsl.text({ schema: Schema.literal('singleton'), primaryKey: true, default: 'singleton' });
23
+ }
24
+ else {
25
+ columns.id = SqliteDsl.text({ primaryKey: true });
26
+ }
27
+ }
28
+ const sqliteDef = SqliteDsl.table(tablePath, columns, options?.indexes ?? []);
29
+ if (options_.isSingleton) {
30
+ for (const column of sqliteDef.ast.columns) {
31
+ if (column.nullable === false && column.default._tag === 'None') {
32
+ shouldNeverHappen(`When creating a singleton table, each column must be either nullable or have a default value. Column '${column.name}' is neither.`);
33
+ }
34
+ }
35
+ }
36
+ const isSingleColumn = SqliteDsl.isColumnDefinition(columnOrColumns) === true;
37
+ const schema = SqliteDsl.structSchemaForTable(sqliteDef);
38
+ const tableDef = { sqliteDef, isSingleColumn, options: options_, schema };
39
+ // if (dynamicallyRegisteredTables.has(tablePath)) {
40
+ // if (SqliteAst.hash(dynamicallyRegisteredTables.get(tablePath)!.sqliteDef.ast) !== SqliteAst.hash(sqliteDef.ast)) {
41
+ // console.error('previous tableDef', dynamicallyRegisteredTables.get(tablePath), 'new tableDef', sqliteDef.ast)
42
+ // shouldNeverHappen(`Table with name "${name}" was already previously defined with a different definition`)
43
+ // }
44
+ // } else {
45
+ // dynamicallyRegisteredTables.set(tablePath, tableDef)
46
+ // }
47
+ return tableDef;
48
+ };
49
+ export const tableIsSingleton = (tableDef) => tableDef.options.isSingleton === true;
50
+ export const getDefaultValuesEncoded = (tableDef, fallbackValues) => pipe(tableDef.sqliteDef.columns, ReadonlyRecord.filter((col, key) => {
51
+ if (fallbackValues?.[key] !== undefined)
52
+ return true;
53
+ if (key === 'id')
54
+ return false;
55
+ return col.default._tag === 'None' || SqliteDsl.isSqlDefaultValue(col.default.value) === false;
56
+ }), ReadonlyRecord.map((column, columnName) => fallbackValues?.[columnName] === undefined
57
+ ? column.default._tag === 'None'
58
+ ? column.nullable === true
59
+ ? null
60
+ : shouldNeverHappen(`Column ${columnName} has no default value and is not nullable`)
61
+ : Schema.encodeSync(column.schema)(column.default.value)
62
+ : fallbackValues[columnName]));
63
+ export const getDefaultValuesDecoded = (tableDef, fallbackValues) => pipe(tableDef.sqliteDef.columns, ReadonlyRecord.filter((col, key) => {
64
+ if (fallbackValues?.[key] !== undefined)
65
+ return true;
66
+ if (key === 'id')
67
+ return false;
68
+ return col.default._tag === 'None' || SqliteDsl.isSqlDefaultValue(col.default.value) === false;
69
+ }), ReadonlyRecord.map((column, columnName) => fallbackValues?.[columnName] === undefined
70
+ ? column.default._tag === 'None'
71
+ ? column.nullable === true
72
+ ? null
73
+ : shouldNeverHappen(`Column ${columnName} has no default value and is not nullable`)
74
+ : Schema.validateSync(column.schema)(column.default.value)
75
+ : fallbackValues[columnName]));
76
+ //# sourceMappingURL=table-def.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-def.js","sourceRoot":"","sources":["../../src/schema/table-def.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './sql-queries.js';
2
+ export * from './sql-query-builder.js';
3
+ export * from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sql-queries/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,YAAY,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './sql-queries.js';
2
+ export * from './sql-query-builder.js';
3
+ export * from './types.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sql-queries/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const objectEntries: <T extends Record<string, any>>(obj: T) => [keyof T & string, T[keyof T]][];
2
+ //# sourceMappingURL=misc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../src/sql-queries/misc.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,6EAC+B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const objectEntries = (obj) => Object.entries(obj);
2
+ //# sourceMappingURL=misc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/sql-queries/misc.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAgC,GAAM,EAAoC,EAAE,CACvG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAqC,CAAA"}