@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
@@ -0,0 +1,65 @@
1
+ import type { SqliteDsl } from 'effect-db-schema';
2
+ import * as ClientTypes from './types.js';
3
+ export type BindValues = {
4
+ readonly [columnName: string]: any;
5
+ };
6
+ export declare const findManyRows: <TColumns extends SqliteDsl.Columns>({ columns, tableName, where, limit, }: {
7
+ tableName: string;
8
+ columns: TColumns;
9
+ where: ClientTypes.PartialOrNull<{ [K in keyof ClientTypes.EncodedValuesForColumns<TColumns>]: ClientTypes.WhereValueForDecoded<ClientTypes.DecodedValuesForColumnsAll<TColumns>[K]>; }>;
10
+ limit?: number | undefined;
11
+ }) => [string, BindValues];
12
+ export declare const countRows: <TColumns extends SqliteDsl.Columns>({ columns, tableName, where, }: {
13
+ tableName: string;
14
+ columns: TColumns;
15
+ where: ClientTypes.PartialOrNull<{ [K in keyof ClientTypes.EncodedValuesForColumns<TColumns>]: ClientTypes.WhereValueForDecoded<ClientTypes.DecodedValuesForColumnsAll<TColumns>[K]>; }>;
16
+ }) => [string, BindValues];
17
+ export declare const insertRow: <TColumns extends SqliteDsl.Columns>({ tableName, columns, values, options, }: {
18
+ tableName: string;
19
+ columns: TColumns;
20
+ values: ClientTypes.DecodedValuesForColumns<TColumns>;
21
+ options: {
22
+ orReplace: boolean;
23
+ };
24
+ }) => [string, BindValues];
25
+ export declare const insertRows: <TColumns extends SqliteDsl.Columns>({ columns, tableName, valuesArray, }: {
26
+ tableName: string;
27
+ columns: TColumns;
28
+ valuesArray: ClientTypes.DecodedValuesForColumns<TColumns>[];
29
+ }) => [string, BindValues];
30
+ export declare const insertOrIgnoreRow: <TColumns extends SqliteDsl.Columns>({ columns, tableName, values: values_, returnRow, }: {
31
+ tableName: string;
32
+ columns: TColumns;
33
+ values: ClientTypes.DecodedValuesForColumns<TColumns>;
34
+ returnRow: boolean;
35
+ }) => [string, BindValues];
36
+ export declare const updateRows: <TColumns extends SqliteDsl.Columns>({ columns, tableName, updateValues: updateValues_, where, }: {
37
+ columns: TColumns;
38
+ tableName: string;
39
+ updateValues: Partial<ClientTypes.DecodedValuesForColumnsAll<TColumns>>;
40
+ where: ClientTypes.PartialOrNull<{ [K in keyof ClientTypes.EncodedValuesForColumns<TColumns>]: ClientTypes.WhereValueForDecoded<ClientTypes.DecodedValuesForColumnsAll<TColumns>[K]>; }>;
41
+ }) => [string, BindValues];
42
+ export declare const deleteRows: <TColumns extends SqliteDsl.Columns>({ columns, tableName, where, }: {
43
+ columns: TColumns;
44
+ tableName: string;
45
+ where: ClientTypes.PartialOrNull<{ [K in keyof ClientTypes.EncodedValuesForColumns<TColumns>]: ClientTypes.WhereValueForDecoded<ClientTypes.DecodedValuesForColumnsAll<TColumns>[K]>; }>;
46
+ }) => [string, BindValues];
47
+ export declare const upsertRow: <TColumns extends SqliteDsl.Columns>({ tableName, columns, createValues: createValues_, updateValues: updateValues_, where, }: {
48
+ tableName: string;
49
+ columns: TColumns;
50
+ createValues: ClientTypes.DecodedValuesForColumns<TColumns>;
51
+ updateValues: Partial<ClientTypes.DecodedValuesForColumnsAll<TColumns>>;
52
+ where: ClientTypes.PartialOrNull<{ [K in keyof ClientTypes.EncodedValuesForColumns<TColumns>]: ClientTypes.WhereValueForDecoded<ClientTypes.DecodedValuesForColumnsAll<TColumns>[K]>; }>;
53
+ }) => [string, BindValues];
54
+ export declare const createTable: ({ table, tableName, }: {
55
+ table: SqliteDsl.TableDefinition<any, SqliteDsl.Columns>;
56
+ tableName: string;
57
+ }) => string;
58
+ export declare const makeBindValues: <TColumns extends SqliteDsl.Columns, TKeys extends string>({ columns, values, variablePrefix, skipNil, }: {
59
+ columns: TColumns;
60
+ values: Record<TKeys, any>;
61
+ variablePrefix?: string | undefined;
62
+ /** So far only used to prepare `where` statements */
63
+ skipNil?: boolean | undefined;
64
+ }) => Record<string, any>;
65
+ //# sourceMappingURL=sql-queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-queries.d.ts","sourceRoot":"","sources":["../../src/sql-queries/sql-queries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAIjD,OAAO,KAAK,WAAW,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,GAAG,CAAA;CACnC,CAAA;AAED,eAAO,MAAM,YAAY;eAMZ,MAAM;;;;MAIf,CAAC,MAAM,EAAE,UAAU,CAQtB,CAAA;AAED,eAAO,MAAM,SAAS;eAKT,MAAM;;;MAGf,CAAC,MAAM,EAAE,UAAU,CAOtB,CAAA;AAED,eAAO,MAAM,SAAS;eAMT,MAAM;;;aAGR;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE;MAC7B,CAAC,MAAM,EAAE,UAAU,CAUtB,CAAA;AAED,eAAO,MAAM,UAAU;eAKV,MAAM;;;MAGf,CAAC,MAAM,EAAE,UAAU,CAsBtB,CAAA;AAED,eAAO,MAAM,iBAAiB;eAMjB,MAAM;;;eAGN,OAAO;MAChB,CAAC,MAAM,EAAE,UAAU,CAWtB,CAAA;AAED,eAAO,MAAM,UAAU;;eAOV,MAAM;;;MAGf,CAAC,MAAM,EAAE,UAAU,CAqBtB,CAAA;AAED,eAAO,MAAM,UAAU;;eAMV,MAAM;;MAEf,CAAC,MAAM,EAAE,UAAU,CAStB,CAAA;AAED,eAAO,MAAM,SAAS;eAOT,MAAM;;;;;MAMf,CAAC,MAAM,EAAE,UAAU,CA6BtB,CAAA;AAED,eAAO,MAAM,WAAW;WAIf,UAAU,eAAe,CAAC,GAAG,EAAE,UAAU,OAAO,CAAC;eAC7C,MAAM;MACf,MAeH,CAAA;AAED,eAAO,MAAM,cAAc;;;;IASzB,qDAAqD;;MAEnD,OAAO,MAAM,EAAE,GAAG,CAiDrB,CAAA"}
@@ -0,0 +1,181 @@
1
+ import { pipe, ReadonlyArray, Schema } from '@livestore/utils/effect';
2
+ import { sql } from '../util.js';
3
+ import { objectEntries } from './misc.js';
4
+ import * as ClientTypes from './types.js';
5
+ export const findManyRows = ({ columns, tableName, where, limit, }) => {
6
+ const whereSql = buildWhereSql({ where });
7
+ const whereModifier = whereSql === '' ? '' : `WHERE ${whereSql}`;
8
+ const limitModifier = limit ? `LIMIT ${limit}` : '';
9
+ const whereBindValues = makeBindValues({ columns, values: where, variablePrefix: 'where_', skipNil: true });
10
+ return [sql `SELECT * FROM ${tableName} ${whereModifier} ${limitModifier}`, whereBindValues];
11
+ };
12
+ export const countRows = ({ columns, tableName, where, }) => {
13
+ const whereSql = buildWhereSql({ where });
14
+ const whereModifier = whereSql === '' ? '' : `WHERE ${whereSql}`;
15
+ const whereBindValues = makeBindValues({ columns, values: where, variablePrefix: 'where_', skipNil: true });
16
+ return [sql `SELECT count(1) FROM ${tableName} ${whereModifier}`, whereBindValues];
17
+ };
18
+ export const insertRow = ({ tableName, columns, values, options = { orReplace: false }, }) => {
19
+ const keysStr = Object.keys(values).join(', ');
20
+ const valuesStr = Object.keys(values)
21
+ .map((_) => `$${_}`)
22
+ .join(', ');
23
+ return [
24
+ sql `INSERT ${options.orReplace ? 'OR REPLACE' : ''} INTO ${tableName} (${keysStr}) VALUES (${valuesStr})`,
25
+ makeBindValues({ columns, values }),
26
+ ];
27
+ };
28
+ export const insertRows = ({ columns, tableName, valuesArray, }) => {
29
+ const keysStr = Object.keys(valuesArray[0]).join(', ');
30
+ // NOTE consider batching for large arrays (https://sqlite.org/forum/info/f832398c19d30a4a)
31
+ const valuesStrs = valuesArray
32
+ .map((values, itemIndex) => Object.keys(values)
33
+ .map((_) => `$item_${itemIndex}_${_}`)
34
+ .join(', '))
35
+ .map((_) => `(${_})`)
36
+ .join(', ');
37
+ const bindValues = valuesArray.reduce((acc, values, itemIndex) => ({
38
+ ...acc,
39
+ ...makeBindValues({ columns, values, variablePrefix: `item_${itemIndex}_` }),
40
+ }), {});
41
+ return [sql `INSERT INTO ${tableName} (${keysStr}) VALUES ${valuesStrs}`, bindValues];
42
+ };
43
+ export const insertOrIgnoreRow = ({ columns, tableName, values: values_, returnRow, }) => {
44
+ const values = filterUndefinedFields(values_);
45
+ const keysStr = Object.keys(values).join(', ');
46
+ const valuesStr = Object.keys(values)
47
+ .map((_) => `$${_}`)
48
+ .join(', ');
49
+ const bindValues = makeBindValues({ columns, values });
50
+ const returningStmt = returnRow ? 'RETURNING *' : '';
51
+ return [sql `INSERT OR IGNORE INTO ${tableName} (${keysStr}) VALUES (${valuesStr}) ${returningStmt}`, bindValues];
52
+ };
53
+ export const updateRows = ({ columns, tableName, updateValues: updateValues_, where, }) => {
54
+ const updateValues = filterUndefinedFields(updateValues_);
55
+ // TODO return an Option instead of `select 1` if there are no update values
56
+ if (Object.keys(updateValues).length === 0) {
57
+ return [sql `select 1`, {}];
58
+ }
59
+ const updateValueStr = Object.keys(updateValues)
60
+ .map((columnName) => `${columnName} = $update_${columnName}`)
61
+ .join(', ');
62
+ const bindValues = {
63
+ ...makeBindValues({ columns, values: updateValues, variablePrefix: 'update_' }),
64
+ ...makeBindValues({ columns, values: where, variablePrefix: 'where_', skipNil: true }),
65
+ };
66
+ const whereSql = buildWhereSql({ where });
67
+ const whereModifier = whereSql === '' ? '' : `WHERE ${whereSql}`;
68
+ return [sql `UPDATE ${tableName} SET ${updateValueStr} ${whereModifier}`, bindValues];
69
+ };
70
+ export const deleteRows = ({ columns, tableName, where, }) => {
71
+ const bindValues = {
72
+ ...makeBindValues({ columns, values: where, variablePrefix: 'where_', skipNil: true }),
73
+ };
74
+ const whereSql = buildWhereSql({ where });
75
+ const whereModifier = whereSql === '' ? '' : `WHERE ${whereSql}`;
76
+ return [sql `DELETE FROM ${tableName} ${whereModifier}`, bindValues];
77
+ };
78
+ export const upsertRow = ({ tableName, columns, createValues: createValues_, updateValues: updateValues_, where, }) => {
79
+ const createValues = filterUndefinedFields(createValues_);
80
+ const updateValues = filterUndefinedFields(updateValues_);
81
+ const keysStr = Object.keys(createValues).join(', ');
82
+ const createValuesStr = Object.keys(createValues)
83
+ .map((_) => `$create_${_}`)
84
+ .join(', ');
85
+ const conflictStr = Object.keys(where).join(', ');
86
+ const updateValueStr = Object.keys(updateValues)
87
+ .map((columnName) => `${columnName} = $update_${columnName}`)
88
+ .join(', ');
89
+ const bindValues = {
90
+ ...makeBindValues({ columns, values: createValues, variablePrefix: 'create_' }),
91
+ ...makeBindValues({ columns, values: updateValues, variablePrefix: 'update_' }),
92
+ };
93
+ return [
94
+ sql `
95
+ INSERT INTO ${tableName} (${keysStr})
96
+ VALUES (${createValuesStr})
97
+ ON CONFLICT (${conflictStr}) DO UPDATE SET ${updateValueStr}
98
+ `,
99
+ bindValues,
100
+ ];
101
+ };
102
+ export const createTable = ({ table, tableName, }) => {
103
+ const primaryKeys = Object.entries(table.columns)
104
+ .filter(([_, columnDef]) => columnDef.primaryKey)
105
+ .map(([columnName, _]) => columnName);
106
+ const columnDefStrs = Object.entries(table.columns).map(([columnName, columnDef]) => {
107
+ const nullModifier = columnDef.nullable === true ? '' : 'NOT NULL';
108
+ const defaultModifier = columnDef.default._tag === 'None' ? '' : `DEFAULT ${columnDef.default.value}`;
109
+ return sql `${columnName} ${columnDef.columnType} ${nullModifier} ${defaultModifier}`;
110
+ });
111
+ if (primaryKeys.length > 0) {
112
+ columnDefStrs.push(`PRIMARY KEY (${primaryKeys.join(', ')})`);
113
+ }
114
+ return sql `CREATE TABLE ${tableName} (${columnDefStrs.join(', ')});`;
115
+ };
116
+ export const makeBindValues = ({ columns, values, variablePrefix = '', skipNil, }) => {
117
+ const codecMap = pipe(columns, objectEntries, ReadonlyArray.map(([columnName, columnDef]) => [
118
+ columnName,
119
+ (value) => {
120
+ if (columnDef.nullable === true && (value === null || value === undefined))
121
+ return null;
122
+ const res = Schema.encodeEither(columnDef.schema)(value);
123
+ if (res._tag === 'Left') {
124
+ debugger;
125
+ throw res.left;
126
+ }
127
+ else {
128
+ return res.right;
129
+ }
130
+ },
131
+ ]), Object.fromEntries);
132
+ return pipe(Object.entries(values)
133
+ // NOTE null/undefined values are handled via explicit SQL syntax and don't need to be provided as bind values
134
+ .filter(([, value]) => skipNil !== true || (value !== null && value !== undefined))
135
+ .flatMap(([columnName, value]) => {
136
+ // remap complex where-values with `op`
137
+ if (typeof value === 'object' && value !== null && 'op' in value) {
138
+ switch (value.op) {
139
+ case 'in': {
140
+ return value.val.map((value, i) => [
141
+ `${variablePrefix}${columnName}_${i}`,
142
+ codecMap[columnName](value),
143
+ ]);
144
+ }
145
+ case '=':
146
+ case '>':
147
+ case '<': {
148
+ return [[`${variablePrefix}${columnName}`, codecMap[columnName](value.val)]];
149
+ }
150
+ default: {
151
+ throw new Error(`Unknown op: ${value.op}`);
152
+ }
153
+ }
154
+ }
155
+ else {
156
+ return [[`${variablePrefix}${columnName}`, codecMap[columnName](value)]];
157
+ }
158
+ }), Object.fromEntries);
159
+ };
160
+ const buildWhereSql = ({ where, }) => {
161
+ const getWhereOp = (columnName, value) => {
162
+ if (value === null) {
163
+ return `IS NULL`;
164
+ }
165
+ else if (typeof value === 'object' && typeof value.op === 'string' && ClientTypes.isValidWhereOp(value.op)) {
166
+ return `${value.op} $where_${columnName}`;
167
+ }
168
+ else if (typeof value === 'object' && typeof value.op === 'string' && value.op === 'in') {
169
+ return `in (${value.val.map((_, i) => `$where_${columnName}_${i}`).join(', ')})`;
170
+ }
171
+ else {
172
+ return `= $where_${columnName}`;
173
+ }
174
+ };
175
+ return pipe(where, objectEntries, ReadonlyArray.map(([columnName, value]) => `${columnName} ${getWhereOp(columnName, value)}`), ReadonlyArray.join(' AND '));
176
+ };
177
+ // TODO better typing
178
+ const filterUndefinedFields = (obj) => {
179
+ return Object.fromEntries(Object.entries(obj).filter(([, value]) => value !== undefined));
180
+ };
181
+ //# sourceMappingURL=sql-queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-queries.js","sourceRoot":"","sources":["../../src/sql-queries/sql-queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { SqliteDsl } from 'effect-db-schema';
2
+ import type { BindValues } from './sql-queries.js';
3
+ import type * as ClientTypes from './types.js';
4
+ export type SqlQuery = [stmt: string, bindValues: BindValues, tableName: string];
5
+ export declare const makeSqlQueryBuilder: <TSchema extends SqliteDsl.DbSchema>(schema: TSchema) => {
6
+ findManyRows: <TTableName extends keyof TSchema & string>({ tableName, where, limit, }: {
7
+ tableName: TTableName;
8
+ where: ClientTypes.PartialOrNull<{ [K in keyof ClientTypes.DecodedValuesForTableAll<TSchema, TTableName>]: ClientTypes.WhereValueForDecoded<ClientTypes.DecodedValuesForTableAll<TSchema, TTableName>[K]>; }>;
9
+ limit?: number | undefined;
10
+ }) => [string, BindValues, TTableName];
11
+ countRows: <TTableName_1 extends keyof TSchema & string>({ tableName, where, }: {
12
+ tableName: TTableName_1;
13
+ where: ClientTypes.PartialOrNull<{ [K_1 in keyof ClientTypes.DecodedValuesForTableAll<TSchema, TTableName_1>]: ClientTypes.WhereValueForDecoded<ClientTypes.DecodedValuesForTableAll<TSchema, TTableName_1>[K_1]>; }>;
14
+ }) => [string, BindValues, TTableName_1];
15
+ insertRow: <TTableName_2 extends keyof TSchema & string>({ tableName, values, options, }: {
16
+ tableName: TTableName_2;
17
+ values: ClientTypes.DecodedValuesForTable<TSchema, TTableName_2>;
18
+ options?: {
19
+ orReplace: boolean;
20
+ } | undefined;
21
+ }) => [string, BindValues, TTableName_2];
22
+ insertRows: <TTableName_3 extends keyof TSchema & string>({ tableName, valuesArray, }: {
23
+ tableName: TTableName_3;
24
+ valuesArray: ClientTypes.DecodedValuesForTable<TSchema, TTableName_3>[];
25
+ }) => [string, BindValues, TTableName_3];
26
+ insertOrIgnoreRow: <TTableName_4 extends keyof TSchema & string>({ tableName, values, returnRow, }: {
27
+ tableName: TTableName_4;
28
+ values: ClientTypes.DecodedValuesForTable<TSchema, TTableName_4>;
29
+ returnRow?: boolean | undefined;
30
+ }) => [string, BindValues, TTableName_4];
31
+ updateRows: <TTableName_5 extends keyof TSchema & string>({ tableName, updateValues, where, }: {
32
+ tableName: TTableName_5;
33
+ updateValues: Partial<ClientTypes.DecodedValuesForTableAll<TSchema, TTableName_5>>;
34
+ where: ClientTypes.PartialOrNull<{ [K_2 in keyof ClientTypes.DecodedValuesForTableAll<TSchema, TTableName_5>]: ClientTypes.WhereValueForDecoded<ClientTypes.DecodedValuesForTableAll<TSchema, TTableName_5>[K_2]>; }>;
35
+ }) => [string, BindValues, TTableName_5];
36
+ deleteRows: <TTableName_6 extends keyof TSchema & string>({ tableName, where, }: {
37
+ tableName: TTableName_6;
38
+ where: ClientTypes.PartialOrNull<{ [K_3 in keyof ClientTypes.DecodedValuesForTableAll<TSchema, TTableName_6>]: ClientTypes.WhereValueForDecoded<ClientTypes.DecodedValuesForTableAll<TSchema, TTableName_6>[K_3]>; }>;
39
+ }) => [string, BindValues, TTableName_6];
40
+ upsertRow: <TTableName_7 extends keyof TSchema & string>({ tableName, createValues, updateValues, where, }: {
41
+ tableName: TTableName_7;
42
+ createValues: ClientTypes.DecodedValuesForTable<TSchema, TTableName_7>;
43
+ updateValues: Partial<ClientTypes.DecodedValuesForTableAll<TSchema, TTableName_7>>;
44
+ where: ClientTypes.PartialOrNull<{ [K_4 in keyof ClientTypes.DecodedValuesForTableAll<TSchema, TTableName_7>]: ClientTypes.WhereValueForDecoded<ClientTypes.DecodedValuesForTableAll<TSchema, TTableName_7>[K_4]>; }>;
45
+ }) => [string, BindValues, TTableName_7];
46
+ };
47
+ //# sourceMappingURL=sql-query-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-query-builder.d.ts","sourceRoot":"","sources":["../../src/sql-queries/sql-query-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,KAAK,KAAK,WAAW,MAAM,YAAY,CAAA;AAE9C,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;AAEhF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;uBAkCL,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4FjC,CAAA"}
@@ -0,0 +1,60 @@
1
+ import * as SqlQueries from './sql-queries.js';
2
+ export const makeSqlQueryBuilder = (schema) => {
3
+ const findManyRows = ({ tableName, where, limit, }) => {
4
+ const columns = schema[tableName].columns;
5
+ const [stmt, bindValues] = SqlQueries.findManyRows({ columns, tableName, where, limit });
6
+ return [stmt, bindValues, tableName];
7
+ };
8
+ const countRows = ({ tableName, where, }) => {
9
+ const columns = schema[tableName].columns;
10
+ const [stmt, bindValues] = SqlQueries.countRows({ columns, tableName, where });
11
+ return [stmt, bindValues, tableName];
12
+ };
13
+ const insertRow = ({ tableName, values, options = { orReplace: false }, }) => {
14
+ const columns = schema[tableName].columns;
15
+ const [stmt, bindValues] = SqlQueries.insertRow({ columns, tableName, values, options });
16
+ return [stmt, bindValues, tableName];
17
+ };
18
+ const insertRows = ({ tableName, valuesArray, }) => {
19
+ const columns = schema[tableName].columns;
20
+ const [stmt, bindValues] = SqlQueries.insertRows({ columns, tableName, valuesArray });
21
+ return [stmt, bindValues, tableName];
22
+ };
23
+ const insertOrIgnoreRow = ({ tableName, values, returnRow = false, }) => {
24
+ const columns = schema[tableName].columns;
25
+ const [stmt, bindValues] = SqlQueries.insertOrIgnoreRow({ columns, tableName, values, returnRow });
26
+ return [stmt, bindValues, tableName];
27
+ };
28
+ const updateRows = ({ tableName, updateValues, where, }) => {
29
+ const columns = schema[tableName].columns;
30
+ const [stmt, bindValues] = SqlQueries.updateRows({ columns, tableName, updateValues, where });
31
+ return [stmt, bindValues, tableName];
32
+ };
33
+ const deleteRows = ({ tableName, where, }) => {
34
+ const columns = schema[tableName].columns;
35
+ const [stmt, bindValues] = SqlQueries.deleteRows({ columns, tableName, where });
36
+ return [stmt, bindValues, tableName];
37
+ };
38
+ const upsertRow = ({ tableName, createValues, updateValues, where, }) => {
39
+ const columns = schema[tableName].columns;
40
+ const [stmt, bindValues] = SqlQueries.upsertRow({
41
+ columns,
42
+ tableName,
43
+ createValues: createValues, // TODO investigate why types don't match
44
+ updateValues,
45
+ where,
46
+ });
47
+ return [stmt, bindValues, tableName];
48
+ };
49
+ return {
50
+ findManyRows,
51
+ countRows,
52
+ insertRow,
53
+ insertRows,
54
+ insertOrIgnoreRow,
55
+ updateRows,
56
+ deleteRows,
57
+ upsertRow,
58
+ };
59
+ };
60
+ //# sourceMappingURL=sql-query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-query-builder.js","sourceRoot":"","sources":["../../src/sql-queries/sql-query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { Schema } from '@livestore/utils/effect';
2
+ import type { Prettify, SqliteDsl } from 'effect-db-schema';
3
+ export type DecodedValuesForTableAll<TSchema extends SqliteDsl.DbSchema, TTableName extends keyof TSchema> = {
4
+ [K in keyof GetColumns<TSchema, TTableName>]: Schema.Schema.To<GetColumn<TSchema, TTableName, K>['schema']>;
5
+ };
6
+ export type DecodedValuesForTablePretty<TSchema extends SqliteDsl.DbSchema, TTableName extends keyof TSchema> = Prettify<DecodedValuesForTable<TSchema, TTableName>>;
7
+ export type DecodedValuesForTable<TSchema extends SqliteDsl.DbSchema, TTableName extends keyof TSchema> = Partial<Pick<DecodedValuesForTableAll<TSchema, TTableName>, GetNullableColumnNamesForTable<TSchema, TTableName>>> & Omit<DecodedValuesForTableAll<TSchema, TTableName>, GetNullableColumnNamesForTable<TSchema, TTableName>>;
8
+ export type DecodedValuesForTableOrNull<TSchema extends SqliteDsl.DbSchema, TTableName extends keyof TSchema> = NullableObj<Pick<DecodedValuesForTableAll<TSchema, TTableName>, GetNullableColumnNamesForTable<TSchema, TTableName>>> & Omit<DecodedValuesForTableAll<TSchema, TTableName>, GetNullableColumnNamesForTable<TSchema, TTableName>>;
9
+ export type WhereValuesForTable<TSchema extends SqliteDsl.DbSchema, TTableName extends keyof TSchema> = PartialOrNull<{
10
+ [K in keyof DecodedValuesForTableAll<TSchema, TTableName>]: WhereValueForDecoded<DecodedValuesForTableAll<TSchema, TTableName>[K]>;
11
+ }>;
12
+ export type WhereValueForDecoded<TDecoded> = TDecoded | {
13
+ op: WhereOp;
14
+ val: TDecoded;
15
+ } | {
16
+ op: 'in';
17
+ val: TDecoded[];
18
+ };
19
+ export type WhereOp = '>' | '<' | '=';
20
+ export declare const isValidWhereOp: (op: string) => op is WhereOp;
21
+ export type EncodedValuesForTableAll<TSchema extends SqliteDsl.DbSchema, TTableName extends keyof TSchema> = {
22
+ [K in keyof GetColumns<TSchema, TTableName>]: Schema.Schema.To<GetColumn<TSchema, TTableName, K>['schema']>;
23
+ };
24
+ export type EncodedValuesForTable<TSchema extends SqliteDsl.DbSchema, TTableName extends keyof TSchema> = Partial<Pick<EncodedValuesForTableAll<TSchema, TTableName>, GetNullableColumnNamesForTable<TSchema, TTableName>>> & Omit<EncodedValuesForTableAll<TSchema, TTableName>, GetNullableColumnNamesForTable<TSchema, TTableName>>;
25
+ export type GetNullableColumnNamesForTable<TSchema extends SqliteDsl.DbSchema, TTableName extends keyof TSchema> = keyof {
26
+ [K in keyof GetColumns<TSchema, TTableName> as GetColumn<TSchema, TTableName, K>['nullable'] extends true ? K : never]: {};
27
+ };
28
+ export type GetColumns<TSchema extends SqliteDsl.DbSchema, TTableName extends keyof TSchema> = TSchema[TTableName]['columns'];
29
+ export type GetColumn<TSchema extends SqliteDsl.DbSchema, TTableName extends keyof TSchema, TColumnName extends keyof TSchema[TTableName]['columns']> = TSchema[TTableName]['columns'][TColumnName];
30
+ export type DecodedValuesForColumnsAll<TColumns extends SqliteDsl.Columns> = {
31
+ [K in keyof TColumns]: Schema.Schema.To<TColumns[K]['schema']>;
32
+ };
33
+ export type DecodedValuesForColumns<TColumns extends SqliteDsl.Columns> = Partial<Pick<DecodedValuesForColumnsAll<TColumns>, GetNullableColumnNames<TColumns>>> & Omit<DecodedValuesForColumnsAll<TColumns>, GetNullableColumnNames<TColumns>>;
34
+ export type EncodedValuesForColumnsAll<TColumns extends SqliteDsl.Columns> = {
35
+ [K in keyof TColumns]: Schema.Schema.From<TColumns[K]['schema']>;
36
+ };
37
+ export type EncodedValuesForColumns<TColumns extends SqliteDsl.Columns> = Partial<Pick<EncodedValuesForColumnsAll<TColumns>, GetNullableColumnNames<TColumns>>> & Omit<EncodedValuesForColumnsAll<TColumns>, GetNullableColumnNames<TColumns>>;
38
+ export type WhereValuesForColumns<TColumns extends SqliteDsl.Columns> = PartialOrNull<{
39
+ [K in keyof EncodedValuesForColumns<TColumns>]: WhereValueForDecoded<DecodedValuesForColumnsAll<TColumns>[K]>;
40
+ }>;
41
+ export type GetNullableColumnNames<TColumns extends SqliteDsl.Columns> = keyof {
42
+ [K in keyof TColumns as TColumns[K] extends SqliteDsl.ColumnDefinition<any, true> ? K : never]: {};
43
+ };
44
+ export type PartialOrNull<T> = {
45
+ [P in keyof T]?: T[P] | null;
46
+ };
47
+ export type NullableObj<T> = {
48
+ [P in keyof T]: T[P] | null;
49
+ };
50
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sql-queries/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export const isValidWhereOp = (op) => {
2
+ const validWhereOps = ['>', '<', '='];
3
+ return validWhereOps.includes(op);
4
+ };
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sql-queries/types.ts"],"names":[],"mappings":"AAkCA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAU,EAAiB,EAAE;IAC1D,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IACrC,OAAO,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AACnC,CAAC,CAAA"}
package/dist/util.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ /// <reference lib="es2022" />
2
+ import type { Brand } from '@livestore/utils/effect';
3
+ export type ParamsObject = Record<string, SqlValue>;
4
+ export type SqlValue = string | number | Uint8Array | null;
5
+ export type Bindable = SqlValue[] | ParamsObject;
6
+ export type PreparedBindValues = Brand.Branded<Bindable, 'PreparedBindValues'>;
7
+ /**
8
+ * This is a tag function for tagged literals.
9
+ * it lets us get syntax highlighting on SQL queries in VSCode, but
10
+ * doesn't do anything at runtime.
11
+ * Code copied from: https://esdiscuss.org/topic/string-identity-template-tag
12
+ */
13
+ export declare const sql: (template: TemplateStringsArray, ...args: unknown[]) => string;
14
+ /** Prepare bind values to send to SQLite
15
+ /* Add $ to the beginning of keys; which we use as our interpolation syntax
16
+ /* We also strip out any params that aren't used in the statement,
17
+ /* because rusqlite doesn't allow unused named params
18
+ /* TODO: Search for unused params via proper parsing, not string search
19
+ **/
20
+ export declare const prepareBindValues: (values: Bindable, statement: string) => PreparedBindValues;
21
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAEpD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AACnD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAA;AAE1D,MAAM,MAAM,QAAQ,GAAG,QAAQ,EAAE,GAAG,YAAY,CAAA;AAEhD,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAA;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,GAAG,aAAc,oBAAoB,WAAW,OAAO,EAAE,KAAG,MASxE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,WAAY,QAAQ,aAAa,MAAM,KAAG,kBAWvE,CAAA"}
package/dist/util.js ADDED
@@ -0,0 +1,33 @@
1
+ /// <reference lib="es2022" />
2
+ /**
3
+ * This is a tag function for tagged literals.
4
+ * it lets us get syntax highlighting on SQL queries in VSCode, but
5
+ * doesn't do anything at runtime.
6
+ * Code copied from: https://esdiscuss.org/topic/string-identity-template-tag
7
+ */
8
+ export const sql = (template, ...args) => {
9
+ let str = '';
10
+ for (const [i, arg] of args.entries()) {
11
+ str += template[i] + String(arg);
12
+ }
13
+ // eslint-disable-next-line unicorn/prefer-at
14
+ return str + template[template.length - 1];
15
+ };
16
+ /** Prepare bind values to send to SQLite
17
+ /* Add $ to the beginning of keys; which we use as our interpolation syntax
18
+ /* We also strip out any params that aren't used in the statement,
19
+ /* because rusqlite doesn't allow unused named params
20
+ /* TODO: Search for unused params via proper parsing, not string search
21
+ **/
22
+ export const prepareBindValues = (values, statement) => {
23
+ if (Array.isArray(values))
24
+ return values;
25
+ const result = {};
26
+ for (const [key, value] of Object.entries(values)) {
27
+ if (statement.includes(key)) {
28
+ result[`$${key}`] = value;
29
+ }
30
+ }
31
+ return result;
32
+ };
33
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAW9B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,QAA8B,EAAE,GAAG,IAAe,EAAU,EAAE;IAChF,IAAI,GAAG,GAAG,EAAE,CAAA;IAEZ,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACtC,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IAClC,CAAC;IAED,6CAA6C;IAC7C,OAAO,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAgB,EAAE,SAAiB,EAAsB,EAAE;IAC3F,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAA4B,CAAA;IAE9D,MAAM,MAAM,GAAiB,EAAE,CAAA;IAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,MAA4B,CAAA;AACrC,CAAC,CAAA"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@livestore/common",
3
+ "version": "0.0.42-dev.0",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": {
7
+ "types": "./dist/index.d.ts",
8
+ "default": "./dist/index.js"
9
+ },
10
+ "./schema": {
11
+ "types": "./dist/schema/index.d.ts",
12
+ "default": "./dist/schema/index.js"
13
+ }
14
+ },
15
+ "types": "./dist/index.d.ts",
16
+ "typesVersions": {
17
+ "*": {
18
+ "schema": [
19
+ "./dist/schema/index.d.ts"
20
+ ]
21
+ }
22
+ },
23
+ "dependencies": {
24
+ "@opentelemetry/api": "^1.7.0",
25
+ "@livestore/utils": "0.0.42-dev.0",
26
+ "effect-db-schema": "0.0.42-dev.0"
27
+ },
28
+ "devDependencies": {
29
+ "@livestore/utils": "0.0.42-dev.0"
30
+ },
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "scripts": {
35
+ "test": "echo No tests yet"
36
+ }
37
+ }
@@ -0,0 +1,37 @@
1
+ import type * as otel from '@opentelemetry/api'
2
+
3
+ import type { MutationEvent } from './schema/index.js'
4
+ import type { PreparedBindValues } from './util.js'
5
+
6
+ export interface PreparedStatement {
7
+ execute(bindValues: PreparedBindValues | undefined): void
8
+ select<T>(bindValues: PreparedBindValues | undefined): ReadonlyArray<T>
9
+ finalize(): void
10
+ }
11
+
12
+ export type DatabaseImpl = {
13
+ mainDb: MainDatabase
14
+ storageDb: StorageDatabase
15
+ }
16
+
17
+ export type MainDatabase = {
18
+ filename: string
19
+ prepare(queryStr: string): PreparedStatement
20
+ execute(queryStr: string, bindValues: PreparedBindValues | undefined): void
21
+ dangerouslyReset(): Promise<void>
22
+ export(): Uint8Array
23
+ }
24
+
25
+ export type StorageDatabase = {
26
+ filename: string
27
+ execute(queryStr: string, bindValues: PreparedBindValues | undefined, span: otel.Span | undefined): Promise<void>
28
+ mutate(mutationEventEncoded: MutationEvent.Any, span: otel.Span): Promise<void>
29
+ dangerouslyReset(): Promise<void>
30
+ export(span: otel.Span | undefined): Promise<Uint8Array | undefined>
31
+ getMutationLogData(): Promise<Uint8Array>
32
+ }
33
+
34
+ export type DatabaseFactory = (opts: {
35
+ otelTracer: otel.Tracer
36
+ otelContext: otel.Context
37
+ }) => DatabaseImpl | Promise<DatabaseImpl>
package/src/index.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './util.js'
2
+ export * from './database.js'
3
+ export * from './sql-queries/index.js'