xansql 1.0.6 → 1.0.8

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.
@@ -123,9 +123,6 @@ class Migration {
123
123
  else if (engine === 'sqlite') {
124
124
  sql += col(column, "INTEGER PRIMARY KEY AUTOINCREMENT");
125
125
  }
126
- else if (engine === 'mssql') {
127
- sql += col(column, "INT IDENTITY(1,1) PRIMARY KEY");
128
- }
129
126
  }
130
127
  else if (field instanceof xt_fields_Schema) {
131
128
  if (engine === 'mysql') {
@@ -178,9 +175,6 @@ class Migration {
178
175
  else if (engine === "sqlite") {
179
176
  sql += col(column, "INTEGER"); // SQLite has no BOOLEAN → use INTEGER (0/1)
180
177
  }
181
- else if (engine === "mssql") {
182
- sql += col(column, "BIT"); // MSSQL uses BIT for boolean
183
- }
184
178
  }
185
179
  else if (field instanceof xt_fields_Date) {
186
180
  if (engine === "mysql") {
@@ -192,27 +186,20 @@ class Migration {
192
186
  else if (engine === "sqlite") {
193
187
  sql += col(column, "TEXT"); // store ISO string (SQLite has no native DATETIME)
194
188
  }
195
- else if (engine === "mssql") {
196
- sql += col(column, "DATETIME2");
197
- }
198
189
  }
199
190
  else if (field instanceof xt_fields_Enum) {
200
191
  if (engine === "mysql") {
201
- sql += col(column, `ENUM(${field.values.map((v) => utils_index.quote(engine, v)).join(', ')})`);
192
+ sql += col(column, `ENUM(${field.values.map((v) => `'${utils_index.escapeSqlValue(v)}'`).join(', ')})`);
202
193
  }
203
194
  else if (engine === "postgresql") {
204
- const enumName = `${column}_enum`;
205
- sql += `CREATE TYPE ${enumName} AS ENUM (${field.values.map((v) => utils_index.quote(engine, v)).join(', ')}); `;
195
+ const enumName = `${table}_${column}_enum`;
196
+ sql += `CREATE TYPE ${enumName} AS ENUM (${field.values.map((v) => `'${utils_index.escapeSqlValue(v)}'`).join(', ')}); `;
206
197
  sql += col(column, enumName);
207
198
  }
208
199
  else if (engine === "sqlite") {
209
- const values = field.values.map((v) => utils_index.quote(engine, v)).join(", ");
200
+ const values = field.values.map((v) => `'${utils_index.escapeSqlValue(v)}'`).join(", ");
210
201
  sql += `"${column}" TEXT CHECK("${column}" IN (${values})) ${nullable} ${unique}, `;
211
202
  }
212
- else if (engine === "mssql") {
213
- const values = field.values.map((v) => utils_index.quote(engine, v)).join(", ");
214
- sql += `"${column}" NVARCHAR(255) CHECK("${column}" IN (${values})) ${nullable} ${unique}, `;
215
- }
216
203
  }
217
204
  else if (field instanceof xt_fields_Object || field instanceof xt_fields_Record || field instanceof xt_fields_Tuple || field instanceof xt_fields_Union) {
218
205
  sql += col(column, "TEXT");
@@ -1 +1 @@
1
- {"version":3,"file":"TableMigration.cjs","sources":["../../../../src/core/classes/Migration/TableMigration.ts"],"sourcesContent":["import Model from \"../../../model\";\nimport XqlArray from \"../../../xt/fields/Array\";\nimport XqlBoolean from \"../../../xt/fields/Boolean\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlEnum from \"../../../xt/fields/Enum\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport XqlNumber from \"../../../xt/fields/Number\";\nimport XqlObject from \"../../../xt/fields/Object\";\nimport XqlRecord from \"../../../xt/fields/Record\";\nimport XqlSchema from \"../../../xt/fields/Schema\";\nimport XqlString from \"../../../xt/fields/String\";\nimport XqlTuple from \"../../../xt/fields/Tuple\";\nimport XqlUnion from \"../../../xt/fields/Union\";\nimport { quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\nimport XansqlError from \"../../XansqlError\";\nimport Foreign from \"../ForeignInfo\";\nimport ForeignKeyMigration from \"./ForeingMigration\";\nimport IndexMigration from \"./IndexMigration\";\n\nclass Migration {\n xansql: Xansql;\n readonly ForeignKeyMigration: ForeignKeyMigration\n readonly IndexMigration: IndexMigration\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.ForeignKeyMigration = new ForeignKeyMigration(xansql);\n this.IndexMigration = new IndexMigration(xansql);\n }\n\n statements() {\n const engine = this.xansql.config.dialect.engine;\n const models = this.xansql.models;\n\n const options: string[] = []\n const tables: ({ table: string, sql: string })[] = [];\n const indexes: ({ table: string, sql: string })[] = [];\n\n if (engine === 'sqlite') {\n options.push(`PRAGMA foreign_keys = ON;`);\n options.push(`PRAGMA journal_mode = WAL;`);\n options.push(`PRAGMA wal_autocheckpoint = 1000;`);\n options.push(`PRAGMA synchronous = NORMAL;`);\n } else if (engine === 'postgresql') {\n options.push(`SET client_min_messages TO WARNING;`);\n options.push(`SET standard_conforming_strings = ON;`);\n } else if (engine === 'mysql') {\n options.push(`SET sql_mode = 'STRICT_ALL_TABLES';`);\n options.push(`SET FOREIGN_KEY_CHECKS = 1;`);\n options.push(`SET sql_safe_updates = 1;`);\n }\n\n for (const table of models.keys()) {\n const model = models.get(table);\n const { sql, indexes: modelIndexes } = this.buildCreate(model!);\n indexes.push(...modelIndexes);\n tables.push({\n table,\n sql\n });\n }\n\n return {\n options,\n tables,\n indexes\n }\n }\n\n buildCreate(model: Model) {\n const engine = this.xansql.config.dialect.engine;\n let indexes: ({ table: string, sql: string })[] = [];\n const table = model.table;\n const schema = model?.schema || {};\n let sqls: string[] = [];\n\n for (const column in schema) {\n const field = schema[column];\n const meta = field.meta || {};\n const sql = this.buildColumn(table, column);\n sql && sqls.push(sql);\n\n if (Foreign.isSchema(field)) {\n const info = Foreign.get(model!, column)\n const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);\n if (fk) {\n sqls.push(fk);\n }\n }\n\n if (meta.index && !meta.unique) {\n const indexSql = this.IndexMigration.buildCreate(table, column);\n indexes.push({ table, sql: indexSql });\n }\n }\n\n let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;\n if (engine === 'mysql') {\n sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\n } else {\n sql += ` ;`;\n }\n\n return {\n sql,\n indexes\n }\n }\n\n buildDrop(model: any) {\n const engine = this.xansql.config.dialect.engine;\n const table = model.table;\n let sql = `DROP TABLE IF EXISTS ${quote(engine, table)};`;\n return sql;\n }\n\n buildColumn(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table);\n const field = model?.schema[column];\n const meta = field?.meta || {};\n const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';\n const unique = meta.unique ? 'UNIQUE' : '';\n const col = (column: string, sqlType: string) => {\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${unique}`.trim()\n };\n let sql = ''\n if (field instanceof XqlIDField) {\n if (engine === 'mysql') {\n sql += col(column, \"INT AUTO_INCREMENT PRIMARY KEY\");\n } else if (engine === 'postgresql') {\n sql += col(column, \"SERIAL PRIMARY KEY\")\n } else if (engine === 'sqlite') {\n sql += col(column, \"INTEGER PRIMARY KEY AUTOINCREMENT\")\n } else if (engine === 'mssql') {\n sql += col(column, \"INT IDENTITY(1,1) PRIMARY KEY\")\n }\n } else if (field instanceof XqlSchema) {\n if (engine === 'mysql') {\n sql += col(column, \"INT\")\n } else if (engine === 'postgresql' || engine === 'sqlite') {\n sql += col(column, \"INTEGER\")\n }\n } else if (field instanceof XqlString) {\n let length = meta.length || meta.max\n if (meta.text || length > 65535 || engine === 'sqlite') {\n sql += col(column, \"TEXT\")\n } else {\n sql += col(column, `VARCHAR(${length || 255})`)\n }\n } else if (field instanceof XqlFile) {\n sql += col(column, \"VARCHAR(255)\")\n } else if (field instanceof XqlNumber) {\n if (engine === \"mysql\") {\n if (meta.integer) {\n sql += col(column, \"INT\")\n } else if (meta.float) {\n sql += col(column, \"FLOAT\")\n } else {\n sql += col(column, \"DECIMAL(10, 2)\")\n }\n } else if (engine === \"postgresql\" || engine === \"sqlite\") {\n if (meta.integer) {\n sql += col(column, \"INTEGER\")\n } else if (meta.float) {\n sql += col(column, \"REAL\")\n } else {\n sql += col(column, engine === \"sqlite\" ? \"NUMERIC\" : \"NUMERIC(10, 2)\")\n }\n }\n } else if (field instanceof XqlBoolean) {\n if (engine === \"mysql\" || engine === \"postgresql\") {\n sql += col(column, \"BOOLEAN\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"INTEGER\") // SQLite has no BOOLEAN → use INTEGER (0/1)\n } else if (engine === \"mssql\") {\n sql += col(column, \"BIT\") // MSSQL uses BIT for boolean\n }\n } else if (field instanceof XqlDate) {\n if (engine === \"mysql\") {\n sql += col(column, \"DATETIME\")\n } else if (engine === \"postgresql\") {\n sql += col(column, \"TIMESTAMP\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"TEXT\") // store ISO string (SQLite has no native DATETIME)\n } else if (engine === \"mssql\") {\n sql += col(column, \"DATETIME2\")\n }\n } else if (field instanceof XqlEnum) {\n if (engine === \"mysql\") {\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => quote(engine, v)).join(', ')})`)\n } else if (engine === \"postgresql\") {\n const enumName = `${column}_enum`;\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => quote(engine, v)).join(', ')}); `\n sql += col(column, enumName)\n } else if (engine === \"sqlite\") {\n const values = (field as any).values.map((v: any) => quote(engine, v)).join(\", \");\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\n } else if (engine === \"mssql\") {\n const values = (field as any).values.map((v: any) => quote(engine, v)).join(\", \");\n sql += `\"${column}\" NVARCHAR(255) CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\n }\n } else if (field instanceof XqlObject || field instanceof XqlRecord || field instanceof XqlTuple || field instanceof XqlUnion) {\n sql += col(column, \"TEXT\")\n } else if (field instanceof XqlArray) {\n const arrayType = (field as any).type;\n const isSchemaArray = arrayType instanceof XqlSchema;\n if (!isSchemaArray) {\n sql += col(column, \"TEXT\")\n }\n } else {\n throw new XansqlError({\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\n model: table,\n column\n });\n }\n return sql;\n }\n}\n\nexport default Migration"],"names":["ForeignKeyMigration","IndexMigration","Foreign","quote","XqlIDField","XqlSchema","XqlString","XqlFile","XqlNumber","XqlBoolean","XqlDate","XqlEnum","XqlObject","XqlRecord","XqlTuple","XqlUnion","XqlArray","XansqlError"],"mappings":"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"}
1
+ {"version":3,"file":"TableMigration.cjs","sources":["../../../../src/core/classes/Migration/TableMigration.ts"],"sourcesContent":["import Model from \"../../../model\";\nimport XqlArray from \"../../../xt/fields/Array\";\nimport XqlBoolean from \"../../../xt/fields/Boolean\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlEnum from \"../../../xt/fields/Enum\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport XqlNumber from \"../../../xt/fields/Number\";\nimport XqlObject from \"../../../xt/fields/Object\";\nimport XqlRecord from \"../../../xt/fields/Record\";\nimport XqlSchema from \"../../../xt/fields/Schema\";\nimport XqlString from \"../../../xt/fields/String\";\nimport XqlTuple from \"../../../xt/fields/Tuple\";\nimport XqlUnion from \"../../../xt/fields/Union\";\nimport { escapeSqlValue, quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\nimport XansqlError from \"../../XansqlError\";\nimport Foreign from \"../ForeignInfo\";\nimport ForeignKeyMigration from \"./ForeingMigration\";\nimport IndexMigration from \"./IndexMigration\";\n\nclass Migration {\n xansql: Xansql;\n readonly ForeignKeyMigration: ForeignKeyMigration\n readonly IndexMigration: IndexMigration\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.ForeignKeyMigration = new ForeignKeyMigration(xansql);\n this.IndexMigration = new IndexMigration(xansql);\n }\n\n statements() {\n const engine = this.xansql.config.dialect.engine;\n const models = this.xansql.models;\n\n const options: string[] = []\n const tables: ({ table: string, sql: string })[] = [];\n const indexes: ({ table: string, sql: string })[] = [];\n\n if (engine === 'sqlite') {\n options.push(`PRAGMA foreign_keys = ON;`);\n options.push(`PRAGMA journal_mode = WAL;`);\n options.push(`PRAGMA wal_autocheckpoint = 1000;`);\n options.push(`PRAGMA synchronous = NORMAL;`);\n } else if (engine === 'postgresql') {\n options.push(`SET client_min_messages TO WARNING;`);\n options.push(`SET standard_conforming_strings = ON;`);\n } else if (engine === 'mysql') {\n options.push(`SET sql_mode = 'STRICT_ALL_TABLES';`);\n options.push(`SET FOREIGN_KEY_CHECKS = 1;`);\n options.push(`SET sql_safe_updates = 1;`);\n }\n\n for (const table of models.keys()) {\n const model = models.get(table);\n const { sql, indexes: modelIndexes } = this.buildCreate(model!);\n indexes.push(...modelIndexes);\n tables.push({\n table,\n sql\n });\n }\n\n return {\n options,\n tables,\n indexes\n }\n }\n\n buildCreate(model: Model) {\n const engine = this.xansql.config.dialect.engine;\n let indexes: ({ table: string, sql: string })[] = [];\n const table = model.table;\n const schema = model?.schema || {};\n let sqls: string[] = [];\n\n for (const column in schema) {\n const field = schema[column];\n const meta = field.meta || {};\n const sql = this.buildColumn(table, column);\n sql && sqls.push(sql);\n\n if (Foreign.isSchema(field)) {\n const info = Foreign.get(model!, column)\n const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);\n if (fk) {\n sqls.push(fk);\n }\n }\n\n if (meta.index && !meta.unique) {\n const indexSql = this.IndexMigration.buildCreate(table, column);\n indexes.push({ table, sql: indexSql });\n }\n }\n\n let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;\n if (engine === 'mysql') {\n sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\n } else {\n sql += ` ;`;\n }\n\n return {\n sql,\n indexes\n }\n }\n\n buildDrop(model: any) {\n const engine = this.xansql.config.dialect.engine;\n const table = model.table;\n let sql = `DROP TABLE IF EXISTS ${quote(engine, table)};`;\n return sql;\n }\n\n buildColumn(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table);\n const field = model?.schema[column];\n const meta = field?.meta || {};\n const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';\n const unique = meta.unique ? 'UNIQUE' : '';\n const col = (column: string, sqlType: string) => {\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${unique}`.trim()\n };\n let sql = ''\n if (field instanceof XqlIDField) {\n if (engine === 'mysql') {\n sql += col(column, \"INT AUTO_INCREMENT PRIMARY KEY\");\n } else if (engine === 'postgresql') {\n sql += col(column, \"SERIAL PRIMARY KEY\")\n } else if (engine === 'sqlite') {\n sql += col(column, \"INTEGER PRIMARY KEY AUTOINCREMENT\")\n }\n } else if (field instanceof XqlSchema) {\n if (engine === 'mysql') {\n sql += col(column, \"INT\")\n } else if (engine === 'postgresql' || engine === 'sqlite') {\n sql += col(column, \"INTEGER\")\n }\n } else if (field instanceof XqlString) {\n let length = meta.length || meta.max\n if (meta.text || length > 65535 || engine === 'sqlite') {\n sql += col(column, \"TEXT\")\n } else {\n sql += col(column, `VARCHAR(${length || 255})`)\n }\n } else if (field instanceof XqlFile) {\n sql += col(column, \"VARCHAR(255)\")\n } else if (field instanceof XqlNumber) {\n if (engine === \"mysql\") {\n if (meta.integer) {\n sql += col(column, \"INT\")\n } else if (meta.float) {\n sql += col(column, \"FLOAT\")\n } else {\n sql += col(column, \"DECIMAL(10, 2)\")\n }\n } else if (engine === \"postgresql\" || engine === \"sqlite\") {\n if (meta.integer) {\n sql += col(column, \"INTEGER\")\n } else if (meta.float) {\n sql += col(column, \"REAL\")\n } else {\n sql += col(column, engine === \"sqlite\" ? \"NUMERIC\" : \"NUMERIC(10, 2)\")\n }\n }\n } else if (field instanceof XqlBoolean) {\n if (engine === \"mysql\" || engine === \"postgresql\") {\n sql += col(column, \"BOOLEAN\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"INTEGER\") // SQLite has no BOOLEAN → use INTEGER (0/1)\n }\n } else if (field instanceof XqlDate) {\n if (engine === \"mysql\") {\n sql += col(column, \"DATETIME\")\n } else if (engine === \"postgresql\") {\n sql += col(column, \"TIMESTAMP\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"TEXT\") // store ISO string (SQLite has no native DATETIME)\n }\n } else if (field instanceof XqlEnum) {\n if (engine === \"mysql\") {\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')})`)\n } else if (engine === \"postgresql\") {\n const enumName = `${table}_${column}_enum`;\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')}); `\n sql += col(column, enumName)\n } else if (engine === \"sqlite\") {\n const values = (field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(\", \");\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\n }\n } else if (field instanceof XqlObject || field instanceof XqlRecord || field instanceof XqlTuple || field instanceof XqlUnion) {\n sql += col(column, \"TEXT\")\n } else if (field instanceof XqlArray) {\n const arrayType = (field as any).type;\n const isSchemaArray = arrayType instanceof XqlSchema;\n if (!isSchemaArray) {\n sql += col(column, \"TEXT\")\n }\n } else {\n throw new XansqlError({\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\n model: table,\n column\n });\n }\n return sql;\n }\n}\n\nexport default Migration"],"names":["ForeignKeyMigration","IndexMigration","Foreign","quote","XqlIDField","XqlSchema","XqlString","XqlFile","XqlNumber","XqlBoolean","XqlDate","XqlEnum","escapeSqlValue","XqlObject","XqlRecord","XqlTuple","XqlUnion","XqlArray","XansqlError"],"mappings":"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"}
@@ -11,7 +11,7 @@ import XqlSchema from '../../../xt/fields/Schema.mjs';
11
11
  import XqlString from '../../../xt/fields/String.mjs';
12
12
  import XqlTuple from '../../../xt/fields/Tuple.mjs';
13
13
  import XqlUnion from '../../../xt/fields/Union.mjs';
14
- import { quote } from '../../../utils/index.mjs';
14
+ import { quote, escapeSqlValue } from '../../../utils/index.mjs';
15
15
  import XansqlError from '../../XansqlError.mjs';
16
16
  import Foreign from '../ForeignInfo.mjs';
17
17
  import ForeignKeyMigration from './ForeingMigration.mjs';
@@ -121,9 +121,6 @@ class Migration {
121
121
  else if (engine === 'sqlite') {
122
122
  sql += col(column, "INTEGER PRIMARY KEY AUTOINCREMENT");
123
123
  }
124
- else if (engine === 'mssql') {
125
- sql += col(column, "INT IDENTITY(1,1) PRIMARY KEY");
126
- }
127
124
  }
128
125
  else if (field instanceof XqlSchema) {
129
126
  if (engine === 'mysql') {
@@ -176,9 +173,6 @@ class Migration {
176
173
  else if (engine === "sqlite") {
177
174
  sql += col(column, "INTEGER"); // SQLite has no BOOLEAN → use INTEGER (0/1)
178
175
  }
179
- else if (engine === "mssql") {
180
- sql += col(column, "BIT"); // MSSQL uses BIT for boolean
181
- }
182
176
  }
183
177
  else if (field instanceof XqlDate) {
184
178
  if (engine === "mysql") {
@@ -190,27 +184,20 @@ class Migration {
190
184
  else if (engine === "sqlite") {
191
185
  sql += col(column, "TEXT"); // store ISO string (SQLite has no native DATETIME)
192
186
  }
193
- else if (engine === "mssql") {
194
- sql += col(column, "DATETIME2");
195
- }
196
187
  }
197
188
  else if (field instanceof XqlEnum) {
198
189
  if (engine === "mysql") {
199
- sql += col(column, `ENUM(${field.values.map((v) => quote(engine, v)).join(', ')})`);
190
+ sql += col(column, `ENUM(${field.values.map((v) => `'${escapeSqlValue(v)}'`).join(', ')})`);
200
191
  }
201
192
  else if (engine === "postgresql") {
202
- const enumName = `${column}_enum`;
203
- sql += `CREATE TYPE ${enumName} AS ENUM (${field.values.map((v) => quote(engine, v)).join(', ')}); `;
193
+ const enumName = `${table}_${column}_enum`;
194
+ sql += `CREATE TYPE ${enumName} AS ENUM (${field.values.map((v) => `'${escapeSqlValue(v)}'`).join(', ')}); `;
204
195
  sql += col(column, enumName);
205
196
  }
206
197
  else if (engine === "sqlite") {
207
- const values = field.values.map((v) => quote(engine, v)).join(", ");
198
+ const values = field.values.map((v) => `'${escapeSqlValue(v)}'`).join(", ");
208
199
  sql += `"${column}" TEXT CHECK("${column}" IN (${values})) ${nullable} ${unique}, `;
209
200
  }
210
- else if (engine === "mssql") {
211
- const values = field.values.map((v) => quote(engine, v)).join(", ");
212
- sql += `"${column}" NVARCHAR(255) CHECK("${column}" IN (${values})) ${nullable} ${unique}, `;
213
- }
214
201
  }
215
202
  else if (field instanceof XqlObject || field instanceof XqlRecord || field instanceof XqlTuple || field instanceof XqlUnion) {
216
203
  sql += col(column, "TEXT");
@@ -1 +1 @@
1
- {"version":3,"file":"TableMigration.mjs","sources":["../../../../src/core/classes/Migration/TableMigration.ts"],"sourcesContent":["import Model from \"../../../model\";\nimport XqlArray from \"../../../xt/fields/Array\";\nimport XqlBoolean from \"../../../xt/fields/Boolean\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlEnum from \"../../../xt/fields/Enum\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport XqlNumber from \"../../../xt/fields/Number\";\nimport XqlObject from \"../../../xt/fields/Object\";\nimport XqlRecord from \"../../../xt/fields/Record\";\nimport XqlSchema from \"../../../xt/fields/Schema\";\nimport XqlString from \"../../../xt/fields/String\";\nimport XqlTuple from \"../../../xt/fields/Tuple\";\nimport XqlUnion from \"../../../xt/fields/Union\";\nimport { quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\nimport XansqlError from \"../../XansqlError\";\nimport Foreign from \"../ForeignInfo\";\nimport ForeignKeyMigration from \"./ForeingMigration\";\nimport IndexMigration from \"./IndexMigration\";\n\nclass Migration {\n xansql: Xansql;\n readonly ForeignKeyMigration: ForeignKeyMigration\n readonly IndexMigration: IndexMigration\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.ForeignKeyMigration = new ForeignKeyMigration(xansql);\n this.IndexMigration = new IndexMigration(xansql);\n }\n\n statements() {\n const engine = this.xansql.config.dialect.engine;\n const models = this.xansql.models;\n\n const options: string[] = []\n const tables: ({ table: string, sql: string })[] = [];\n const indexes: ({ table: string, sql: string })[] = [];\n\n if (engine === 'sqlite') {\n options.push(`PRAGMA foreign_keys = ON;`);\n options.push(`PRAGMA journal_mode = WAL;`);\n options.push(`PRAGMA wal_autocheckpoint = 1000;`);\n options.push(`PRAGMA synchronous = NORMAL;`);\n } else if (engine === 'postgresql') {\n options.push(`SET client_min_messages TO WARNING;`);\n options.push(`SET standard_conforming_strings = ON;`);\n } else if (engine === 'mysql') {\n options.push(`SET sql_mode = 'STRICT_ALL_TABLES';`);\n options.push(`SET FOREIGN_KEY_CHECKS = 1;`);\n options.push(`SET sql_safe_updates = 1;`);\n }\n\n for (const table of models.keys()) {\n const model = models.get(table);\n const { sql, indexes: modelIndexes } = this.buildCreate(model!);\n indexes.push(...modelIndexes);\n tables.push({\n table,\n sql\n });\n }\n\n return {\n options,\n tables,\n indexes\n }\n }\n\n buildCreate(model: Model) {\n const engine = this.xansql.config.dialect.engine;\n let indexes: ({ table: string, sql: string })[] = [];\n const table = model.table;\n const schema = model?.schema || {};\n let sqls: string[] = [];\n\n for (const column in schema) {\n const field = schema[column];\n const meta = field.meta || {};\n const sql = this.buildColumn(table, column);\n sql && sqls.push(sql);\n\n if (Foreign.isSchema(field)) {\n const info = Foreign.get(model!, column)\n const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);\n if (fk) {\n sqls.push(fk);\n }\n }\n\n if (meta.index && !meta.unique) {\n const indexSql = this.IndexMigration.buildCreate(table, column);\n indexes.push({ table, sql: indexSql });\n }\n }\n\n let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;\n if (engine === 'mysql') {\n sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\n } else {\n sql += ` ;`;\n }\n\n return {\n sql,\n indexes\n }\n }\n\n buildDrop(model: any) {\n const engine = this.xansql.config.dialect.engine;\n const table = model.table;\n let sql = `DROP TABLE IF EXISTS ${quote(engine, table)};`;\n return sql;\n }\n\n buildColumn(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table);\n const field = model?.schema[column];\n const meta = field?.meta || {};\n const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';\n const unique = meta.unique ? 'UNIQUE' : '';\n const col = (column: string, sqlType: string) => {\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${unique}`.trim()\n };\n let sql = ''\n if (field instanceof XqlIDField) {\n if (engine === 'mysql') {\n sql += col(column, \"INT AUTO_INCREMENT PRIMARY KEY\");\n } else if (engine === 'postgresql') {\n sql += col(column, \"SERIAL PRIMARY KEY\")\n } else if (engine === 'sqlite') {\n sql += col(column, \"INTEGER PRIMARY KEY AUTOINCREMENT\")\n } else if (engine === 'mssql') {\n sql += col(column, \"INT IDENTITY(1,1) PRIMARY KEY\")\n }\n } else if (field instanceof XqlSchema) {\n if (engine === 'mysql') {\n sql += col(column, \"INT\")\n } else if (engine === 'postgresql' || engine === 'sqlite') {\n sql += col(column, \"INTEGER\")\n }\n } else if (field instanceof XqlString) {\n let length = meta.length || meta.max\n if (meta.text || length > 65535 || engine === 'sqlite') {\n sql += col(column, \"TEXT\")\n } else {\n sql += col(column, `VARCHAR(${length || 255})`)\n }\n } else if (field instanceof XqlFile) {\n sql += col(column, \"VARCHAR(255)\")\n } else if (field instanceof XqlNumber) {\n if (engine === \"mysql\") {\n if (meta.integer) {\n sql += col(column, \"INT\")\n } else if (meta.float) {\n sql += col(column, \"FLOAT\")\n } else {\n sql += col(column, \"DECIMAL(10, 2)\")\n }\n } else if (engine === \"postgresql\" || engine === \"sqlite\") {\n if (meta.integer) {\n sql += col(column, \"INTEGER\")\n } else if (meta.float) {\n sql += col(column, \"REAL\")\n } else {\n sql += col(column, engine === \"sqlite\" ? \"NUMERIC\" : \"NUMERIC(10, 2)\")\n }\n }\n } else if (field instanceof XqlBoolean) {\n if (engine === \"mysql\" || engine === \"postgresql\") {\n sql += col(column, \"BOOLEAN\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"INTEGER\") // SQLite has no BOOLEAN → use INTEGER (0/1)\n } else if (engine === \"mssql\") {\n sql += col(column, \"BIT\") // MSSQL uses BIT for boolean\n }\n } else if (field instanceof XqlDate) {\n if (engine === \"mysql\") {\n sql += col(column, \"DATETIME\")\n } else if (engine === \"postgresql\") {\n sql += col(column, \"TIMESTAMP\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"TEXT\") // store ISO string (SQLite has no native DATETIME)\n } else if (engine === \"mssql\") {\n sql += col(column, \"DATETIME2\")\n }\n } else if (field instanceof XqlEnum) {\n if (engine === \"mysql\") {\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => quote(engine, v)).join(', ')})`)\n } else if (engine === \"postgresql\") {\n const enumName = `${column}_enum`;\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => quote(engine, v)).join(', ')}); `\n sql += col(column, enumName)\n } else if (engine === \"sqlite\") {\n const values = (field as any).values.map((v: any) => quote(engine, v)).join(\", \");\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\n } else if (engine === \"mssql\") {\n const values = (field as any).values.map((v: any) => quote(engine, v)).join(\", \");\n sql += `\"${column}\" NVARCHAR(255) CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\n }\n } else if (field instanceof XqlObject || field instanceof XqlRecord || field instanceof XqlTuple || field instanceof XqlUnion) {\n sql += col(column, \"TEXT\")\n } else if (field instanceof XqlArray) {\n const arrayType = (field as any).type;\n const isSchemaArray = arrayType instanceof XqlSchema;\n if (!isSchemaArray) {\n sql += col(column, \"TEXT\")\n }\n } else {\n throw new XansqlError({\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\n model: table,\n column\n });\n }\n return sql;\n }\n}\n\nexport default Migration"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TableMigration.mjs","sources":["../../../../src/core/classes/Migration/TableMigration.ts"],"sourcesContent":["import Model from \"../../../model\";\nimport XqlArray from \"../../../xt/fields/Array\";\nimport XqlBoolean from \"../../../xt/fields/Boolean\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlEnum from \"../../../xt/fields/Enum\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport XqlNumber from \"../../../xt/fields/Number\";\nimport XqlObject from \"../../../xt/fields/Object\";\nimport XqlRecord from \"../../../xt/fields/Record\";\nimport XqlSchema from \"../../../xt/fields/Schema\";\nimport XqlString from \"../../../xt/fields/String\";\nimport XqlTuple from \"../../../xt/fields/Tuple\";\nimport XqlUnion from \"../../../xt/fields/Union\";\nimport { escapeSqlValue, quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\nimport XansqlError from \"../../XansqlError\";\nimport Foreign from \"../ForeignInfo\";\nimport ForeignKeyMigration from \"./ForeingMigration\";\nimport IndexMigration from \"./IndexMigration\";\n\nclass Migration {\n xansql: Xansql;\n readonly ForeignKeyMigration: ForeignKeyMigration\n readonly IndexMigration: IndexMigration\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.ForeignKeyMigration = new ForeignKeyMigration(xansql);\n this.IndexMigration = new IndexMigration(xansql);\n }\n\n statements() {\n const engine = this.xansql.config.dialect.engine;\n const models = this.xansql.models;\n\n const options: string[] = []\n const tables: ({ table: string, sql: string })[] = [];\n const indexes: ({ table: string, sql: string })[] = [];\n\n if (engine === 'sqlite') {\n options.push(`PRAGMA foreign_keys = ON;`);\n options.push(`PRAGMA journal_mode = WAL;`);\n options.push(`PRAGMA wal_autocheckpoint = 1000;`);\n options.push(`PRAGMA synchronous = NORMAL;`);\n } else if (engine === 'postgresql') {\n options.push(`SET client_min_messages TO WARNING;`);\n options.push(`SET standard_conforming_strings = ON;`);\n } else if (engine === 'mysql') {\n options.push(`SET sql_mode = 'STRICT_ALL_TABLES';`);\n options.push(`SET FOREIGN_KEY_CHECKS = 1;`);\n options.push(`SET sql_safe_updates = 1;`);\n }\n\n for (const table of models.keys()) {\n const model = models.get(table);\n const { sql, indexes: modelIndexes } = this.buildCreate(model!);\n indexes.push(...modelIndexes);\n tables.push({\n table,\n sql\n });\n }\n\n return {\n options,\n tables,\n indexes\n }\n }\n\n buildCreate(model: Model) {\n const engine = this.xansql.config.dialect.engine;\n let indexes: ({ table: string, sql: string })[] = [];\n const table = model.table;\n const schema = model?.schema || {};\n let sqls: string[] = [];\n\n for (const column in schema) {\n const field = schema[column];\n const meta = field.meta || {};\n const sql = this.buildColumn(table, column);\n sql && sqls.push(sql);\n\n if (Foreign.isSchema(field)) {\n const info = Foreign.get(model!, column)\n const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);\n if (fk) {\n sqls.push(fk);\n }\n }\n\n if (meta.index && !meta.unique) {\n const indexSql = this.IndexMigration.buildCreate(table, column);\n indexes.push({ table, sql: indexSql });\n }\n }\n\n let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;\n if (engine === 'mysql') {\n sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\n } else {\n sql += ` ;`;\n }\n\n return {\n sql,\n indexes\n }\n }\n\n buildDrop(model: any) {\n const engine = this.xansql.config.dialect.engine;\n const table = model.table;\n let sql = `DROP TABLE IF EXISTS ${quote(engine, table)};`;\n return sql;\n }\n\n buildColumn(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table);\n const field = model?.schema[column];\n const meta = field?.meta || {};\n const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';\n const unique = meta.unique ? 'UNIQUE' : '';\n const col = (column: string, sqlType: string) => {\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${unique}`.trim()\n };\n let sql = ''\n if (field instanceof XqlIDField) {\n if (engine === 'mysql') {\n sql += col(column, \"INT AUTO_INCREMENT PRIMARY KEY\");\n } else if (engine === 'postgresql') {\n sql += col(column, \"SERIAL PRIMARY KEY\")\n } else if (engine === 'sqlite') {\n sql += col(column, \"INTEGER PRIMARY KEY AUTOINCREMENT\")\n }\n } else if (field instanceof XqlSchema) {\n if (engine === 'mysql') {\n sql += col(column, \"INT\")\n } else if (engine === 'postgresql' || engine === 'sqlite') {\n sql += col(column, \"INTEGER\")\n }\n } else if (field instanceof XqlString) {\n let length = meta.length || meta.max\n if (meta.text || length > 65535 || engine === 'sqlite') {\n sql += col(column, \"TEXT\")\n } else {\n sql += col(column, `VARCHAR(${length || 255})`)\n }\n } else if (field instanceof XqlFile) {\n sql += col(column, \"VARCHAR(255)\")\n } else if (field instanceof XqlNumber) {\n if (engine === \"mysql\") {\n if (meta.integer) {\n sql += col(column, \"INT\")\n } else if (meta.float) {\n sql += col(column, \"FLOAT\")\n } else {\n sql += col(column, \"DECIMAL(10, 2)\")\n }\n } else if (engine === \"postgresql\" || engine === \"sqlite\") {\n if (meta.integer) {\n sql += col(column, \"INTEGER\")\n } else if (meta.float) {\n sql += col(column, \"REAL\")\n } else {\n sql += col(column, engine === \"sqlite\" ? \"NUMERIC\" : \"NUMERIC(10, 2)\")\n }\n }\n } else if (field instanceof XqlBoolean) {\n if (engine === \"mysql\" || engine === \"postgresql\") {\n sql += col(column, \"BOOLEAN\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"INTEGER\") // SQLite has no BOOLEAN → use INTEGER (0/1)\n }\n } else if (field instanceof XqlDate) {\n if (engine === \"mysql\") {\n sql += col(column, \"DATETIME\")\n } else if (engine === \"postgresql\") {\n sql += col(column, \"TIMESTAMP\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"TEXT\") // store ISO string (SQLite has no native DATETIME)\n }\n } else if (field instanceof XqlEnum) {\n if (engine === \"mysql\") {\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')})`)\n } else if (engine === \"postgresql\") {\n const enumName = `${table}_${column}_enum`;\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')}); `\n sql += col(column, enumName)\n } else if (engine === \"sqlite\") {\n const values = (field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(\", \");\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\n }\n } else if (field instanceof XqlObject || field instanceof XqlRecord || field instanceof XqlTuple || field instanceof XqlUnion) {\n sql += col(column, \"TEXT\")\n } else if (field instanceof XqlArray) {\n const arrayType = (field as any).type;\n const isSchemaArray = arrayType instanceof XqlSchema;\n if (!isSchemaArray) {\n sql += col(column, \"TEXT\")\n }\n } else {\n throw new XansqlError({\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\n model: table,\n column\n });\n }\n return sql;\n }\n}\n\nexport default Migration"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xansql",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "main": "./index.js",
5
5
  "module": "./index.js",
6
6
  "types": "./index.d.ts",
package/xt/index.cjs CHANGED
@@ -43,7 +43,7 @@ const xt = {
43
43
  return inst;
44
44
  },
45
45
  password: () => {
46
- const inst = xt.string().min(8).max(32).index().transform(v => utils_sha256(v).slice(0, 32));
46
+ const inst = xt.string().min(8).max(64).index().transform(v => utils_sha256(v).slice(0, 64));
47
47
  inst.strong = function () {
48
48
  inst.set("strong", (v) => {
49
49
  const hasUpperCase = /[A-Z]/.test(v);
@@ -58,7 +58,7 @@ const xt = {
58
58
  };
59
59
  return inst;
60
60
  },
61
- email: () => xt.string().email(),
61
+ email: () => xt.string().email().index().unique(),
62
62
  status: (statuses) => xt.enum(statuses).index(),
63
63
  gender: () => xt.enum(['male', 'female', 'other']).index(),
64
64
  role: (roles) => xt.enum(roles).index(),
package/xt/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/xt/index.ts"],"sourcesContent":["import { XVEnumValues, XVObjectType } from \"xanv\";\nimport XqlString from \"./fields/String\";\nimport XqlBoolean from \"./fields/Boolean\";\nimport XqlArray from \"./fields/Array\";\nimport XqlDate from \"./fields/Date\";\nimport XqlEnum from \"./fields/Enum\";\nimport XqlNumber from \"./fields/Number\";\nimport XqlObject from \"./fields/Object\";\nimport XqlRecord from \"./fields/Record\";\nimport XqlTuple from \"./fields/Tuple\";\nimport XqlUnion from \"./fields/Union\";\nimport XqlIDField from \"./fields/IDField\";\nimport XqlFile from \"./fields/File\";\nimport XqlSchema from \"./fields/Schema\";\nimport { XqlFields } from \"./types\";\nimport sha256 from \"../utils/sha256\";\n\nconst xt = {\n id: () => new XqlIDField(),\n array: (type: XqlFields, length?: number) => new XqlArray(type as any, length),\n boolean: () => new XqlBoolean(),\n date: () => new XqlDate(),\n enum: (values: XVEnumValues) => new XqlEnum(values),\n number: (length?: number) => new XqlNumber(length),\n object: (arg?: XVObjectType) => new XqlObject(arg),\n record: (key: XqlFields, value: XqlFields) => new XqlRecord(key as any, value as any),\n string: (length?: number) => new XqlString(length),\n tuple: (type: XqlFields[]) => new XqlTuple(type as any),\n union: (type: XqlFields[]) => new XqlUnion(type as any),\n file: (size?: number) => new XqlFile(size),\n schema: (table: string, column: string) => new XqlSchema(table, column),\n\n createdAt: () => xt.date().create(),\n updatedAt: () => xt.date().update(),\n // Custom Types\n name: () => {\n const inst = xt.string().min(1).max(100)\n inst.set(\"name\" as any, (v: any) => {\n const nameRegex = /^[a-zA-Z\\s'-]+$/;\n if (!nameRegex.test(v)) {\n throw new Error(\"Invalid name format.\");\n }\n });\n return inst;\n },\n password: () => {\n const inst = xt.string().min(8).max(32).index().transform(v => sha256(v).slice(0, 32));\n (inst as any).strong = function () {\n inst.set(\"strong\" as any, (v: any) => {\n const hasUpperCase = /[A-Z]/.test(v);\n const hasLowerCase = /[a-z]/.test(v);\n const hasNumber = /[0-9]/.test(v);\n const hasSpecialChar = /[!@#$%^&*(),.?\":{}|<>]/.test(v);\n\n if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) {\n throw new Error('Password should contain at least one uppercase letter, one lowercase letter, one number, and one special character');\n }\n });\n return this;\n }\n return inst;\n },\n email: () => xt.string().email(),\n status: (statuses: string[]) => xt.enum(statuses).index(),\n gender: () => xt.enum(['male', 'female', 'other']).index(),\n role: (roles: string[]) => xt.enum(roles).index(),\n username: () => {\n const inst = xt.string().index().min(3).max(30).index().unique()\n inst.set(\"username\" as any, (v: any) => {\n const usernameRegex = /^[a-zA-Z0-9._-]{3,30}$/;\n if (!usernameRegex.test(v)) {\n throw new Error(\"Invalid username format.\");\n }\n });\n return inst;\n },\n slug: () => {\n const inst = xt.string().index().min(3).max(100)\n inst.set(\"slug\" as any, (v: any) => {\n const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n if (!slugRegex.test(v)) {\n throw new Error(\"Invalid slug format.\");\n }\n });\n return inst;\n },\n url: () => {\n const inst = xt.string().max(2048).min(10)\n inst.set(\"url\" as any, (v: any) => {\n try {\n new URL(v);\n } catch {\n throw new Error(\"Invalid URL format.\");\n }\n });\n return inst;\n },\n photo: () => {\n const inst = xt.file().maxSize(2 * 1024 * 1024); // 2 MB\n inst.set(\"photo\" as any, (v: any) => {\n const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];\n if (!allowedTypes.includes(v.type)) {\n throw new Error(\"Invalid photo file type.\");\n }\n });\n return inst;\n },\n avatar: () => {\n const inst = xt.file().maxSize(2 * 1024 * 1024); // 1 MB\n inst.set(\"avatar\" as any, (v: any) => {\n const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];\n if (!allowedTypes.includes(v.type)) {\n throw new Error(\"Invalid avatar file type.\");\n }\n });\n return inst;\n },\n amount: () => xt.number().float().min(0).max(1000000000),\n phone: () => {\n const inst = xt.string().min(7).max(15)\n inst.set(\"phone\" as any, (v: any) => {\n const phoneRegex = /^\\+?[1-9]\\d{1,14}$/;\n if (!phoneRegex.test(v)) {\n throw new Error(\"Invalid phone number format.\");\n }\n });\n return inst;\n },\n title: () => xt.string().min(1).max(200),\n description: () => xt.string().max(1000),\n type: (types: string[]) => xt.enum(types).index(),\n metadata: () => xt.record(xt.string(), xt.union([xt.string(), xt.number(), xt.boolean(), xt.date()])),\n ip: () => {\n const inst = xt.string().index()\n inst.set(\"ip\" as any, (v: any) => {\n const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9]))$/;\n if (!ipv4Regex.test(v) && !ipv6Regex.test(v)) {\n throw new Error(\"Invalid IP address format.\");\n }\n });\n return inst;\n },\n\n key: () => xt.string().max(100).index().unique(),\n value: () => xt.string().max(1000),\n token: () => xt.string(64).index().unique(),\n}\n\nexport default xt;"],"names":["XqlIDField","XqlArray","XqlBoolean","XqlDate","XqlEnum","XqlNumber","XqlObject","XqlRecord","XqlString","XqlTuple","XqlUnion","XqlFile","XqlSchema","sha256"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/xt/index.ts"],"sourcesContent":["import { XVEnumValues, XVObjectType } from \"xanv\";\nimport XqlString from \"./fields/String\";\nimport XqlBoolean from \"./fields/Boolean\";\nimport XqlArray from \"./fields/Array\";\nimport XqlDate from \"./fields/Date\";\nimport XqlEnum from \"./fields/Enum\";\nimport XqlNumber from \"./fields/Number\";\nimport XqlObject from \"./fields/Object\";\nimport XqlRecord from \"./fields/Record\";\nimport XqlTuple from \"./fields/Tuple\";\nimport XqlUnion from \"./fields/Union\";\nimport XqlIDField from \"./fields/IDField\";\nimport XqlFile from \"./fields/File\";\nimport XqlSchema from \"./fields/Schema\";\nimport { XqlFields } from \"./types\";\nimport sha256 from \"../utils/sha256\";\n\nconst xt = {\n id: () => new XqlIDField(),\n array: (type: XqlFields, length?: number) => new XqlArray(type as any, length),\n boolean: () => new XqlBoolean(),\n date: () => new XqlDate(),\n enum: (values: XVEnumValues) => new XqlEnum(values),\n number: (length?: number) => new XqlNumber(length),\n object: (arg?: XVObjectType) => new XqlObject(arg),\n record: (key: XqlFields, value: XqlFields) => new XqlRecord(key as any, value as any),\n string: (length?: number) => new XqlString(length),\n tuple: (type: XqlFields[]) => new XqlTuple(type as any),\n union: (type: XqlFields[]) => new XqlUnion(type as any),\n file: (size?: number) => new XqlFile(size),\n schema: (table: string, column: string) => new XqlSchema(table, column),\n\n createdAt: () => xt.date().create(),\n updatedAt: () => xt.date().update(),\n // Custom Types\n name: () => {\n const inst = xt.string().min(1).max(100)\n inst.set(\"name\" as any, (v: any) => {\n const nameRegex = /^[a-zA-Z\\s'-]+$/;\n if (!nameRegex.test(v)) {\n throw new Error(\"Invalid name format.\");\n }\n });\n return inst;\n },\n password: () => {\n const inst = xt.string().min(8).max(64).index().transform(v => sha256(v).slice(0, 64));\n (inst as any).strong = function () {\n inst.set(\"strong\" as any, (v: any) => {\n const hasUpperCase = /[A-Z]/.test(v);\n const hasLowerCase = /[a-z]/.test(v);\n const hasNumber = /[0-9]/.test(v);\n const hasSpecialChar = /[!@#$%^&*(),.?\":{}|<>]/.test(v);\n\n if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) {\n throw new Error('Password should contain at least one uppercase letter, one lowercase letter, one number, and one special character');\n }\n });\n return this;\n }\n return inst;\n },\n email: () => xt.string().email().index().unique(),\n status: (statuses: string[]) => xt.enum(statuses).index(),\n gender: () => xt.enum(['male', 'female', 'other']).index(),\n role: (roles: string[]) => xt.enum(roles).index(),\n username: () => {\n const inst = xt.string().index().min(3).max(30).index().unique()\n inst.set(\"username\" as any, (v: any) => {\n const usernameRegex = /^[a-zA-Z0-9._-]{3,30}$/;\n if (!usernameRegex.test(v)) {\n throw new Error(\"Invalid username format.\");\n }\n });\n return inst;\n },\n slug: () => {\n const inst = xt.string().index().min(3).max(100)\n inst.set(\"slug\" as any, (v: any) => {\n const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n if (!slugRegex.test(v)) {\n throw new Error(\"Invalid slug format.\");\n }\n });\n return inst;\n },\n url: () => {\n const inst = xt.string().max(2048).min(10)\n inst.set(\"url\" as any, (v: any) => {\n try {\n new URL(v);\n } catch {\n throw new Error(\"Invalid URL format.\");\n }\n });\n return inst;\n },\n photo: () => {\n const inst = xt.file().maxSize(2 * 1024 * 1024); // 2 MB\n inst.set(\"photo\" as any, (v: any) => {\n const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];\n if (!allowedTypes.includes(v.type)) {\n throw new Error(\"Invalid photo file type.\");\n }\n });\n return inst;\n },\n avatar: () => {\n const inst = xt.file().maxSize(2 * 1024 * 1024); // 1 MB\n inst.set(\"avatar\" as any, (v: any) => {\n const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];\n if (!allowedTypes.includes(v.type)) {\n throw new Error(\"Invalid avatar file type.\");\n }\n });\n return inst;\n },\n amount: () => xt.number().float().min(0).max(1000000000),\n phone: () => {\n const inst = xt.string().min(7).max(15)\n inst.set(\"phone\" as any, (v: any) => {\n const phoneRegex = /^\\+?[1-9]\\d{1,14}$/;\n if (!phoneRegex.test(v)) {\n throw new Error(\"Invalid phone number format.\");\n }\n });\n return inst;\n },\n title: () => xt.string().min(1).max(200),\n description: () => xt.string().max(1000),\n type: (types: string[]) => xt.enum(types).index(),\n metadata: () => xt.record(xt.string(), xt.union([xt.string(), xt.number(), xt.boolean(), xt.date()])),\n ip: () => {\n const inst = xt.string().index()\n inst.set(\"ip\" as any, (v: any) => {\n const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9]))$/;\n if (!ipv4Regex.test(v) && !ipv6Regex.test(v)) {\n throw new Error(\"Invalid IP address format.\");\n }\n });\n return inst;\n },\n\n key: () => xt.string().max(100).index().unique(),\n value: () => xt.string().max(1000),\n token: () => xt.string(64).index().unique(),\n}\n\nexport default xt;"],"names":["XqlIDField","XqlArray","XqlBoolean","XqlDate","XqlEnum","XqlNumber","XqlObject","XqlRecord","XqlString","XqlTuple","XqlUnion","XqlFile","XqlSchema","sha256"],"mappings":";;;;;;;;;;;;;;;;;AAiBA,MAAM,EAAE,GAAG;AACR,IAAA,EAAE,EAAE,MAAM,IAAIA,iBAAU,EAAE;AAC1B,IAAA,KAAK,EAAE,CAAC,IAAe,EAAE,MAAe,KAAK,IAAIC,eAAQ,CAAC,IAAW,EAAE,MAAM,CAAC;AAC9E,IAAA,OAAO,EAAE,MAAM,IAAIC,iBAAU,EAAE;AAC/B,IAAA,IAAI,EAAE,MAAM,IAAIC,cAAO,EAAE;IACzB,IAAI,EAAE,CAAC,MAAoB,KAAK,IAAIC,cAAO,CAAC,MAAM,CAAC;IACnD,MAAM,EAAE,CAAC,MAAe,KAAK,IAAIC,gBAAS,CAAC,MAAM,CAAC;IAClD,MAAM,EAAE,CAAC,GAAkB,KAAK,IAAIC,gBAAS,CAAC,GAAG,CAAC;AAClD,IAAA,MAAM,EAAE,CAAC,GAAc,EAAE,KAAgB,KAAK,IAAIC,gBAAS,CAAC,GAAU,EAAE,KAAY,CAAC;IACrF,MAAM,EAAE,CAAC,MAAe,KAAK,IAAIC,gBAAS,CAAC,MAAM,CAAC;IAClD,KAAK,EAAE,CAAC,IAAiB,KAAK,IAAIC,eAAQ,CAAC,IAAW,CAAC;IACvD,KAAK,EAAE,CAAC,IAAiB,KAAK,IAAIC,eAAQ,CAAC,IAAW,CAAC;IACvD,IAAI,EAAE,CAAC,IAAa,KAAK,IAAIC,cAAO,CAAC,IAAI,CAAC;AAC1C,IAAA,MAAM,EAAE,CAAC,KAAa,EAAE,MAAc,KAAK,IAAIC,gBAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvE,SAAS,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IACnC,SAAS,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;;IAEnC,IAAI,EAAE,MAAK;AACR,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,MAAa,EAAE,CAAC,CAAM,KAAI;YAChC,MAAM,SAAS,GAAG,iBAAiB;YACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACrB,gBAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;YAC1C;AACH,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACd,CAAC;IACD,QAAQ,EAAE,MAAK;AACZ,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,IAAIC,YAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrF,IAAY,CAAC,MAAM,GAAG,YAAA;YACpB,IAAI,CAAC,GAAG,CAAC,QAAe,EAAE,CAAC,CAAM,KAAI;gBAClC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjC,MAAM,cAAc,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;AAEvD,gBAAA,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,EAAE;AAClE,oBAAA,MAAM,IAAI,KAAK,CAAC,oHAAoH,CAAC;gBACxI;AACH,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI;AACd,QAAA,CAAC;AACD,QAAA,OAAO,IAAI;IACd,CAAC;AACD,IAAA,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;AACjD,IAAA,MAAM,EAAE,CAAC,QAAkB,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;AACzD,IAAA,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE;AAC1D,IAAA,IAAI,EAAE,CAAC,KAAe,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;IACjD,QAAQ,EAAE,MAAK;QACZ,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;QAChE,IAAI,CAAC,GAAG,CAAC,UAAiB,EAAE,CAAC,CAAM,KAAI;YACpC,MAAM,aAAa,GAAG,wBAAwB;YAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACzB,gBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;YAC9C;AACH,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACd,CAAC;IACD,IAAI,EAAE,MAAK;AACR,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC,MAAa,EAAE,CAAC,CAAM,KAAI;YAChC,MAAM,SAAS,GAAG,4BAA4B;YAC9C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACrB,gBAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;YAC1C;AACH,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACd,CAAC;IACD,GAAG,EAAE,MAAK;AACP,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,KAAY,EAAE,CAAC,CAAM,KAAI;AAC/B,YAAA,IAAI;AACD,gBAAA,IAAI,GAAG,CAAC,CAAC,CAAC;YACb;AAAE,YAAA,OAAA,EAAA,EAAM;AACL,gBAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;YACzC;AACH,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACd,CAAC;IACD,KAAK,EAAE,MAAK;AACT,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC,OAAc,EAAE,CAAC,CAAM,KAAI;YACjC,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC;YAC7D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;YAC9C;AACH,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACd,CAAC;IACD,MAAM,EAAE,MAAK;AACV,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC,QAAe,EAAE,CAAC,CAAM,KAAI;YAClC,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC;YAC7D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;YAC/C;AACH,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACd,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;IACxD,KAAK,EAAE,MAAK;AACT,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,OAAc,EAAE,CAAC,CAAM,KAAI;YACjC,MAAM,UAAU,GAAG,oBAAoB;YACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACtB,gBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;YAClD;AACH,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACd,CAAC;AACD,IAAA,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AACxC,IAAA,WAAW,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC,IAAA,IAAI,EAAE,CAAC,KAAe,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;AACjD,IAAA,QAAQ,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrG,EAAE,EAAE,MAAK;QACN,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;QAChC,IAAI,CAAC,GAAG,CAAC,IAAW,EAAE,CAAC,CAAM,KAAI;YAC9B,MAAM,SAAS,GAAG,kKAAkK;YACpL,MAAM,SAAS,GAAG,yoBAAyoB;AAC3pB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAC3C,gBAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;YAChD;AACH,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACd,CAAC;AAED,IAAA,GAAG,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;AAChD,IAAA,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,IAAA,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;;;;;"}
package/xt/index.mjs CHANGED
@@ -41,7 +41,7 @@ const xt = {
41
41
  return inst;
42
42
  },
43
43
  password: () => {
44
- const inst = xt.string().min(8).max(32).index().transform(v => sha256(v).slice(0, 32));
44
+ const inst = xt.string().min(8).max(64).index().transform(v => sha256(v).slice(0, 64));
45
45
  inst.strong = function () {
46
46
  inst.set("strong", (v) => {
47
47
  const hasUpperCase = /[A-Z]/.test(v);
@@ -56,7 +56,7 @@ const xt = {
56
56
  };
57
57
  return inst;
58
58
  },
59
- email: () => xt.string().email(),
59
+ email: () => xt.string().email().index().unique(),
60
60
  status: (statuses) => xt.enum(statuses).index(),
61
61
  gender: () => xt.enum(['male', 'female', 'other']).index(),
62
62
  role: (roles) => xt.enum(roles).index(),
package/xt/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/xt/index.ts"],"sourcesContent":["import { XVEnumValues, XVObjectType } from \"xanv\";\nimport XqlString from \"./fields/String\";\nimport XqlBoolean from \"./fields/Boolean\";\nimport XqlArray from \"./fields/Array\";\nimport XqlDate from \"./fields/Date\";\nimport XqlEnum from \"./fields/Enum\";\nimport XqlNumber from \"./fields/Number\";\nimport XqlObject from \"./fields/Object\";\nimport XqlRecord from \"./fields/Record\";\nimport XqlTuple from \"./fields/Tuple\";\nimport XqlUnion from \"./fields/Union\";\nimport XqlIDField from \"./fields/IDField\";\nimport XqlFile from \"./fields/File\";\nimport XqlSchema from \"./fields/Schema\";\nimport { XqlFields } from \"./types\";\nimport sha256 from \"../utils/sha256\";\n\nconst xt = {\n id: () => new XqlIDField(),\n array: (type: XqlFields, length?: number) => new XqlArray(type as any, length),\n boolean: () => new XqlBoolean(),\n date: () => new XqlDate(),\n enum: (values: XVEnumValues) => new XqlEnum(values),\n number: (length?: number) => new XqlNumber(length),\n object: (arg?: XVObjectType) => new XqlObject(arg),\n record: (key: XqlFields, value: XqlFields) => new XqlRecord(key as any, value as any),\n string: (length?: number) => new XqlString(length),\n tuple: (type: XqlFields[]) => new XqlTuple(type as any),\n union: (type: XqlFields[]) => new XqlUnion(type as any),\n file: (size?: number) => new XqlFile(size),\n schema: (table: string, column: string) => new XqlSchema(table, column),\n\n createdAt: () => xt.date().create(),\n updatedAt: () => xt.date().update(),\n // Custom Types\n name: () => {\n const inst = xt.string().min(1).max(100)\n inst.set(\"name\" as any, (v: any) => {\n const nameRegex = /^[a-zA-Z\\s'-]+$/;\n if (!nameRegex.test(v)) {\n throw new Error(\"Invalid name format.\");\n }\n });\n return inst;\n },\n password: () => {\n const inst = xt.string().min(8).max(32).index().transform(v => sha256(v).slice(0, 32));\n (inst as any).strong = function () {\n inst.set(\"strong\" as any, (v: any) => {\n const hasUpperCase = /[A-Z]/.test(v);\n const hasLowerCase = /[a-z]/.test(v);\n const hasNumber = /[0-9]/.test(v);\n const hasSpecialChar = /[!@#$%^&*(),.?\":{}|<>]/.test(v);\n\n if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) {\n throw new Error('Password should contain at least one uppercase letter, one lowercase letter, one number, and one special character');\n }\n });\n return this;\n }\n return inst;\n },\n email: () => xt.string().email(),\n status: (statuses: string[]) => xt.enum(statuses).index(),\n gender: () => xt.enum(['male', 'female', 'other']).index(),\n role: (roles: string[]) => xt.enum(roles).index(),\n username: () => {\n const inst = xt.string().index().min(3).max(30).index().unique()\n inst.set(\"username\" as any, (v: any) => {\n const usernameRegex = /^[a-zA-Z0-9._-]{3,30}$/;\n if (!usernameRegex.test(v)) {\n throw new Error(\"Invalid username format.\");\n }\n });\n return inst;\n },\n slug: () => {\n const inst = xt.string().index().min(3).max(100)\n inst.set(\"slug\" as any, (v: any) => {\n const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n if (!slugRegex.test(v)) {\n throw new Error(\"Invalid slug format.\");\n }\n });\n return inst;\n },\n url: () => {\n const inst = xt.string().max(2048).min(10)\n inst.set(\"url\" as any, (v: any) => {\n try {\n new URL(v);\n } catch {\n throw new Error(\"Invalid URL format.\");\n }\n });\n return inst;\n },\n photo: () => {\n const inst = xt.file().maxSize(2 * 1024 * 1024); // 2 MB\n inst.set(\"photo\" as any, (v: any) => {\n const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];\n if (!allowedTypes.includes(v.type)) {\n throw new Error(\"Invalid photo file type.\");\n }\n });\n return inst;\n },\n avatar: () => {\n const inst = xt.file().maxSize(2 * 1024 * 1024); // 1 MB\n inst.set(\"avatar\" as any, (v: any) => {\n const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];\n if (!allowedTypes.includes(v.type)) {\n throw new Error(\"Invalid avatar file type.\");\n }\n });\n return inst;\n },\n amount: () => xt.number().float().min(0).max(1000000000),\n phone: () => {\n const inst = xt.string().min(7).max(15)\n inst.set(\"phone\" as any, (v: any) => {\n const phoneRegex = /^\\+?[1-9]\\d{1,14}$/;\n if (!phoneRegex.test(v)) {\n throw new Error(\"Invalid phone number format.\");\n }\n });\n return inst;\n },\n title: () => xt.string().min(1).max(200),\n description: () => xt.string().max(1000),\n type: (types: string[]) => xt.enum(types).index(),\n metadata: () => xt.record(xt.string(), xt.union([xt.string(), xt.number(), xt.boolean(), xt.date()])),\n ip: () => {\n const inst = xt.string().index()\n inst.set(\"ip\" as any, (v: any) => {\n const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9]))$/;\n if (!ipv4Regex.test(v) && !ipv6Regex.test(v)) {\n throw new Error(\"Invalid IP address format.\");\n }\n });\n return inst;\n },\n\n key: () => xt.string().max(100).index().unique(),\n value: () => xt.string().max(1000),\n token: () => xt.string(64).index().unique(),\n}\n\nexport default xt;"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/xt/index.ts"],"sourcesContent":["import { XVEnumValues, XVObjectType } from \"xanv\";\nimport XqlString from \"./fields/String\";\nimport XqlBoolean from \"./fields/Boolean\";\nimport XqlArray from \"./fields/Array\";\nimport XqlDate from \"./fields/Date\";\nimport XqlEnum from \"./fields/Enum\";\nimport XqlNumber from \"./fields/Number\";\nimport XqlObject from \"./fields/Object\";\nimport XqlRecord from \"./fields/Record\";\nimport XqlTuple from \"./fields/Tuple\";\nimport XqlUnion from \"./fields/Union\";\nimport XqlIDField from \"./fields/IDField\";\nimport XqlFile from \"./fields/File\";\nimport XqlSchema from \"./fields/Schema\";\nimport { XqlFields } from \"./types\";\nimport sha256 from \"../utils/sha256\";\n\nconst xt = {\n id: () => new XqlIDField(),\n array: (type: XqlFields, length?: number) => new XqlArray(type as any, length),\n boolean: () => new XqlBoolean(),\n date: () => new XqlDate(),\n enum: (values: XVEnumValues) => new XqlEnum(values),\n number: (length?: number) => new XqlNumber(length),\n object: (arg?: XVObjectType) => new XqlObject(arg),\n record: (key: XqlFields, value: XqlFields) => new XqlRecord(key as any, value as any),\n string: (length?: number) => new XqlString(length),\n tuple: (type: XqlFields[]) => new XqlTuple(type as any),\n union: (type: XqlFields[]) => new XqlUnion(type as any),\n file: (size?: number) => new XqlFile(size),\n schema: (table: string, column: string) => new XqlSchema(table, column),\n\n createdAt: () => xt.date().create(),\n updatedAt: () => xt.date().update(),\n // Custom Types\n name: () => {\n const inst = xt.string().min(1).max(100)\n inst.set(\"name\" as any, (v: any) => {\n const nameRegex = /^[a-zA-Z\\s'-]+$/;\n if (!nameRegex.test(v)) {\n throw new Error(\"Invalid name format.\");\n }\n });\n return inst;\n },\n password: () => {\n const inst = xt.string().min(8).max(64).index().transform(v => sha256(v).slice(0, 64));\n (inst as any).strong = function () {\n inst.set(\"strong\" as any, (v: any) => {\n const hasUpperCase = /[A-Z]/.test(v);\n const hasLowerCase = /[a-z]/.test(v);\n const hasNumber = /[0-9]/.test(v);\n const hasSpecialChar = /[!@#$%^&*(),.?\":{}|<>]/.test(v);\n\n if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) {\n throw new Error('Password should contain at least one uppercase letter, one lowercase letter, one number, and one special character');\n }\n });\n return this;\n }\n return inst;\n },\n email: () => xt.string().email().index().unique(),\n status: (statuses: string[]) => xt.enum(statuses).index(),\n gender: () => xt.enum(['male', 'female', 'other']).index(),\n role: (roles: string[]) => xt.enum(roles).index(),\n username: () => {\n const inst = xt.string().index().min(3).max(30).index().unique()\n inst.set(\"username\" as any, (v: any) => {\n const usernameRegex = /^[a-zA-Z0-9._-]{3,30}$/;\n if (!usernameRegex.test(v)) {\n throw new Error(\"Invalid username format.\");\n }\n });\n return inst;\n },\n slug: () => {\n const inst = xt.string().index().min(3).max(100)\n inst.set(\"slug\" as any, (v: any) => {\n const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n if (!slugRegex.test(v)) {\n throw new Error(\"Invalid slug format.\");\n }\n });\n return inst;\n },\n url: () => {\n const inst = xt.string().max(2048).min(10)\n inst.set(\"url\" as any, (v: any) => {\n try {\n new URL(v);\n } catch {\n throw new Error(\"Invalid URL format.\");\n }\n });\n return inst;\n },\n photo: () => {\n const inst = xt.file().maxSize(2 * 1024 * 1024); // 2 MB\n inst.set(\"photo\" as any, (v: any) => {\n const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];\n if (!allowedTypes.includes(v.type)) {\n throw new Error(\"Invalid photo file type.\");\n }\n });\n return inst;\n },\n avatar: () => {\n const inst = xt.file().maxSize(2 * 1024 * 1024); // 1 MB\n inst.set(\"avatar\" as any, (v: any) => {\n const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];\n if (!allowedTypes.includes(v.type)) {\n throw new Error(\"Invalid avatar file type.\");\n }\n });\n return inst;\n },\n amount: () => xt.number().float().min(0).max(1000000000),\n phone: () => {\n const inst = xt.string().min(7).max(15)\n inst.set(\"phone\" as any, (v: any) => {\n const phoneRegex = /^\\+?[1-9]\\d{1,14}$/;\n if (!phoneRegex.test(v)) {\n throw new Error(\"Invalid phone number format.\");\n }\n });\n return inst;\n },\n title: () => xt.string().min(1).max(200),\n description: () => xt.string().max(1000),\n type: (types: string[]) => xt.enum(types).index(),\n metadata: () => xt.record(xt.string(), xt.union([xt.string(), xt.number(), xt.boolean(), xt.date()])),\n ip: () => {\n const inst = xt.string().index()\n inst.set(\"ip\" as any, (v: any) => {\n const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9]))$/;\n if (!ipv4Regex.test(v) && !ipv6Regex.test(v)) {\n throw new Error(\"Invalid IP address format.\");\n }\n });\n return inst;\n },\n\n key: () => xt.string().max(100).index().unique(),\n value: () => xt.string().max(1000),\n token: () => xt.string(64).index().unique(),\n}\n\nexport default xt;"],"names":[],"mappings":"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"}