@happyvertical/smrt-core 0.36.5 → 0.36.7

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 (131) hide show
  1. package/dist/collection.d.ts +1 -1
  2. package/dist/config.d.ts +1 -1
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js.map +1 -1
  5. package/dist/consumer-plugin/index.d.ts.map +1 -1
  6. package/dist/consumer-plugin/index.js +7 -3
  7. package/dist/consumer-plugin/index.js.map +1 -1
  8. package/dist/database.d.ts +3 -3
  9. package/dist/database.d.ts.map +1 -1
  10. package/dist/database.js.map +1 -1
  11. package/dist/embeddings/provider.d.ts +14 -2
  12. package/dist/embeddings/provider.d.ts.map +1 -1
  13. package/dist/embeddings/provider.js +3 -3
  14. package/dist/embeddings/provider.js.map +1 -1
  15. package/dist/embeddings/storage.js.map +1 -1
  16. package/dist/errors.d.ts +22 -22
  17. package/dist/errors.d.ts.map +1 -1
  18. package/dist/errors.js +5 -4
  19. package/dist/errors.js.map +1 -1
  20. package/dist/generators/cli.d.ts +4 -22
  21. package/dist/generators/cli.d.ts.map +1 -1
  22. package/dist/generators/cli.js +9 -5
  23. package/dist/generators/cli.js.map +1 -1
  24. package/dist/generators/mcp-runtime-template.d.ts +1 -1
  25. package/dist/generators/mcp-runtime-template.d.ts.map +1 -1
  26. package/dist/generators/mcp-runtime-template.js.map +1 -1
  27. package/dist/generators/mcp.d.ts +16 -4
  28. package/dist/generators/mcp.d.ts.map +1 -1
  29. package/dist/generators/mcp.js +25 -9
  30. package/dist/generators/mcp.js.map +1 -1
  31. package/dist/generators/rest.d.ts +6 -5
  32. package/dist/generators/rest.d.ts.map +1 -1
  33. package/dist/generators/rest.js +8 -5
  34. package/dist/generators/rest.js.map +1 -1
  35. package/dist/generators/swagger.d.ts +12 -2
  36. package/dist/generators/swagger.d.ts.map +1 -1
  37. package/dist/generators/swagger.js +6 -3
  38. package/dist/generators/swagger.js.map +1 -1
  39. package/dist/knowledge.d.ts +12 -1
  40. package/dist/knowledge.d.ts.map +1 -1
  41. package/dist/knowledge.js.map +1 -1
  42. package/dist/lazy-config.d.ts.map +1 -1
  43. package/dist/lazy-config.js.map +1 -1
  44. package/dist/manifest/generator.d.ts.map +1 -1
  45. package/dist/manifest/generator.js +14 -12
  46. package/dist/manifest/generator.js.map +1 -1
  47. package/dist/manifest/manager.d.ts +3 -3
  48. package/dist/manifest/manager.d.ts.map +1 -1
  49. package/dist/manifest/manager.js.map +1 -1
  50. package/dist/manifest/manifest-loader.d.ts +3 -2
  51. package/dist/manifest/manifest-loader.d.ts.map +1 -1
  52. package/dist/manifest/manifest-loader.js +3 -2
  53. package/dist/manifest/manifest-loader.js.map +1 -1
  54. package/dist/manifest/static-manifest.js +2 -2
  55. package/dist/manifest/static-manifest.js.map +1 -1
  56. package/dist/manifest/store.js +2 -2
  57. package/dist/manifest/test-manifest-stub.js +2 -2
  58. package/dist/manifest/test-manifest-stub.js.map +1 -1
  59. package/dist/manifest.json +2 -2
  60. package/dist/mcp-advisor/index.d.ts +1 -1
  61. package/dist/mcp-advisor/index.d.ts.map +1 -1
  62. package/dist/mcp-advisor/tools/get-object-config.d.ts.map +1 -1
  63. package/dist/mcp-advisor/types.d.ts +5 -5
  64. package/dist/mcp-advisor/types.d.ts.map +1 -1
  65. package/dist/migrations/differ.js.map +1 -1
  66. package/dist/scanner/manifest-generator.d.ts +11 -3
  67. package/dist/scanner/manifest-generator.d.ts.map +1 -1
  68. package/dist/scanner/manifest-generator.js +19 -15
  69. package/dist/scanner/manifest-generator.js.map +1 -1
  70. package/dist/scanner/types.d.ts +60 -6
  71. package/dist/scanner/types.d.ts.map +1 -1
  72. package/dist/schema/code-generator.d.ts.map +1 -1
  73. package/dist/schema/ddl/base-strategy.d.ts +2 -2
  74. package/dist/schema/ddl/base-strategy.d.ts.map +1 -1
  75. package/dist/schema/ddl/base-strategy.js.map +1 -1
  76. package/dist/schema/ddl/sqlite-strategy.d.ts +1 -1
  77. package/dist/schema/ddl/sqlite-strategy.d.ts.map +1 -1
  78. package/dist/schema/ddl/sqlite-strategy.js.map +1 -1
  79. package/dist/schema/ddl/types.d.ts +1 -1
  80. package/dist/schema/ddl/types.d.ts.map +1 -1
  81. package/dist/schema/generator.d.ts +27 -4
  82. package/dist/schema/generator.d.ts.map +1 -1
  83. package/dist/schema/generator.js +3 -2
  84. package/dist/schema/generator.js.map +1 -1
  85. package/dist/schema/override-system.d.ts +3 -3
  86. package/dist/schema/override-system.d.ts.map +1 -1
  87. package/dist/schema/schema-aggregator.d.ts.map +1 -1
  88. package/dist/schema/schema-manager.d.ts.map +1 -1
  89. package/dist/schema/schema-manager.js +12 -4
  90. package/dist/schema/schema-manager.js.map +1 -1
  91. package/dist/schema/types.d.ts +1 -1
  92. package/dist/schema/types.d.ts.map +1 -1
  93. package/dist/schema/utils.d.ts +6 -1
  94. package/dist/schema/utils.d.ts.map +1 -1
  95. package/dist/schema/utils.js +2 -1
  96. package/dist/schema/utils.js.map +1 -1
  97. package/dist/signals/sanitizer.d.ts +1 -1
  98. package/dist/signals/sanitizer.d.ts.map +1 -1
  99. package/dist/signals/sanitizer.js +12 -2
  100. package/dist/signals/sanitizer.js.map +1 -1
  101. package/dist/smrt-knowledge.json +4 -4
  102. package/dist/system/types.d.ts +2 -2
  103. package/dist/system/types.d.ts.map +1 -1
  104. package/dist/system-fields.d.ts +5 -43
  105. package/dist/system-fields.d.ts.map +1 -1
  106. package/dist/system-fields.js +2 -1
  107. package/dist/system-fields.js.map +1 -1
  108. package/dist/test-utils.d.ts +39 -13
  109. package/dist/test-utils.d.ts.map +1 -1
  110. package/dist/testing/database.d.ts.map +1 -1
  111. package/dist/testing/database.js.map +1 -1
  112. package/dist/tools/tool-executor.d.ts +19 -5
  113. package/dist/tools/tool-executor.d.ts.map +1 -1
  114. package/dist/tools/tool-executor.js +4 -2
  115. package/dist/tools/tool-executor.js.map +1 -1
  116. package/dist/tools/tool-generator.d.ts +8 -1
  117. package/dist/tools/tool-generator.d.ts.map +1 -1
  118. package/dist/tools/tool-generator.js +10 -11
  119. package/dist/tools/tool-generator.js.map +1 -1
  120. package/dist/utils/json.js.map +1 -1
  121. package/dist/utils.d.ts +16 -8
  122. package/dist/utils.d.ts.map +1 -1
  123. package/dist/utils.js.map +1 -1
  124. package/dist/vite-plugin/index.d.ts.map +1 -1
  125. package/dist/vite-plugin/index.js +9 -7
  126. package/dist/vite-plugin/index.js.map +1 -1
  127. package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -1
  128. package/dist/vite-plugin/sveltekit-generator.js +4 -3
  129. package/dist/vite-plugin/sveltekit-generator.js.map +1 -1
  130. package/dist/vite-plugin/templates/default-ui.ts +20 -6
  131. package/package.json +4 -4
@@ -4,6 +4,60 @@ import { SmartObjectConfig } from '../registry.js';
4
4
  * Example: "@happyvertical/smrt-core:Product"
5
5
  */
6
6
  export type QualifiedClassName = `${string}:${string}`;
7
+ /**
8
+ * Structured metadata attached to a field definition under `_meta`.
9
+ *
10
+ * Captures the field-helper options the scanner and schema/manifest
11
+ * generators read off a field (`sqlType`, `nullable`, `__tenancy`, …). The
12
+ * index signature keeps the bag open for forward-compatible keys without
13
+ * forcing every consumer through `any`.
14
+ */
15
+ export interface FieldMeta {
16
+ /** Explicit SQL type override (e.g. 'UUID') applied during schema generation. */
17
+ sqlType?: string;
18
+ /** Storage type for cross-package reference ids ('text' forces TEXT). */
19
+ idType?: 'uuid' | 'text';
20
+ /** When true, the column is nullable regardless of `required`. */
21
+ nullable?: boolean;
22
+ /** Mirror of the field's required flag captured at registration. */
23
+ required?: boolean;
24
+ /** Default value carried in metadata for runtime-registry generation. */
25
+ default?: unknown;
26
+ /** Marks the field as the primary key column. */
27
+ primaryKey?: boolean;
28
+ /** Marks the column as unique. */
29
+ unique?: boolean;
30
+ /** Column description carried into generated schema. */
31
+ description?: string;
32
+ /** Opt-in column/JSON-path indexing flag. */
33
+ indexed?: boolean;
34
+ /** Foreign-key delete action carried in metadata. */
35
+ onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT';
36
+ /** Excludes the field from persistence when true. */
37
+ transient?: boolean;
38
+ /** Numeric/length validation bounds and pattern. */
39
+ min?: number;
40
+ max?: number;
41
+ minLength?: number;
42
+ maxLength?: number;
43
+ /**
44
+ * Validation regex. A string source, a `RegExp`, or — when a manifest was
45
+ * JSON-serialized and a `RegExp` collapsed to `{}` — an opaque object. Read
46
+ * sites must narrow before accessing `.source`.
47
+ */
48
+ pattern?: unknown;
49
+ /** Tenancy metadata injected for tenant-scoped models. */
50
+ __tenancy?: {
51
+ isTenantIdField?: boolean;
52
+ [key: string]: unknown;
53
+ };
54
+ /** Report-aggregate metadata injected by the report normalizer. */
55
+ __report?: {
56
+ kind?: string;
57
+ [key: string]: unknown;
58
+ };
59
+ [key: string]: unknown;
60
+ }
7
61
  /**
8
62
  * Controls how a class is exposed in manifests and across packages
9
63
  */
@@ -11,14 +65,14 @@ export type SmrtVisibility = 'public' | 'internal' | 'test';
11
65
  export interface FieldDefinition {
12
66
  type: 'text' | 'decimal' | 'boolean' | 'integer' | 'datetime' | 'json' | 'foreignKey' | 'crossPackageRef' | 'oneToMany' | 'manyToMany' | 'meta';
13
67
  required?: boolean;
14
- default?: any;
68
+ default?: unknown;
15
69
  min?: number;
16
70
  max?: number;
17
71
  maxLength?: number;
18
72
  minLength?: number;
19
73
  related?: string;
20
74
  description?: string;
21
- _meta?: Record<string, any>;
75
+ _meta?: FieldMeta;
22
76
  transient?: boolean;
23
77
  /**
24
78
  * Sensitive value (API secrets, credentials, tax IDs). Still persisted, but
@@ -46,7 +100,7 @@ export interface MethodDefinition {
46
100
  name: string;
47
101
  type: string;
48
102
  optional: boolean;
49
- default?: any;
103
+ default?: unknown;
50
104
  }>;
51
105
  returnType: string;
52
106
  description?: string;
@@ -65,7 +119,7 @@ export interface ManifestColumnDefinition {
65
119
  referenceKind?: 'id' | 'foreignKey' | 'crossPackageRef' | 'tenantId';
66
120
  notNull?: boolean;
67
121
  unique?: boolean;
68
- default?: any;
122
+ default?: unknown;
69
123
  }
70
124
  /**
71
125
  * Pre-generated schema index definition for manifest
@@ -249,7 +303,7 @@ export interface SmartObjectDefinition {
249
303
  function: {
250
304
  name: string;
251
305
  description?: string;
252
- parameters?: Record<string, any>;
306
+ parameters?: Record<string, unknown>;
253
307
  };
254
308
  }>;
255
309
  /**
@@ -274,7 +328,7 @@ export interface SmartObjectDefinition {
274
328
  * Static properties captured from the class definition
275
329
  * Currently used for `static uiSlots` on Agent subclasses
276
330
  */
277
- staticProperties?: Record<string, any>;
331
+ staticProperties?: Record<string, unknown>;
278
332
  /**
279
333
  * Auto-generated agent manifest
280
334
  * Only present for classes with `agent` in their decorator config
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scanner/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,UAAU,GACV,MAAM,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,IAAI,EACA,MAAM,GACN,SAAS,GACT,SAAS,GACT,SAAS,GACT,UAAU,GACV,MAAM,GACN,YAAY,GACZ,iBAAiB,GACjB,WAAW,GACX,YAAY,GACZ,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,aAAa,CAAC,EAAE,IAAI,GAAG,YAAY,GAAG,iBAAiB,GAAG,UAAU,CAAC;IACrE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAClD,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAC1B,UAAU,GACV,KAAK,GACL,KAAK,GACL,WAAW,GACX,WAAW,GACX,SAAS,CAAC;AAEd;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,IAAI,EAAE,kBAAkB,CAAC;IACzB,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC7C,WAAW,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACxC,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,UAAU,EAAE,yBAAyB,EAAE,CAAC;CACzC;AAID,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAC;IAEnC;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAE5B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,eAAe,EAAE,iBAAiB,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SAClC,CAAC;KACH,CAAC,CAAC;IACH;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IAEnC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEvC;;;;OAIG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,MAAM,EAAE,KAAK,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,WAAW;IAC1B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scanner/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/schema/code-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,qBAAa,mBAAmB;IAC9B;;OAEG;IACH,oBAAoB,CAClB,UAAU,EAAE,qBAAqB,EACjC,MAAM,EAAE,gBAAgB,GACvB,MAAM;IAOT;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM;IASrE;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM;IAe1E;;OAEG;IACH,gBAAgB,CACd,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GACxC,MAAM;CAuBV"}
1
+ {"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/schema/code-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAIV,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAEpB,qBAAa,mBAAmB;IAC9B;;OAEG;IACH,oBAAoB,CAClB,UAAU,EAAE,qBAAqB,EACjC,MAAM,EAAE,gBAAgB,GACvB,MAAM;IAOT;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM;IASrE;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM;IAe1E;;OAEG;IACH,gBAAgB,CACd,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GACxC,MAAM;CAuBV"}
@@ -60,12 +60,12 @@ export declare abstract class BaseDDLStrategy implements DDLStrategy {
60
60
  * the SQL NULL keyword. Boolean rendering is bridged through
61
61
  * `formatBooleanDefault` so engine overrides (SQLite → 0/1) still apply.
62
62
  */
63
- formatDefaultValue(value: any, type: SQLDataType): string;
63
+ formatDefaultValue(value: unknown, type: SQLDataType): string;
64
64
  /**
65
65
  * Format boolean default
66
66
  * Override for engines that use INTEGER (SQLite)
67
67
  */
68
- protected formatBooleanDefault(value: any): string;
68
+ protected formatBooleanDefault(value: boolean): string;
69
69
  /**
70
70
  * Whether this engine supports triggers
71
71
  * Override in DuckDB strategy to return false
@@ -1 +1 @@
1
- {"version":3,"file":"base-strategy.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/base-strategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA4B9D;;;;;GAKG;AACH,8BAAsB,eAAgB,YAAW,WAAW;IAC1D,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAEzC;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM;IAuBrD;;;;OAIG;IACH,wBAAwB,CACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,gBAAgB,GAC1B,MAAM;IAuCT;;;OAGG;IACH,SAAS,CAAC,+BAA+B,CACvC,OAAO,EAAE,eAAe,EAAE,GACzB,MAAM,EAAE;IAsBX;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE;IAwDnD;;;;;OAKG;IACH,SAAS,CAAC,6BAA6B,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM;IAKT;;;OAGG;IACH,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE;IAsBpD;;;OAGG;IACH,SAAS,CAAC,wBAAwB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,MAAM;IAcT;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IA2BlC;;;;;;;;;OASG;IACH,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM;IASzD;;;OAGG;IACH,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAIlD;;;OAGG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;;OAGG;IACH,oBAAoB,IAAI,OAAO;CAGhC"}
1
+ {"version":3,"file":"base-strategy.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/base-strategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA4B9D;;;;;GAKG;AACH,8BAAsB,eAAgB,YAAW,WAAW;IAC1D,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAEzC;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM;IAuBrD;;;;OAIG;IACH,wBAAwB,CACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,gBAAgB,GAC1B,MAAM;IAuCT;;;OAGG;IACH,SAAS,CAAC,+BAA+B,CACvC,OAAO,EAAE,eAAe,EAAE,GACzB,MAAM,EAAE;IAsBX;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE;IAwDnD;;;;;OAKG;IACH,SAAS,CAAC,6BAA6B,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM;IAKT;;;OAGG;IACH,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE;IAsBpD;;;OAGG;IACH,SAAS,CAAC,wBAAwB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,MAAM;IAcT;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IA2BlC;;;;;;;;;OASG;IACH,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM;IAS7D;;;OAGG;IACH,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAItD;;;OAGG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;;OAGG;IACH,oBAAoB,IAAI,OAAO;CAGhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"base-strategy.js","sources":["../../../src/schema/ddl/base-strategy.ts"],"sourcesContent":["/**\n * Base DDL Strategy - Shared logic for all database engines\n *\n * Provides common DDL generation logic that engine-specific strategies\n * can override for their particular requirements.\n */\n\nimport { createLogger } from '@happyvertical/logger';\nimport {\n formatDefaultValue as formatDefaultValueShared,\n isSafeIdentifier,\n isSafeIdentifierPath,\n quoteIdentifier,\n quoteStringLiteral,\n} from '../sql-identifiers.js';\nimport type {\n ColumnDefinition,\n IndexDefinition,\n SchemaDefinition,\n SQLDataType,\n TriggerDefinition,\n} from '../types.js';\nimport type { DatabaseEngine, DDLStrategy } from './types.js';\n\nconst logger = createLogger({ level: 'info' });\n\n/**\n * Validate the column + JSON path used to build a JSON-path index expression.\n *\n * The path segment is embedded as a SQL string literal inside a dialect\n * function/operator (`json_extract(\"col\", '$.path')` / `\"col\"->>'path'`), and\n * the column as a delimited identifier. We escape both, but also reject paths\n * or columns that aren't simple (dotted) identifiers so a malformed `@meta`\n * field name can't smuggle structure into the expression even after escaping.\n * These names are developer-controlled build-time inputs, so an invalid one is\n * a programming error and throwing is the safest, loudest outcome.\n */\nfunction assertSafeJsonPathTarget(jsonColumn: string, path: string): void {\n if (!isSafeIdentifier(jsonColumn)) {\n throw new Error(\n `[DDL] Unsafe JSON-path index column \"${jsonColumn}\": must be a simple identifier`,\n );\n }\n if (!isSafeIdentifierPath(path)) {\n throw new Error(\n `[DDL] Unsafe JSON-path index path \"${path}\": must be a simple (dotted) identifier`,\n );\n }\n}\n\n/**\n * Abstract base class for DDL strategies\n *\n * Implements common DDL generation patterns. Engine-specific strategies\n * extend this class and override methods as needed.\n */\nexport abstract class BaseDDLStrategy implements DDLStrategy {\n abstract readonly engine: DatabaseEngine;\n\n /**\n * Generate CREATE TABLE statement\n */\n generateCreateTable(schema: SchemaDefinition): string {\n const { tableName, columns, indexes = [] } = schema;\n\n let sql = `CREATE TABLE IF NOT EXISTS ${quoteIdentifier(tableName)} (\\n`;\n\n // Generate column definitions\n const columnDefs: string[] = [];\n for (const [columnName, columnDef] of Object.entries(columns)) {\n columnDefs.push(this.generateColumnDefinition(columnName, columnDef));\n }\n\n // Add inline UNIQUE constraints for engines that require them\n if (this.requiresInlineUnique() && indexes.length > 0) {\n const uniqueConstraints = this.generateInlineUniqueConstraints(indexes);\n columnDefs.push(...uniqueConstraints);\n }\n\n sql += columnDefs.map((def) => ` ${def}`).join(',\\n');\n sql += '\\n);';\n\n return sql;\n }\n\n /**\n * Generate a single column definition\n *\n * Public so SchemaManager can reuse it for ALTER TABLE ADD COLUMN.\n */\n generateColumnDefinition(\n columnName: string,\n columnDef: ColumnDefinition,\n ): string {\n const parts: string[] = [\n quoteIdentifier(columnName),\n this.mapType(columnDef.type),\n ];\n\n // Primary key\n if (columnDef.primaryKey) {\n parts.push('PRIMARY KEY');\n }\n\n // NOT NULL (skip for primary key - it's implicit)\n if (columnDef.notNull && !columnDef.primaryKey) {\n parts.push('NOT NULL');\n }\n\n // UNIQUE (for single-column unique, not composite)\n // Skip if engine requires inline unique - those are handled separately\n if (columnDef.unique && !this.requiresInlineUnique()) {\n parts.push('UNIQUE');\n }\n\n // DEFAULT value\n if (columnDef.defaultValue !== undefined) {\n const formatted = this.formatDefaultValue(\n columnDef.defaultValue,\n columnDef.type,\n );\n parts.push(`DEFAULT ${formatted}`);\n }\n\n // CHECK constraint\n if (columnDef.check) {\n parts.push(`CHECK (${columnDef.check})`);\n }\n\n return parts.join(' ');\n }\n\n /**\n * Generate inline UNIQUE constraints for composite indexes\n * Used by engines that require inline UNIQUE for UPSERT to work (DuckDB)\n */\n protected generateInlineUniqueConstraints(\n indexes: IndexDefinition[],\n ): string[] {\n const constraints: string[] = [];\n\n if (!indexes || !Array.isArray(indexes)) {\n return constraints;\n }\n\n for (const index of indexes) {\n // Skip malformed index entries\n if (!index || !index.columns || !Array.isArray(index.columns)) {\n continue;\n }\n\n if (index.unique && index.columns.length > 0) {\n const columns = index.columns.map((c) => quoteIdentifier(c)).join(', ');\n constraints.push(`UNIQUE(${columns})`);\n }\n }\n\n return constraints;\n }\n\n /**\n * Generate CREATE INDEX statements\n * Override in engine-specific strategies if needed\n */\n generateIndexes(schema: SchemaDefinition): string[] {\n const { tableName, indexes = [] } = schema;\n const statements: string[] = [];\n\n if (!indexes || indexes.length === 0) {\n return statements;\n }\n\n for (const index of indexes) {\n // Narrow the jsonPath target up-front so the formatter call doesn't\n // need optional-chained args (and so the malformed-entry check has a\n // single source of truth).\n const jsonPath =\n index?.jsonPath?.column && index.jsonPath.path ? index.jsonPath : null;\n if (\n !index ||\n (!jsonPath &&\n (!index.columns ||\n !Array.isArray(index.columns) ||\n index.columns.length === 0))\n ) {\n logger.warn(`[DDL] Skipping malformed index: ${JSON.stringify(index)}`);\n continue;\n }\n\n // Skip UNIQUE indexes if engine requires them inline\n if (index.unique && this.requiresInlineUnique()) {\n continue;\n }\n\n const indexType = index.unique ? 'UNIQUE INDEX' : 'INDEX';\n\n // JSON-path indexes use a dialect-specific expression\n const target = jsonPath\n ? `(${this.formatJsonPathIndexExpression(\n jsonPath.column,\n jsonPath.path,\n )})`\n : index.columns.map((c) => quoteIdentifier(c)).join(', ');\n\n let sql = `CREATE ${indexType} IF NOT EXISTS ${quoteIdentifier(\n index.name,\n )} ON ${quoteIdentifier(tableName)} (${target})`;\n\n // Partial index condition\n if (index.where) {\n sql += ` WHERE ${index.where}`;\n }\n\n sql += ';';\n statements.push(sql);\n }\n\n return statements;\n }\n\n /**\n * Render the SQL expression used to index a JSON path inside a JSONB column.\n * Subclasses override for dialect-specific syntax.\n *\n * Default (ANSI-ish): `<jsonColumn>->>'<path>'` — works on Postgres.\n */\n protected formatJsonPathIndexExpression(\n jsonColumn: string,\n path: string,\n ): string {\n assertSafeJsonPathTarget(jsonColumn, path);\n return `${quoteIdentifier(jsonColumn)}->>${quoteStringLiteral(path)}`;\n }\n\n /**\n * Generate CREATE TRIGGER statements\n * Override in engine-specific strategies - DuckDB returns empty\n */\n generateTriggers(schema: SchemaDefinition): string[] {\n if (!this.supportsTriggers()) {\n return [];\n }\n\n const { tableName, triggers = [] } = schema;\n const statements: string[] = [];\n\n if (!triggers || triggers.length === 0) {\n return statements;\n }\n\n for (const trigger of triggers) {\n const sql = this.generateTriggerStatement(tableName, trigger);\n if (sql) {\n statements.push(sql);\n }\n }\n\n return statements;\n }\n\n /**\n * Generate a single trigger statement\n * Can be overridden for engine-specific trigger syntax\n */\n protected generateTriggerStatement(\n tableName: string,\n trigger: TriggerDefinition,\n ): string {\n // Default SQLite-style trigger syntax\n let sql = `CREATE TRIGGER IF NOT EXISTS ${quoteIdentifier(trigger.name)}\\n`;\n sql += `${trigger.when} ${trigger.event} ON ${quoteIdentifier(tableName)}\\n`;\n\n if (trigger.condition) {\n sql += `WHEN ${trigger.condition}\\n`;\n }\n\n sql += `BEGIN\\n${trigger.body}\\nEND;`;\n\n return sql;\n }\n\n /**\n * Map abstract SQL type to engine-specific type\n * Default implementation - override for engine-specific types\n */\n mapType(type: SQLDataType): string {\n // Default mapping works for most engines\n switch (type) {\n case 'TEXT':\n return 'TEXT';\n case 'INTEGER':\n return 'INTEGER';\n case 'REAL':\n return 'REAL';\n case 'BLOB':\n return 'BLOB';\n case 'BOOLEAN':\n return 'BOOLEAN';\n case 'JSON':\n return 'JSON';\n case 'TIMESTAMP':\n return 'TIMESTAMP';\n case 'UUID':\n // Fallback for engines without a native uuid type (e.g. SQLite):\n // store as TEXT. PostgreSQL/DuckDB override this with their native\n // uuid type. (R11)\n return 'TEXT';\n default:\n return 'TEXT';\n }\n }\n\n /**\n * Format default value for SQL.\n *\n * Delegates to the shared, injection-safe `formatDefaultValue`\n * (`schema/sql-identifiers.ts`) so every DDL path uses one set of rules:\n * an allowlist of SQL keyword/function defaults (not \"contains `(`\"),\n * type-driven literal quoting, and no folding of the string `\"null\"` into\n * the SQL NULL keyword. Boolean rendering is bridged through\n * `formatBooleanDefault` so engine overrides (SQLite → 0/1) still apply.\n */\n formatDefaultValue(value: any, type: SQLDataType): string {\n return formatDefaultValueShared(value, type, {\n booleanLiterals: [\n this.formatBooleanDefault(true),\n this.formatBooleanDefault(false),\n ],\n });\n }\n\n /**\n * Format boolean default\n * Override for engines that use INTEGER (SQLite)\n */\n protected formatBooleanDefault(value: any): string {\n return value ? 'TRUE' : 'FALSE';\n }\n\n /**\n * Whether this engine supports triggers\n * Override in DuckDB strategy to return false\n */\n supportsTriggers(): boolean {\n return true;\n }\n\n /**\n * Whether UNIQUE constraints must be inline for UPSERT\n * Override in DuckDB strategy to return true\n */\n requiresInlineUnique(): boolean {\n return false;\n }\n}\n"],"names":["formatDefaultValueShared"],"mappings":"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"}
1
+ {"version":3,"file":"base-strategy.js","sources":["../../../src/schema/ddl/base-strategy.ts"],"sourcesContent":["/**\n * Base DDL Strategy - Shared logic for all database engines\n *\n * Provides common DDL generation logic that engine-specific strategies\n * can override for their particular requirements.\n */\n\nimport { createLogger } from '@happyvertical/logger';\nimport {\n formatDefaultValue as formatDefaultValueShared,\n isSafeIdentifier,\n isSafeIdentifierPath,\n quoteIdentifier,\n quoteStringLiteral,\n} from '../sql-identifiers.js';\nimport type {\n ColumnDefinition,\n IndexDefinition,\n SchemaDefinition,\n SQLDataType,\n TriggerDefinition,\n} from '../types.js';\nimport type { DatabaseEngine, DDLStrategy } from './types.js';\n\nconst logger = createLogger({ level: 'info' });\n\n/**\n * Validate the column + JSON path used to build a JSON-path index expression.\n *\n * The path segment is embedded as a SQL string literal inside a dialect\n * function/operator (`json_extract(\"col\", '$.path')` / `\"col\"->>'path'`), and\n * the column as a delimited identifier. We escape both, but also reject paths\n * or columns that aren't simple (dotted) identifiers so a malformed `@meta`\n * field name can't smuggle structure into the expression even after escaping.\n * These names are developer-controlled build-time inputs, so an invalid one is\n * a programming error and throwing is the safest, loudest outcome.\n */\nfunction assertSafeJsonPathTarget(jsonColumn: string, path: string): void {\n if (!isSafeIdentifier(jsonColumn)) {\n throw new Error(\n `[DDL] Unsafe JSON-path index column \"${jsonColumn}\": must be a simple identifier`,\n );\n }\n if (!isSafeIdentifierPath(path)) {\n throw new Error(\n `[DDL] Unsafe JSON-path index path \"${path}\": must be a simple (dotted) identifier`,\n );\n }\n}\n\n/**\n * Abstract base class for DDL strategies\n *\n * Implements common DDL generation patterns. Engine-specific strategies\n * extend this class and override methods as needed.\n */\nexport abstract class BaseDDLStrategy implements DDLStrategy {\n abstract readonly engine: DatabaseEngine;\n\n /**\n * Generate CREATE TABLE statement\n */\n generateCreateTable(schema: SchemaDefinition): string {\n const { tableName, columns, indexes = [] } = schema;\n\n let sql = `CREATE TABLE IF NOT EXISTS ${quoteIdentifier(tableName)} (\\n`;\n\n // Generate column definitions\n const columnDefs: string[] = [];\n for (const [columnName, columnDef] of Object.entries(columns)) {\n columnDefs.push(this.generateColumnDefinition(columnName, columnDef));\n }\n\n // Add inline UNIQUE constraints for engines that require them\n if (this.requiresInlineUnique() && indexes.length > 0) {\n const uniqueConstraints = this.generateInlineUniqueConstraints(indexes);\n columnDefs.push(...uniqueConstraints);\n }\n\n sql += columnDefs.map((def) => ` ${def}`).join(',\\n');\n sql += '\\n);';\n\n return sql;\n }\n\n /**\n * Generate a single column definition\n *\n * Public so SchemaManager can reuse it for ALTER TABLE ADD COLUMN.\n */\n generateColumnDefinition(\n columnName: string,\n columnDef: ColumnDefinition,\n ): string {\n const parts: string[] = [\n quoteIdentifier(columnName),\n this.mapType(columnDef.type),\n ];\n\n // Primary key\n if (columnDef.primaryKey) {\n parts.push('PRIMARY KEY');\n }\n\n // NOT NULL (skip for primary key - it's implicit)\n if (columnDef.notNull && !columnDef.primaryKey) {\n parts.push('NOT NULL');\n }\n\n // UNIQUE (for single-column unique, not composite)\n // Skip if engine requires inline unique - those are handled separately\n if (columnDef.unique && !this.requiresInlineUnique()) {\n parts.push('UNIQUE');\n }\n\n // DEFAULT value\n if (columnDef.defaultValue !== undefined) {\n const formatted = this.formatDefaultValue(\n columnDef.defaultValue,\n columnDef.type,\n );\n parts.push(`DEFAULT ${formatted}`);\n }\n\n // CHECK constraint\n if (columnDef.check) {\n parts.push(`CHECK (${columnDef.check})`);\n }\n\n return parts.join(' ');\n }\n\n /**\n * Generate inline UNIQUE constraints for composite indexes\n * Used by engines that require inline UNIQUE for UPSERT to work (DuckDB)\n */\n protected generateInlineUniqueConstraints(\n indexes: IndexDefinition[],\n ): string[] {\n const constraints: string[] = [];\n\n if (!indexes || !Array.isArray(indexes)) {\n return constraints;\n }\n\n for (const index of indexes) {\n // Skip malformed index entries\n if (!index || !index.columns || !Array.isArray(index.columns)) {\n continue;\n }\n\n if (index.unique && index.columns.length > 0) {\n const columns = index.columns.map((c) => quoteIdentifier(c)).join(', ');\n constraints.push(`UNIQUE(${columns})`);\n }\n }\n\n return constraints;\n }\n\n /**\n * Generate CREATE INDEX statements\n * Override in engine-specific strategies if needed\n */\n generateIndexes(schema: SchemaDefinition): string[] {\n const { tableName, indexes = [] } = schema;\n const statements: string[] = [];\n\n if (!indexes || indexes.length === 0) {\n return statements;\n }\n\n for (const index of indexes) {\n // Narrow the jsonPath target up-front so the formatter call doesn't\n // need optional-chained args (and so the malformed-entry check has a\n // single source of truth).\n const jsonPath =\n index?.jsonPath?.column && index.jsonPath.path ? index.jsonPath : null;\n if (\n !index ||\n (!jsonPath &&\n (!index.columns ||\n !Array.isArray(index.columns) ||\n index.columns.length === 0))\n ) {\n logger.warn(`[DDL] Skipping malformed index: ${JSON.stringify(index)}`);\n continue;\n }\n\n // Skip UNIQUE indexes if engine requires them inline\n if (index.unique && this.requiresInlineUnique()) {\n continue;\n }\n\n const indexType = index.unique ? 'UNIQUE INDEX' : 'INDEX';\n\n // JSON-path indexes use a dialect-specific expression\n const target = jsonPath\n ? `(${this.formatJsonPathIndexExpression(\n jsonPath.column,\n jsonPath.path,\n )})`\n : index.columns.map((c) => quoteIdentifier(c)).join(', ');\n\n let sql = `CREATE ${indexType} IF NOT EXISTS ${quoteIdentifier(\n index.name,\n )} ON ${quoteIdentifier(tableName)} (${target})`;\n\n // Partial index condition\n if (index.where) {\n sql += ` WHERE ${index.where}`;\n }\n\n sql += ';';\n statements.push(sql);\n }\n\n return statements;\n }\n\n /**\n * Render the SQL expression used to index a JSON path inside a JSONB column.\n * Subclasses override for dialect-specific syntax.\n *\n * Default (ANSI-ish): `<jsonColumn>->>'<path>'` — works on Postgres.\n */\n protected formatJsonPathIndexExpression(\n jsonColumn: string,\n path: string,\n ): string {\n assertSafeJsonPathTarget(jsonColumn, path);\n return `${quoteIdentifier(jsonColumn)}->>${quoteStringLiteral(path)}`;\n }\n\n /**\n * Generate CREATE TRIGGER statements\n * Override in engine-specific strategies - DuckDB returns empty\n */\n generateTriggers(schema: SchemaDefinition): string[] {\n if (!this.supportsTriggers()) {\n return [];\n }\n\n const { tableName, triggers = [] } = schema;\n const statements: string[] = [];\n\n if (!triggers || triggers.length === 0) {\n return statements;\n }\n\n for (const trigger of triggers) {\n const sql = this.generateTriggerStatement(tableName, trigger);\n if (sql) {\n statements.push(sql);\n }\n }\n\n return statements;\n }\n\n /**\n * Generate a single trigger statement\n * Can be overridden for engine-specific trigger syntax\n */\n protected generateTriggerStatement(\n tableName: string,\n trigger: TriggerDefinition,\n ): string {\n // Default SQLite-style trigger syntax\n let sql = `CREATE TRIGGER IF NOT EXISTS ${quoteIdentifier(trigger.name)}\\n`;\n sql += `${trigger.when} ${trigger.event} ON ${quoteIdentifier(tableName)}\\n`;\n\n if (trigger.condition) {\n sql += `WHEN ${trigger.condition}\\n`;\n }\n\n sql += `BEGIN\\n${trigger.body}\\nEND;`;\n\n return sql;\n }\n\n /**\n * Map abstract SQL type to engine-specific type\n * Default implementation - override for engine-specific types\n */\n mapType(type: SQLDataType): string {\n // Default mapping works for most engines\n switch (type) {\n case 'TEXT':\n return 'TEXT';\n case 'INTEGER':\n return 'INTEGER';\n case 'REAL':\n return 'REAL';\n case 'BLOB':\n return 'BLOB';\n case 'BOOLEAN':\n return 'BOOLEAN';\n case 'JSON':\n return 'JSON';\n case 'TIMESTAMP':\n return 'TIMESTAMP';\n case 'UUID':\n // Fallback for engines without a native uuid type (e.g. SQLite):\n // store as TEXT. PostgreSQL/DuckDB override this with their native\n // uuid type. (R11)\n return 'TEXT';\n default:\n return 'TEXT';\n }\n }\n\n /**\n * Format default value for SQL.\n *\n * Delegates to the shared, injection-safe `formatDefaultValue`\n * (`schema/sql-identifiers.ts`) so every DDL path uses one set of rules:\n * an allowlist of SQL keyword/function defaults (not \"contains `(`\"),\n * type-driven literal quoting, and no folding of the string `\"null\"` into\n * the SQL NULL keyword. Boolean rendering is bridged through\n * `formatBooleanDefault` so engine overrides (SQLite → 0/1) still apply.\n */\n formatDefaultValue(value: unknown, type: SQLDataType): string {\n return formatDefaultValueShared(value, type, {\n booleanLiterals: [\n this.formatBooleanDefault(true),\n this.formatBooleanDefault(false),\n ],\n });\n }\n\n /**\n * Format boolean default\n * Override for engines that use INTEGER (SQLite)\n */\n protected formatBooleanDefault(value: boolean): string {\n return value ? 'TRUE' : 'FALSE';\n }\n\n /**\n * Whether this engine supports triggers\n * Override in DuckDB strategy to return false\n */\n supportsTriggers(): boolean {\n return true;\n }\n\n /**\n * Whether UNIQUE constraints must be inline for UPSERT\n * Override in DuckDB strategy to return true\n */\n requiresInlineUnique(): boolean {\n return false;\n }\n}\n"],"names":["formatDefaultValueShared"],"mappings":"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"}
@@ -24,7 +24,7 @@ export declare class SQLiteStrategy extends BaseDDLStrategy {
24
24
  * literals — so SQLite booleans render as 0/1 and no CAST expression is ever
25
25
  * emitted in a DEFAULT clause.
26
26
  */
27
- protected formatBooleanDefault(value: any): string;
27
+ protected formatBooleanDefault(value: boolean): string;
28
28
  /**
29
29
  * SQLite supports triggers
30
30
  */
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-strategy.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/sqlite-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,cAAe,SAAQ,eAAe;IACjD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAY;IAE3C;;;;OAIG;IACH,SAAS,CAAC,6BAA6B,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM;IAoBT;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IAalC;;;;;;;OAOG;IACH,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAIlD;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;;OAGG;IACH,oBAAoB,IAAI,OAAO;CAGhC"}
1
+ {"version":3,"file":"sqlite-strategy.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/sqlite-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,cAAe,SAAQ,eAAe;IACjD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAY;IAE3C;;;;OAIG;IACH,SAAS,CAAC,6BAA6B,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM;IAoBT;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IAalC;;;;;;;OAOG;IACH,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAItD;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;;OAGG;IACH,oBAAoB,IAAI,OAAO;CAGhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-strategy.js","sources":["../../../src/schema/ddl/sqlite-strategy.ts"],"sourcesContent":["/**\n * SQLite DDL Strategy\n *\n * SQLite-specific DDL generation with the following characteristics:\n * - No CAST expressions in DEFAULT values\n * - BOOLEAN stored as INTEGER (0/1)\n * - JSON stored as TEXT (with JSON1 extension functions)\n * - Supports triggers with SQLite syntax\n * - UNIQUE can be inline or separate indexes\n */\n\nimport {\n isSafeIdentifier,\n isSafeIdentifierPath,\n quoteIdentifier,\n quoteStringLiteral,\n} from '../sql-identifiers.js';\nimport type { SQLDataType } from '../types.js';\nimport { BaseDDLStrategy } from './base-strategy.js';\nimport type { DatabaseEngine } from './types.js';\n\nexport class SQLiteStrategy extends BaseDDLStrategy {\n readonly engine: DatabaseEngine = 'sqlite';\n\n /**\n * SQLite JSON-path index expression — uses the JSON1 `json_extract` function\n * since SQLite has no native `->>` operator pre-3.38 and we want broad\n * compatibility with hosted SQLite/libSQL variants.\n */\n protected formatJsonPathIndexExpression(\n jsonColumn: string,\n path: string,\n ): string {\n // Column must be a simple identifier (no dots); only the path may be dotted.\n // Mirrors the `assertSafeJsonPathTarget` file-level helper in\n // base-strategy.ts so this SQLite override doesn't silently accept dotted\n // columns that PG/DuckDB (and renderIndexTarget) reject.\n if (!isSafeIdentifier(jsonColumn)) {\n throw new Error(\n `[DDL] Unsafe JSON-path index column \"${jsonColumn}\": must be a simple identifier`,\n );\n }\n if (!isSafeIdentifierPath(path)) {\n throw new Error(\n `[DDL] Unsafe JSON-path index path \"${path}\": must be a simple (dotted) identifier`,\n );\n }\n return `json_extract(${quoteIdentifier(jsonColumn)}, ${quoteStringLiteral(\n `$.${path}`,\n )})`;\n }\n\n /**\n * Map types for SQLite\n * - BOOLEAN → INTEGER (SQLite uses 0/1)\n * - JSON → TEXT (SQLite stores JSON as text, uses JSON1 functions)\n * - TIMESTAMP → DATETIME (SQLite convention)\n */\n mapType(type: SQLDataType): string {\n switch (type) {\n case 'BOOLEAN':\n return 'INTEGER'; // SQLite uses 0/1 for booleans\n case 'JSON':\n return 'TEXT'; // SQLite stores JSON as TEXT\n case 'TIMESTAMP':\n return 'DATETIME'; // SQLite convention\n default:\n return super.mapType(type);\n }\n }\n\n /**\n * Format boolean as 0/1 for SQLite.\n *\n * `formatDefaultValue` is inherited from BaseDDLStrategy, which delegates to\n * the shared safe formatter and bridges this override in as the boolean\n * literals — so SQLite booleans render as 0/1 and no CAST expression is ever\n * emitted in a DEFAULT clause.\n */\n protected formatBooleanDefault(value: any): string {\n return value ? '1' : '0';\n }\n\n /**\n * SQLite supports triggers\n */\n supportsTriggers(): boolean {\n return true;\n }\n\n /**\n * SQLite doesn't require inline UNIQUE for UPSERT\n * Both inline and separate indexes work\n */\n requiresInlineUnique(): boolean {\n return false;\n }\n}\n"],"names":[],"mappings":";;AAqBO,MAAM,uBAAuB,gBAAgB;AAAA,EACzC,SAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB,8BACR,YACA,MACQ;AAKR,QAAI,CAAC,iBAAiB,UAAU,GAAG;AACjC,YAAM,IAAI;AAAA,QACR,wCAAwC,UAAU;AAAA,MAAA;AAAA,IAEtD;AACA,QAAI,CAAC,qBAAqB,IAAI,GAAG;AAC/B,YAAM,IAAI;AAAA,QACR,sCAAsC,IAAI;AAAA,MAAA;AAAA,IAE9C;AACA,WAAO,gBAAgB,gBAAgB,UAAU,CAAC,KAAK;AAAA,MACrD,KAAK,IAAI;AAAA,IAAA,CACV;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,MAA2B;AACjC,YAAQ,MAAA;AAAA,MACN,KAAK;AACH,eAAO;AAAA;AAAA,MACT,KAAK;AACH,eAAO;AAAA;AAAA,MACT,KAAK;AACH,eAAO;AAAA;AAAA,MACT;AACE,eAAO,MAAM,QAAQ,IAAI;AAAA,IAAA;AAAA,EAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUU,qBAAqB,OAAoB;AACjD,WAAO,QAAQ,MAAM;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,mBAA4B;AAC1B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,uBAAgC;AAC9B,WAAO;AAAA,EACT;AACF;"}
1
+ {"version":3,"file":"sqlite-strategy.js","sources":["../../../src/schema/ddl/sqlite-strategy.ts"],"sourcesContent":["/**\n * SQLite DDL Strategy\n *\n * SQLite-specific DDL generation with the following characteristics:\n * - No CAST expressions in DEFAULT values\n * - BOOLEAN stored as INTEGER (0/1)\n * - JSON stored as TEXT (with JSON1 extension functions)\n * - Supports triggers with SQLite syntax\n * - UNIQUE can be inline or separate indexes\n */\n\nimport {\n isSafeIdentifier,\n isSafeIdentifierPath,\n quoteIdentifier,\n quoteStringLiteral,\n} from '../sql-identifiers.js';\nimport type { SQLDataType } from '../types.js';\nimport { BaseDDLStrategy } from './base-strategy.js';\nimport type { DatabaseEngine } from './types.js';\n\nexport class SQLiteStrategy extends BaseDDLStrategy {\n readonly engine: DatabaseEngine = 'sqlite';\n\n /**\n * SQLite JSON-path index expression — uses the JSON1 `json_extract` function\n * since SQLite has no native `->>` operator pre-3.38 and we want broad\n * compatibility with hosted SQLite/libSQL variants.\n */\n protected formatJsonPathIndexExpression(\n jsonColumn: string,\n path: string,\n ): string {\n // Column must be a simple identifier (no dots); only the path may be dotted.\n // Mirrors the `assertSafeJsonPathTarget` file-level helper in\n // base-strategy.ts so this SQLite override doesn't silently accept dotted\n // columns that PG/DuckDB (and renderIndexTarget) reject.\n if (!isSafeIdentifier(jsonColumn)) {\n throw new Error(\n `[DDL] Unsafe JSON-path index column \"${jsonColumn}\": must be a simple identifier`,\n );\n }\n if (!isSafeIdentifierPath(path)) {\n throw new Error(\n `[DDL] Unsafe JSON-path index path \"${path}\": must be a simple (dotted) identifier`,\n );\n }\n return `json_extract(${quoteIdentifier(jsonColumn)}, ${quoteStringLiteral(\n `$.${path}`,\n )})`;\n }\n\n /**\n * Map types for SQLite\n * - BOOLEAN → INTEGER (SQLite uses 0/1)\n * - JSON → TEXT (SQLite stores JSON as text, uses JSON1 functions)\n * - TIMESTAMP → DATETIME (SQLite convention)\n */\n mapType(type: SQLDataType): string {\n switch (type) {\n case 'BOOLEAN':\n return 'INTEGER'; // SQLite uses 0/1 for booleans\n case 'JSON':\n return 'TEXT'; // SQLite stores JSON as TEXT\n case 'TIMESTAMP':\n return 'DATETIME'; // SQLite convention\n default:\n return super.mapType(type);\n }\n }\n\n /**\n * Format boolean as 0/1 for SQLite.\n *\n * `formatDefaultValue` is inherited from BaseDDLStrategy, which delegates to\n * the shared safe formatter and bridges this override in as the boolean\n * literals — so SQLite booleans render as 0/1 and no CAST expression is ever\n * emitted in a DEFAULT clause.\n */\n protected formatBooleanDefault(value: boolean): string {\n return value ? '1' : '0';\n }\n\n /**\n * SQLite supports triggers\n */\n supportsTriggers(): boolean {\n return true;\n }\n\n /**\n * SQLite doesn't require inline UNIQUE for UPSERT\n * Both inline and separate indexes work\n */\n requiresInlineUnique(): boolean {\n return false;\n }\n}\n"],"names":[],"mappings":";;AAqBO,MAAM,uBAAuB,gBAAgB;AAAA,EACzC,SAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB,8BACR,YACA,MACQ;AAKR,QAAI,CAAC,iBAAiB,UAAU,GAAG;AACjC,YAAM,IAAI;AAAA,QACR,wCAAwC,UAAU;AAAA,MAAA;AAAA,IAEtD;AACA,QAAI,CAAC,qBAAqB,IAAI,GAAG;AAC/B,YAAM,IAAI;AAAA,QACR,sCAAsC,IAAI;AAAA,MAAA;AAAA,IAE9C;AACA,WAAO,gBAAgB,gBAAgB,UAAU,CAAC,KAAK;AAAA,MACrD,KAAK,IAAI;AAAA,IAAA,CACV;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,MAA2B;AACjC,YAAQ,MAAA;AAAA,MACN,KAAK;AACH,eAAO;AAAA;AAAA,MACT,KAAK;AACH,eAAO;AAAA;AAAA,MACT,KAAK;AACH,eAAO;AAAA;AAAA,MACT;AACE,eAAO,MAAM,QAAQ,IAAI;AAAA,IAAA;AAAA,EAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUU,qBAAqB,OAAwB;AACrD,WAAO,QAAQ,MAAM;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,mBAA4B;AAC1B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,uBAAgC;AAC9B,WAAO;AAAA,EACT;AACF;"}
@@ -71,7 +71,7 @@ export interface DDLStrategy {
71
71
  * @param type - The column type
72
72
  * @returns Formatted default value SQL
73
73
  */
74
- formatDefaultValue(value: any, type: SQLDataType): string;
74
+ formatDefaultValue(value: unknown, type: SQLDataType): string;
75
75
  /**
76
76
  * Whether this engine supports database triggers
77
77
  * @returns true if triggers are supported
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAEhC;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAAC;IAEtD;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAAC;IAEpD;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAAC;IAErD;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAEnC;;;;;;;OAOG;IACH,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAE1D;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC;IAE5B;;;;OAIG;IACH,oBAAoB,IAAI,OAAO,CAAC;IAEhC;;;;;OAKG;IACH,wBAAwB,CACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,UAAU,EAAE,gBAAgB,GAC7C,MAAM,CAAC;CACX;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,mCAAmC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6CAA6C;IAC7C,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAEhC;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAAC;IAEtD;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAAC;IAEpD;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAAC;IAErD;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAEnC;;;;;;;OAOG;IACH,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAE9D;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC;IAE5B;;;;OAIG;IACH,oBAAoB,IAAI,OAAO,CAAC;IAEhC;;;;;OAKG;IACH,wBAAwB,CACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,UAAU,EAAE,gBAAgB,GAC7C,MAAM,CAAC;CACX;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,mCAAmC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6CAA6C;IAC7C,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC"}
@@ -1,6 +1,29 @@
1
- import { FieldDefinition, ManifestSchema, SmartObjectDefinition, SmartObjectManifest } from '../scanner/types.js';
1
+ import { FieldDefinition, FieldMeta, ManifestSchema, SmartObjectDefinition, SmartObjectManifest } from '../scanner/types.js';
2
2
  import { DatabaseEngine } from './ddl/types.js';
3
3
  import { SchemaDefinition } from './types.js';
4
+ /**
5
+ * Structural shape of a field as read from either the build-time manifest
6
+ * (`FieldDefinition`) or the runtime ObjectRegistry (`getAllFields()` returns
7
+ * `Map<string, any>` upstream). The schema generator consumes both through a
8
+ * single set of property reads, so this interface captures every field key the
9
+ * generator touches without coupling to either source's exact type.
10
+ *
11
+ * `_meta` carries the structured field-helper metadata (`FieldMeta`); a few
12
+ * legacy fields (`indexed`, `idType`, `__tenancy`) may also appear at the top
13
+ * level depending on the source, so they are declared here too.
14
+ */
15
+ interface RegistryField {
16
+ type?: FieldDefinition['type'];
17
+ related?: string;
18
+ required?: boolean;
19
+ default?: unknown;
20
+ description?: string;
21
+ transient?: boolean;
22
+ indexed?: boolean;
23
+ idType?: 'uuid' | 'text';
24
+ __tenancy?: FieldMeta['__tenancy'];
25
+ _meta?: FieldMeta;
26
+ }
4
27
  type SchemaGeneratorConfig = {
5
28
  conflictColumns?: string[];
6
29
  idType?: 'uuid' | 'text';
@@ -9,7 +32,7 @@ type SchemaGeneratorConfig = {
9
32
  idType?: 'uuid' | 'text';
10
33
  };
11
34
  getDescendants(baseClassName: string): string[];
12
- getAllFields(className: string): Promise<Map<string, any>>;
35
+ getAllFields(className: string): Promise<Map<string, RegistryField>>;
13
36
  getSTIBase?(className: string): string | null;
14
37
  };
15
38
  };
@@ -75,7 +98,7 @@ export declare class SchemaGenerator {
75
98
  * @param fields - Map of Field definitions from ObjectRegistry
76
99
  * @returns Schema definition object
77
100
  */
78
- generateSchemaFromRegistry(className: string, tableName: string, fields: Map<string, any>, config?: SchemaGeneratorConfig): SchemaDefinition;
101
+ generateSchemaFromRegistry(className: string, tableName: string, fields: Map<string, RegistryField>, config?: SchemaGeneratorConfig): SchemaDefinition;
79
102
  /**
80
103
  * Generate STI (Single Table Inheritance) schema from ObjectRegistry fields
81
104
  *
@@ -108,7 +131,7 @@ export declare class SchemaGenerator {
108
131
  * // - _meta_data JSON (flexible storage)
109
132
  * ```
110
133
  */
111
- generateSTISchemaFromRegistry(baseClassName: string, tableName: string, _fields: Map<string, any>, config?: SchemaGeneratorConfig): Promise<SchemaDefinition>;
134
+ generateSTISchemaFromRegistry(baseClassName: string, tableName: string, _fields: Map<string, RegistryField>, config?: SchemaGeneratorConfig): Promise<SchemaDefinition>;
112
135
  /**
113
136
  * Generate STI schema from manifest data (build-time, no runtime registry)
114
137
  *
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/schema/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/schema/generator.ts"],"names":[],"mappings":"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"}
@@ -774,7 +774,8 @@ class SchemaGenerator {
774
774
  if (field.transient || field._meta?.transient) {
775
775
  continue;
776
776
  }
777
- if (field.type === "meta" && (field.indexed === true || field._meta?.indexed === true)) {
777
+ const indexedField = field;
778
+ if (field.type === "meta" && (indexedField.indexed === true || field._meta?.indexed === true)) {
778
779
  indexedMetaFields.add(fieldName);
779
780
  }
780
781
  if (fieldName === "id" || fieldName === "slug" || fieldName === "context" || fieldName === "created_at" || fieldName === "createdAt" || fieldName === "updated_at" || fieldName === "updatedAt") {
@@ -803,7 +804,7 @@ class SchemaGenerator {
803
804
  if (field.type === "foreignKey") {
804
805
  fkColumnsByClass.get(className)?.add(columnName);
805
806
  }
806
- const isIndexed = field.indexed === true || field._meta?.indexed === true;
807
+ const isIndexed = indexedField.indexed === true || field._meta?.indexed === true;
807
808
  if (isIndexed && field.type !== "foreignKey") {
808
809
  indexedStiColumns.add(columnName);
809
810
  }