@hedystia/db 2.0.1 → 2.0.2

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 (46) hide show
  1. package/dist/core/repository.cjs +75 -21
  2. package/dist/core/repository.cjs.map +1 -1
  3. package/dist/core/repository.d.cts +10 -0
  4. package/dist/core/repository.d.mts +10 -0
  5. package/dist/core/repository.mjs +75 -21
  6. package/dist/core/repository.mjs.map +1 -1
  7. package/dist/index.cjs +14 -0
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +2 -2
  10. package/dist/index.d.mts +2 -2
  11. package/dist/index.mjs +2 -2
  12. package/dist/index.mjs.map +1 -1
  13. package/dist/migrations/templates.cjs +4 -4
  14. package/dist/migrations/templates.cjs.map +1 -1
  15. package/dist/migrations/templates.mjs +4 -4
  16. package/dist/migrations/templates.mjs.map +1 -1
  17. package/dist/schema/column.cjs +34 -2
  18. package/dist/schema/column.cjs.map +1 -1
  19. package/dist/schema/column.d.cts +24 -0
  20. package/dist/schema/column.d.mts +24 -0
  21. package/dist/schema/column.mjs +34 -2
  22. package/dist/schema/column.mjs.map +1 -1
  23. package/dist/schema/columns/index.cjs +93 -1
  24. package/dist/schema/columns/index.cjs.map +1 -1
  25. package/dist/schema/columns/index.d.cts +52 -2
  26. package/dist/schema/columns/index.d.mts +52 -2
  27. package/dist/schema/columns/index.mjs +80 -2
  28. package/dist/schema/columns/index.mjs.map +1 -1
  29. package/dist/schema/registry.cjs +28 -4
  30. package/dist/schema/registry.cjs.map +1 -1
  31. package/dist/schema/registry.d.cts +15 -1
  32. package/dist/schema/registry.d.mts +15 -1
  33. package/dist/schema/registry.mjs +28 -4
  34. package/dist/schema/registry.mjs.map +1 -1
  35. package/dist/schema/table.cjs +3 -0
  36. package/dist/schema/table.cjs.map +1 -1
  37. package/dist/schema/table.mjs +3 -0
  38. package/dist/schema/table.mjs.map +1 -1
  39. package/dist/sync/synchronizer.cjs +2 -2
  40. package/dist/sync/synchronizer.cjs.map +1 -1
  41. package/dist/sync/synchronizer.mjs +2 -2
  42. package/dist/sync/synchronizer.mjs.map +1 -1
  43. package/dist/types.d.cts +4 -2
  44. package/dist/types.d.mts +4 -2
  45. package/package.json +1 -1
  46. package/readme.md +11 -9
@@ -1 +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"}
1
+ {"version":3,"file":"column.mjs","names":[],"sources":["../../src/schema/column.ts"],"sourcesContent":["import type { ColumnDataType, ColumnMetadata, DeferredRefMeta, ReferenceAction } 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 _columnAlias?: string;\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 * Set a custom database column name different from the property key\n * @param {string} alias - The column name to use in the database\n * @returns {ColumnBuilder<T, TN, CN, Ref>} The column builder for chaining\n * @example\n * // In code: guildId, In database: guild_id\n * guildId: varchar(255).name(\"guild_id\")\n */\n name(alias: string): ColumnBuilder<T, TN, CN, Ref> {\n this._columnAlias = alias;\n return this;\n }\n\n /**\n * Override the TypeScript type for this column with a custom type literal\n * @template U - The custom type to use\n * @returns {ColumnBuilder<U, TN, CN, Ref>} The column builder with the new type\n * @example\n * // Limits autocomplete to specific values\n * locale: varchar(25).type<\"en_US\" | \"es_ES\">()\n */\n type<U>(): ColumnBuilder<U, TN, CN, Ref> {\n return this as unknown as ColumnBuilder<U, TN, CN, Ref>;\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 * Mark this column as nullable (alias for {@link nullable})\n * @returns {ColumnBuilder<T | null, TN, CN, Ref>} The column builder for chaining\n */\n null(): ColumnBuilder<T | null, TN, CN, Ref> {\n return this.nullable();\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: this._columnAlias ?? 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 columnAlias: this._columnAlias,\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":";;;;;;;;AASA,IAAa,gBAAb,MAKE;CAKA;CACA,cAAsB;CACtB,iBAAyB;CACzB,WAAmB;CACnB,UAAkB;CAClB,gBAAiC,KAAA;CACjC;CACA;CACA;CACA;CACA;CAOA,YAAY,MAAsB,QAAiB,WAAoB,OAAgB;AACrF,OAAK,QAAQ;AACb,OAAK,UAAU;AACf,OAAK,aAAa;AAClB,OAAK,SAAS;;;;;;;;;;CAWhB,KAAK,OAA8C;AACjD,OAAK,eAAe;AACpB,SAAO;;;;;;;;;;CAWT,OAAyC;AACvC,SAAO;;;;;;CAOT,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;;;;;;CAOT,OAA6C;AAC3C,SAAO,KAAK,UAAU;;;;;;;CAQxB,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,MAAM,KAAK,gBAAgB;GAC3B,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;GACZ,aAAa,KAAK;GACnB;;;;;;CAOH,mBAKS;AACP,SAAO,KAAK,eAAe"}
@@ -2,6 +2,7 @@ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
2
2
  const require_column = require("../column.cjs");
3
3
  //#region src/schema/columns/index.ts
4
4
  var columns_exports = /* @__PURE__ */ require_runtime.__exportAll({
5
+ NamedColumnStarter: () => NamedColumnStarter,
5
6
  bigint: () => bigint,
6
7
  blob: () => blob,
7
8
  boolean: () => boolean,
@@ -12,6 +13,7 @@ var columns_exports = /* @__PURE__ */ require_runtime.__exportAll({
12
13
  float: () => float,
13
14
  integer: () => integer,
14
15
  json: () => json,
16
+ name: () => name,
15
17
  text: () => text,
16
18
  timestamp: () => timestamp,
17
19
  varchar: () => varchar
@@ -81,6 +83,81 @@ const float = () => new require_column.ColumnBuilder("float");
81
83
  */
82
84
  const blob = () => new require_column.ColumnBuilder("blob");
83
85
  /**
86
+ * Starter class for creating columns with a pre-set database column name
87
+ * @example
88
+ * // Start with name, then pick column type
89
+ * guildId: name("guild_id").varchar(255)
90
+ */
91
+ var NamedColumnStarter = class {
92
+ _alias;
93
+ constructor(alias) {
94
+ this._alias = alias;
95
+ }
96
+ /** Create an INTEGER column with this database column name */
97
+ integer() {
98
+ return new require_column.ColumnBuilder("integer").name(this._alias);
99
+ }
100
+ /** Create a BIGINT column with this database column name */
101
+ bigint() {
102
+ return new require_column.ColumnBuilder("bigint").name(this._alias);
103
+ }
104
+ /** Create a VARCHAR column with this database column name
105
+ * @param {number} [length=255] - Maximum character length
106
+ */
107
+ varchar(length = 255) {
108
+ return new require_column.ColumnBuilder("varchar", length).name(this._alias);
109
+ }
110
+ /** Create a CHAR column with this database column name
111
+ * @param {number} [length=1] - Fixed character length
112
+ */
113
+ char(length = 1) {
114
+ return new require_column.ColumnBuilder("char", length).name(this._alias);
115
+ }
116
+ /** Create a TEXT column with this database column name */
117
+ text() {
118
+ return new require_column.ColumnBuilder("text").name(this._alias);
119
+ }
120
+ /** Create a BOOLEAN column with this database column name */
121
+ boolean() {
122
+ return new require_column.ColumnBuilder("boolean").name(this._alias);
123
+ }
124
+ /** Create a JSON column with this database column name */
125
+ json() {
126
+ return new require_column.ColumnBuilder("json").name(this._alias);
127
+ }
128
+ /** Create a DATETIME column with this database column name */
129
+ datetime() {
130
+ return new require_column.ColumnBuilder("datetime").name(this._alias);
131
+ }
132
+ /** Create a TIMESTAMP column with this database column name */
133
+ timestamp() {
134
+ return new require_column.ColumnBuilder("timestamp").name(this._alias);
135
+ }
136
+ /** Create a DECIMAL column with this database column name
137
+ * @param {number} [precision=10] - Total number of digits
138
+ * @param {number} [scale=2] - Number of decimal digits
139
+ */
140
+ decimal(precision = 10, scale = 2) {
141
+ return new require_column.ColumnBuilder("decimal", void 0, precision, scale).name(this._alias);
142
+ }
143
+ /** Create a FLOAT column with this database column name */
144
+ float() {
145
+ return new require_column.ColumnBuilder("float").name(this._alias);
146
+ }
147
+ /** Create a BLOB column with this database column name */
148
+ blob() {
149
+ return new require_column.ColumnBuilder("blob").name(this._alias);
150
+ }
151
+ };
152
+ /**
153
+ * Create a column with a custom database column name, then pick the column type
154
+ * @param {string} alias - The column name to use in the database
155
+ * @returns {NamedColumnStarter} A starter object to pick the column type
156
+ * @example
157
+ * guildId: name("guild_id").varchar(255).notNull()
158
+ */
159
+ const name = (alias) => new NamedColumnStarter(alias);
160
+ /**
84
161
  * Column type helpers object for schema definitions
85
162
  * @returns {typeof d} Column type helpers
86
163
  */
@@ -96,9 +173,15 @@ const d = {
96
173
  timestamp,
97
174
  decimal,
98
175
  float,
99
- blob
176
+ blob,
177
+ name
100
178
  };
101
179
  //#endregion
180
+ exports.NamedColumnStarter = NamedColumnStarter;
181
+ exports.bigint = bigint;
182
+ exports.blob = blob;
183
+ exports.boolean = boolean;
184
+ exports.char = char;
102
185
  Object.defineProperty(exports, "columns_exports", {
103
186
  enumerable: true,
104
187
  get: function() {
@@ -106,5 +189,14 @@ Object.defineProperty(exports, "columns_exports", {
106
189
  }
107
190
  });
108
191
  exports.d = d;
192
+ exports.datetime = datetime;
193
+ exports.decimal = decimal;
194
+ exports.float = float;
195
+ exports.integer = integer;
196
+ exports.json = json;
197
+ exports.name = name;
198
+ exports.text = text;
199
+ exports.timestamp = timestamp;
200
+ exports.varchar = varchar;
109
201
 
110
202
  //# sourceMappingURL=index.cjs.map
@@ -1 +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"}
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 * Starter class for creating columns with a pre-set database column name\n * @example\n * // Start with name, then pick column type\n * guildId: name(\"guild_id\").varchar(255)\n */\nexport class NamedColumnStarter {\n private _alias: string;\n\n constructor(alias: string) {\n this._alias = alias;\n }\n\n /** Create an INTEGER column with this database column name */\n integer(): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"integer\").name(this._alias);\n }\n\n /** Create a BIGINT column with this database column name */\n bigint(): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"bigint\").name(this._alias);\n }\n\n /** Create a VARCHAR column with this database column name\n * @param {number} [length=255] - Maximum character length\n */\n varchar(length = 255): ColumnBuilder<string> {\n return new ColumnBuilder<string>(\"varchar\", length).name(this._alias);\n }\n\n /** Create a CHAR column with this database column name\n * @param {number} [length=1] - Fixed character length\n */\n char(length = 1): ColumnBuilder<string> {\n return new ColumnBuilder<string>(\"char\", length).name(this._alias);\n }\n\n /** Create a TEXT column with this database column name */\n text(): ColumnBuilder<string> {\n return new ColumnBuilder<string>(\"text\").name(this._alias);\n }\n\n /** Create a BOOLEAN column with this database column name */\n boolean(): ColumnBuilder<boolean> {\n return new ColumnBuilder<boolean>(\"boolean\").name(this._alias);\n }\n\n /** Create a JSON column with this database column name */\n json(): ColumnBuilder<unknown> {\n return new ColumnBuilder<unknown>(\"json\").name(this._alias);\n }\n\n /** Create a DATETIME column with this database column name */\n datetime(): ColumnBuilder<Date> {\n return new ColumnBuilder<Date>(\"datetime\").name(this._alias);\n }\n\n /** Create a TIMESTAMP column with this database column name */\n timestamp(): ColumnBuilder<Date> {\n return new ColumnBuilder<Date>(\"timestamp\").name(this._alias);\n }\n\n /** Create a DECIMAL column with this database column name\n * @param {number} [precision=10] - Total number of digits\n * @param {number} [scale=2] - Number of decimal digits\n */\n decimal(precision = 10, scale = 2): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"decimal\", undefined, precision, scale).name(this._alias);\n }\n\n /** Create a FLOAT column with this database column name */\n float(): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"float\").name(this._alias);\n }\n\n /** Create a BLOB column with this database column name */\n blob(): ColumnBuilder<Buffer> {\n return new ColumnBuilder<Buffer>(\"blob\").name(this._alias);\n }\n}\n\n/**\n * Create a column with a custom database column name, then pick the column type\n * @param {string} alias - The column name to use in the database\n * @returns {NamedColumnStarter} A starter object to pick the column type\n * @example\n * guildId: name(\"guild_id\").varchar(255).notNull()\n */\nexport const name = (alias: string): NamedColumnStarter => new NamedColumnStarter(alias);\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 name,\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;;;;;;;AAQlF,IAAa,qBAAb,MAAgC;CAC9B;CAEA,YAAY,OAAe;AACzB,OAAK,SAAS;;;CAIhB,UAAiC;AAC/B,SAAO,IAAIA,eAAAA,cAAsB,UAAU,CAAC,KAAK,KAAK,OAAO;;;CAI/D,SAAgC;AAC9B,SAAO,IAAIA,eAAAA,cAAsB,SAAS,CAAC,KAAK,KAAK,OAAO;;;;;CAM9D,QAAQ,SAAS,KAA4B;AAC3C,SAAO,IAAIA,eAAAA,cAAsB,WAAW,OAAO,CAAC,KAAK,KAAK,OAAO;;;;;CAMvE,KAAK,SAAS,GAA0B;AACtC,SAAO,IAAIA,eAAAA,cAAsB,QAAQ,OAAO,CAAC,KAAK,KAAK,OAAO;;;CAIpE,OAA8B;AAC5B,SAAO,IAAIA,eAAAA,cAAsB,OAAO,CAAC,KAAK,KAAK,OAAO;;;CAI5D,UAAkC;AAChC,SAAO,IAAIA,eAAAA,cAAuB,UAAU,CAAC,KAAK,KAAK,OAAO;;;CAIhE,OAA+B;AAC7B,SAAO,IAAIA,eAAAA,cAAuB,OAAO,CAAC,KAAK,KAAK,OAAO;;;CAI7D,WAAgC;AAC9B,SAAO,IAAIA,eAAAA,cAAoB,WAAW,CAAC,KAAK,KAAK,OAAO;;;CAI9D,YAAiC;AAC/B,SAAO,IAAIA,eAAAA,cAAoB,YAAY,CAAC,KAAK,KAAK,OAAO;;;;;;CAO/D,QAAQ,YAAY,IAAI,QAAQ,GAA0B;AACxD,SAAO,IAAIA,eAAAA,cAAsB,WAAW,KAAA,GAAW,WAAW,MAAM,CAAC,KAAK,KAAK,OAAO;;;CAI5F,QAA+B;AAC7B,SAAO,IAAIA,eAAAA,cAAsB,QAAQ,CAAC,KAAK,KAAK,OAAO;;;CAI7D,OAA8B;AAC5B,SAAO,IAAIA,eAAAA,cAAsB,OAAO,CAAC,KAAK,KAAK,OAAO;;;;;;;;;;AAW9D,MAAa,QAAQ,UAAsC,IAAI,mBAAmB,MAAM;;;;;AAMxF,MAAa,IAAI;CACf;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD"}
@@ -2,7 +2,7 @@ import { ColumnBuilder } from "../column.cjs";
2
2
 
3
3
  //#region src/schema/columns/index.d.ts
4
4
  declare namespace index_d_exports {
5
- export { bigint, blob, boolean, char, d, datetime, decimal, float, integer, json, text, timestamp, varchar };
5
+ export { NamedColumnStarter, bigint, blob, boolean, char, d, datetime, decimal, float, integer, json, name, text, timestamp, varchar };
6
6
  }
7
7
  /**
8
8
  * Create an INTEGER column
@@ -68,6 +68,55 @@ declare const float: () => ColumnBuilder<number>;
68
68
  * @returns {ColumnBuilder<Buffer>} Column builder for blob type
69
69
  */
70
70
  declare const blob: () => ColumnBuilder<Buffer>;
71
+ /**
72
+ * Starter class for creating columns with a pre-set database column name
73
+ * @example
74
+ * // Start with name, then pick column type
75
+ * guildId: name("guild_id").varchar(255)
76
+ */
77
+ declare class NamedColumnStarter {
78
+ private _alias;
79
+ constructor(alias: string);
80
+ /** Create an INTEGER column with this database column name */
81
+ integer(): ColumnBuilder<number>;
82
+ /** Create a BIGINT column with this database column name */
83
+ bigint(): ColumnBuilder<number>;
84
+ /** Create a VARCHAR column with this database column name
85
+ * @param {number} [length=255] - Maximum character length
86
+ */
87
+ varchar(length?: number): ColumnBuilder<string>;
88
+ /** Create a CHAR column with this database column name
89
+ * @param {number} [length=1] - Fixed character length
90
+ */
91
+ char(length?: number): ColumnBuilder<string>;
92
+ /** Create a TEXT column with this database column name */
93
+ text(): ColumnBuilder<string>;
94
+ /** Create a BOOLEAN column with this database column name */
95
+ boolean(): ColumnBuilder<boolean>;
96
+ /** Create a JSON column with this database column name */
97
+ json(): ColumnBuilder<unknown>;
98
+ /** Create a DATETIME column with this database column name */
99
+ datetime(): ColumnBuilder<Date>;
100
+ /** Create a TIMESTAMP column with this database column name */
101
+ timestamp(): ColumnBuilder<Date>;
102
+ /** Create a DECIMAL column with this database column name
103
+ * @param {number} [precision=10] - Total number of digits
104
+ * @param {number} [scale=2] - Number of decimal digits
105
+ */
106
+ decimal(precision?: number, scale?: number): ColumnBuilder<number>;
107
+ /** Create a FLOAT column with this database column name */
108
+ float(): ColumnBuilder<number>;
109
+ /** Create a BLOB column with this database column name */
110
+ blob(): ColumnBuilder<Buffer>;
111
+ }
112
+ /**
113
+ * Create a column with a custom database column name, then pick the column type
114
+ * @param {string} alias - The column name to use in the database
115
+ * @returns {NamedColumnStarter} A starter object to pick the column type
116
+ * @example
117
+ * guildId: name("guild_id").varchar(255).notNull()
118
+ */
119
+ declare const name: (alias: string) => NamedColumnStarter;
71
120
  /**
72
121
  * Column type helpers object for schema definitions
73
122
  * @returns {typeof d} Column type helpers
@@ -85,7 +134,8 @@ declare const d: {
85
134
  decimal: (precision?: number, scale?: number) => ColumnBuilder<number>;
86
135
  float: () => ColumnBuilder<number>;
87
136
  blob: () => ColumnBuilder<Buffer>;
137
+ name: (alias: string) => NamedColumnStarter;
88
138
  };
89
139
  //#endregion
90
- export { d, index_d_exports };
140
+ export { NamedColumnStarter, bigint, blob, boolean, char, d, datetime, decimal, float, index_d_exports, integer, json, name, text, timestamp, varchar };
91
141
  //# sourceMappingURL=index.d.cts.map
@@ -2,7 +2,7 @@ import { ColumnBuilder } from "../column.mjs";
2
2
 
3
3
  //#region src/schema/columns/index.d.ts
4
4
  declare namespace index_d_exports {
5
- export { bigint, blob, boolean, char, d, datetime, decimal, float, integer, json, text, timestamp, varchar };
5
+ export { NamedColumnStarter, bigint, blob, boolean, char, d, datetime, decimal, float, integer, json, name, text, timestamp, varchar };
6
6
  }
7
7
  /**
8
8
  * Create an INTEGER column
@@ -68,6 +68,55 @@ declare const float: () => ColumnBuilder<number>;
68
68
  * @returns {ColumnBuilder<Buffer>} Column builder for blob type
69
69
  */
70
70
  declare const blob: () => ColumnBuilder<Buffer>;
71
+ /**
72
+ * Starter class for creating columns with a pre-set database column name
73
+ * @example
74
+ * // Start with name, then pick column type
75
+ * guildId: name("guild_id").varchar(255)
76
+ */
77
+ declare class NamedColumnStarter {
78
+ private _alias;
79
+ constructor(alias: string);
80
+ /** Create an INTEGER column with this database column name */
81
+ integer(): ColumnBuilder<number>;
82
+ /** Create a BIGINT column with this database column name */
83
+ bigint(): ColumnBuilder<number>;
84
+ /** Create a VARCHAR column with this database column name
85
+ * @param {number} [length=255] - Maximum character length
86
+ */
87
+ varchar(length?: number): ColumnBuilder<string>;
88
+ /** Create a CHAR column with this database column name
89
+ * @param {number} [length=1] - Fixed character length
90
+ */
91
+ char(length?: number): ColumnBuilder<string>;
92
+ /** Create a TEXT column with this database column name */
93
+ text(): ColumnBuilder<string>;
94
+ /** Create a BOOLEAN column with this database column name */
95
+ boolean(): ColumnBuilder<boolean>;
96
+ /** Create a JSON column with this database column name */
97
+ json(): ColumnBuilder<unknown>;
98
+ /** Create a DATETIME column with this database column name */
99
+ datetime(): ColumnBuilder<Date>;
100
+ /** Create a TIMESTAMP column with this database column name */
101
+ timestamp(): ColumnBuilder<Date>;
102
+ /** Create a DECIMAL column with this database column name
103
+ * @param {number} [precision=10] - Total number of digits
104
+ * @param {number} [scale=2] - Number of decimal digits
105
+ */
106
+ decimal(precision?: number, scale?: number): ColumnBuilder<number>;
107
+ /** Create a FLOAT column with this database column name */
108
+ float(): ColumnBuilder<number>;
109
+ /** Create a BLOB column with this database column name */
110
+ blob(): ColumnBuilder<Buffer>;
111
+ }
112
+ /**
113
+ * Create a column with a custom database column name, then pick the column type
114
+ * @param {string} alias - The column name to use in the database
115
+ * @returns {NamedColumnStarter} A starter object to pick the column type
116
+ * @example
117
+ * guildId: name("guild_id").varchar(255).notNull()
118
+ */
119
+ declare const name: (alias: string) => NamedColumnStarter;
71
120
  /**
72
121
  * Column type helpers object for schema definitions
73
122
  * @returns {typeof d} Column type helpers
@@ -85,7 +134,8 @@ declare const d: {
85
134
  decimal: (precision?: number, scale?: number) => ColumnBuilder<number>;
86
135
  float: () => ColumnBuilder<number>;
87
136
  blob: () => ColumnBuilder<Buffer>;
137
+ name: (alias: string) => NamedColumnStarter;
88
138
  };
89
139
  //#endregion
90
- export { d, index_d_exports };
140
+ export { NamedColumnStarter, bigint, blob, boolean, char, d, datetime, decimal, float, index_d_exports, integer, json, name, text, timestamp, varchar };
91
141
  //# sourceMappingURL=index.d.mts.map
@@ -2,6 +2,7 @@ import { __exportAll } from "../../_virtual/_rolldown/runtime.mjs";
2
2
  import { ColumnBuilder } from "../column.mjs";
3
3
  //#region src/schema/columns/index.ts
4
4
  var columns_exports = /* @__PURE__ */ __exportAll({
5
+ NamedColumnStarter: () => NamedColumnStarter,
5
6
  bigint: () => bigint,
6
7
  blob: () => blob,
7
8
  boolean: () => boolean,
@@ -12,6 +13,7 @@ var columns_exports = /* @__PURE__ */ __exportAll({
12
13
  float: () => float,
13
14
  integer: () => integer,
14
15
  json: () => json,
16
+ name: () => name,
15
17
  text: () => text,
16
18
  timestamp: () => timestamp,
17
19
  varchar: () => varchar
@@ -81,6 +83,81 @@ const float = () => new ColumnBuilder("float");
81
83
  */
82
84
  const blob = () => new ColumnBuilder("blob");
83
85
  /**
86
+ * Starter class for creating columns with a pre-set database column name
87
+ * @example
88
+ * // Start with name, then pick column type
89
+ * guildId: name("guild_id").varchar(255)
90
+ */
91
+ var NamedColumnStarter = class {
92
+ _alias;
93
+ constructor(alias) {
94
+ this._alias = alias;
95
+ }
96
+ /** Create an INTEGER column with this database column name */
97
+ integer() {
98
+ return new ColumnBuilder("integer").name(this._alias);
99
+ }
100
+ /** Create a BIGINT column with this database column name */
101
+ bigint() {
102
+ return new ColumnBuilder("bigint").name(this._alias);
103
+ }
104
+ /** Create a VARCHAR column with this database column name
105
+ * @param {number} [length=255] - Maximum character length
106
+ */
107
+ varchar(length = 255) {
108
+ return new ColumnBuilder("varchar", length).name(this._alias);
109
+ }
110
+ /** Create a CHAR column with this database column name
111
+ * @param {number} [length=1] - Fixed character length
112
+ */
113
+ char(length = 1) {
114
+ return new ColumnBuilder("char", length).name(this._alias);
115
+ }
116
+ /** Create a TEXT column with this database column name */
117
+ text() {
118
+ return new ColumnBuilder("text").name(this._alias);
119
+ }
120
+ /** Create a BOOLEAN column with this database column name */
121
+ boolean() {
122
+ return new ColumnBuilder("boolean").name(this._alias);
123
+ }
124
+ /** Create a JSON column with this database column name */
125
+ json() {
126
+ return new ColumnBuilder("json").name(this._alias);
127
+ }
128
+ /** Create a DATETIME column with this database column name */
129
+ datetime() {
130
+ return new ColumnBuilder("datetime").name(this._alias);
131
+ }
132
+ /** Create a TIMESTAMP column with this database column name */
133
+ timestamp() {
134
+ return new ColumnBuilder("timestamp").name(this._alias);
135
+ }
136
+ /** Create a DECIMAL column with this database column name
137
+ * @param {number} [precision=10] - Total number of digits
138
+ * @param {number} [scale=2] - Number of decimal digits
139
+ */
140
+ decimal(precision = 10, scale = 2) {
141
+ return new ColumnBuilder("decimal", void 0, precision, scale).name(this._alias);
142
+ }
143
+ /** Create a FLOAT column with this database column name */
144
+ float() {
145
+ return new ColumnBuilder("float").name(this._alias);
146
+ }
147
+ /** Create a BLOB column with this database column name */
148
+ blob() {
149
+ return new ColumnBuilder("blob").name(this._alias);
150
+ }
151
+ };
152
+ /**
153
+ * Create a column with a custom database column name, then pick the column type
154
+ * @param {string} alias - The column name to use in the database
155
+ * @returns {NamedColumnStarter} A starter object to pick the column type
156
+ * @example
157
+ * guildId: name("guild_id").varchar(255).notNull()
158
+ */
159
+ const name = (alias) => new NamedColumnStarter(alias);
160
+ /**
84
161
  * Column type helpers object for schema definitions
85
162
  * @returns {typeof d} Column type helpers
86
163
  */
@@ -96,9 +173,10 @@ const d = {
96
173
  timestamp,
97
174
  decimal,
98
175
  float,
99
- blob
176
+ blob,
177
+ name
100
178
  };
101
179
  //#endregion
102
- export { columns_exports, d };
180
+ export { NamedColumnStarter, bigint, blob, boolean, char, columns_exports, d, datetime, decimal, float, integer, json, name, text, timestamp, varchar };
103
181
 
104
182
  //# sourceMappingURL=index.mjs.map
@@ -1 +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"}
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 * Starter class for creating columns with a pre-set database column name\n * @example\n * // Start with name, then pick column type\n * guildId: name(\"guild_id\").varchar(255)\n */\nexport class NamedColumnStarter {\n private _alias: string;\n\n constructor(alias: string) {\n this._alias = alias;\n }\n\n /** Create an INTEGER column with this database column name */\n integer(): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"integer\").name(this._alias);\n }\n\n /** Create a BIGINT column with this database column name */\n bigint(): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"bigint\").name(this._alias);\n }\n\n /** Create a VARCHAR column with this database column name\n * @param {number} [length=255] - Maximum character length\n */\n varchar(length = 255): ColumnBuilder<string> {\n return new ColumnBuilder<string>(\"varchar\", length).name(this._alias);\n }\n\n /** Create a CHAR column with this database column name\n * @param {number} [length=1] - Fixed character length\n */\n char(length = 1): ColumnBuilder<string> {\n return new ColumnBuilder<string>(\"char\", length).name(this._alias);\n }\n\n /** Create a TEXT column with this database column name */\n text(): ColumnBuilder<string> {\n return new ColumnBuilder<string>(\"text\").name(this._alias);\n }\n\n /** Create a BOOLEAN column with this database column name */\n boolean(): ColumnBuilder<boolean> {\n return new ColumnBuilder<boolean>(\"boolean\").name(this._alias);\n }\n\n /** Create a JSON column with this database column name */\n json(): ColumnBuilder<unknown> {\n return new ColumnBuilder<unknown>(\"json\").name(this._alias);\n }\n\n /** Create a DATETIME column with this database column name */\n datetime(): ColumnBuilder<Date> {\n return new ColumnBuilder<Date>(\"datetime\").name(this._alias);\n }\n\n /** Create a TIMESTAMP column with this database column name */\n timestamp(): ColumnBuilder<Date> {\n return new ColumnBuilder<Date>(\"timestamp\").name(this._alias);\n }\n\n /** Create a DECIMAL column with this database column name\n * @param {number} [precision=10] - Total number of digits\n * @param {number} [scale=2] - Number of decimal digits\n */\n decimal(precision = 10, scale = 2): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"decimal\", undefined, precision, scale).name(this._alias);\n }\n\n /** Create a FLOAT column with this database column name */\n float(): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"float\").name(this._alias);\n }\n\n /** Create a BLOB column with this database column name */\n blob(): ColumnBuilder<Buffer> {\n return new ColumnBuilder<Buffer>(\"blob\").name(this._alias);\n }\n}\n\n/**\n * Create a column with a custom database column name, then pick the column type\n * @param {string} alias - The column name to use in the database\n * @returns {NamedColumnStarter} A starter object to pick the column type\n * @example\n * guildId: name(\"guild_id\").varchar(255).notNull()\n */\nexport const name = (alias: string): NamedColumnStarter => new NamedColumnStarter(alias);\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 name,\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;;;;;;;AAQlF,IAAa,qBAAb,MAAgC;CAC9B;CAEA,YAAY,OAAe;AACzB,OAAK,SAAS;;;CAIhB,UAAiC;AAC/B,SAAO,IAAI,cAAsB,UAAU,CAAC,KAAK,KAAK,OAAO;;;CAI/D,SAAgC;AAC9B,SAAO,IAAI,cAAsB,SAAS,CAAC,KAAK,KAAK,OAAO;;;;;CAM9D,QAAQ,SAAS,KAA4B;AAC3C,SAAO,IAAI,cAAsB,WAAW,OAAO,CAAC,KAAK,KAAK,OAAO;;;;;CAMvE,KAAK,SAAS,GAA0B;AACtC,SAAO,IAAI,cAAsB,QAAQ,OAAO,CAAC,KAAK,KAAK,OAAO;;;CAIpE,OAA8B;AAC5B,SAAO,IAAI,cAAsB,OAAO,CAAC,KAAK,KAAK,OAAO;;;CAI5D,UAAkC;AAChC,SAAO,IAAI,cAAuB,UAAU,CAAC,KAAK,KAAK,OAAO;;;CAIhE,OAA+B;AAC7B,SAAO,IAAI,cAAuB,OAAO,CAAC,KAAK,KAAK,OAAO;;;CAI7D,WAAgC;AAC9B,SAAO,IAAI,cAAoB,WAAW,CAAC,KAAK,KAAK,OAAO;;;CAI9D,YAAiC;AAC/B,SAAO,IAAI,cAAoB,YAAY,CAAC,KAAK,KAAK,OAAO;;;;;;CAO/D,QAAQ,YAAY,IAAI,QAAQ,GAA0B;AACxD,SAAO,IAAI,cAAsB,WAAW,KAAA,GAAW,WAAW,MAAM,CAAC,KAAK,KAAK,OAAO;;;CAI5F,QAA+B;AAC7B,SAAO,IAAI,cAAsB,QAAQ,CAAC,KAAK,KAAK,OAAO;;;CAI7D,OAA8B;AAC5B,SAAO,IAAI,cAAsB,OAAO,CAAC,KAAK,KAAK,OAAO;;;;;;;;;;AAW9D,MAAa,QAAQ,UAAsC,IAAI,mBAAmB,MAAM;;;;;AAMxF,MAAa,IAAI;CACf;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD"}
@@ -6,6 +6,8 @@ const require_errors = require("../errors.cjs");
6
6
  var SchemaRegistry = class {
7
7
  tables = /* @__PURE__ */ new Map();
8
8
  definitions = /* @__PURE__ */ new Map();
9
+ columnMaps = /* @__PURE__ */ new Map();
10
+ reverseColumnMaps = /* @__PURE__ */ new Map();
9
11
  relations = /* @__PURE__ */ new Map();
10
12
  /**
11
13
  * Register table definitions and resolve all deferred references
@@ -19,12 +21,18 @@ var SchemaRegistry = class {
19
21
  name: schema.__name,
20
22
  columns: [...schema.__columns]
21
23
  });
24
+ const colMap = schema.__columnMap ?? {};
25
+ this.columnMaps.set(schema.__name, colMap);
26
+ const reverseMap = {};
27
+ for (const [codeKey, dbName] of Object.entries(colMap)) reverseMap[dbName] = codeKey;
28
+ this.reverseColumnMaps.set(schema.__name, reverseMap);
22
29
  }
23
30
  for (const schema of schemas) for (const ref of schema.__deferredRefs) {
24
31
  const resolved = ref.resolve();
25
32
  if (!resolved.table || !resolved.column) throw new require_errors.SchemaError(`Failed to resolve reference for ${schema.__name}.${ref.columnName}`);
26
33
  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);
34
+ const dbColumnName = (this.columnMaps.get(schema.__name) ?? {})[ref.columnName] ?? ref.columnName;
35
+ const column = schema.__columns.find((c) => c.name === dbColumnName);
28
36
  if (column) column.references = {
29
37
  table: resolved.table,
30
38
  column: resolved.column,
@@ -37,7 +45,7 @@ var SchemaRegistry = class {
37
45
  this.relations.get(schema.__name).push({
38
46
  from: {
39
47
  table: schema.__name,
40
- column: ref.columnName
48
+ column: dbColumnName
41
49
  },
42
50
  to: {
43
51
  table: resolved.table,
@@ -54,7 +62,7 @@ var SchemaRegistry = class {
54
62
  },
55
63
  to: {
56
64
  table: schema.__name,
57
- column: ref.columnName
65
+ column: dbColumnName
58
66
  },
59
67
  relationName: reverseRelationName
60
68
  });
@@ -84,7 +92,7 @@ var SchemaRegistry = class {
84
92
  return this.relations.get(tableName) ?? [];
85
93
  }
86
94
  /**
87
- * Get the primary key column name for a table
95
+ * Get the primary key column name for a table (returns DB column name)
88
96
  * @param {string} tableName - Table name
89
97
  * @returns {string | null} The primary key column name or null
90
98
  */
@@ -94,6 +102,22 @@ var SchemaRegistry = class {
94
102
  for (const col of table.columns) if (col.primaryKey) return col.name;
95
103
  return null;
96
104
  }
105
+ /**
106
+ * Get the column name map (code key -> DB column name) for a table
107
+ * @param {string} tableName - Table name
108
+ * @returns {Record<string, string>} Column name map
109
+ */
110
+ getColumnMap(tableName) {
111
+ return this.columnMaps.get(tableName) ?? {};
112
+ }
113
+ /**
114
+ * Get the reverse column name map (DB column name -> code key) for a table
115
+ * @param {string} tableName - Table name
116
+ * @returns {Record<string, string>} Reverse column name map
117
+ */
118
+ getReverseColumnMap(tableName) {
119
+ return this.reverseColumnMaps.get(tableName) ?? {};
120
+ }
97
121
  };
98
122
  //#endregion
99
123
  exports.SchemaRegistry = SchemaRegistry;
@@ -1 +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"}
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 columnMaps = new Map<string, Record<string, string>>();\n private reverseColumnMaps = new Map<string, Record<string, string>>();\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 const colMap: Record<string, string> = schema.__columnMap ?? {};\n this.columnMaps.set(schema.__name, colMap);\n const reverseMap: Record<string, string> = {};\n for (const [codeKey, dbName] of Object.entries(colMap)) {\n reverseMap[dbName] = codeKey;\n }\n this.reverseColumnMaps.set(schema.__name, reverseMap);\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 colMap = this.columnMaps.get(schema.__name) ?? {};\n const dbColumnName = colMap[ref.columnName] ?? ref.columnName;\n const column = schema.__columns.find((c: any) => c.name === dbColumnName);\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: dbColumnName },\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: dbColumnName },\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 (returns DB column name)\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 /**\n * Get the column name map (code key -> DB column name) for a table\n * @param {string} tableName - Table name\n * @returns {Record<string, string>} Column name map\n */\n getColumnMap(tableName: string): Record<string, string> {\n return this.columnMaps.get(tableName) ?? {};\n }\n\n /**\n * Get the reverse column name map (DB column name -> code key) for a table\n * @param {string} tableName - Table name\n * @returns {Record<string, string>} Reverse column name map\n */\n getReverseColumnMap(tableName: string): Record<string, string> {\n return this.reverseColumnMaps.get(tableName) ?? {};\n }\n}\n"],"mappings":";;;;;AAMA,IAAa,iBAAb,MAA4B;CAC1B,yBAAiB,IAAI,KAA4B;CACjD,8BAAsB,IAAI,KAA8B;CACxD,6BAAqB,IAAI,KAAqC;CAC9D,oCAA4B,IAAI,KAAqC;CACrE,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;GAEF,MAAM,SAAiC,OAAO,eAAe,EAAE;AAC/D,QAAK,WAAW,IAAI,OAAO,QAAQ,OAAO;GAC1C,MAAM,aAAqC,EAAE;AAC7C,QAAK,MAAM,CAAC,SAAS,WAAW,OAAO,QAAQ,OAAO,CACpD,YAAW,UAAU;AAEvB,QAAK,kBAAkB,IAAI,OAAO,QAAQ,WAAW;;AAGvD,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;GAIH,MAAM,gBADS,KAAK,WAAW,IAAI,OAAO,OAAO,IAAI,EAAE,EAC3B,IAAI,eAAe,IAAI;GACnD,MAAM,SAAS,OAAO,UAAU,MAAM,MAAW,EAAE,SAAS,aAAa;AACzE,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;KAAc;IACpD,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;KAAc;IAClD,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;;;;;;;CAQT,aAAa,WAA2C;AACtD,SAAO,KAAK,WAAW,IAAI,UAAU,IAAI,EAAE;;;;;;;CAQ7C,oBAAoB,WAA2C;AAC7D,SAAO,KAAK,kBAAkB,IAAI,UAAU,IAAI,EAAE"}
@@ -7,6 +7,8 @@ import { TableDefinition, TableMetadata } from "../types.cjs";
7
7
  declare class SchemaRegistry {
8
8
  private tables;
9
9
  private definitions;
10
+ private columnMaps;
11
+ private reverseColumnMaps;
10
12
  private relations;
11
13
  /**
12
14
  * Register table definitions and resolve all deferred references
@@ -41,11 +43,23 @@ declare class SchemaRegistry {
41
43
  relationName: string;
42
44
  }>;
43
45
  /**
44
- * Get the primary key column name for a table
46
+ * Get the primary key column name for a table (returns DB column name)
45
47
  * @param {string} tableName - Table name
46
48
  * @returns {string | null} The primary key column name or null
47
49
  */
48
50
  getPrimaryKey(tableName: string): string | null;
51
+ /**
52
+ * Get the column name map (code key -> DB column name) for a table
53
+ * @param {string} tableName - Table name
54
+ * @returns {Record<string, string>} Column name map
55
+ */
56
+ getColumnMap(tableName: string): Record<string, string>;
57
+ /**
58
+ * Get the reverse column name map (DB column name -> code key) for a table
59
+ * @param {string} tableName - Table name
60
+ * @returns {Record<string, string>} Reverse column name map
61
+ */
62
+ getReverseColumnMap(tableName: string): Record<string, string>;
49
63
  }
50
64
  //#endregion
51
65
  export { SchemaRegistry };