@rudderjs/database 1.1.0 → 1.2.1

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 (126) hide show
  1. package/README.md +70 -0
  2. package/dist/db.d.ts +21 -3
  3. package/dist/db.d.ts.map +1 -1
  4. package/dist/db.js +27 -5
  5. package/dist/db.js.map +1 -1
  6. package/dist/index.d.ts +14 -2
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +23 -4
  9. package/dist/index.js.map +1 -1
  10. package/dist/native/adapter.d.ts +202 -0
  11. package/dist/native/adapter.d.ts.map +1 -0
  12. package/dist/native/adapter.js +440 -0
  13. package/dist/native/adapter.js.map +1 -0
  14. package/dist/native/compiler.d.ts +371 -0
  15. package/dist/native/compiler.d.ts.map +1 -0
  16. package/dist/native/compiler.js +978 -0
  17. package/dist/native/compiler.js.map +1 -0
  18. package/dist/native/dialect-mysql.d.ts +26 -0
  19. package/dist/native/dialect-mysql.d.ts.map +1 -0
  20. package/dist/native/dialect-mysql.js +188 -0
  21. package/dist/native/dialect-mysql.js.map +1 -0
  22. package/dist/native/dialect-pg.d.ts +26 -0
  23. package/dist/native/dialect-pg.d.ts.map +1 -0
  24. package/dist/native/dialect-pg.js +192 -0
  25. package/dist/native/dialect-pg.js.map +1 -0
  26. package/dist/native/dialect.d.ts +255 -0
  27. package/dist/native/dialect.d.ts.map +1 -0
  28. package/dist/native/dialect.js +237 -0
  29. package/dist/native/dialect.js.map +1 -0
  30. package/dist/native/driver.d.ts +37 -0
  31. package/dist/native/driver.d.ts.map +1 -0
  32. package/dist/native/driver.js +19 -0
  33. package/dist/native/driver.js.map +1 -0
  34. package/dist/native/drivers/better-sqlite3.d.ts +56 -0
  35. package/dist/native/drivers/better-sqlite3.d.ts.map +1 -0
  36. package/dist/native/drivers/better-sqlite3.js +171 -0
  37. package/dist/native/drivers/better-sqlite3.js.map +1 -0
  38. package/dist/native/drivers/mysql.d.ts +30 -0
  39. package/dist/native/drivers/mysql.d.ts.map +1 -0
  40. package/dist/native/drivers/mysql.js +176 -0
  41. package/dist/native/drivers/mysql.js.map +1 -0
  42. package/dist/native/drivers/postgres.d.ts +57 -0
  43. package/dist/native/drivers/postgres.d.ts.map +1 -0
  44. package/dist/native/drivers/postgres.js +155 -0
  45. package/dist/native/drivers/postgres.js.map +1 -0
  46. package/dist/native/errors.d.ts +43 -0
  47. package/dist/native/errors.d.ts.map +1 -0
  48. package/dist/native/errors.js +64 -0
  49. package/dist/native/errors.js.map +1 -0
  50. package/dist/native/index.d.ts +27 -0
  51. package/dist/native/index.d.ts.map +1 -0
  52. package/dist/native/index.js +55 -0
  53. package/dist/native/index.js.map +1 -0
  54. package/dist/native/isolation.d.ts +14 -0
  55. package/dist/native/isolation.d.ts.map +1 -0
  56. package/dist/native/isolation.js +37 -0
  57. package/dist/native/isolation.js.map +1 -0
  58. package/dist/native/query-builder.d.ts +303 -0
  59. package/dist/native/query-builder.d.ts.map +1 -0
  60. package/dist/native/query-builder.js +984 -0
  61. package/dist/native/query-builder.js.map +1 -0
  62. package/dist/native/replica-picker.d.ts +22 -0
  63. package/dist/native/replica-picker.d.ts.map +1 -0
  64. package/dist/native/replica-picker.js +65 -0
  65. package/dist/native/replica-picker.js.map +1 -0
  66. package/dist/native/schema/alter-blueprint.d.ts +37 -0
  67. package/dist/native/schema/alter-blueprint.d.ts.map +1 -0
  68. package/dist/native/schema/alter-blueprint.js +56 -0
  69. package/dist/native/schema/alter-blueprint.js.map +1 -0
  70. package/dist/native/schema/blueprint.d.ts +151 -0
  71. package/dist/native/schema/blueprint.d.ts.map +1 -0
  72. package/dist/native/schema/blueprint.js +286 -0
  73. package/dist/native/schema/blueprint.js.map +1 -0
  74. package/dist/native/schema/column.d.ts +168 -0
  75. package/dist/native/schema/column.d.ts.map +1 -0
  76. package/dist/native/schema/column.js +190 -0
  77. package/dist/native/schema/column.js.map +1 -0
  78. package/dist/native/schema/ddl-compiler.d.ts +34 -0
  79. package/dist/native/schema/ddl-compiler.d.ts.map +1 -0
  80. package/dist/native/schema/ddl-compiler.js +352 -0
  81. package/dist/native/schema/ddl-compiler.js.map +1 -0
  82. package/dist/native/schema/inspect.d.ts +67 -0
  83. package/dist/native/schema/inspect.d.ts.map +1 -0
  84. package/dist/native/schema/inspect.js +312 -0
  85. package/dist/native/schema/inspect.js.map +1 -0
  86. package/dist/native/schema/introspect.d.ts +34 -0
  87. package/dist/native/schema/introspect.d.ts.map +1 -0
  88. package/dist/native/schema/introspect.js +101 -0
  89. package/dist/native/schema/introspect.js.map +1 -0
  90. package/dist/native/schema/migration.d.ts +8 -0
  91. package/dist/native/schema/migration.d.ts.map +1 -0
  92. package/dist/native/schema/migration.js +19 -0
  93. package/dist/native/schema/migration.js.map +1 -0
  94. package/dist/native/schema/migrator.d.ts +144 -0
  95. package/dist/native/schema/migrator.d.ts.map +1 -0
  96. package/dist/native/schema/migrator.js +240 -0
  97. package/dist/native/schema/migrator.js.map +1 -0
  98. package/dist/native/schema/rebuild.d.ts +11 -0
  99. package/dist/native/schema/rebuild.d.ts.map +1 -0
  100. package/dist/native/schema/rebuild.js +92 -0
  101. package/dist/native/schema/rebuild.js.map +1 -0
  102. package/dist/native/schema/schema-builder.d.ts +46 -0
  103. package/dist/native/schema/schema-builder.d.ts.map +1 -0
  104. package/dist/native/schema/schema-builder.js +153 -0
  105. package/dist/native/schema/schema-builder.js.map +1 -0
  106. package/dist/native/schema/schema-facade.d.ts +63 -0
  107. package/dist/native/schema/schema-facade.d.ts.map +1 -0
  108. package/dist/native/schema/schema-facade.js +124 -0
  109. package/dist/native/schema/schema-facade.js.map +1 -0
  110. package/dist/native/schema/schema-types.d.ts +27 -0
  111. package/dist/native/schema/schema-types.d.ts.map +1 -0
  112. package/dist/native/schema/schema-types.js +52 -0
  113. package/dist/native/schema/schema-types.js.map +1 -0
  114. package/dist/native/schema/types-generator.d.ts +73 -0
  115. package/dist/native/schema/types-generator.d.ts.map +1 -0
  116. package/dist/native/schema/types-generator.js +181 -0
  117. package/dist/native/schema/types-generator.js.map +1 -0
  118. package/dist/registry-bridge.d.ts +24 -4
  119. package/dist/registry-bridge.d.ts.map +1 -1
  120. package/dist/registry-bridge.js +20 -0
  121. package/dist/registry-bridge.js.map +1 -1
  122. package/dist/sticky.d.ts +22 -0
  123. package/dist/sticky.d.ts.map +1 -0
  124. package/dist/sticky.js +61 -0
  125. package/dist/sticky.js.map +1 -0
  126. package/package.json +32 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column.js","sourceRoot":"","sources":["../../../src/native/schema/column.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,2EAA2E;AAC3E,0EAA0E;AAC1E,EAAE;AACF,wEAAwE;AACxE,gFAAgF;AAChF,8EAA8E;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AA+B7C,MAAM,UAAU,GAAqC;IACnD,SAAS,EAAI,SAAS;IACtB,UAAU,EAAG,UAAU;IACvB,UAAU,EAAG,UAAU;IACvB,SAAS,EAAI,UAAU;IACvB,WAAW,EAAE,WAAW;IACxB,UAAU,EAAG,WAAW;CACzB,CAAA;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;IAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,cAAc,CACtB,0BAA0B,EAC1B,oDAAoD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI;YAC7E,0EAA0E,CAC3E,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;+BAE+B;AAC/B,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,IAAI,IAAI,GAAG,MAAM,CAAA;IACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;SAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACvD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAA;AAC/C,CAAC;AAED,SAAS,SAAS,CAAC,OAA0B;IAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;AACrD,CAAC;AA8FD;;;;GAIG;AACH,MAAM,OAAO,aAAa;IACH;IAArB,YAAqB,GAAqB;QAArB,QAAG,GAAH,GAAG,CAAkB;IAAG,CAAC;IAE9C,yEAAyE;IACzE,QAAQ,CAAC,KAAK,GAAG,IAAI;QACnB,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,sEAAsE;IACtE,OAAO,CAAC,KAAc;QACpB,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAA;QAC1B,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,CAAA;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,qEAAqE;IACrE,UAAU;QACR,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAA;QAC1B,OAAO,IAAI,CAAA;IACb,CAAC;IAED;qFACiF;IACjF,kBAAkB;QAChB,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAA;QAClC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;mEAC+D;IAC/D,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;QACvB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;uCACmC;IACnC,KAAK,CAAC,MAAc;QAClB,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAA;QACvB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,gFAAgF;IAChF,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,uDAAuD;IACvD,OAAO;QACL,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;QACvB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,2CAA2C;IAC3C,MAAM;QACJ,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,iDAAiD;IACjD,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,6EAA6E;IAC7E,QAAQ;QACN,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAA;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;wEACoE;IACpE,MAAM;QACJ,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,oCAAoC;IAEpC;;;;;OAKG;IACH,WAAW,CAAC,KAAc,EAAE,MAAM,GAAG,IAAI;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QAC5B,EAAE,CAAC,EAAE,GAAG,KAAK,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACjD,EAAE,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,CAAA;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;iEAC6D;IAC7D,UAAU,CAAC,OAA0B;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;QACjD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,yEAAyE;IACzE,EAAE,CAAC,KAAa;QACd,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,KAAK,CAAA;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,4DAA4D;IAC5D,QAAQ,CAAC,MAA6B;QACpC,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAA;QAC9D,OAAO,IAAI,CAAA;IACb,CAAC;IAED,4DAA4D;IAC5D,QAAQ,CAAC,MAA6B;QACpC,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAA;QAC9D,OAAO,IAAI,CAAA;IACb,CAAC;IAED,uDAAuD;IACvD,6BAA6B;IAC7B,eAAe,KAAW,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC;IAC3D,8BAA8B;IAC9B,gBAAgB,KAAW,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA,CAAC,CAAC;IAC7D,iEAAiE;IACjE,YAAY,KAAW,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA,CAAC,CAAC;IACzD,6BAA6B;IAC7B,eAAe,KAAW,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC;IAE3D;kEAC8D;IACtD,UAAU;QAChB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IAC3F,CAAC;CACF;AAED,yEAAyE;AACzE,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,IAAgB,EAChB,QAAmC,EAAE;IAErC,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,QAAQ,EAAO,KAAK;QACpB,UAAU,EAAK,KAAK;QACpB,UAAU,EAAK,KAAK;QACpB,kBAAkB,EAAE,KAAK;QACzB,OAAO,EAAQ,KAAK;QACpB,MAAM,EAAS,KAAK;QACpB,KAAK,EAAU,KAAK;QACpB,QAAQ,EAAO,KAAK;QACpB,aAAa,EAAE,KAAK;QACpB,MAAM,EAAS,KAAK;QACpB,GAAG,KAAK;KACT,CAAA;AACH,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { type Dialect } from '../dialect.js';
2
+ import type { CompiledQuery } from '../compiler.js';
3
+ import type { Blueprint } from './blueprint.js';
4
+ import type { AlterBlueprint } from './alter-blueprint.js';
5
+ import type { ColumnDefinition } from './column.js';
6
+ /** A column's `"name" TYPE [NOT NULL] [DEFAULT …]` spec, no inline primary key.
7
+ * Exported for the table-rebuild path (7.4b), which assembles a shadow
8
+ * `CREATE TABLE` from a mix of changed columns and preserved (introspected) ones. */
9
+ export declare function compileColumnSpec(column: ColumnDefinition, dialect: Dialect): string;
10
+ /**
11
+ * Compile `Schema.create(...)` to a `CREATE TABLE` plus any `CREATE INDEX`
12
+ * statements (in that order). Each is a {@link CompiledQuery} with empty
13
+ * bindings — DDL carries no bound parameters.
14
+ */
15
+ export declare function compileCreateTable(blueprint: Blueprint, dialect: Dialect): CompiledQuery[];
16
+ /** Compile `Schema.drop(...)` / `Schema.dropIfExists(...)`. */
17
+ export declare function compileDropTable(table: string, opts: {
18
+ ifExists?: boolean;
19
+ }, dialect: Dialect): CompiledQuery;
20
+ /** Compile `Schema.rename(from, to)`. */
21
+ export declare function compileRenameTable(from: string, to: string, dialect: Dialect): CompiledQuery;
22
+ /**
23
+ * Compile `Schema.table(...)` to the `ALTER TABLE` / `CREATE INDEX` / `DROP
24
+ * INDEX` statements its intents require, in dependency order: rename columns →
25
+ * add columns → add indexes → drop indexes → drop columns. Each is emitted as a
26
+ * separate statement (SQLite has no multi-clause `ALTER TABLE`).
27
+ *
28
+ * SQLite ADD COLUMN can't add a PRIMARY KEY column, and a NOT NULL column must
29
+ * carry a default — both are rejected here with a clear message rather than
30
+ * letting SQLite throw a cryptic one. Changing an existing column's type
31
+ * (`.change()`) needs the table-rebuild dance and is deferred to 7.4b.
32
+ */
33
+ export declare function compileAlterTable(blueprint: AlterBlueprint, dialect: Dialect): CompiledQuery[];
34
+ //# sourceMappingURL=ddl-compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ddl-compiler.d.ts","sourceRoot":"","sources":["../../../src/native/schema/ddl-compiler.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,gBAAgB,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAA0C,MAAM,aAAa,CAAA;AAyE3F;;sFAEsF;AACtF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAEpF;AA8ED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,EAAE,CA2C1F;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,CAK7G;AAED,yCAAyC;AACzC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,CAE5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,EAAE,CAuI9F"}
@@ -0,0 +1,352 @@
1
+ // ─── DDL compiler (pure) ───────────────────────────────────
2
+ //
3
+ // PURE: turns a {@link Blueprint} into `CREATE TABLE` (+ `CREATE INDEX`)
4
+ // statements through a {@link Dialect}. No driver, no `node:`, no I/O — the
5
+ // portable half of the schema builder, the DDL counterpart to the read/write
6
+ // query compiler. The dialect owns per-flavor column *types*
7
+ // (`dialect.columnTypeSql`); this module owns statement *structure* (column
8
+ // lists, shared modifiers, table constraints, indexes) so it's identical across
9
+ // SQLite / Postgres / MySQL.
10
+ //
11
+ // Identifiers (table / column / index names) are validated + quoted by the
12
+ // dialect — the security gate (parent plan rule 2). DDL `DEFAULT` values are the
13
+ // one exception to "always bind": most databases reject bound parameters in DDL,
14
+ // so defaults are rendered as escaped literals. That's safe here because
15
+ // migration authors — not end users — write them.
16
+ import { Expression } from '@rudderjs/contracts';
17
+ import { quoteSqlString } from '../dialect.js';
18
+ import { NativeOrmError, NativeNotImplementedError } from '../errors.js';
19
+ /** Render a column's DEFAULT value as a SQL literal (DDL can't bind). Only the
20
+ * literal-able types are allowed; a Date/object/function default throws so the
21
+ * failure is at migrate time, not a silent `[object Object]` in the schema. An
22
+ * `Expression` (`raw('…')`) is spliced verbatim — the escape hatch for function
23
+ * defaults like `raw('gen_random_uuid()')`. */
24
+ function defaultLiteral(value, dialect) {
25
+ if (value === null)
26
+ return 'NULL';
27
+ // raw(...) default — splice the literal fragment, no quoting (it carries no
28
+ // bindings; DDL can't bind anyway).
29
+ if (value instanceof Expression)
30
+ return String(value.getValue());
31
+ switch (typeof value) {
32
+ case 'boolean': return dialect.booleanLiteral(value);
33
+ case 'bigint': return value.toString();
34
+ case 'number':
35
+ if (!Number.isFinite(value)) {
36
+ throw new NativeOrmError('NATIVE_DDL_BAD_DEFAULT', `[RudderJS ORM native] Non-finite numeric default ${String(value)} is not a valid column default.`);
37
+ }
38
+ return String(value);
39
+ case 'string': return `'${value.replace(/'/g, "''")}'`;
40
+ default:
41
+ throw new NativeOrmError('NATIVE_DDL_BAD_DEFAULT', `[RudderJS ORM native] Unsupported column default of type "${typeof value}". ` +
42
+ `Column defaults must be a string, number, bigint, boolean, or null ` +
43
+ `(use \`useCurrent()\` for a timestamp default).`);
44
+ }
45
+ }
46
+ /** Render one column to its `CREATE TABLE` line (sans leading indent). */
47
+ function compileColumn(column, dialect, inlinePrimary) {
48
+ const parts = [dialect.quoteId(column.name), dialect.columnTypeSql(column)];
49
+ // Auto-increment columns carry their full spec (incl. PRIMARY KEY) from the
50
+ // dialect — appending NOT NULL / DEFAULT / PRIMARY KEY would be redundant or
51
+ // invalid, so stop here.
52
+ if (column.autoIncrement)
53
+ return parts.join(' ');
54
+ if (!column.nullable)
55
+ parts.push('NOT NULL');
56
+ if (column.useCurrent) {
57
+ parts.push('DEFAULT CURRENT_TIMESTAMP');
58
+ }
59
+ else if (column.hasDefault) {
60
+ parts.push(`DEFAULT ${defaultLiteral(column.default, dialect)}`);
61
+ }
62
+ // `ON UPDATE CURRENT_TIMESTAMP` is MySQL-only grammar; pg/sqlite have no inline
63
+ // form, so the modifier is silently dropped there (Laravel does the same).
64
+ if (dialect.name === 'mysql' && column.useCurrentOnUpdate)
65
+ parts.push('ON UPDATE CURRENT_TIMESTAMP');
66
+ if (inlinePrimary)
67
+ parts.push('PRIMARY KEY');
68
+ // MySQL takes an inline column COMMENT (last). pg comments out-of-line (a
69
+ // separate COMMENT ON COLUMN statement, emitted by the table compiler); sqlite
70
+ // has no column comments at all.
71
+ if (dialect.name === 'mysql' && column.comment !== undefined)
72
+ parts.push(`COMMENT ${quoteSqlString(column.comment)}`);
73
+ return parts.join(' ');
74
+ }
75
+ /** Postgres `COMMENT ON COLUMN "table"."col" IS '…'` statement for a column that
76
+ * carries a `.comment(...)`, or null when the dialect comments inline (mysql) or
77
+ * not at all (sqlite), or the column has no comment. */
78
+ function compileColumnComment(table, column, dialect) {
79
+ if (dialect.name !== 'pg' || column.comment === undefined)
80
+ return null;
81
+ return {
82
+ sql: `COMMENT ON COLUMN ${dialect.quoteId(table)}.${dialect.quoteId(column.name)} IS ${quoteSqlString(column.comment)}`,
83
+ bindings: [],
84
+ };
85
+ }
86
+ /** A column's `"name" TYPE [NOT NULL] [DEFAULT …]` spec, no inline primary key.
87
+ * Exported for the table-rebuild path (7.4b), which assembles a shadow
88
+ * `CREATE TABLE` from a mix of changed columns and preserved (introspected) ones. */
89
+ export function compileColumnSpec(column, dialect) {
90
+ return compileColumn(column, dialect, false);
91
+ }
92
+ /** Default index name, Laravel-style: `{table}_{col[_col…]}_{index|unique}`. */
93
+ function indexName(table, idx) {
94
+ return idx.name ?? `${table}_${idx.columns.join('_')}_${idx.unique ? 'unique' : 'index'}`;
95
+ }
96
+ /** Collect every index to create: table-level ones plus the per-column
97
+ * `.unique()` / `.index()` modifiers, normalized to {@link IndexDefinition}s. */
98
+ function collectIndexes(blueprint) {
99
+ const out = [...blueprint.indexes];
100
+ for (const col of blueprint.columns) {
101
+ if (col.unique)
102
+ out.push({ columns: [col.name], unique: true });
103
+ if (col.index)
104
+ out.push({ columns: [col.name], unique: false });
105
+ }
106
+ return out;
107
+ }
108
+ /** Default FK constraint name, Laravel-style: `{table}_{col[_col…]}_foreign`. */
109
+ function foreignKeyName(table, fk) {
110
+ return fk.name ?? `${table}_${fk.columns.join('_')}_foreign`;
111
+ }
112
+ /** Render a normalized referential action to its SQL keyword (`set null` →
113
+ * `SET NULL`). The value is allowlisted at record time, so this is a pure map. */
114
+ function foreignKeyActionSql(action) {
115
+ return action.toUpperCase();
116
+ }
117
+ /** Collect every foreign key to emit: per-column `constrained()` intents plus
118
+ * table-level `foreign()` ones, in declaration order (columns first). */
119
+ function collectForeignKeys(blueprint) {
120
+ const out = [];
121
+ for (const col of blueprint.columns) {
122
+ if (col.foreignKey)
123
+ out.push(col.foreignKey);
124
+ }
125
+ out.push(...blueprint.foreignKeys);
126
+ return out;
127
+ }
128
+ /** Render one FK as a `CONSTRAINT … FOREIGN KEY (…) REFERENCES "tbl" (…)
129
+ * [ON DELETE …] [ON UPDATE …]` table-constraint line. Every identifier is
130
+ * quoted+validated via the dialect; the referenced table/columns must be set. */
131
+ function compileForeignKey(table, fk, dialect) {
132
+ if (!fk.on) {
133
+ throw new NativeOrmError('NATIVE_DDL_FK_NO_TABLE', `[RudderJS ORM native] Foreign key on (${fk.columns.join(', ')}) in "${table}" is missing its ` +
134
+ `referenced table — call \`.on('<table>')\` or use \`.constrained()\`.`);
135
+ }
136
+ if (fk.references.length === 0) {
137
+ throw new NativeOrmError('NATIVE_DDL_FK_NO_REFERENCES', `[RudderJS ORM native] Foreign key on (${fk.columns.join(', ')}) in "${table}" references no ` +
138
+ `columns — call \`.references('<column>')\` (defaults to "id" via \`.constrained()\`).`);
139
+ }
140
+ const cols = fk.columns.map(c => dialect.quoteId(c)).join(', ');
141
+ const refCols = fk.references.map(c => dialect.quoteId(c)).join(', ');
142
+ let sql = `CONSTRAINT ${dialect.quoteId(foreignKeyName(table, fk))} ` +
143
+ `FOREIGN KEY (${cols}) REFERENCES ${dialect.quoteId(fk.on)} (${refCols})`;
144
+ if (fk.onDelete)
145
+ sql += ` ON DELETE ${foreignKeyActionSql(fk.onDelete)}`;
146
+ if (fk.onUpdate)
147
+ sql += ` ON UPDATE ${foreignKeyActionSql(fk.onUpdate)}`;
148
+ return sql;
149
+ }
150
+ /** `CREATE [UNIQUE] INDEX "name" ON "table" ("c1", …)` — shared by create + alter. */
151
+ function compileCreateIndex(table, idx, dialect) {
152
+ return {
153
+ sql: `CREATE ${idx.unique ? 'UNIQUE ' : ''}INDEX ${dialect.quoteId(indexName(table, idx))} ` +
154
+ `ON ${dialect.quoteId(table)} (${idx.columns.map(c => dialect.quoteId(c)).join(', ')})`,
155
+ bindings: [],
156
+ };
157
+ }
158
+ /**
159
+ * Compile `Schema.create(...)` to a `CREATE TABLE` plus any `CREATE INDEX`
160
+ * statements (in that order). Each is a {@link CompiledQuery} with empty
161
+ * bindings — DDL carries no bound parameters.
162
+ */
163
+ export function compileCreateTable(blueprint, dialect) {
164
+ if (blueprint.columns.length === 0) {
165
+ throw new NativeOrmError('NATIVE_DDL_EMPTY_TABLE', `[RudderJS ORM native] Cannot create table "${blueprint.table}" with no columns.`);
166
+ }
167
+ // Resolve the primary key. An explicit composite PK (Blueprint.primary) wins
168
+ // and becomes a table constraint. Otherwise, column-level `.primary()` flags
169
+ // (excluding the auto-increment column, which owns its own inline PK) become
170
+ // an inline PK if there's exactly one, or a table constraint if several.
171
+ const autoPk = blueprint.columns.some(c => c.autoIncrement);
172
+ const flagged = blueprint.columns.filter(c => c.primary && !c.autoIncrement).map(c => c.name);
173
+ let tablePk = null;
174
+ let inlinePk = null;
175
+ if (blueprint.primaryColumns && !autoPk) {
176
+ tablePk = blueprint.primaryColumns;
177
+ }
178
+ else if (!autoPk && flagged.length === 1) {
179
+ inlinePk = flagged[0] ?? null;
180
+ }
181
+ else if (!autoPk && flagged.length > 1) {
182
+ tablePk = flagged;
183
+ }
184
+ const lines = blueprint.columns.map(c => ` ${compileColumn(c, dialect, c.name === inlinePk)}`);
185
+ if (tablePk) {
186
+ lines.push(` PRIMARY KEY (${tablePk.map(c => dialect.quoteId(c)).join(', ')})`);
187
+ }
188
+ // Foreign keys come after the column lines / primary key, as table constraints.
189
+ for (const fk of collectForeignKeys(blueprint)) {
190
+ lines.push(` ${compileForeignKey(blueprint.table, fk, dialect)}`);
191
+ }
192
+ const create = {
193
+ sql: `CREATE TABLE ${dialect.quoteId(blueprint.table)} (\n${lines.join(',\n')}\n)`,
194
+ bindings: [],
195
+ };
196
+ const indexes = collectIndexes(blueprint).map(idx => compileCreateIndex(blueprint.table, idx, dialect));
197
+ // Postgres column comments are separate statements (pg has no inline COMMENT).
198
+ const comments = blueprint.columns
199
+ .map(c => compileColumnComment(blueprint.table, c, dialect))
200
+ .filter((c) => c !== null);
201
+ return [create, ...indexes, ...comments];
202
+ }
203
+ /** Compile `Schema.drop(...)` / `Schema.dropIfExists(...)`. */
204
+ export function compileDropTable(table, opts, dialect) {
205
+ return {
206
+ sql: `DROP TABLE ${opts.ifExists ? 'IF EXISTS ' : ''}${dialect.quoteId(table)}`,
207
+ bindings: [],
208
+ };
209
+ }
210
+ /** Compile `Schema.rename(from, to)`. */
211
+ export function compileRenameTable(from, to, dialect) {
212
+ return { sql: `ALTER TABLE ${dialect.quoteId(from)} RENAME TO ${dialect.quoteId(to)}`, bindings: [] };
213
+ }
214
+ /**
215
+ * Compile `Schema.table(...)` to the `ALTER TABLE` / `CREATE INDEX` / `DROP
216
+ * INDEX` statements its intents require, in dependency order: rename columns →
217
+ * add columns → add indexes → drop indexes → drop columns. Each is emitted as a
218
+ * separate statement (SQLite has no multi-clause `ALTER TABLE`).
219
+ *
220
+ * SQLite ADD COLUMN can't add a PRIMARY KEY column, and a NOT NULL column must
221
+ * carry a default — both are rejected here with a clear message rather than
222
+ * letting SQLite throw a cryptic one. Changing an existing column's type
223
+ * (`.change()`) needs the table-rebuild dance and is deferred to 7.4b.
224
+ */
225
+ export function compileAlterTable(blueprint, dialect) {
226
+ const t = dialect.quoteId(blueprint.table);
227
+ const out = [];
228
+ // SQLite can neither ADD nor DROP a foreign key in place (no such ALTER form),
229
+ // so reject any FK touched on an existing table with a pointer to the
230
+ // supported paths. (FK-on-alter via the table-rebuild dance is a follow-up.)
231
+ if (dialect.name === 'sqlite') {
232
+ const addsFk = blueprint.foreignKeys.length > 0 || blueprint.columns.some(c => c.foreignKey);
233
+ if (addsFk) {
234
+ throw new NativeNotImplementedError(`Schema.table foreign key add on "${blueprint.table}" (SQLite)`, 'a later phase — SQLite can\'t ADD a foreign key in place; create the table with the FK, or use a column change()/rebuild');
235
+ }
236
+ if (blueprint.droppedForeignKeys.length > 0) {
237
+ throw new NativeNotImplementedError(`Schema.table dropForeign on "${blueprint.table}" (SQLite)`, 'a later phase — SQLite can\'t DROP a foreign key in place; recreate the table without the FK, or use a column change()/rebuild');
238
+ }
239
+ }
240
+ // 1. Renames first, so any later op refers to the new name.
241
+ for (const r of blueprint.renamedColumns) {
242
+ out.push({ sql: `ALTER TABLE ${t} RENAME COLUMN ${dialect.quoteId(r.from)} TO ${dialect.quoteId(r.to)}`, bindings: [] });
243
+ }
244
+ // 2. Column changes (`.change()`) — pg/mysql express them natively (7.4b);
245
+ // SQLite can't and routes through the table-rebuild dance in SchemaBuilder
246
+ // BEFORE this compiler runs, so reaching here on sqlite is a direct-compile
247
+ // misuse and throws the pointer.
248
+ for (const col of blueprint.columns) {
249
+ if (!col.change)
250
+ continue;
251
+ if (dialect.name === 'sqlite') {
252
+ throw new NativeNotImplementedError(`compileAlterTable column change() on "${blueprint.table}.${col.name}" (SQLite)`, 'the SchemaBuilder table-rebuild path — drive changes through Schema.table()/SchemaBuilder.table(), not the compiler directly');
253
+ }
254
+ if (col.autoIncrement || col.primary) {
255
+ throw new NativeOrmError('NATIVE_DDL_CHANGE_PRIMARY', `[RudderJS ORM native] Cannot change() "${col.name}" into a primary-key/auto-increment column — recreate the table instead.`);
256
+ }
257
+ if (dialect.name === 'mysql') {
258
+ // MySQL MODIFY takes the FULL new column spec (type, nullability,
259
+ // default, comment) in one clause — anything omitted is RESET, exactly
260
+ // the "the new definition replaces the old one" semantics Laravel's
261
+ // change() documents. Positional FIRST/AFTER composes here too.
262
+ let sql = `ALTER TABLE ${t} MODIFY ${compileColumn(col, dialect, false)}`;
263
+ if (col.first)
264
+ sql += ' FIRST';
265
+ else if (col.after)
266
+ sql += ` AFTER ${dialect.quoteId(col.after)}`;
267
+ out.push({ sql, bindings: [] });
268
+ }
269
+ else {
270
+ // Postgres alters each facet separately; one statement with
271
+ // comma-joined actions keeps it atomic. The new definition replaces the
272
+ // old one (Laravel semantics): no `.default(...)` → DROP DEFAULT, no
273
+ // `.nullable()` → SET NOT NULL. Type changes rely on pg's implicit
274
+ // casts (varchar↔text, widenings); an incompatible change needs a raw
275
+ // `USING` statement — `DB.statement('ALTER TABLE … USING …')`.
276
+ const c = dialect.quoteId(col.name);
277
+ const actions = [`ALTER COLUMN ${c} TYPE ${dialect.columnTypeSql(col)}`];
278
+ actions.push(col.nullable ? `ALTER COLUMN ${c} DROP NOT NULL` : `ALTER COLUMN ${c} SET NOT NULL`);
279
+ if (col.useCurrent)
280
+ actions.push(`ALTER COLUMN ${c} SET DEFAULT CURRENT_TIMESTAMP`);
281
+ else if (col.hasDefault)
282
+ actions.push(`ALTER COLUMN ${c} SET DEFAULT ${defaultLiteral(col.default, dialect)}`);
283
+ else
284
+ actions.push(`ALTER COLUMN ${c} DROP DEFAULT`);
285
+ out.push({ sql: `ALTER TABLE ${t} ${actions.join(', ')}`, bindings: [] });
286
+ // pg comments stay out-of-line on change too.
287
+ const comment = compileColumnComment(blueprint.table, col, dialect);
288
+ if (comment)
289
+ out.push(comment);
290
+ }
291
+ }
292
+ // 3. Add columns (one ALTER ... ADD COLUMN each), with SQLite's restrictions.
293
+ for (const col of blueprint.columns) {
294
+ if (col.change)
295
+ continue;
296
+ if (col.autoIncrement || col.primary) {
297
+ throw new NativeOrmError('NATIVE_DDL_ADD_PRIMARY', `[RudderJS ORM native] Cannot ADD a primary-key column ("${col.name}") to an existing table on SQLite. Create the table with its primary key, or rebuild it.`);
298
+ }
299
+ if (!col.nullable && !col.hasDefault && !col.useCurrent) {
300
+ throw new NativeOrmError('NATIVE_DDL_ADD_NOT_NULL', `[RudderJS ORM native] Adding a NOT NULL column ("${col.name}") to an existing table requires a default — chain \`.default(...)\` or \`.nullable()\`.`);
301
+ }
302
+ let addSql = `ALTER TABLE ${t} ADD COLUMN ${compileColumn(col, dialect, false)}`;
303
+ // Positional ADD (MySQL only): FIRST wins over AFTER. pg/sqlite have no
304
+ // positional ADD COLUMN, so these are silently ignored there (Laravel too).
305
+ if (dialect.name === 'mysql') {
306
+ if (col.first)
307
+ addSql += ' FIRST';
308
+ else if (col.after)
309
+ addSql += ` AFTER ${dialect.quoteId(col.after)}`;
310
+ }
311
+ out.push({ sql: addSql, bindings: [] });
312
+ // pg out-of-line comment for the added column.
313
+ const comment = compileColumnComment(blueprint.table, col, dialect);
314
+ if (comment)
315
+ out.push(comment);
316
+ }
317
+ // 4. New indexes (table-level + per-column unique()/index() on added/changed columns).
318
+ for (const idx of collectIndexes(blueprint)) {
319
+ out.push(compileCreateIndex(blueprint.table, idx, dialect));
320
+ }
321
+ // 4b. New foreign keys (pg/mysql only — the sqlite guard above already
322
+ // rejected them): `ADD CONSTRAINT … FOREIGN KEY … REFERENCES …`, reusing
323
+ // the create-table constraint renderer. Historically these were silently
324
+ // dropped on alter — a migration "succeeded" without its FK.
325
+ if (dialect.name !== 'sqlite') {
326
+ for (const fk of collectForeignKeys(blueprint)) {
327
+ out.push({ sql: `ALTER TABLE ${t} ADD ${compileForeignKey(blueprint.table, fk, dialect)}`, bindings: [] });
328
+ }
329
+ // Dropped FKs — by constraint name, or by the column list they cover
330
+ // (derived via the same default-name convention used at creation).
331
+ // mysql spells it DROP FOREIGN KEY; pg DROP CONSTRAINT.
332
+ for (const dropped of blueprint.droppedForeignKeys) {
333
+ const name = typeof dropped === 'string'
334
+ ? dropped
335
+ : `${blueprint.table}_${dropped.join('_')}_foreign`;
336
+ const clause = dialect.name === 'mysql' ? 'DROP FOREIGN KEY' : 'DROP CONSTRAINT';
337
+ out.push({ sql: `ALTER TABLE ${t} ${clause} ${dialect.quoteId(name)}`, bindings: [] });
338
+ }
339
+ }
340
+ // 5. Drop indexes (by name). SQLite and pg address an index as a standalone
341
+ // schema object; MySQL scopes it to its table (`DROP INDEX … ON <table>`).
342
+ for (const name of blueprint.droppedIndexes) {
343
+ const onTable = dialect.name === 'mysql' ? ` ON ${t}` : '';
344
+ out.push({ sql: `DROP INDEX ${dialect.quoteId(name)}${onTable}`, bindings: [] });
345
+ }
346
+ // 6. Drop columns last.
347
+ for (const name of blueprint.droppedColumns) {
348
+ out.push({ sql: `ALTER TABLE ${t} DROP COLUMN ${dialect.quoteId(name)}`, bindings: [] });
349
+ }
350
+ return out;
351
+ }
352
+ //# sourceMappingURL=ddl-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ddl-compiler.js","sourceRoot":"","sources":["../../../src/native/schema/ddl-compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { Executor } from '../driver.js';
2
+ import type { Dialect } from '../dialect.js';
3
+ import { type RawColumn } from './introspect.js';
4
+ /** One table in the `db:show` overview. */
5
+ export interface TableSummary {
6
+ name: string;
7
+ /** On-disk size in bytes, or null when the dialect can't report it (sqlite
8
+ * without the `dbstat` module). */
9
+ sizeBytes: number | null;
10
+ /** `COUNT(*)` — only populated when `db:show --counts` asks for it. */
11
+ rows?: number;
12
+ }
13
+ /** The `db:show` payload. */
14
+ export interface DatabaseInfo {
15
+ dialect: 'sqlite' | 'pg' | 'mysql';
16
+ /** Server/library version (`sqlite_version()`, pg `server_version`, mysql `VERSION()`). */
17
+ version: string | null;
18
+ /** Current database name — pg/mysql catalog name, sqlite main file path
19
+ * (`:memory:` shows as null). */
20
+ database: string | null;
21
+ tables: TableSummary[];
22
+ /** View names — only populated when `db:show --views` asks for them. */
23
+ views?: string[];
24
+ }
25
+ /** One index in the `db:table` detail. */
26
+ export interface IndexInfo {
27
+ name: string;
28
+ columns: string[];
29
+ unique: boolean;
30
+ primary: boolean;
31
+ }
32
+ /** One foreign key in the `db:table` detail. `columns[i]` references
33
+ * `foreignColumns[i]`. */
34
+ export interface ForeignKeyInfo {
35
+ /** Constraint name — null on sqlite (PRAGMA reports an ordinal, not a name). */
36
+ name: string | null;
37
+ columns: string[];
38
+ foreignTable: string;
39
+ foreignColumns: string[];
40
+ onUpdate: string | null;
41
+ onDelete: string | null;
42
+ }
43
+ /** The `db:table <name>` payload. */
44
+ export interface TableInfo {
45
+ name: string;
46
+ columns: RawColumn[];
47
+ indexes: IndexInfo[];
48
+ foreignKeys: ForeignKeyInfo[];
49
+ rows: number;
50
+ sizeBytes: number | null;
51
+ }
52
+ export declare function inspectDatabase(executor: Executor, dialect: Dialect, opts?: {
53
+ counts?: boolean;
54
+ views?: boolean;
55
+ }): Promise<DatabaseInfo>;
56
+ /** Inspect one table — null when the table doesn't exist (the caller renders
57
+ * the available-tables hint). The existence check doubles as the injection
58
+ * gate: PRAGMA/`COUNT(*)` interpolation only ever sees the catalog's own
59
+ * spelling of the name, never the raw CLI argument. */
60
+ export declare function inspectTable(executor: Executor, dialect: Dialect, table: string): Promise<TableInfo | null>;
61
+ /** A table's indexes. On sqlite an INTEGER PRIMARY KEY is the rowid — no index
62
+ * row exists for it, so a `PRIMARY` pseudo-entry is synthesized from the
63
+ * column PK ordinals (mirrors Laravel's SQLite schema reader). */
64
+ export declare function readIndexes(executor: Executor, dialect: Dialect, table: string): Promise<IndexInfo[]>;
65
+ /** A table's outbound foreign keys, composite columns paired in order. */
66
+ export declare function readForeignKeys(executor: Executor, dialect: Dialect, table: string): Promise<ForeignKeyInfo[]>;
67
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../../src/native/schema/inspect.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE7D,2CAA2C;AAC3C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ;wCACoC;IACpC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,6BAA6B;AAC7B,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAA;IACnC,2FAA2F;IAC3F,OAAO,EAAG,MAAM,GAAG,IAAI,CAAA;IACvB;sCACkC;IAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,EAAI,YAAY,EAAE,CAAA;IACxB,wEAAwE;IACxE,KAAK,CAAC,EAAI,MAAM,EAAE,CAAA;CACnB;AAED,0CAA0C;AAC1C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAK,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAG,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;2BAC2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,IAAI,EAAY,MAAM,GAAG,IAAI,CAAA;IAC7B,OAAO,EAAS,MAAM,EAAE,CAAA;IACxB,YAAY,EAAI,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,QAAQ,EAAQ,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,EAAQ,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,qCAAqC;AACrC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAS,MAAM,CAAA;IACnB,OAAO,EAAM,SAAS,EAAE,CAAA;IACxB,OAAO,EAAM,SAAS,EAAE,CAAA;IACxB,WAAW,EAAE,cAAc,EAAE,CAAA;IAC7B,IAAI,EAAS,MAAM,CAAA;IACnB,SAAS,EAAI,MAAM,GAAG,IAAI,CAAA;CAC3B;AAyED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/C,OAAO,CAAC,YAAY,CAAC,CAqCvB;AAuBD;;;wDAGwD;AACxD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAa3B;AAED;;mEAEmE;AACnE,wBAAsB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CA4D3G;AAmBD,0EAA0E;AAC1E,wBAAsB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAwFpH"}