@powersync/service-sync-rules 0.32.0 → 0.33.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 (86) hide show
  1. package/dist/BaseSqlDataQuery.js +2 -1
  2. package/dist/BaseSqlDataQuery.js.map +1 -1
  3. package/dist/BucketDescription.d.ts +20 -1
  4. package/dist/BucketDescription.js +12 -0
  5. package/dist/BucketDescription.js.map +1 -1
  6. package/dist/BucketParameterQuerier.d.ts +5 -0
  7. package/dist/BucketParameterQuerier.js +15 -3
  8. package/dist/BucketParameterQuerier.js.map +1 -1
  9. package/dist/BucketSource.d.ts +1 -1
  10. package/dist/BucketSource.js +5 -4
  11. package/dist/BucketSource.js.map +1 -1
  12. package/dist/HydrationState.d.ts +4 -0
  13. package/dist/HydrationState.js +4 -2
  14. package/dist/HydrationState.js.map +1 -1
  15. package/dist/SqlParameterQuery.js +8 -12
  16. package/dist/SqlParameterQuery.js.map +1 -1
  17. package/dist/StaticSqlParameterQuery.js +5 -12
  18. package/dist/StaticSqlParameterQuery.js.map +1 -1
  19. package/dist/TableValuedFunctionSqlParameterQuery.js +3 -10
  20. package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -1
  21. package/dist/cast.d.ts +9 -0
  22. package/dist/cast.js +131 -0
  23. package/dist/cast.js.map +1 -0
  24. package/dist/compiler/querier_graph.js +4 -1
  25. package/dist/compiler/querier_graph.js.map +1 -1
  26. package/dist/compiler/sqlite.js +1 -1
  27. package/dist/compiler/sqlite.js.map +1 -1
  28. package/dist/compiler/table.js +4 -1
  29. package/dist/compiler/table.js.map +1 -1
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.js +1 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/schema-generators/DartSchemaGenerator.d.ts +1 -0
  34. package/dist/schema-generators/DartSchemaGenerator.js +36 -2
  35. package/dist/schema-generators/DartSchemaGenerator.js.map +1 -1
  36. package/dist/schema-generators/DotNetSchemaGenerator.d.ts +2 -0
  37. package/dist/schema-generators/DotNetSchemaGenerator.js +52 -2
  38. package/dist/schema-generators/DotNetSchemaGenerator.js.map +1 -1
  39. package/dist/schema-generators/KotlinSchemaGenerator.d.ts +3 -0
  40. package/dist/schema-generators/KotlinSchemaGenerator.js +68 -5
  41. package/dist/schema-generators/KotlinSchemaGenerator.js.map +1 -1
  42. package/dist/schema-generators/RoomSchemaGenerator.js +3 -19
  43. package/dist/schema-generators/RoomSchemaGenerator.js.map +1 -1
  44. package/dist/schema-generators/SchemaGenerator.d.ts +7 -1
  45. package/dist/schema-generators/SchemaGenerator.js +35 -0
  46. package/dist/schema-generators/SchemaGenerator.js.map +1 -1
  47. package/dist/schema-generators/SwiftSchemaGenerator.d.ts +3 -0
  48. package/dist/schema-generators/SwiftSchemaGenerator.js +66 -2
  49. package/dist/schema-generators/SwiftSchemaGenerator.js.map +1 -1
  50. package/dist/schema-generators/TsSchemaGenerator.d.ts +2 -0
  51. package/dist/schema-generators/TsSchemaGenerator.js +45 -8
  52. package/dist/schema-generators/TsSchemaGenerator.js.map +1 -1
  53. package/dist/sql_functions.d.ts +1 -5
  54. package/dist/sql_functions.js +1 -114
  55. package/dist/sql_functions.js.map +1 -1
  56. package/dist/streams/filter.d.ts +2 -4
  57. package/dist/streams/filter.js +2 -1
  58. package/dist/streams/filter.js.map +1 -1
  59. package/dist/streams/variant.js +4 -7
  60. package/dist/streams/variant.js.map +1 -1
  61. package/dist/sync_plan/engine/javascript.js +2 -2
  62. package/dist/sync_plan/engine/javascript.js.map +1 -1
  63. package/dist/sync_plan/evaluator/bucket_data_source.js +2 -1
  64. package/dist/sync_plan/evaluator/bucket_data_source.js.map +1 -1
  65. package/dist/sync_plan/evaluator/bucket_source.d.ts +1 -1
  66. package/dist/sync_plan/evaluator/bucket_source.js +31 -36
  67. package/dist/sync_plan/evaluator/bucket_source.js.map +1 -1
  68. package/dist/sync_plan/evaluator/index.d.ts +6 -0
  69. package/dist/sync_plan/evaluator/index.js +7 -0
  70. package/dist/sync_plan/evaluator/index.js.map +1 -1
  71. package/dist/sync_plan/evaluator/parameter_evaluator.d.ts +6 -12
  72. package/dist/sync_plan/evaluator/parameter_evaluator.js +51 -54
  73. package/dist/sync_plan/evaluator/parameter_evaluator.js.map +1 -1
  74. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js +4 -1
  75. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js.map +1 -1
  76. package/dist/sync_plan/plan.d.ts +1 -1
  77. package/dist/sync_plan/schema_inference.d.ts +6 -2
  78. package/dist/sync_plan/schema_inference.js +104 -3
  79. package/dist/sync_plan/schema_inference.js.map +1 -1
  80. package/dist/sync_plan/serialize.d.ts +1 -1
  81. package/dist/types.d.ts +3 -0
  82. package/dist/types.js.map +1 -1
  83. package/dist/utils.d.ts +26 -4
  84. package/dist/utils.js +53 -17
  85. package/dist/utils.js.map +1 -1
  86. package/package.json +1 -1
@@ -1,4 +1,5 @@
1
- import { SchemaGenerator } from './SchemaGenerator.js';
1
+ import { TYPE_INTEGER, TYPE_REAL, TYPE_TEXT } from '../ExpressionType.js';
2
+ import { SchemaGenerator, toCamelCase } from './SchemaGenerator.js';
2
3
  export class KotlinSchemaGenerator extends SchemaGenerator {
3
4
  key = 'kotlin';
4
5
  label = 'Kotlin';
@@ -6,13 +7,24 @@ export class KotlinSchemaGenerator extends SchemaGenerator {
6
7
  fileName = 'schema.kt';
7
8
  generate(source, schema, options) {
8
9
  const tables = super.getAllTables(source, schema);
9
- return `import com.powersync.db.schema.Column
10
+ let imports = `import com.powersync.db.schema.Column
10
11
  import com.powersync.db.schema.Schema
11
12
  import com.powersync.db.schema.Table
12
-
13
- val schema = Schema(
13
+ `;
14
+ const generatedSchema = `val schema = Schema(
14
15
  ${tables.map((table) => this.generateTable(table.name, table.columns, options)).join(',\n ')}
15
- )`;
16
+ )
17
+ `;
18
+ const streams = this.generateStreamHelperForKotlin(source, schema);
19
+ if (streams != null) {
20
+ imports += `import com.powersync.PowerSyncDatabase
21
+ import com.powersync.sync.SyncStream
22
+ import com.powersync.utils.JsonParam
23
+ import kotlin.jvm.JvmInline
24
+ `;
25
+ return `${imports}\n${generatedSchema}\n${streams}`;
26
+ }
27
+ return `${imports}\n${generatedSchema}`;
16
28
  }
17
29
  generateTable(name, columns, options) {
18
30
  const generated = columns.map((c, i) => {
@@ -42,5 +54,56 @@ ${generated.join('\n')}
42
54
  generateColumn(column) {
43
55
  return `Column.${this.columnType(column)}("${column.name}")`;
44
56
  }
57
+ generateStreamHelperForKotlin(source, schema) {
58
+ const optionalSyncStreams = this.getOptionalStreams(source, schema);
59
+ if (optionalSyncStreams.length) {
60
+ let generatedCode = `@JvmInline
61
+ value class TypedSyncStreams(private val db: PowerSyncDatabase) {
62
+ `;
63
+ for (const stream of optionalSyncStreams) {
64
+ const entries = Object.entries(stream.parameters);
65
+ let kotlinParameters = entries
66
+ .map(([parameter, type]) => `${toCamelCase(parameter)}: ${this.kotlinType(type)}`)
67
+ .join(', ');
68
+ let parameterMap;
69
+ if (entries.length) {
70
+ parameterMap = 'buildMap {\n';
71
+ for (const [parameter, type] of entries) {
72
+ parameterMap += ` put("${parameter}", ${this.kotlinJsonParamType(type)}(${toCamelCase(parameter)}))\n`;
73
+ }
74
+ parameterMap += ' }';
75
+ }
76
+ else {
77
+ parameterMap = 'emptyMap()';
78
+ }
79
+ generatedCode += ` fun ${toCamelCase(stream.name)}(${kotlinParameters}): SyncStream = db.syncStream("${stream.name}", ${parameterMap})\n`;
80
+ }
81
+ generatedCode += `}
82
+ `;
83
+ return generatedCode;
84
+ }
85
+ }
86
+ kotlinType({ type }) {
87
+ if (type.typeFlags & TYPE_TEXT) {
88
+ return 'String';
89
+ }
90
+ else if (type.typeFlags & TYPE_REAL) {
91
+ return 'Double';
92
+ }
93
+ else if (type.typeFlags & TYPE_INTEGER) {
94
+ return 'Int';
95
+ }
96
+ else {
97
+ return 'String';
98
+ }
99
+ }
100
+ kotlinJsonParamType({ type }) {
101
+ if (type.typeFlags & (TYPE_INTEGER | TYPE_REAL)) {
102
+ return 'JsonParam.Number';
103
+ }
104
+ else {
105
+ return 'JsonParam.String';
106
+ }
107
+ }
45
108
  }
46
109
  //# sourceMappingURL=KotlinSchemaGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KotlinSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/KotlinSchemaGenerator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE9E,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IAC/C,GAAG,GAAG,QAAQ,CAAC;IACf,KAAK,GAAG,QAAQ,CAAC;IACjB,SAAS,GAAG,eAAe,CAAC;IAC5B,QAAQ,GAAG,WAAW,CAAC;IAEhC,QAAQ,CAAC,MAAkB,EAAE,MAAoB,EAAE,OAA+B;QAChF,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAElD,OAAO;;;;;IAKP,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;EAC7F,CAAC;IACD,CAAC;IAEO,aAAa,CAAC,IAAY,EAAE,OAA2B,EAAE,OAA+B;QAC9F,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,cAAsB,CAAC;YAC3B,IAAI,IAAI,EAAE,CAAC;gBACT,cAAc,GAAG,WAAW,IAAI,EAAE,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,cAAc,GAAG,WAAW,IAAI,GAAG,CAAC;YACtC,CAAC;YAED,IAAI,OAAO,EAAE,mBAAmB,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;gBAC3D,OAAO,GAAG,cAAc,OAAO,CAAC,CAAC,YAAY,EAAE,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,OAAO,cAAc,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO;cACG,IAAI;;EAEhB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;IAElB,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,MAAwB;QAC7C,OAAO,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;IAC/D,CAAC;CACF"}
1
+ {"version":3,"file":"KotlinSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/KotlinSchemaGenerator.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { SchemaGenerator } from './SchemaGenerator.js';
1
+ import { SchemaGenerator, toCamelCase } from './SchemaGenerator.js';
2
2
  /**
3
3
  * Generates a schema to use with the [Room library](https://docs.powersync.com/client-sdk-references/kotlin-multiplatform/libraries/room).
4
4
  */
@@ -16,7 +16,7 @@ import androidx.room.PrimaryKey
16
16
  for (const table of tables) {
17
17
  // @Entity(tableName = "todo_list_items") data class TodoListItems(
18
18
  buffer += `\n@Entity(tableName = "${table.name}")\n`;
19
- buffer += `data class ${snakeCaseToKotlin(table.name, true)}(\n`;
19
+ buffer += `data class ${toCamelCase(table.name, true)}(\n`;
20
20
  // Id column
21
21
  buffer += ' @PrimaryKey val id: String,\n';
22
22
  for (const column of table.columns) {
@@ -27,27 +27,11 @@ import androidx.room.PrimaryKey
27
27
  integer: 'Long'
28
28
  }[sqliteType];
29
29
  // @ColumnInfo(name = "author_id") val authorId: String,
30
- buffer += ` @ColumnInfo("${column.name}") val ${snakeCaseToKotlin(column.name, false)}: ${kotlinType},\n`;
30
+ buffer += ` @ColumnInfo("${column.name}") val ${toCamelCase(column.name)}: ${kotlinType},\n`;
31
31
  }
32
32
  buffer += ')\n';
33
33
  }
34
34
  return buffer;
35
35
  }
36
36
  }
37
- function snakeCaseToKotlin(source, initialUpper) {
38
- let result = '';
39
- for (const chunk of source.split('_')) {
40
- if (chunk.length == 0)
41
- continue;
42
- const firstCharUpper = result.length > 0 || initialUpper;
43
- if (firstCharUpper) {
44
- result += chunk.charAt(0).toUpperCase();
45
- result += chunk.substring(1);
46
- }
47
- else {
48
- result += chunk;
49
- }
50
- }
51
- return result;
52
- }
53
37
  //# sourceMappingURL=RoomSchemaGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RoomSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/RoomSchemaGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IAC7C,GAAG,GAAG,aAAa,CAAC;IACpB,KAAK,GAAG,6BAA6B,CAAC;IACtC,SAAS,GAAG,eAAe,CAAC;IAC5B,QAAQ,GAAG,aAAa,CAAC;IAElC,QAAQ,CAAC,MAAkB,EAAE,MAAoB;QAC/C,IAAI,MAAM,GAAG;;;CAGhB,CAAC;QACE,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,mEAAmE;YACnE,MAAM,IAAI,0BAA0B,KAAK,CAAC,IAAI,MAAM,CAAC;YACrD,MAAM,IAAI,cAAc,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;YAEjE,YAAY;YACZ,MAAM,IAAI,iCAAiC,CAAC;YAE5C,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC3C,MAAM,UAAU,GAAG;oBACjB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,MAAM;iBAChB,CAAC,UAAU,CAAC,CAAC;gBAEd,wDAAwD;gBACxD,MAAM,IAAI,kBAAkB,MAAM,CAAC,IAAI,UAAU,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,UAAU,KAAK,CAAC;YAC7G,CAAC;YAED,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,MAAc,EAAE,YAAqB;IAC9D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;YAAE,SAAS;QAEhC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC;QACzD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"RoomSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/RoomSchemaGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEpE;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IAC7C,GAAG,GAAG,aAAa,CAAC;IACpB,KAAK,GAAG,6BAA6B,CAAC;IACtC,SAAS,GAAG,eAAe,CAAC;IAC5B,QAAQ,GAAG,aAAa,CAAC;IAElC,QAAQ,CAAC,MAAkB,EAAE,MAAoB;QAC/C,IAAI,MAAM,GAAG;;;CAGhB,CAAC;QACE,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,mEAAmE;YACnE,MAAM,IAAI,0BAA0B,KAAK,CAAC,IAAI,MAAM,CAAC;YACrD,MAAM,IAAI,cAAc,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;YAE3D,YAAY;YACZ,MAAM,IAAI,iCAAiC,CAAC;YAE5C,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC3C,MAAM,UAAU,GAAG;oBACjB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,MAAM;iBAChB,CAAC,UAAU,CAAC,CAAC;gBAEd,wDAAwD;gBACxD,MAAM,IAAI,kBAAkB,MAAM,CAAC,IAAI,UAAU,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,UAAU,KAAK,CAAC;YAChG,CAAC;YAED,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
1
  import { SyncConfig } from '../SyncConfig.js';
2
- import { ColumnDefinition } from '../ExpressionType.js';
2
+ import { ColumnDefinition, ColumnType } from '../ExpressionType.js';
3
3
  import { SourceSchema } from '../types.js';
4
4
  export interface GenerateSchemaOptions {
5
5
  includeTypeComments?: boolean;
@@ -9,6 +9,7 @@ export declare abstract class SchemaGenerator {
9
9
  name: string;
10
10
  columns: ColumnDefinition[];
11
11
  }[];
12
+ protected getOptionalStreams(source: SyncConfig, schema: SourceSchema): OptionalStream[];
12
13
  abstract readonly key: string;
13
14
  abstract readonly label: string;
14
15
  abstract readonly mediaType: string;
@@ -25,3 +26,8 @@ export declare abstract class SchemaGenerator {
25
26
  * @returns The default SQL column type name for that type.
26
27
  */
27
28
  export declare function sqlTypeName(def: ColumnDefinition): 'text' | 'real' | 'integer';
29
+ export interface OptionalStream {
30
+ name: string;
31
+ parameters: Record<string, ColumnType>;
32
+ }
33
+ export declare function toCamelCase(source: string, initialUpper?: boolean): string;
@@ -1,4 +1,6 @@
1
1
  import { TYPE_INTEGER, TYPE_REAL, TYPE_TEXT } from '../ExpressionType.js';
2
+ import { PrecompiledSyncConfig } from '../sync_plan/evaluator/index.js';
3
+ import { SyncPlanSchemaAnalyzer } from '../sync_plan/schema_inference.js';
2
4
  export class SchemaGenerator {
3
5
  getAllTables(source, schema) {
4
6
  let tables = {};
@@ -12,6 +14,23 @@ export class SchemaGenerator {
12
14
  };
13
15
  });
14
16
  }
17
+ getOptionalStreams(source, schema) {
18
+ const streams = [];
19
+ if (source instanceof PrecompiledSyncConfig) {
20
+ const analyzer = new SyncPlanSchemaAnalyzer(source.defaultSchema, schema);
21
+ for (const { stream, queriers } of source.plan.streams) {
22
+ if (stream.isSubscribedByDefault) {
23
+ // Not an optional stream
24
+ continue;
25
+ }
26
+ streams.push({
27
+ name: stream.name,
28
+ parameters: analyzer.resolveReferencedParameters(queriers)
29
+ });
30
+ }
31
+ }
32
+ return streams;
33
+ }
15
34
  /**
16
35
  * @param def The column definition to generate the type for.
17
36
  * @returns The SDK column type for the given column definition.
@@ -39,4 +58,20 @@ export function sqlTypeName(def) {
39
58
  return 'text';
40
59
  }
41
60
  }
61
+ export function toCamelCase(source, initialUpper = false) {
62
+ let result = '';
63
+ for (const chunk of source.split(/[_-]/)) {
64
+ if (chunk.length == 0)
65
+ continue;
66
+ const firstCharUpper = result.length > 0 || initialUpper;
67
+ if (firstCharUpper) {
68
+ result += chunk.charAt(0).toUpperCase();
69
+ result += chunk.substring(1);
70
+ }
71
+ else {
72
+ result += chunk;
73
+ }
74
+ }
75
+ return result;
76
+ }
42
77
  //# sourceMappingURL=SchemaGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/SchemaGenerator.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAO5F,MAAM,OAAgB,eAAe;IACzB,YAAY,CAAC,MAAkB,EAAE,MAAoB;QAC7D,IAAI,MAAM,GAAqD,EAAE,CAAC;QAElE,KAAK,IAAI,UAAU,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAChD,UAAU,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;YACpD,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;aAChC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IASD;;;OAGG;IACH,UAAU,CAAC,GAAqB;QAC9B,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAqB;IAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;IACrB,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;SAAM,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC;SAAM,IAAI,IAAI,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"SchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/SchemaGenerator.ts"],"names":[],"mappings":"AACA,OAAO,EAAgC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAExG,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAM1E,MAAM,OAAgB,eAAe;IACzB,YAAY,CAAC,MAAkB,EAAE,MAAoB;QAC7D,IAAI,MAAM,GAAqD,EAAE,CAAC;QAElE,KAAK,IAAI,UAAU,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAChD,UAAU,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;YACpD,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;aAChC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAES,kBAAkB,CAAC,MAAkB,EAAE,MAAoB;QACnE,MAAM,OAAO,GAAqB,EAAE,CAAC;QACrC,IAAI,MAAM,YAAY,qBAAqB,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAE1E,KAAK,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACvD,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;oBACjC,yBAAyB;oBACzB,SAAS;gBACX,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,UAAU,EAAE,QAAQ,CAAC,2BAA2B,CAAC,QAAQ,CAAC;iBAC3D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IASD;;;OAGG;IACH,UAAU,CAAC,GAAqB;QAC9B,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAqB;IAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;IACrB,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;SAAM,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC;SAAM,IAAI,IAAI,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAOD,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,eAAwB,KAAK;IACvE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;YAAE,SAAS;QAEhC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC;QACzD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -9,4 +9,7 @@ export declare class SwiftSchemaGenerator extends SchemaGenerator {
9
9
  generate(source: SyncConfig, schema: SourceSchema, options?: GenerateSchemaOptions): string;
10
10
  private generateTable;
11
11
  private generateColumn;
12
+ private generateStreamHelper;
13
+ private swiftType;
14
+ private swiftJsonParamType;
12
15
  }
@@ -1,4 +1,5 @@
1
- import { SchemaGenerator } from './SchemaGenerator.js';
1
+ import { TYPE_INTEGER, TYPE_REAL, TYPE_TEXT } from '../ExpressionType.js';
2
+ import { SchemaGenerator, toCamelCase } from './SchemaGenerator.js';
2
3
  export class SwiftSchemaGenerator extends SchemaGenerator {
3
4
  key = 'swift';
4
5
  label = 'Swift';
@@ -6,11 +7,14 @@ export class SwiftSchemaGenerator extends SchemaGenerator {
6
7
  fileName = 'schema.swift';
7
8
  generate(source, schema, options) {
8
9
  const tables = super.getAllTables(source, schema);
10
+ const streamsHelper = this.generateStreamHelper(source, schema);
9
11
  return `import PowerSync
10
12
 
11
13
  let schema = Schema(
12
14
  ${tables.map((table) => this.generateTable(table.name, table.columns, options)).join(',\n ')}
13
- )`;
15
+ )
16
+ ${streamsHelper ?? ''}
17
+ `;
14
18
  }
15
19
  generateTable(name, columns, options) {
16
20
  const generated = columns.map((c, i) => {
@@ -40,5 +44,65 @@ ${generated.join('\n')}
40
44
  generateColumn(column) {
41
45
  return `.${this.columnType(column)}("${column.name}")`;
42
46
  }
47
+ generateStreamHelper(source, schema) {
48
+ const optionalSyncStreams = this.getOptionalStreams(source, schema);
49
+ if (optionalSyncStreams.length) {
50
+ let generatedCode = `
51
+ struct TypedSyncStreams {
52
+ private var db: PowerSyncDatabaseProtocol
53
+ init(_ db: PowerSyncDatabaseProtocol) {
54
+ self.db = db
55
+ }
56
+ `;
57
+ for (const stream of optionalSyncStreams) {
58
+ const entries = Object.entries(stream.parameters);
59
+ let swiftParameters = entries
60
+ .map(([parameter, type]) => `${toCamelCase(parameter)}: ${this.swiftType(type)}`)
61
+ .join(', ');
62
+ let parameterMap;
63
+ if (entries.length) {
64
+ parameterMap = '[\n';
65
+ for (const [parameter, type] of entries) {
66
+ parameterMap += ` "${parameter}": ${this.swiftJsonParamType(type)}(${toCamelCase(parameter)})\n`;
67
+ }
68
+ parameterMap += ' ]';
69
+ }
70
+ else {
71
+ parameterMap = '[:]';
72
+ }
73
+ generatedCode += ` func ${toCamelCase(stream.name)}(${swiftParameters}) -> SyncStream {
74
+ return db.syncStream(name: "${stream.name}", params: ${parameterMap})
75
+ }
76
+ `;
77
+ }
78
+ generatedCode += `}`;
79
+ return generatedCode;
80
+ }
81
+ }
82
+ swiftType({ type }) {
83
+ if (type.typeFlags & TYPE_TEXT) {
84
+ return 'String';
85
+ }
86
+ else if (type.typeFlags & TYPE_REAL) {
87
+ return 'Double';
88
+ }
89
+ else if (type.typeFlags & TYPE_INTEGER) {
90
+ return 'Int';
91
+ }
92
+ else {
93
+ return 'String';
94
+ }
95
+ }
96
+ swiftJsonParamType({ type }) {
97
+ if (type.typeFlags & TYPE_INTEGER) {
98
+ return 'JsonValue.int';
99
+ }
100
+ else if (type.typeFlags & TYPE_REAL) {
101
+ return 'JsonValue.double';
102
+ }
103
+ else {
104
+ return 'JsonValue.string';
105
+ }
106
+ }
43
107
  }
44
108
  //# sourceMappingURL=SwiftSchemaGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SwiftSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/SwiftSchemaGenerator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE9E,MAAM,OAAO,oBAAqB,SAAQ,eAAe;IAC9C,GAAG,GAAG,OAAO,CAAC;IACd,KAAK,GAAG,OAAO,CAAC;IAChB,SAAS,GAAG,cAAc,CAAC;IAC3B,QAAQ,GAAG,cAAc,CAAC;IAEnC,QAAQ,CAAC,MAAkB,EAAE,MAAoB,EAAE,OAA+B;QAChF,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAElD,OAAO;;;IAGP,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;EAC7F,CAAC;IACD,CAAC;IAEO,aAAa,CAAC,IAAY,EAAE,OAA2B,EAAE,OAA+B;QAC9F,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,cAAsB,CAAC;YAC3B,IAAI,IAAI,EAAE,CAAC;gBACT,cAAc,GAAG,WAAW,IAAI,EAAE,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,cAAc,GAAG,WAAW,IAAI,GAAG,CAAC;YACtC,CAAC;YAED,IAAI,OAAO,EAAE,mBAAmB,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;gBAC3D,OAAO,GAAG,cAAc,OAAO,CAAC,CAAC,YAAY,EAAE,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,OAAO,cAAc,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO;aACE,IAAI;;EAEf,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;IAElB,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,MAAwB;QAC7C,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;IACzD,CAAC;CACF"}
1
+ {"version":3,"file":"SwiftSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/SwiftSchemaGenerator.ts"],"names":[],"mappings":"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"}
@@ -30,5 +30,7 @@ export declare class TsSchemaGenerator extends SchemaGenerator {
30
30
  private generateTypeExports;
31
31
  private generateImports;
32
32
  private generateTable;
33
+ private generateStreamHelper;
33
34
  private generateColumn;
35
+ private valueType;
34
36
  }
@@ -1,5 +1,5 @@
1
1
  import { TYPE_INTEGER, TYPE_REAL, TYPE_TEXT } from '../ExpressionType.js';
2
- import { SchemaGenerator } from './SchemaGenerator.js';
2
+ import { SchemaGenerator, toCamelCase } from './SchemaGenerator.js';
3
3
  export var TsSchemaLanguage;
4
4
  (function (TsSchemaLanguage) {
5
5
  TsSchemaLanguage["ts"] = "ts";
@@ -40,7 +40,8 @@ export class TsSchemaGenerator extends SchemaGenerator {
40
40
  }
41
41
  generate(source, schema, options) {
42
42
  const tables = super.getAllTables(source, schema);
43
- return `${this.generateImports()}
43
+ const streamsHelper = this.generateStreamHelper(source, schema);
44
+ return `${this.generateImports(streamsHelper != null)}
44
45
 
45
46
  ${tables.map((table) => this.generateTable(table.name, table.columns, options)).join('\n\n')}
46
47
 
@@ -48,7 +49,8 @@ export const AppSchema = new Schema({
48
49
  ${tables.map((table) => table.name).join(',\n ')}
49
50
  });
50
51
 
51
- ${this.generateTypeExports()}`;
52
+ ${this.generateTypeExports()}
53
+ ${streamsHelper ?? ''}`;
52
54
  }
53
55
  generateTypeExports() {
54
56
  if (this.language == TsSchemaLanguage.ts) {
@@ -58,17 +60,22 @@ ${this.generateTypeExports()}`;
58
60
  return ``;
59
61
  }
60
62
  }
61
- generateImports() {
63
+ generateImports(includeSyncStreams) {
62
64
  const importStyle = this.options.imports ?? 'auto';
65
+ const importedNames = ['column', 'Schema', 'Table'];
66
+ if (includeSyncStreams) {
67
+ importedNames.push(...['PowerSyncDatabase', 'SyncStream']);
68
+ }
69
+ const importStart = `import { ${importedNames.join(', ')} } from`;
63
70
  if (importStyle == TsSchemaImports.web) {
64
- return `import { column, Schema, Table } from '@powersync/web';`;
71
+ return `${importStart} '@powersync/web';`;
65
72
  }
66
73
  else if (importStyle == TsSchemaImports.reactNative) {
67
- return `import { column, Schema, Table } from '@powersync/react-native';`;
74
+ return `${importStart} '@powersync/react-native';`;
68
75
  }
69
76
  else {
70
- return `import { column, Schema, Table } from '@powersync/web';
71
- // OR: import { column, Schema, Table } from '@powersync/react-native';`;
77
+ return `${importStart} '@powersync/web';
78
+ // OR: ${importStart} '@powersync/react-native';`;
72
79
  }
73
80
  }
74
81
  generateTable(name, columns, options) {
@@ -97,6 +104,28 @@ ${generated.join('\n')}
97
104
  { indexes: {} }
98
105
  );`;
99
106
  }
107
+ generateStreamHelper(source, schema) {
108
+ const optionalSyncStreams = this.getOptionalStreams(source, schema);
109
+ if (optionalSyncStreams.length) {
110
+ let generatedCode = `export function typedStreams(db: PowerSyncDatabase) {
111
+ return {
112
+ `;
113
+ const methods = optionalSyncStreams.map((stream) => {
114
+ const allParams = Object.entries(stream.parameters);
115
+ let args = '';
116
+ if (allParams.length) {
117
+ const paramsType = allParams.map(([name, type]) => `${name}: ${this.valueType(type)}`).join(', ');
118
+ args += `params: { ${paramsType} }`;
119
+ }
120
+ return ` ${toCamelCase(stream.name)}(${args}): SyncStream {
121
+ return db.syncStream('${stream.name}', ${allParams.length ? 'params' : '{}'});
122
+ }`;
123
+ });
124
+ generatedCode += methods.join(',\n');
125
+ generatedCode += `\n };\n}\n`;
126
+ return generatedCode;
127
+ }
128
+ }
100
129
  generateColumn(column) {
101
130
  const t = column.type;
102
131
  if (t.typeFlags & TYPE_TEXT) {
@@ -112,5 +141,13 @@ ${generated.join('\n')}
112
141
  return `${column.name}: column.text`;
113
142
  }
114
143
  }
144
+ valueType({ type }) {
145
+ if (type.typeFlags & (TYPE_INTEGER | TYPE_REAL)) {
146
+ return 'number';
147
+ }
148
+ else {
149
+ return 'string';
150
+ }
151
+ }
115
152
  }
116
153
  //# sourceMappingURL=TsSchemaGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TsSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/TsSchemaGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TsSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/TsSchemaGenerator.ts"],"names":[],"mappings":"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"}
@@ -21,16 +21,12 @@ export interface DocumentedSqlFunction extends SqlFunction {
21
21
  export declare function getOperatorFunction(op: string): SqlFunction;
22
22
  export declare function generateSqlFunctions(compatibility: CompatibilityContext): {
23
23
  named: Record<string, DocumentedSqlFunction>;
24
- callable: Record<"length" | "substring" | "hex" | "ifnull" | "iif" | "lower" | "typeof" | "upper" | "json_array_length" | "json_extract" | "json_valid" | "unixepoch" | "datetime" | "base64" | "json_keys" | "uuid_blob" | "st_asgeojson" | "st_astext" | "st_x" | "st_y", (...args: SqliteValue[]) => SqliteValue>;
24
+ callable: Record<"upper" | "lower" | "substring" | "length" | "hex" | "base64" | "uuid_blob" | "typeof" | "ifnull" | "iif" | "json_valid" | "json_keys" | "unixepoch" | "datetime" | "st_asgeojson" | "st_astext" | "st_x" | "st_y" | "json_extract" | "json_array_length", (...args: SqliteValue[]) => SqliteValue>;
25
25
  jsonExtract: (sourceValue: SqliteValue, path: SqliteValue, operator: string) => import("./types.js").SqliteJsonValue;
26
26
  jsonExtractFromRecord: (value: any, path: SqliteValue, operator: string) => import("./types.js").SqliteJsonValue;
27
27
  operatorJsonExtractJson: SqlFunction;
28
28
  operatorJsonExtractSql: SqlFunction;
29
29
  };
30
- export declare const CAST_TYPES: Set<String>;
31
- export declare function castAsText(value: SqliteValue): string | null;
32
- export declare function castAsBlob(value: SqliteValue): Uint8Array | null;
33
- export declare function cast(value: SqliteValue, to: string): string | number | bigint | Uint8Array<ArrayBufferLike> | null;
34
30
  export declare function sqliteTypeOf(arg: SqliteInputValue): SqliteValueType;
35
31
  export declare function parseGeometry(value?: SqliteValue): wkx.Geometry | null;
36
32
  export declare function evaluateOperator(op: string, a: SqliteValue, b: SqliteValue): SqliteValue;
@@ -9,6 +9,7 @@ import { ExpressionType, TYPE_INTEGER } from './ExpressionType.js';
9
9
  import * as uuid from 'uuid';
10
10
  import { CustomSqliteValue } from './types/custom_sqlite_value.js';
11
11
  import { CompatibilityOption } from './compatibility.js';
12
+ import { cast, CAST_TYPES, castAsBlob, castAsText } from './cast.js';
12
13
  export const BASIC_OPERATORS = new Set([
13
14
  '=',
14
15
  '!=',
@@ -488,100 +489,6 @@ export function generateSqlFunctions(compatibility) {
488
489
  operatorJsonExtractSql: json.OPERATOR_JSON_EXTRACT_SQL
489
490
  };
490
491
  }
491
- export const CAST_TYPES = new Set(['text', 'numeric', 'integer', 'real', 'blob']);
492
- const textEncoder = new TextEncoder();
493
- const textDecoder = new TextDecoder();
494
- export function castAsText(value) {
495
- if (value == null) {
496
- return null;
497
- }
498
- else if (value instanceof Uint8Array) {
499
- return textDecoder.decode(value);
500
- }
501
- else {
502
- return value.toString();
503
- }
504
- }
505
- export function castAsBlob(value) {
506
- if (value == null) {
507
- return null;
508
- }
509
- else if (value instanceof Uint8Array) {
510
- return value;
511
- }
512
- if (typeof value != 'string') {
513
- value = value.toString();
514
- }
515
- return textEncoder.encode(value);
516
- }
517
- export function cast(value, to) {
518
- if (value == null) {
519
- return null;
520
- }
521
- if (to == 'text') {
522
- return castAsText(value);
523
- }
524
- else if (to == 'numeric') {
525
- if (value instanceof Uint8Array) {
526
- value = textDecoder.decode(value);
527
- }
528
- if (typeof value == 'string') {
529
- return parseNumeric(value);
530
- }
531
- else if (typeof value == 'number' || typeof value == 'bigint') {
532
- return value;
533
- }
534
- else {
535
- return 0n;
536
- }
537
- }
538
- else if (to == 'real') {
539
- if (value instanceof Uint8Array) {
540
- value = textDecoder.decode(value);
541
- }
542
- if (typeof value == 'string') {
543
- const nr = parseFloat(value);
544
- if (isNaN(nr)) {
545
- return 0.0;
546
- }
547
- else {
548
- return nr;
549
- }
550
- }
551
- else if (typeof value == 'number') {
552
- return value;
553
- }
554
- else if (typeof value == 'bigint') {
555
- return Number(value);
556
- }
557
- else {
558
- return 0.0;
559
- }
560
- }
561
- else if (to == 'integer') {
562
- if (value instanceof Uint8Array) {
563
- value = textDecoder.decode(value);
564
- }
565
- if (typeof value == 'string') {
566
- return parseBigInt(value);
567
- }
568
- else if (typeof value == 'number') {
569
- return Number.isInteger(value) ? BigInt(value) : BigInt(Math.floor(value));
570
- }
571
- else if (typeof value == 'bigint') {
572
- return value;
573
- }
574
- else {
575
- return 0n;
576
- }
577
- }
578
- else if (to == 'blob') {
579
- return castAsBlob(value);
580
- }
581
- else {
582
- throw new Error(`Type not supported for cast: '${to}'`);
583
- }
584
- }
585
492
  export function sqliteTypeOf(arg) {
586
493
  if (arg == null) {
587
494
  return 'null';
@@ -623,26 +530,6 @@ export function parseGeometry(value) {
623
530
  const geo = wkx.Geometry.parse(blob);
624
531
  return geo;
625
532
  }
626
- function parseNumeric(text) {
627
- const match = /^\s*(\d+)(\.\d*)?(e[+\-]?\d+)?/i.exec(text);
628
- if (!match) {
629
- return 0n;
630
- }
631
- if (match[2] != null || match[3] != null) {
632
- const v = parseFloat(match[0]);
633
- return isNaN(v) ? 0n : v;
634
- }
635
- else {
636
- return BigInt(match[1]);
637
- }
638
- }
639
- function parseBigInt(text) {
640
- const match = /^\s*(\d+)/.exec(text);
641
- if (!match) {
642
- return 0n;
643
- }
644
- return BigInt(match[1]);
645
- }
646
533
  function isNumeric(a) {
647
534
  return typeof a == 'number' || typeof a == 'bigint';
648
535
  }