@hedystia/db 2.0.0 → 2.0.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 (146) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +13 -0
  2. package/dist/_virtual/_rolldown/runtime.mjs +17 -0
  3. package/dist/cache/manager.cjs +137 -0
  4. package/dist/cache/manager.cjs.map +1 -0
  5. package/dist/cache/manager.d.cts +72 -0
  6. package/dist/cache/manager.d.mts +72 -0
  7. package/dist/cache/manager.mjs +140 -0
  8. package/dist/cache/manager.mjs.map +1 -0
  9. package/dist/cache/memory-store.cjs +122 -0
  10. package/dist/cache/memory-store.cjs.map +1 -0
  11. package/dist/cache/memory-store.mjs +122 -0
  12. package/dist/cache/memory-store.mjs.map +1 -0
  13. package/dist/cli/commands/migration.cjs +22 -0
  14. package/dist/cli/commands/migration.cjs.map +1 -0
  15. package/dist/cli/commands/migration.mjs +32 -0
  16. package/dist/cli/commands/migration.mjs.map +1 -0
  17. package/dist/cli/commands/schema.cjs +21 -0
  18. package/dist/cli/commands/schema.cjs.map +1 -0
  19. package/dist/cli/commands/schema.mjs +30 -0
  20. package/dist/cli/commands/schema.mjs.map +1 -0
  21. package/dist/cli.cjs +50 -0
  22. package/dist/cli.cjs.map +1 -0
  23. package/dist/cli.d.cts +1 -0
  24. package/dist/cli.d.mts +1 -0
  25. package/dist/cli.mjs +57 -0
  26. package/dist/cli.mjs.map +1 -0
  27. package/dist/constants.cjs +16 -0
  28. package/dist/constants.cjs.map +1 -0
  29. package/dist/constants.mjs +16 -0
  30. package/dist/constants.mjs.map +1 -0
  31. package/dist/core/database.cjs +158 -0
  32. package/dist/core/database.cjs.map +1 -0
  33. package/dist/core/database.d.cts +74 -0
  34. package/dist/core/database.d.mts +74 -0
  35. package/dist/core/database.mjs +159 -0
  36. package/dist/core/database.mjs.map +1 -0
  37. package/dist/core/repository.cjs +362 -0
  38. package/dist/core/repository.cjs.map +1 -0
  39. package/dist/core/repository.d.cts +100 -0
  40. package/dist/core/repository.d.mts +100 -0
  41. package/dist/core/repository.mjs +362 -0
  42. package/dist/core/repository.mjs.map +1 -0
  43. package/dist/drivers/driver.cjs +11 -0
  44. package/dist/drivers/driver.cjs.map +1 -0
  45. package/dist/drivers/driver.mjs +11 -0
  46. package/dist/drivers/driver.mjs.map +1 -0
  47. package/dist/drivers/file.cjs +336 -0
  48. package/dist/drivers/file.cjs.map +1 -0
  49. package/dist/drivers/file.mjs +337 -0
  50. package/dist/drivers/file.mjs.map +1 -0
  51. package/dist/drivers/index.cjs +28 -0
  52. package/dist/drivers/index.cjs.map +1 -0
  53. package/dist/drivers/index.d.cts +14 -0
  54. package/dist/drivers/index.d.mts +14 -0
  55. package/dist/drivers/index.mjs +28 -0
  56. package/dist/drivers/index.mjs.map +1 -0
  57. package/dist/drivers/mysql.cjs +272 -0
  58. package/dist/drivers/mysql.cjs.map +1 -0
  59. package/dist/drivers/mysql.mjs +272 -0
  60. package/dist/drivers/mysql.mjs.map +1 -0
  61. package/dist/drivers/sql-compiler.cjs +284 -0
  62. package/dist/drivers/sql-compiler.cjs.map +1 -0
  63. package/dist/drivers/sql-compiler.d.cts +66 -0
  64. package/dist/drivers/sql-compiler.d.mts +66 -0
  65. package/dist/drivers/sql-compiler.mjs +276 -0
  66. package/dist/drivers/sql-compiler.mjs.map +1 -0
  67. package/dist/drivers/sqlite.cjs +262 -0
  68. package/dist/drivers/sqlite.cjs.map +1 -0
  69. package/dist/drivers/sqlite.mjs +262 -0
  70. package/dist/drivers/sqlite.mjs.map +1 -0
  71. package/dist/errors.cjs +74 -0
  72. package/dist/errors.cjs.map +1 -0
  73. package/dist/errors.d.cts +46 -0
  74. package/dist/errors.d.mts +46 -0
  75. package/dist/errors.mjs +68 -0
  76. package/dist/errors.mjs.map +1 -0
  77. package/dist/index.cjs +55 -0
  78. package/dist/index.cjs.map +1 -0
  79. package/dist/index.d.cts +15 -0
  80. package/dist/index.d.mts +15 -0
  81. package/dist/index.mjs +21 -0
  82. package/dist/index.mjs.map +1 -0
  83. package/dist/migrations/definition.cjs +20 -0
  84. package/dist/migrations/definition.cjs.map +1 -0
  85. package/dist/migrations/definition.d.cts +18 -0
  86. package/dist/migrations/definition.d.mts +18 -0
  87. package/dist/migrations/definition.mjs +23 -0
  88. package/dist/migrations/definition.mjs.map +1 -0
  89. package/dist/migrations/index.mjs +12 -0
  90. package/dist/migrations/index.mjs.map +1 -0
  91. package/dist/migrations/templates.cjs +39 -0
  92. package/dist/migrations/templates.cjs.map +1 -0
  93. package/dist/migrations/templates.d.cts +16 -0
  94. package/dist/migrations/templates.d.mts +16 -0
  95. package/dist/migrations/templates.mjs +41 -0
  96. package/dist/migrations/templates.mjs.map +1 -0
  97. package/dist/schema/column.cjs +129 -0
  98. package/dist/schema/column.cjs.map +1 -0
  99. package/dist/schema/column.d.cts +96 -0
  100. package/dist/schema/column.d.mts +96 -0
  101. package/dist/schema/column.mjs +129 -0
  102. package/dist/schema/column.mjs.map +1 -0
  103. package/dist/schema/columns/index.cjs +110 -0
  104. package/dist/schema/columns/index.cjs.map +1 -0
  105. package/dist/schema/columns/index.d.cts +91 -0
  106. package/dist/schema/columns/index.d.mts +91 -0
  107. package/dist/schema/columns/index.mjs +104 -0
  108. package/dist/schema/columns/index.mjs.map +1 -0
  109. package/dist/schema/registry.cjs +101 -0
  110. package/dist/schema/registry.cjs.map +1 -0
  111. package/dist/schema/registry.d.cts +52 -0
  112. package/dist/schema/registry.d.mts +52 -0
  113. package/dist/schema/registry.mjs +101 -0
  114. package/dist/schema/registry.mjs.map +1 -0
  115. package/dist/schema/table.cjs +36 -0
  116. package/dist/schema/table.cjs.map +1 -0
  117. package/dist/schema/table.d.cts +17 -0
  118. package/dist/schema/table.d.mts +17 -0
  119. package/dist/schema/table.mjs +36 -0
  120. package/dist/schema/table.mjs.map +1 -0
  121. package/dist/sync/synchronizer.cjs +43 -0
  122. package/dist/sync/synchronizer.cjs.map +1 -0
  123. package/dist/sync/synchronizer.d.cts +22 -0
  124. package/dist/sync/synchronizer.d.mts +22 -0
  125. package/dist/sync/synchronizer.mjs +43 -0
  126. package/dist/sync/synchronizer.mjs.map +1 -0
  127. package/dist/types.d.cts +227 -0
  128. package/dist/types.d.mts +227 -0
  129. package/dist/utils/fs.cjs +24 -0
  130. package/dist/utils/fs.cjs.map +1 -0
  131. package/dist/utils/fs.mjs +26 -0
  132. package/dist/utils/fs.mjs.map +1 -0
  133. package/dist/utils/index.mjs +14 -0
  134. package/dist/utils/index.mjs.map +1 -0
  135. package/dist/utils/naming.cjs +13 -0
  136. package/dist/utils/naming.cjs.map +1 -0
  137. package/dist/utils/naming.mjs +16 -0
  138. package/dist/utils/naming.mjs.map +1 -0
  139. package/dist/utils/stable-stringify.cjs +19 -0
  140. package/dist/utils/stable-stringify.cjs.map +1 -0
  141. package/dist/utils/stable-stringify.mjs +22 -0
  142. package/dist/utils/stable-stringify.mjs.map +1 -0
  143. package/package.json +64 -27
  144. package/readme.md +86 -106
  145. package/index.d.ts +0 -65
  146. package/index.js +0 -1
@@ -0,0 +1,129 @@
1
+ //#region src/schema/column.ts
2
+ /**
3
+ * Base column builder with chainable methods for defining column properties
4
+ * @template T - The TypeScript type this column resolves to
5
+ * @template TN - The table name this column belongs to (set by table())
6
+ * @template CN - The column name (set by table())
7
+ * @template Ref - The deferred reference metadata (set by references())
8
+ */
9
+ var ColumnBuilder = class {
10
+ _type;
11
+ _primaryKey = false;
12
+ _autoIncrement = false;
13
+ _notNull = false;
14
+ _unique = false;
15
+ _defaultValue = void 0;
16
+ _length;
17
+ _precision;
18
+ _scale;
19
+ _references;
20
+ constructor(type, length, precision, scale) {
21
+ this._type = type;
22
+ this._length = length;
23
+ this._precision = precision;
24
+ this._scale = scale;
25
+ }
26
+ /**
27
+ * Mark this column as a primary key
28
+ * @returns {ColumnBuilder<T, TN, CN, Ref>} The column builder for chaining
29
+ */
30
+ primaryKey() {
31
+ this._primaryKey = true;
32
+ return this;
33
+ }
34
+ /**
35
+ * Mark this column as auto-incrementing
36
+ * @returns {ColumnBuilder<T, TN, CN, Ref>} The column builder for chaining
37
+ */
38
+ autoIncrement() {
39
+ this._autoIncrement = true;
40
+ return this;
41
+ }
42
+ /**
43
+ * Mark this column as NOT NULL
44
+ * @returns {ColumnBuilder<NonNullable<T>, TN, CN, Ref>} The column builder for chaining
45
+ */
46
+ notNull() {
47
+ this._notNull = true;
48
+ return this;
49
+ }
50
+ /**
51
+ * Mark this column as nullable
52
+ * @returns {ColumnBuilder<T | null, TN, CN, Ref>} The column builder for chaining
53
+ */
54
+ nullable() {
55
+ this._notNull = false;
56
+ return this;
57
+ }
58
+ /**
59
+ * Set a default value for this column
60
+ * @param {T} value - The default value
61
+ * @returns {ColumnBuilder<T, TN, CN, Ref>} The column builder for chaining
62
+ */
63
+ default(value) {
64
+ this._defaultValue = value;
65
+ return this;
66
+ }
67
+ /**
68
+ * Mark this column as having a unique constraint
69
+ * @returns {ColumnBuilder<T, TN, CN, Ref>} The column builder for chaining
70
+ */
71
+ unique() {
72
+ this._unique = true;
73
+ return this;
74
+ }
75
+ /**
76
+ * Add a foreign key reference to another table's column
77
+ * @param {() => ColumnBuilder<any>} ref - A function returning the referenced column
78
+ * @param {object} [options] - Reference options
79
+ * @param {ReferenceAction} [options.onDelete] - Action on delete
80
+ * @param {ReferenceAction} [options.onUpdate] - Action on update
81
+ * @param {string} [options.relationName] - Name for the relation
82
+ * @returns {ColumnBuilder<T>} The column builder for chaining
83
+ */
84
+ references(ref, options) {
85
+ this._references = {
86
+ resolve: () => {
87
+ const col = ref();
88
+ return {
89
+ table: col.__tableName ?? "",
90
+ column: col.__columnName ?? ""
91
+ };
92
+ },
93
+ onDelete: options?.onDelete,
94
+ onUpdate: options?.onUpdate,
95
+ relationName: options?.relationName
96
+ };
97
+ return this;
98
+ }
99
+ /**
100
+ * Build the column metadata from the builder configuration
101
+ * @param {string} name - The column name
102
+ * @returns {ColumnMetadata} The built column metadata
103
+ */
104
+ __build(name) {
105
+ return {
106
+ name,
107
+ type: this._type,
108
+ primaryKey: this._primaryKey,
109
+ autoIncrement: this._autoIncrement,
110
+ notNull: this._notNull || this._primaryKey,
111
+ unique: this._unique || this._primaryKey,
112
+ defaultValue: this._defaultValue,
113
+ length: this._length,
114
+ precision: this._precision,
115
+ scale: this._scale
116
+ };
117
+ }
118
+ /**
119
+ * Get deferred reference data if this column has a foreign key reference
120
+ * @returns {object | null} The deferred reference data or null
121
+ */
122
+ __getDeferredRef() {
123
+ return this._references ?? null;
124
+ }
125
+ };
126
+ //#endregion
127
+ export { ColumnBuilder };
128
+
129
+ //# sourceMappingURL=column.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column.mjs","names":[],"sources":["../../src/schema/column.ts"],"sourcesContent":["import type {\n ColumnDataType,\n ColumnMetadata,\n DeferredRefMeta,\n ReferenceAction,\n} from \"../types\";\n\n/**\n * Base column builder with chainable methods for defining column properties\n * @template T - The TypeScript type this column resolves to\n * @template TN - The table name this column belongs to (set by table())\n * @template CN - The column name (set by table())\n * @template Ref - The deferred reference metadata (set by references())\n */\nexport class ColumnBuilder<\n T = unknown,\n TN extends string = string,\n CN extends string = string,\n Ref extends DeferredRefMeta = never,\n> {\n declare readonly __type: T;\n declare readonly __tableName: TN;\n declare readonly __columnName: CN;\n declare readonly __ref: Ref;\n private _type: ColumnDataType;\n private _primaryKey = false;\n private _autoIncrement = false;\n private _notNull = false;\n private _unique = false;\n private _defaultValue: unknown = undefined;\n private _length?: number;\n private _precision?: number;\n private _scale?: number;\n private _references?: {\n resolve: () => { table: string; column: string };\n onDelete?: ReferenceAction;\n onUpdate?: ReferenceAction;\n relationName?: string;\n };\n\n constructor(type: ColumnDataType, length?: number, precision?: number, scale?: number) {\n this._type = type;\n this._length = length;\n this._precision = precision;\n this._scale = scale;\n }\n\n /**\n * Mark this column as a primary key\n * @returns {ColumnBuilder<T, TN, CN, Ref>} The column builder for chaining\n */\n primaryKey(): ColumnBuilder<T, TN, CN, Ref> {\n this._primaryKey = true;\n return this;\n }\n\n /**\n * Mark this column as auto-incrementing\n * @returns {ColumnBuilder<T, TN, CN, Ref>} The column builder for chaining\n */\n autoIncrement(): ColumnBuilder<T, TN, CN, Ref> {\n this._autoIncrement = true;\n return this;\n }\n\n /**\n * Mark this column as NOT NULL\n * @returns {ColumnBuilder<NonNullable<T>, TN, CN, Ref>} The column builder for chaining\n */\n notNull(): ColumnBuilder<NonNullable<T>, TN, CN, Ref> {\n this._notNull = true;\n return this as unknown as ColumnBuilder<NonNullable<T>, TN, CN, Ref>;\n }\n\n /**\n * Mark this column as nullable\n * @returns {ColumnBuilder<T | null, TN, CN, Ref>} The column builder for chaining\n */\n nullable(): ColumnBuilder<T | null, TN, CN, Ref> {\n this._notNull = false;\n return this as unknown as ColumnBuilder<T | null, TN, CN, Ref>;\n }\n\n /**\n * Set a default value for this column\n * @param {T} value - The default value\n * @returns {ColumnBuilder<T, TN, CN, Ref>} The column builder for chaining\n */\n default(value: T): ColumnBuilder<T, TN, CN, Ref> {\n this._defaultValue = value;\n return this;\n }\n\n /**\n * Mark this column as having a unique constraint\n * @returns {ColumnBuilder<T, TN, CN, Ref>} The column builder for chaining\n */\n unique(): ColumnBuilder<T, TN, CN, Ref> {\n this._unique = true;\n return this;\n }\n\n /**\n * Add a foreign key reference to another table's column\n * @param {() => ColumnBuilder<any>} ref - A function returning the referenced column\n * @param {object} [options] - Reference options\n * @param {ReferenceAction} [options.onDelete] - Action on delete\n * @param {ReferenceAction} [options.onUpdate] - Action on update\n * @param {string} [options.relationName] - Name for the relation\n * @returns {ColumnBuilder<T>} The column builder for chaining\n */\n references<\n R extends ColumnBuilder<any, string, string, any>,\n O extends {\n onDelete?: ReferenceAction;\n onUpdate?: ReferenceAction;\n relationName?: string;\n } = never,\n >(\n ref: () => R,\n options?: O,\n ): ColumnBuilder<\n T,\n TN,\n CN,\n DeferredRefMeta<\n CN,\n R[\"__tableName\"],\n R[\"__columnName\"],\n O extends { relationName: infer N extends string } ? N : undefined\n >\n > {\n this._references = {\n resolve: () => {\n const col = ref();\n return {\n table: (col as any).__tableName ?? \"\",\n column: (col as any).__columnName ?? \"\",\n };\n },\n onDelete: options?.onDelete,\n onUpdate: options?.onUpdate,\n relationName: options?.relationName,\n };\n return this as any;\n }\n\n /**\n * Build the column metadata from the builder configuration\n * @param {string} name - The column name\n * @returns {ColumnMetadata} The built column metadata\n */\n __build(name: string): ColumnMetadata {\n return {\n name,\n type: this._type,\n primaryKey: this._primaryKey,\n autoIncrement: this._autoIncrement,\n notNull: this._notNull || this._primaryKey,\n unique: this._unique || this._primaryKey,\n defaultValue: this._defaultValue,\n length: this._length,\n precision: this._precision,\n scale: this._scale,\n };\n }\n\n /**\n * Get deferred reference data if this column has a foreign key reference\n * @returns {object | null} The deferred reference data or null\n */\n __getDeferredRef(): {\n resolve: () => { table: string; column: string };\n onDelete?: ReferenceAction;\n onUpdate?: ReferenceAction;\n relationName?: string;\n } | null {\n return this._references ?? null;\n }\n}\n"],"mappings":";;;;;;;;AAcA,IAAa,gBAAb,MAKE;CAKA;CACA,cAAsB;CACtB,iBAAyB;CACzB,WAAmB;CACnB,UAAkB;CAClB,gBAAiC,KAAA;CACjC;CACA;CACA;CACA;CAOA,YAAY,MAAsB,QAAiB,WAAoB,OAAgB;AACrF,OAAK,QAAQ;AACb,OAAK,UAAU;AACf,OAAK,aAAa;AAClB,OAAK,SAAS;;;;;;CAOhB,aAA4C;AAC1C,OAAK,cAAc;AACnB,SAAO;;;;;;CAOT,gBAA+C;AAC7C,OAAK,iBAAiB;AACtB,SAAO;;;;;;CAOT,UAAsD;AACpD,OAAK,WAAW;AAChB,SAAO;;;;;;CAOT,WAAiD;AAC/C,OAAK,WAAW;AAChB,SAAO;;;;;;;CAQT,QAAQ,OAAyC;AAC/C,OAAK,gBAAgB;AACrB,SAAO;;;;;;CAOT,SAAwC;AACtC,OAAK,UAAU;AACf,SAAO;;;;;;;;;;;CAYT,WAQE,KACA,SAWA;AACA,OAAK,cAAc;GACjB,eAAe;IACb,MAAM,MAAM,KAAK;AACjB,WAAO;KACL,OAAQ,IAAY,eAAe;KACnC,QAAS,IAAY,gBAAgB;KACtC;;GAEH,UAAU,SAAS;GACnB,UAAU,SAAS;GACnB,cAAc,SAAS;GACxB;AACD,SAAO;;;;;;;CAQT,QAAQ,MAA8B;AACpC,SAAO;GACL;GACA,MAAM,KAAK;GACX,YAAY,KAAK;GACjB,eAAe,KAAK;GACpB,SAAS,KAAK,YAAY,KAAK;GAC/B,QAAQ,KAAK,WAAW,KAAK;GAC7B,cAAc,KAAK;GACnB,QAAQ,KAAK;GACb,WAAW,KAAK;GAChB,OAAO,KAAK;GACb;;;;;;CAOH,mBAKS;AACP,SAAO,KAAK,eAAe"}
@@ -0,0 +1,110 @@
1
+ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
2
+ const require_column = require("../column.cjs");
3
+ //#region src/schema/columns/index.ts
4
+ var columns_exports = /* @__PURE__ */ require_runtime.__exportAll({
5
+ bigint: () => bigint,
6
+ blob: () => blob,
7
+ boolean: () => boolean,
8
+ char: () => char,
9
+ d: () => d,
10
+ datetime: () => datetime,
11
+ decimal: () => decimal,
12
+ float: () => float,
13
+ integer: () => integer,
14
+ json: () => json,
15
+ text: () => text,
16
+ timestamp: () => timestamp,
17
+ varchar: () => varchar
18
+ });
19
+ /**
20
+ * Create an INTEGER column
21
+ * @returns {ColumnBuilder<number>} Column builder for integer type
22
+ */
23
+ const integer = () => new require_column.ColumnBuilder("integer");
24
+ /**
25
+ * Create a BIGINT column
26
+ * @returns {ColumnBuilder<number>} Column builder for bigint type
27
+ */
28
+ const bigint = () => new require_column.ColumnBuilder("bigint");
29
+ /**
30
+ * Create a VARCHAR column with specified length
31
+ * @param {number} [length=255] - Maximum character length
32
+ * @returns {ColumnBuilder<string>} Column builder for varchar type
33
+ */
34
+ const varchar = (length = 255) => new require_column.ColumnBuilder("varchar", length);
35
+ /**
36
+ * Create a CHAR column with specified length
37
+ * @param {number} [length=1] - Fixed character length
38
+ * @returns {ColumnBuilder<string>} Column builder for char type
39
+ */
40
+ const char = (length = 1) => new require_column.ColumnBuilder("char", length);
41
+ /**
42
+ * Create a TEXT column
43
+ * @returns {ColumnBuilder<string>} Column builder for text type
44
+ */
45
+ const text = () => new require_column.ColumnBuilder("text");
46
+ /**
47
+ * Create a BOOLEAN column
48
+ * @returns {ColumnBuilder<boolean>} Column builder for boolean type
49
+ */
50
+ const boolean = () => new require_column.ColumnBuilder("boolean");
51
+ /**
52
+ * Create a JSON column
53
+ * @returns {ColumnBuilder<unknown>} Column builder for json type
54
+ */
55
+ const json = () => new require_column.ColumnBuilder("json");
56
+ /**
57
+ * Create a DATETIME column
58
+ * @returns {ColumnBuilder<Date>} Column builder for datetime type
59
+ */
60
+ const datetime = () => new require_column.ColumnBuilder("datetime");
61
+ /**
62
+ * Create a TIMESTAMP column
63
+ * @returns {ColumnBuilder<Date>} Column builder for timestamp type
64
+ */
65
+ const timestamp = () => new require_column.ColumnBuilder("timestamp");
66
+ /**
67
+ * Create a DECIMAL column with precision and scale
68
+ * @param {number} [precision=10] - Total number of digits
69
+ * @param {number} [scale=2] - Number of decimal digits
70
+ * @returns {ColumnBuilder<number>} Column builder for decimal type
71
+ */
72
+ const decimal = (precision = 10, scale = 2) => new require_column.ColumnBuilder("decimal", void 0, precision, scale);
73
+ /**
74
+ * Create a FLOAT column
75
+ * @returns {ColumnBuilder<number>} Column builder for float type
76
+ */
77
+ const float = () => new require_column.ColumnBuilder("float");
78
+ /**
79
+ * Create a BLOB column
80
+ * @returns {ColumnBuilder<Buffer>} Column builder for blob type
81
+ */
82
+ const blob = () => new require_column.ColumnBuilder("blob");
83
+ /**
84
+ * Column type helpers object for schema definitions
85
+ * @returns {typeof d} Column type helpers
86
+ */
87
+ const d = {
88
+ integer,
89
+ bigint,
90
+ varchar,
91
+ char,
92
+ text,
93
+ boolean,
94
+ json,
95
+ datetime,
96
+ timestamp,
97
+ decimal,
98
+ float,
99
+ blob
100
+ };
101
+ //#endregion
102
+ Object.defineProperty(exports, "columns_exports", {
103
+ enumerable: true,
104
+ get: function() {
105
+ return columns_exports;
106
+ }
107
+ });
108
+ exports.d = d;
109
+
110
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["ColumnBuilder"],"sources":["../../../src/schema/columns/index.ts"],"sourcesContent":["import { ColumnBuilder } from \"../column\";\n\n/**\n * Create an INTEGER column\n * @returns {ColumnBuilder<number>} Column builder for integer type\n */\nexport const integer = (): ColumnBuilder<number> => new ColumnBuilder<number>(\"integer\");\n\n/**\n * Create a BIGINT column\n * @returns {ColumnBuilder<number>} Column builder for bigint type\n */\nexport const bigint = (): ColumnBuilder<number> => new ColumnBuilder<number>(\"bigint\");\n\n/**\n * Create a VARCHAR column with specified length\n * @param {number} [length=255] - Maximum character length\n * @returns {ColumnBuilder<string>} Column builder for varchar type\n */\nexport const varchar = (length = 255): ColumnBuilder<string> =>\n new ColumnBuilder<string>(\"varchar\", length);\n\n/**\n * Create a CHAR column with specified length\n * @param {number} [length=1] - Fixed character length\n * @returns {ColumnBuilder<string>} Column builder for char type\n */\nexport const char = (length = 1): ColumnBuilder<string> =>\n new ColumnBuilder<string>(\"char\", length);\n\n/**\n * Create a TEXT column\n * @returns {ColumnBuilder<string>} Column builder for text type\n */\nexport const text = (): ColumnBuilder<string> => new ColumnBuilder<string>(\"text\");\n\n/**\n * Create a BOOLEAN column\n * @returns {ColumnBuilder<boolean>} Column builder for boolean type\n */\nexport const boolean = (): ColumnBuilder<boolean> => new ColumnBuilder<boolean>(\"boolean\");\n\n/**\n * Create a JSON column\n * @returns {ColumnBuilder<unknown>} Column builder for json type\n */\nexport const json = (): ColumnBuilder<unknown> => new ColumnBuilder<unknown>(\"json\");\n\n/**\n * Create a DATETIME column\n * @returns {ColumnBuilder<Date>} Column builder for datetime type\n */\nexport const datetime = (): ColumnBuilder<Date> => new ColumnBuilder<Date>(\"datetime\");\n\n/**\n * Create a TIMESTAMP column\n * @returns {ColumnBuilder<Date>} Column builder for timestamp type\n */\nexport const timestamp = (): ColumnBuilder<Date> => new ColumnBuilder<Date>(\"timestamp\");\n\n/**\n * Create a DECIMAL column with precision and scale\n * @param {number} [precision=10] - Total number of digits\n * @param {number} [scale=2] - Number of decimal digits\n * @returns {ColumnBuilder<number>} Column builder for decimal type\n */\nexport const decimal = (precision = 10, scale = 2): ColumnBuilder<number> =>\n new ColumnBuilder<number>(\"decimal\", undefined, precision, scale);\n\n/**\n * Create a FLOAT column\n * @returns {ColumnBuilder<number>} Column builder for float type\n */\nexport const float = (): ColumnBuilder<number> => new ColumnBuilder<number>(\"float\");\n\n/**\n * Create a BLOB column\n * @returns {ColumnBuilder<Buffer>} Column builder for blob type\n */\nexport const blob = (): ColumnBuilder<Buffer> => new ColumnBuilder<Buffer>(\"blob\");\n\n/**\n * Column type helpers object for schema definitions\n * @returns {typeof d} Column type helpers\n */\nexport const d = {\n integer,\n bigint,\n varchar,\n char,\n text,\n boolean,\n json,\n datetime,\n timestamp,\n decimal,\n float,\n blob,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAMA,MAAa,gBAAuC,IAAIA,eAAAA,cAAsB,UAAU;;;;;AAMxF,MAAa,eAAsC,IAAIA,eAAAA,cAAsB,SAAS;;;;;;AAOtF,MAAa,WAAW,SAAS,QAC/B,IAAIA,eAAAA,cAAsB,WAAW,OAAO;;;;;;AAO9C,MAAa,QAAQ,SAAS,MAC5B,IAAIA,eAAAA,cAAsB,QAAQ,OAAO;;;;;AAM3C,MAAa,aAAoC,IAAIA,eAAAA,cAAsB,OAAO;;;;;AAMlF,MAAa,gBAAwC,IAAIA,eAAAA,cAAuB,UAAU;;;;;AAM1F,MAAa,aAAqC,IAAIA,eAAAA,cAAuB,OAAO;;;;;AAMpF,MAAa,iBAAsC,IAAIA,eAAAA,cAAoB,WAAW;;;;;AAMtF,MAAa,kBAAuC,IAAIA,eAAAA,cAAoB,YAAY;;;;;;;AAQxF,MAAa,WAAW,YAAY,IAAI,QAAQ,MAC9C,IAAIA,eAAAA,cAAsB,WAAW,KAAA,GAAW,WAAW,MAAM;;;;;AAMnE,MAAa,cAAqC,IAAIA,eAAAA,cAAsB,QAAQ;;;;;AAMpF,MAAa,aAAoC,IAAIA,eAAAA,cAAsB,OAAO;;;;;AAMlF,MAAa,IAAI;CACf;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,91 @@
1
+ import { ColumnBuilder } from "../column.cjs";
2
+
3
+ //#region src/schema/columns/index.d.ts
4
+ declare namespace index_d_exports {
5
+ export { bigint, blob, boolean, char, d, datetime, decimal, float, integer, json, text, timestamp, varchar };
6
+ }
7
+ /**
8
+ * Create an INTEGER column
9
+ * @returns {ColumnBuilder<number>} Column builder for integer type
10
+ */
11
+ declare const integer: () => ColumnBuilder<number>;
12
+ /**
13
+ * Create a BIGINT column
14
+ * @returns {ColumnBuilder<number>} Column builder for bigint type
15
+ */
16
+ declare const bigint: () => ColumnBuilder<number>;
17
+ /**
18
+ * Create a VARCHAR column with specified length
19
+ * @param {number} [length=255] - Maximum character length
20
+ * @returns {ColumnBuilder<string>} Column builder for varchar type
21
+ */
22
+ declare const varchar: (length?: number) => ColumnBuilder<string>;
23
+ /**
24
+ * Create a CHAR column with specified length
25
+ * @param {number} [length=1] - Fixed character length
26
+ * @returns {ColumnBuilder<string>} Column builder for char type
27
+ */
28
+ declare const char: (length?: number) => ColumnBuilder<string>;
29
+ /**
30
+ * Create a TEXT column
31
+ * @returns {ColumnBuilder<string>} Column builder for text type
32
+ */
33
+ declare const text: () => ColumnBuilder<string>;
34
+ /**
35
+ * Create a BOOLEAN column
36
+ * @returns {ColumnBuilder<boolean>} Column builder for boolean type
37
+ */
38
+ declare const boolean: () => ColumnBuilder<boolean>;
39
+ /**
40
+ * Create a JSON column
41
+ * @returns {ColumnBuilder<unknown>} Column builder for json type
42
+ */
43
+ declare const json: () => ColumnBuilder<unknown>;
44
+ /**
45
+ * Create a DATETIME column
46
+ * @returns {ColumnBuilder<Date>} Column builder for datetime type
47
+ */
48
+ declare const datetime: () => ColumnBuilder<Date>;
49
+ /**
50
+ * Create a TIMESTAMP column
51
+ * @returns {ColumnBuilder<Date>} Column builder for timestamp type
52
+ */
53
+ declare const timestamp: () => ColumnBuilder<Date>;
54
+ /**
55
+ * Create a DECIMAL column with precision and scale
56
+ * @param {number} [precision=10] - Total number of digits
57
+ * @param {number} [scale=2] - Number of decimal digits
58
+ * @returns {ColumnBuilder<number>} Column builder for decimal type
59
+ */
60
+ declare const decimal: (precision?: number, scale?: number) => ColumnBuilder<number>;
61
+ /**
62
+ * Create a FLOAT column
63
+ * @returns {ColumnBuilder<number>} Column builder for float type
64
+ */
65
+ declare const float: () => ColumnBuilder<number>;
66
+ /**
67
+ * Create a BLOB column
68
+ * @returns {ColumnBuilder<Buffer>} Column builder for blob type
69
+ */
70
+ declare const blob: () => ColumnBuilder<Buffer>;
71
+ /**
72
+ * Column type helpers object for schema definitions
73
+ * @returns {typeof d} Column type helpers
74
+ */
75
+ declare const d: {
76
+ integer: () => ColumnBuilder<number>;
77
+ bigint: () => ColumnBuilder<number>;
78
+ varchar: (length?: number) => ColumnBuilder<string>;
79
+ char: (length?: number) => ColumnBuilder<string>;
80
+ text: () => ColumnBuilder<string>;
81
+ boolean: () => ColumnBuilder<boolean>;
82
+ json: () => ColumnBuilder<unknown>;
83
+ datetime: () => ColumnBuilder<Date>;
84
+ timestamp: () => ColumnBuilder<Date>;
85
+ decimal: (precision?: number, scale?: number) => ColumnBuilder<number>;
86
+ float: () => ColumnBuilder<number>;
87
+ blob: () => ColumnBuilder<Buffer>;
88
+ };
89
+ //#endregion
90
+ export { d, index_d_exports };
91
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1,91 @@
1
+ import { ColumnBuilder } from "../column.mjs";
2
+
3
+ //#region src/schema/columns/index.d.ts
4
+ declare namespace index_d_exports {
5
+ export { bigint, blob, boolean, char, d, datetime, decimal, float, integer, json, text, timestamp, varchar };
6
+ }
7
+ /**
8
+ * Create an INTEGER column
9
+ * @returns {ColumnBuilder<number>} Column builder for integer type
10
+ */
11
+ declare const integer: () => ColumnBuilder<number>;
12
+ /**
13
+ * Create a BIGINT column
14
+ * @returns {ColumnBuilder<number>} Column builder for bigint type
15
+ */
16
+ declare const bigint: () => ColumnBuilder<number>;
17
+ /**
18
+ * Create a VARCHAR column with specified length
19
+ * @param {number} [length=255] - Maximum character length
20
+ * @returns {ColumnBuilder<string>} Column builder for varchar type
21
+ */
22
+ declare const varchar: (length?: number) => ColumnBuilder<string>;
23
+ /**
24
+ * Create a CHAR column with specified length
25
+ * @param {number} [length=1] - Fixed character length
26
+ * @returns {ColumnBuilder<string>} Column builder for char type
27
+ */
28
+ declare const char: (length?: number) => ColumnBuilder<string>;
29
+ /**
30
+ * Create a TEXT column
31
+ * @returns {ColumnBuilder<string>} Column builder for text type
32
+ */
33
+ declare const text: () => ColumnBuilder<string>;
34
+ /**
35
+ * Create a BOOLEAN column
36
+ * @returns {ColumnBuilder<boolean>} Column builder for boolean type
37
+ */
38
+ declare const boolean: () => ColumnBuilder<boolean>;
39
+ /**
40
+ * Create a JSON column
41
+ * @returns {ColumnBuilder<unknown>} Column builder for json type
42
+ */
43
+ declare const json: () => ColumnBuilder<unknown>;
44
+ /**
45
+ * Create a DATETIME column
46
+ * @returns {ColumnBuilder<Date>} Column builder for datetime type
47
+ */
48
+ declare const datetime: () => ColumnBuilder<Date>;
49
+ /**
50
+ * Create a TIMESTAMP column
51
+ * @returns {ColumnBuilder<Date>} Column builder for timestamp type
52
+ */
53
+ declare const timestamp: () => ColumnBuilder<Date>;
54
+ /**
55
+ * Create a DECIMAL column with precision and scale
56
+ * @param {number} [precision=10] - Total number of digits
57
+ * @param {number} [scale=2] - Number of decimal digits
58
+ * @returns {ColumnBuilder<number>} Column builder for decimal type
59
+ */
60
+ declare const decimal: (precision?: number, scale?: number) => ColumnBuilder<number>;
61
+ /**
62
+ * Create a FLOAT column
63
+ * @returns {ColumnBuilder<number>} Column builder for float type
64
+ */
65
+ declare const float: () => ColumnBuilder<number>;
66
+ /**
67
+ * Create a BLOB column
68
+ * @returns {ColumnBuilder<Buffer>} Column builder for blob type
69
+ */
70
+ declare const blob: () => ColumnBuilder<Buffer>;
71
+ /**
72
+ * Column type helpers object for schema definitions
73
+ * @returns {typeof d} Column type helpers
74
+ */
75
+ declare const d: {
76
+ integer: () => ColumnBuilder<number>;
77
+ bigint: () => ColumnBuilder<number>;
78
+ varchar: (length?: number) => ColumnBuilder<string>;
79
+ char: (length?: number) => ColumnBuilder<string>;
80
+ text: () => ColumnBuilder<string>;
81
+ boolean: () => ColumnBuilder<boolean>;
82
+ json: () => ColumnBuilder<unknown>;
83
+ datetime: () => ColumnBuilder<Date>;
84
+ timestamp: () => ColumnBuilder<Date>;
85
+ decimal: (precision?: number, scale?: number) => ColumnBuilder<number>;
86
+ float: () => ColumnBuilder<number>;
87
+ blob: () => ColumnBuilder<Buffer>;
88
+ };
89
+ //#endregion
90
+ export { d, index_d_exports };
91
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1,104 @@
1
+ import { __exportAll } from "../../_virtual/_rolldown/runtime.mjs";
2
+ import { ColumnBuilder } from "../column.mjs";
3
+ //#region src/schema/columns/index.ts
4
+ var columns_exports = /* @__PURE__ */ __exportAll({
5
+ bigint: () => bigint,
6
+ blob: () => blob,
7
+ boolean: () => boolean,
8
+ char: () => char,
9
+ d: () => d,
10
+ datetime: () => datetime,
11
+ decimal: () => decimal,
12
+ float: () => float,
13
+ integer: () => integer,
14
+ json: () => json,
15
+ text: () => text,
16
+ timestamp: () => timestamp,
17
+ varchar: () => varchar
18
+ });
19
+ /**
20
+ * Create an INTEGER column
21
+ * @returns {ColumnBuilder<number>} Column builder for integer type
22
+ */
23
+ const integer = () => new ColumnBuilder("integer");
24
+ /**
25
+ * Create a BIGINT column
26
+ * @returns {ColumnBuilder<number>} Column builder for bigint type
27
+ */
28
+ const bigint = () => new ColumnBuilder("bigint");
29
+ /**
30
+ * Create a VARCHAR column with specified length
31
+ * @param {number} [length=255] - Maximum character length
32
+ * @returns {ColumnBuilder<string>} Column builder for varchar type
33
+ */
34
+ const varchar = (length = 255) => new ColumnBuilder("varchar", length);
35
+ /**
36
+ * Create a CHAR column with specified length
37
+ * @param {number} [length=1] - Fixed character length
38
+ * @returns {ColumnBuilder<string>} Column builder for char type
39
+ */
40
+ const char = (length = 1) => new ColumnBuilder("char", length);
41
+ /**
42
+ * Create a TEXT column
43
+ * @returns {ColumnBuilder<string>} Column builder for text type
44
+ */
45
+ const text = () => new ColumnBuilder("text");
46
+ /**
47
+ * Create a BOOLEAN column
48
+ * @returns {ColumnBuilder<boolean>} Column builder for boolean type
49
+ */
50
+ const boolean = () => new ColumnBuilder("boolean");
51
+ /**
52
+ * Create a JSON column
53
+ * @returns {ColumnBuilder<unknown>} Column builder for json type
54
+ */
55
+ const json = () => new ColumnBuilder("json");
56
+ /**
57
+ * Create a DATETIME column
58
+ * @returns {ColumnBuilder<Date>} Column builder for datetime type
59
+ */
60
+ const datetime = () => new ColumnBuilder("datetime");
61
+ /**
62
+ * Create a TIMESTAMP column
63
+ * @returns {ColumnBuilder<Date>} Column builder for timestamp type
64
+ */
65
+ const timestamp = () => new ColumnBuilder("timestamp");
66
+ /**
67
+ * Create a DECIMAL column with precision and scale
68
+ * @param {number} [precision=10] - Total number of digits
69
+ * @param {number} [scale=2] - Number of decimal digits
70
+ * @returns {ColumnBuilder<number>} Column builder for decimal type
71
+ */
72
+ const decimal = (precision = 10, scale = 2) => new ColumnBuilder("decimal", void 0, precision, scale);
73
+ /**
74
+ * Create a FLOAT column
75
+ * @returns {ColumnBuilder<number>} Column builder for float type
76
+ */
77
+ const float = () => new ColumnBuilder("float");
78
+ /**
79
+ * Create a BLOB column
80
+ * @returns {ColumnBuilder<Buffer>} Column builder for blob type
81
+ */
82
+ const blob = () => new ColumnBuilder("blob");
83
+ /**
84
+ * Column type helpers object for schema definitions
85
+ * @returns {typeof d} Column type helpers
86
+ */
87
+ const d = {
88
+ integer,
89
+ bigint,
90
+ varchar,
91
+ char,
92
+ text,
93
+ boolean,
94
+ json,
95
+ datetime,
96
+ timestamp,
97
+ decimal,
98
+ float,
99
+ blob
100
+ };
101
+ //#endregion
102
+ export { columns_exports, d };
103
+
104
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/schema/columns/index.ts"],"sourcesContent":["import { ColumnBuilder } from \"../column\";\n\n/**\n * Create an INTEGER column\n * @returns {ColumnBuilder<number>} Column builder for integer type\n */\nexport const integer = (): ColumnBuilder<number> => new ColumnBuilder<number>(\"integer\");\n\n/**\n * Create a BIGINT column\n * @returns {ColumnBuilder<number>} Column builder for bigint type\n */\nexport const bigint = (): ColumnBuilder<number> => new ColumnBuilder<number>(\"bigint\");\n\n/**\n * Create a VARCHAR column with specified length\n * @param {number} [length=255] - Maximum character length\n * @returns {ColumnBuilder<string>} Column builder for varchar type\n */\nexport const varchar = (length = 255): ColumnBuilder<string> =>\n new ColumnBuilder<string>(\"varchar\", length);\n\n/**\n * Create a CHAR column with specified length\n * @param {number} [length=1] - Fixed character length\n * @returns {ColumnBuilder<string>} Column builder for char type\n */\nexport const char = (length = 1): ColumnBuilder<string> =>\n new ColumnBuilder<string>(\"char\", length);\n\n/**\n * Create a TEXT column\n * @returns {ColumnBuilder<string>} Column builder for text type\n */\nexport const text = (): ColumnBuilder<string> => new ColumnBuilder<string>(\"text\");\n\n/**\n * Create a BOOLEAN column\n * @returns {ColumnBuilder<boolean>} Column builder for boolean type\n */\nexport const boolean = (): ColumnBuilder<boolean> => new ColumnBuilder<boolean>(\"boolean\");\n\n/**\n * Create a JSON column\n * @returns {ColumnBuilder<unknown>} Column builder for json type\n */\nexport const json = (): ColumnBuilder<unknown> => new ColumnBuilder<unknown>(\"json\");\n\n/**\n * Create a DATETIME column\n * @returns {ColumnBuilder<Date>} Column builder for datetime type\n */\nexport const datetime = (): ColumnBuilder<Date> => new ColumnBuilder<Date>(\"datetime\");\n\n/**\n * Create a TIMESTAMP column\n * @returns {ColumnBuilder<Date>} Column builder for timestamp type\n */\nexport const timestamp = (): ColumnBuilder<Date> => new ColumnBuilder<Date>(\"timestamp\");\n\n/**\n * Create a DECIMAL column with precision and scale\n * @param {number} [precision=10] - Total number of digits\n * @param {number} [scale=2] - Number of decimal digits\n * @returns {ColumnBuilder<number>} Column builder for decimal type\n */\nexport const decimal = (precision = 10, scale = 2): ColumnBuilder<number> =>\n new ColumnBuilder<number>(\"decimal\", undefined, precision, scale);\n\n/**\n * Create a FLOAT column\n * @returns {ColumnBuilder<number>} Column builder for float type\n */\nexport const float = (): ColumnBuilder<number> => new ColumnBuilder<number>(\"float\");\n\n/**\n * Create a BLOB column\n * @returns {ColumnBuilder<Buffer>} Column builder for blob type\n */\nexport const blob = (): ColumnBuilder<Buffer> => new ColumnBuilder<Buffer>(\"blob\");\n\n/**\n * Column type helpers object for schema definitions\n * @returns {typeof d} Column type helpers\n */\nexport const d = {\n integer,\n bigint,\n varchar,\n char,\n text,\n boolean,\n json,\n datetime,\n timestamp,\n decimal,\n float,\n blob,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAMA,MAAa,gBAAuC,IAAI,cAAsB,UAAU;;;;;AAMxF,MAAa,eAAsC,IAAI,cAAsB,SAAS;;;;;;AAOtF,MAAa,WAAW,SAAS,QAC/B,IAAI,cAAsB,WAAW,OAAO;;;;;;AAO9C,MAAa,QAAQ,SAAS,MAC5B,IAAI,cAAsB,QAAQ,OAAO;;;;;AAM3C,MAAa,aAAoC,IAAI,cAAsB,OAAO;;;;;AAMlF,MAAa,gBAAwC,IAAI,cAAuB,UAAU;;;;;AAM1F,MAAa,aAAqC,IAAI,cAAuB,OAAO;;;;;AAMpF,MAAa,iBAAsC,IAAI,cAAoB,WAAW;;;;;AAMtF,MAAa,kBAAuC,IAAI,cAAoB,YAAY;;;;;;;AAQxF,MAAa,WAAW,YAAY,IAAI,QAAQ,MAC9C,IAAI,cAAsB,WAAW,KAAA,GAAW,WAAW,MAAM;;;;;AAMnE,MAAa,cAAqC,IAAI,cAAsB,QAAQ;;;;;AAMpF,MAAa,aAAoC,IAAI,cAAsB,OAAO;;;;;AAMlF,MAAa,IAAI;CACf;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,101 @@
1
+ const require_errors = require("../errors.cjs");
2
+ //#region src/schema/registry.ts
3
+ /**
4
+ * Schema registry that manages table definitions and resolves references
5
+ */
6
+ var SchemaRegistry = class {
7
+ tables = /* @__PURE__ */ new Map();
8
+ definitions = /* @__PURE__ */ new Map();
9
+ relations = /* @__PURE__ */ new Map();
10
+ /**
11
+ * Register table definitions and resolve all deferred references
12
+ * @param {readonly TableDefinition[]} schemas - Table definitions to register
13
+ */
14
+ register(schemas) {
15
+ for (const schema of schemas) {
16
+ if (!schema.__table || !schema.__name) throw new require_errors.SchemaError("Invalid table definition");
17
+ this.definitions.set(schema.__name, schema);
18
+ this.tables.set(schema.__name, {
19
+ name: schema.__name,
20
+ columns: [...schema.__columns]
21
+ });
22
+ }
23
+ for (const schema of schemas) for (const ref of schema.__deferredRefs) {
24
+ const resolved = ref.resolve();
25
+ if (!resolved.table || !resolved.column) throw new require_errors.SchemaError(`Failed to resolve reference for ${schema.__name}.${ref.columnName}`);
26
+ if (!this.tables.has(resolved.table)) throw new require_errors.SchemaError(`Referenced table "${resolved.table}" does not exist in schema registry`);
27
+ const column = schema.__columns.find((c) => c.name === ref.columnName);
28
+ if (column) column.references = {
29
+ table: resolved.table,
30
+ column: resolved.column,
31
+ onDelete: ref.onDelete,
32
+ onUpdate: ref.onUpdate,
33
+ relationName: ref.relationName
34
+ };
35
+ const relationName = ref.relationName || ref.columnName.replace(/Id$/, "").replace(/_id$/, "");
36
+ if (!this.relations.has(schema.__name)) this.relations.set(schema.__name, []);
37
+ this.relations.get(schema.__name).push({
38
+ from: {
39
+ table: schema.__name,
40
+ column: ref.columnName
41
+ },
42
+ to: {
43
+ table: resolved.table,
44
+ column: resolved.column
45
+ },
46
+ relationName
47
+ });
48
+ if (!this.relations.has(resolved.table)) this.relations.set(resolved.table, []);
49
+ const reverseRelationName = schema.__name;
50
+ this.relations.get(resolved.table).push({
51
+ from: {
52
+ table: resolved.table,
53
+ column: resolved.column
54
+ },
55
+ to: {
56
+ table: schema.__name,
57
+ column: ref.columnName
58
+ },
59
+ relationName: reverseRelationName
60
+ });
61
+ }
62
+ }
63
+ /**
64
+ * Get table metadata by name
65
+ * @param {string} name - Table name
66
+ * @returns {TableMetadata | undefined} The table metadata
67
+ */
68
+ getTable(name) {
69
+ return this.tables.get(name);
70
+ }
71
+ /**
72
+ * Get all registered table metadata
73
+ * @returns {Map<string, TableMetadata>} All registered tables
74
+ */
75
+ getAllTables() {
76
+ return this.tables;
77
+ }
78
+ /**
79
+ * Get relations for a table
80
+ * @param {string} tableName - Table name
81
+ * @returns {Array<object>} Relations for the table
82
+ */
83
+ getRelations(tableName) {
84
+ return this.relations.get(tableName) ?? [];
85
+ }
86
+ /**
87
+ * Get the primary key column name for a table
88
+ * @param {string} tableName - Table name
89
+ * @returns {string | null} The primary key column name or null
90
+ */
91
+ getPrimaryKey(tableName) {
92
+ const table = this.tables.get(tableName);
93
+ if (!table) return null;
94
+ for (const col of table.columns) if (col.primaryKey) return col.name;
95
+ return null;
96
+ }
97
+ };
98
+ //#endregion
99
+ exports.SchemaRegistry = SchemaRegistry;
100
+
101
+ //# sourceMappingURL=registry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.cjs","names":["SchemaError"],"sources":["../../src/schema/registry.ts"],"sourcesContent":["import { SchemaError } from \"../errors\";\nimport type { TableDefinition, TableMetadata } from \"../types\";\n\n/**\n * Schema registry that manages table definitions and resolves references\n */\nexport class SchemaRegistry {\n private tables = new Map<string, TableMetadata>();\n private definitions = new Map<string, TableDefinition>();\n private relations = new Map<\n string,\n Array<{\n from: { table: string; column: string };\n to: { table: string; column: string };\n relationName: string;\n }>\n >();\n\n /**\n * Register table definitions and resolve all deferred references\n * @param {readonly TableDefinition[]} schemas - Table definitions to register\n */\n register(schemas: readonly TableDefinition<any, any, any, any>[]): void {\n for (const schema of schemas) {\n if (!schema.__table || !schema.__name) {\n throw new SchemaError(\"Invalid table definition\");\n }\n\n this.definitions.set(schema.__name, schema);\n this.tables.set(schema.__name, {\n name: schema.__name,\n columns: [...schema.__columns],\n });\n }\n\n for (const schema of schemas) {\n for (const ref of schema.__deferredRefs) {\n const resolved = ref.resolve();\n if (!resolved.table || !resolved.column) {\n throw new SchemaError(\n `Failed to resolve reference for ${schema.__name}.${ref.columnName}`,\n );\n }\n\n if (!this.tables.has(resolved.table)) {\n throw new SchemaError(\n `Referenced table \"${resolved.table}\" does not exist in schema registry`,\n );\n }\n\n const column = schema.__columns.find((c) => c.name === ref.columnName);\n if (column) {\n column.references = {\n table: resolved.table,\n column: resolved.column,\n onDelete: ref.onDelete,\n onUpdate: ref.onUpdate,\n relationName: ref.relationName,\n };\n }\n\n const relationName =\n ref.relationName || ref.columnName.replace(/Id$/, \"\").replace(/_id$/, \"\");\n\n if (!this.relations.has(schema.__name)) {\n this.relations.set(schema.__name, []);\n }\n this.relations.get(schema.__name)!.push({\n from: { table: schema.__name, column: ref.columnName },\n to: { table: resolved.table, column: resolved.column },\n relationName,\n });\n\n if (!this.relations.has(resolved.table)) {\n this.relations.set(resolved.table, []);\n }\n const reverseRelationName = schema.__name;\n this.relations.get(resolved.table)!.push({\n from: { table: resolved.table, column: resolved.column },\n to: { table: schema.__name, column: ref.columnName },\n relationName: reverseRelationName,\n });\n }\n }\n }\n\n /**\n * Get table metadata by name\n * @param {string} name - Table name\n * @returns {TableMetadata | undefined} The table metadata\n */\n getTable(name: string): TableMetadata | undefined {\n return this.tables.get(name);\n }\n\n /**\n * Get all registered table metadata\n * @returns {Map<string, TableMetadata>} All registered tables\n */\n getAllTables(): Map<string, TableMetadata> {\n return this.tables;\n }\n\n /**\n * Get relations for a table\n * @param {string} tableName - Table name\n * @returns {Array<object>} Relations for the table\n */\n getRelations(tableName: string): Array<{\n from: { table: string; column: string };\n to: { table: string; column: string };\n relationName: string;\n }> {\n return this.relations.get(tableName) ?? [];\n }\n\n /**\n * Get the primary key column name for a table\n * @param {string} tableName - Table name\n * @returns {string | null} The primary key column name or null\n */\n getPrimaryKey(tableName: string): string | null {\n const table = this.tables.get(tableName);\n if (!table) {\n return null;\n }\n for (const col of table.columns) {\n if (col.primaryKey) {\n return col.name;\n }\n }\n return null;\n }\n}\n"],"mappings":";;;;;AAMA,IAAa,iBAAb,MAA4B;CAC1B,yBAAiB,IAAI,KAA4B;CACjD,8BAAsB,IAAI,KAA8B;CACxD,4BAAoB,IAAI,KAOrB;;;;;CAMH,SAAS,SAA+D;AACtE,OAAK,MAAM,UAAU,SAAS;AAC5B,OAAI,CAAC,OAAO,WAAW,CAAC,OAAO,OAC7B,OAAM,IAAIA,eAAAA,YAAY,2BAA2B;AAGnD,QAAK,YAAY,IAAI,OAAO,QAAQ,OAAO;AAC3C,QAAK,OAAO,IAAI,OAAO,QAAQ;IAC7B,MAAM,OAAO;IACb,SAAS,CAAC,GAAG,OAAO,UAAU;IAC/B,CAAC;;AAGJ,OAAK,MAAM,UAAU,QACnB,MAAK,MAAM,OAAO,OAAO,gBAAgB;GACvC,MAAM,WAAW,IAAI,SAAS;AAC9B,OAAI,CAAC,SAAS,SAAS,CAAC,SAAS,OAC/B,OAAM,IAAIA,eAAAA,YACR,mCAAmC,OAAO,OAAO,GAAG,IAAI,aACzD;AAGH,OAAI,CAAC,KAAK,OAAO,IAAI,SAAS,MAAM,CAClC,OAAM,IAAIA,eAAAA,YACR,qBAAqB,SAAS,MAAM,qCACrC;GAGH,MAAM,SAAS,OAAO,UAAU,MAAM,MAAM,EAAE,SAAS,IAAI,WAAW;AACtE,OAAI,OACF,QAAO,aAAa;IAClB,OAAO,SAAS;IAChB,QAAQ,SAAS;IACjB,UAAU,IAAI;IACd,UAAU,IAAI;IACd,cAAc,IAAI;IACnB;GAGH,MAAM,eACJ,IAAI,gBAAgB,IAAI,WAAW,QAAQ,OAAO,GAAG,CAAC,QAAQ,QAAQ,GAAG;AAE3E,OAAI,CAAC,KAAK,UAAU,IAAI,OAAO,OAAO,CACpC,MAAK,UAAU,IAAI,OAAO,QAAQ,EAAE,CAAC;AAEvC,QAAK,UAAU,IAAI,OAAO,OAAO,CAAE,KAAK;IACtC,MAAM;KAAE,OAAO,OAAO;KAAQ,QAAQ,IAAI;KAAY;IACtD,IAAI;KAAE,OAAO,SAAS;KAAO,QAAQ,SAAS;KAAQ;IACtD;IACD,CAAC;AAEF,OAAI,CAAC,KAAK,UAAU,IAAI,SAAS,MAAM,CACrC,MAAK,UAAU,IAAI,SAAS,OAAO,EAAE,CAAC;GAExC,MAAM,sBAAsB,OAAO;AACnC,QAAK,UAAU,IAAI,SAAS,MAAM,CAAE,KAAK;IACvC,MAAM;KAAE,OAAO,SAAS;KAAO,QAAQ,SAAS;KAAQ;IACxD,IAAI;KAAE,OAAO,OAAO;KAAQ,QAAQ,IAAI;KAAY;IACpD,cAAc;IACf,CAAC;;;;;;;;CAUR,SAAS,MAAyC;AAChD,SAAO,KAAK,OAAO,IAAI,KAAK;;;;;;CAO9B,eAA2C;AACzC,SAAO,KAAK;;;;;;;CAQd,aAAa,WAIV;AACD,SAAO,KAAK,UAAU,IAAI,UAAU,IAAI,EAAE;;;;;;;CAQ5C,cAAc,WAAkC;EAC9C,MAAM,QAAQ,KAAK,OAAO,IAAI,UAAU;AACxC,MAAI,CAAC,MACH,QAAO;AAET,OAAK,MAAM,OAAO,MAAM,QACtB,KAAI,IAAI,WACN,QAAO,IAAI;AAGf,SAAO"}