xansql 1.1.7 → 1.1.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.
- package/core/Migration.cjs +8 -1
- package/core/Migration.cjs.map +1 -1
- package/core/Migration.d.ts +1 -1
- package/core/Migration.js +8 -1
- package/core/Migration.js.map +1 -1
- package/core/Xansql.cjs +2 -2
- package/core/Xansql.cjs.map +1 -1
- package/core/Xansql.d.ts +1 -1
- package/core/Xansql.js +2 -2
- package/core/Xansql.js.map +1 -1
- package/package.json +1 -1
- package/xt/XqlFieldInfo.cjs +2 -1
- package/xt/XqlFieldInfo.cjs.map +1 -1
- package/xt/XqlFieldInfo.js +2 -1
- package/xt/XqlFieldInfo.js.map +1 -1
package/core/Migration.cjs
CHANGED
|
@@ -33,9 +33,16 @@ class Migration {
|
|
|
33
33
|
this.model = xansql.model(MigrationModel);
|
|
34
34
|
this.migrate(this.model);
|
|
35
35
|
}
|
|
36
|
-
async migrate(model) {
|
|
36
|
+
async migrate(model, force) {
|
|
37
37
|
if (typeof window !== "undefined")
|
|
38
38
|
return;
|
|
39
|
+
if (force) {
|
|
40
|
+
try {
|
|
41
|
+
await model.execute(`DROP TABLE IF EXISTS ${model.table}`);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
}
|
|
45
|
+
}
|
|
39
46
|
const schema = model.schema();
|
|
40
47
|
let column_sqls = [];
|
|
41
48
|
let index_sqls = [];
|
package/core/Migration.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Migration.cjs","sources":["../../src/core/Migration.ts"],"sourcesContent":["import { xv } from \"xanv\";\nimport Model from \"../model\";\nimport xt from \"../xt\";\nimport Xansql from \"./Xansql\";\nimport { XqlFieldInfoSchema } from \"../xt/XqlFieldInfo\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport { iof } from \"../utils\";\nimport XansqlError from \"./XansqlError\";\n\nclass MigrationModel extends Model {\n get table() {\n return \"_xansql_migration\"\n }\n\n schema() {\n return {\n id: xt.id(),\n model: xt.string(),\n schema: xt.record(xt.string(), xt.object({\n type: xt.string(),\n length: xt.number().nullable(),\n default: xv.any(),\n unique: xt.boolean(),\n nullable: xt.boolean(),\n index: xt.string()\n })),\n created_at: xt.date().createdAt(),\n updated_at: xt.date().updatedAt(),\n }\n }\n}\n\n\nclass Migration {\n model\n constructor(private xansql: Xansql) {\n this.model = xansql.model(MigrationModel)\n this.migrate(this.model)\n }\n\n async migrate<M extends Model<any>>(model: M) {\n if (typeof window !== \"undefined\") return\n\n const schema = model.schema()\n let column_sqls = []\n let index_sqls = []\n let migrate_schema: { [column: string]: XqlFieldInfoSchema } = {}\n\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n column_sqls.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n migrate_schema[column] = field.info.schema\n }\n }\n\n const sql = `CREATE TABLE IF NOT EXISTS ${model.table}(${column_sqls.join(\",\")})`\n await model.execute(sql, false)\n for (let idxql of index_sqls) {\n try {\n await model.execute(idxql, false)\n } catch (error) { }\n }\n\n if (model.table === this.model.table) {\n return\n }\n\n const prev_migration = await this.migrateSchema(model)\n if (prev_migration) {\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n if (column in prev_migration) {\n\n } else {\n // Add column\n await model.execute(info.sql.alter_column, false)\n }\n }\n }\n }\n\n return await this.model.upsert({\n create: {\n model: model.table,\n schema: migrate_schema\n },\n update: {\n schema: migrate_schema\n },\n where: {\n model: model.table\n },\n useTransection: false,\n debug: false\n })\n }\n\n async get(model: Model) {\n return await this.model.findOne({\n where: {\n model: model.table\n },\n debug: false\n })\n }\n\n async migrateSchema(model: Model) {\n const get = await this.get(model)\n if (get) {\n return get.schema\n }\n }\n\n async has(model: Model) {\n return await this.model.count({\n model: model.table,\n })\n }\n}\n\nexport default Migration"],"names":["Model","xt","xv","iof","XqlRelationMany"],"mappings":";;;;;;;;AASA,MAAM,cAAe,SAAQA,OAAK,CAAA;AAC/B,IAAA,IAAI,KAAK,GAAA;AACN,QAAA,OAAO,mBAAmB;IAC7B;IAEA,MAAM,GAAA;QACH,OAAO;AACJ,YAAA,EAAE,EAAEC,OAAE,CAAC,EAAE,EAAE;AACX,YAAA,KAAK,EAAEA,OAAE,CAAC,MAAM,EAAE;AAClB,YAAA,MAAM,EAAEA,OAAE,CAAC,MAAM,CAACA,OAAE,CAAC,MAAM,EAAE,EAAEA,OAAE,CAAC,MAAM,CAAC;AACtC,gBAAA,IAAI,EAAEA,OAAE,CAAC,MAAM,EAAE;AACjB,gBAAA,MAAM,EAAEA,OAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC9B,gBAAA,OAAO,EAAEC,OAAE,CAAC,GAAG,EAAE;AACjB,gBAAA,MAAM,EAAED,OAAE,CAAC,OAAO,EAAE;AACpB,gBAAA,QAAQ,EAAEA,OAAE,CAAC,OAAO,EAAE;AACtB,gBAAA,KAAK,EAAEA,OAAE,CAAC,MAAM;AAClB,aAAA,CAAC,CAAC;AACH,YAAA,UAAU,EAAEA,OAAE,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE;AACjC,YAAA,UAAU,EAAEA,OAAE,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE;SACnC;IACJ;AACF;AAGD,MAAM,SAAS,CAAA;AAEZ,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAA,CAAA,MAAM,GAAN,MAAM;QACvB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;AACzC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;
|
|
1
|
+
{"version":3,"file":"Migration.cjs","sources":["../../src/core/Migration.ts"],"sourcesContent":["import { xv } from \"xanv\";\nimport Model from \"../model\";\nimport xt from \"../xt\";\nimport Xansql from \"./Xansql\";\nimport { XqlFieldInfoSchema } from \"../xt/XqlFieldInfo\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport { iof } from \"../utils\";\nimport XansqlError from \"./XansqlError\";\n\nclass MigrationModel extends Model {\n get table() {\n return \"_xansql_migration\"\n }\n\n schema() {\n return {\n id: xt.id(),\n model: xt.string(),\n schema: xt.record(xt.string(), xt.object({\n type: xt.string(),\n length: xt.number().nullable(),\n default: xv.any(),\n unique: xt.boolean(),\n nullable: xt.boolean(),\n index: xt.string()\n })),\n created_at: xt.date().createdAt(),\n updated_at: xt.date().updatedAt(),\n }\n }\n}\n\n\nclass Migration {\n model\n constructor(private xansql: Xansql) {\n this.model = xansql.model(MigrationModel)\n this.migrate(this.model)\n }\n\n async migrate<M extends Model<any>>(model: M, force?: boolean) {\n if (typeof window !== \"undefined\") return\n\n if (force) {\n try {\n await model.execute(`DROP TABLE IF EXISTS ${model.table}`)\n } catch (error) {\n\n }\n }\n\n const schema = model.schema()\n let column_sqls = []\n let index_sqls = []\n let migrate_schema: { [column: string]: XqlFieldInfoSchema } = {}\n\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n column_sqls.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n migrate_schema[column] = field.info.schema\n }\n }\n\n const sql = `CREATE TABLE IF NOT EXISTS ${model.table}(${column_sqls.join(\",\")})`\n await model.execute(sql, false)\n for (let idxql of index_sqls) {\n try {\n await model.execute(idxql, false)\n } catch (error) { }\n }\n\n if (model.table === this.model.table) {\n return\n }\n\n const prev_migration = await this.migrateSchema(model)\n if (prev_migration) {\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n if (column in prev_migration) {\n\n } else {\n // Add column\n await model.execute(info.sql.alter_column, false)\n }\n }\n }\n }\n\n return await this.model.upsert({\n create: {\n model: model.table,\n schema: migrate_schema\n },\n update: {\n schema: migrate_schema\n },\n where: {\n model: model.table\n },\n useTransection: false,\n debug: false\n })\n }\n\n async get(model: Model) {\n return await this.model.findOne({\n where: {\n model: model.table\n },\n debug: false\n })\n }\n\n async migrateSchema(model: Model) {\n const get = await this.get(model)\n if (get) {\n return get.schema\n }\n }\n\n async has(model: Model) {\n return await this.model.count({\n model: model.table,\n })\n }\n}\n\nexport default Migration"],"names":["Model","xt","xv","iof","XqlRelationMany"],"mappings":"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"}
|
package/core/Migration.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ declare class Migration {
|
|
|
32
32
|
};
|
|
33
33
|
}>;
|
|
34
34
|
constructor(xansql: Xansql);
|
|
35
|
-
migrate<M extends Model<any>>(model: M): Promise<ResultData | undefined>;
|
|
35
|
+
migrate<M extends Model<any>>(model: M, force?: boolean): Promise<ResultData | undefined>;
|
|
36
36
|
get(model: Model): Promise<{
|
|
37
37
|
id: number;
|
|
38
38
|
model: string;
|
package/core/Migration.js
CHANGED
|
@@ -31,9 +31,16 @@ class Migration {
|
|
|
31
31
|
this.model = xansql.model(MigrationModel);
|
|
32
32
|
this.migrate(this.model);
|
|
33
33
|
}
|
|
34
|
-
async migrate(model) {
|
|
34
|
+
async migrate(model, force) {
|
|
35
35
|
if (typeof window !== "undefined")
|
|
36
36
|
return;
|
|
37
|
+
if (force) {
|
|
38
|
+
try {
|
|
39
|
+
await model.execute(`DROP TABLE IF EXISTS ${model.table}`);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
}
|
|
43
|
+
}
|
|
37
44
|
const schema = model.schema();
|
|
38
45
|
let column_sqls = [];
|
|
39
46
|
let index_sqls = [];
|
package/core/Migration.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Migration.js","sources":["../../src/core/Migration.ts"],"sourcesContent":["import { xv } from \"xanv\";\nimport Model from \"../model\";\nimport xt from \"../xt\";\nimport Xansql from \"./Xansql\";\nimport { XqlFieldInfoSchema } from \"../xt/XqlFieldInfo\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport { iof } from \"../utils\";\nimport XansqlError from \"./XansqlError\";\n\nclass MigrationModel extends Model {\n get table() {\n return \"_xansql_migration\"\n }\n\n schema() {\n return {\n id: xt.id(),\n model: xt.string(),\n schema: xt.record(xt.string(), xt.object({\n type: xt.string(),\n length: xt.number().nullable(),\n default: xv.any(),\n unique: xt.boolean(),\n nullable: xt.boolean(),\n index: xt.string()\n })),\n created_at: xt.date().createdAt(),\n updated_at: xt.date().updatedAt(),\n }\n }\n}\n\n\nclass Migration {\n model\n constructor(private xansql: Xansql) {\n this.model = xansql.model(MigrationModel)\n this.migrate(this.model)\n }\n\n async migrate<M extends Model<any>>(model: M) {\n if (typeof window !== \"undefined\") return\n\n const schema = model.schema()\n let column_sqls = []\n let index_sqls = []\n let migrate_schema: { [column: string]: XqlFieldInfoSchema } = {}\n\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n column_sqls.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n migrate_schema[column] = field.info.schema\n }\n }\n\n const sql = `CREATE TABLE IF NOT EXISTS ${model.table}(${column_sqls.join(\",\")})`\n await model.execute(sql, false)\n for (let idxql of index_sqls) {\n try {\n await model.execute(idxql, false)\n } catch (error) { }\n }\n\n if (model.table === this.model.table) {\n return\n }\n\n const prev_migration = await this.migrateSchema(model)\n if (prev_migration) {\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n if (column in prev_migration) {\n\n } else {\n // Add column\n await model.execute(info.sql.alter_column, false)\n }\n }\n }\n }\n\n return await this.model.upsert({\n create: {\n model: model.table,\n schema: migrate_schema\n },\n update: {\n schema: migrate_schema\n },\n where: {\n model: model.table\n },\n useTransection: false,\n debug: false\n })\n }\n\n async get(model: Model) {\n return await this.model.findOne({\n where: {\n model: model.table\n },\n debug: false\n })\n }\n\n async migrateSchema(model: Model) {\n const get = await this.get(model)\n if (get) {\n return get.schema\n }\n }\n\n async has(model: Model) {\n return await this.model.count({\n model: model.table,\n })\n }\n}\n\nexport default Migration"],"names":[],"mappings":";;;;;;AASA,MAAM,cAAe,SAAQ,KAAK,CAAA;AAC/B,IAAA,IAAI,KAAK,GAAA;AACN,QAAA,OAAO,mBAAmB;IAC7B;IAEA,MAAM,GAAA;QACH,OAAO;AACJ,YAAA,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;AACX,YAAA,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE;AAClB,YAAA,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC;AACtC,gBAAA,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE;AACjB,gBAAA,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC9B,gBAAA,OAAO,EAAE,EAAE,CAAC,GAAG,EAAE;AACjB,gBAAA,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE;AACpB,gBAAA,QAAQ,EAAE,EAAE,CAAC,OAAO,EAAE;AACtB,gBAAA,KAAK,EAAE,EAAE,CAAC,MAAM;AAClB,aAAA,CAAC,CAAC;AACH,YAAA,UAAU,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE;AACjC,YAAA,UAAU,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE;SACnC;IACJ;AACF;AAGD,MAAM,SAAS,CAAA;AAEZ,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAA,CAAA,MAAM,GAAN,MAAM;QACvB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;AACzC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;
|
|
1
|
+
{"version":3,"file":"Migration.js","sources":["../../src/core/Migration.ts"],"sourcesContent":["import { xv } from \"xanv\";\nimport Model from \"../model\";\nimport xt from \"../xt\";\nimport Xansql from \"./Xansql\";\nimport { XqlFieldInfoSchema } from \"../xt/XqlFieldInfo\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport { iof } from \"../utils\";\nimport XansqlError from \"./XansqlError\";\n\nclass MigrationModel extends Model {\n get table() {\n return \"_xansql_migration\"\n }\n\n schema() {\n return {\n id: xt.id(),\n model: xt.string(),\n schema: xt.record(xt.string(), xt.object({\n type: xt.string(),\n length: xt.number().nullable(),\n default: xv.any(),\n unique: xt.boolean(),\n nullable: xt.boolean(),\n index: xt.string()\n })),\n created_at: xt.date().createdAt(),\n updated_at: xt.date().updatedAt(),\n }\n }\n}\n\n\nclass Migration {\n model\n constructor(private xansql: Xansql) {\n this.model = xansql.model(MigrationModel)\n this.migrate(this.model)\n }\n\n async migrate<M extends Model<any>>(model: M, force?: boolean) {\n if (typeof window !== \"undefined\") return\n\n if (force) {\n try {\n await model.execute(`DROP TABLE IF EXISTS ${model.table}`)\n } catch (error) {\n\n }\n }\n\n const schema = model.schema()\n let column_sqls = []\n let index_sqls = []\n let migrate_schema: { [column: string]: XqlFieldInfoSchema } = {}\n\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n column_sqls.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n migrate_schema[column] = field.info.schema\n }\n }\n\n const sql = `CREATE TABLE IF NOT EXISTS ${model.table}(${column_sqls.join(\",\")})`\n await model.execute(sql, false)\n for (let idxql of index_sqls) {\n try {\n await model.execute(idxql, false)\n } catch (error) { }\n }\n\n if (model.table === this.model.table) {\n return\n }\n\n const prev_migration = await this.migrateSchema(model)\n if (prev_migration) {\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n if (column in prev_migration) {\n\n } else {\n // Add column\n await model.execute(info.sql.alter_column, false)\n }\n }\n }\n }\n\n return await this.model.upsert({\n create: {\n model: model.table,\n schema: migrate_schema\n },\n update: {\n schema: migrate_schema\n },\n where: {\n model: model.table\n },\n useTransection: false,\n debug: false\n })\n }\n\n async get(model: Model) {\n return await this.model.findOne({\n where: {\n model: model.table\n },\n debug: false\n })\n }\n\n async migrateSchema(model: Model) {\n const get = await this.get(model)\n if (get) {\n return get.schema\n }\n }\n\n async has(model: Model) {\n return await this.model.count({\n model: model.table,\n })\n }\n}\n\nexport default Migration"],"names":[],"mappings":"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"}
|
package/core/Xansql.cjs
CHANGED
|
@@ -117,10 +117,10 @@ class Xansql {
|
|
|
117
117
|
}
|
|
118
118
|
return await this.config.file.delete(fileId, this);
|
|
119
119
|
}
|
|
120
|
-
async migrate() {
|
|
120
|
+
async migrate(force) {
|
|
121
121
|
const models = Array.from(this.models.values());
|
|
122
122
|
for (let model of models) {
|
|
123
|
-
await this.Migration.migrate(model);
|
|
123
|
+
await this.Migration.migrate(model, force);
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
}
|
package/core/Xansql.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Xansql.cjs","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired, XansqlFileMeta, XansqlFileUploadArgs } from \"./types\";\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\nimport XansqlConfig from \"./classes/XansqlConfig\";\nimport XansqlError from \"./XansqlError\";\nimport { ModelClass } from \"../model/types\";\nimport { chunkFile, getFileId, totalChunks } from \"../utils/file\";\nimport Migration from \"./Migration\";\nimport fileScaner from \"../utils/fileScaner\";\n\nclass Xansql {\n private XansqlConfig: XansqlConfig;\n readonly config: XansqlConfigTypeRequired;\n readonly XansqlTransaction: XansqlTransaction;\n readonly models = new Map<ModelClass<any>, Model>()\n readonly Migration: Migration\n\n constructor(config: XansqlConfigType) {\n this.XansqlConfig = new XansqlConfig(this, config);\n this.config = this.XansqlConfig.parse()\n this.XansqlTransaction = new XansqlTransaction(this);\n this.Migration = new Migration(this)\n }\n\n get dialect() {\n return this.config.dialect;\n }\n\n model<M extends Model<any>>(model: ModelClass<M>, hooks?: any) {\n if (this.models.has(model)) {\n return this.models.get(model) as Model<ReturnType<M['schema']>>\n }\n const _model = new model(this)\n this.models.set(model, _model)\n return _model as Model<ReturnType<M['schema']>>\n }\n\n async execute(sql: string, debug = this.config.debug): Promise<ExecuterResult> {\n const query = sql.trim().replace(/\\s+/g, ' ');\n const isDebug = debug ?? false\n\n if (isDebug) {\n console.log(`[DB] Executing → ${query}`);\n }\n\n try {\n const execute = await this.dialect.execute(query, this) as ExecuterResult;\n if (isDebug) {\n console.log(`[DB] Executed ✓`);\n console.dir(execute.results, { depth: null });\n }\n return execute;\n } catch (error) {\n if (isDebug) {\n console.error(`[DB] Execution failed ✗`);\n console.error(query);\n }\n throw error\n }\n }\n\n async uploadFile(file: XansqlFileUploadArgs) {\n const fileConfig = this.config.file\n if (!fileConfig?.upload) {\n throw new XansqlError({\n code: \"NOT_FOUND\",\n message: `File upload is not supported by the current dialect.`\n });\n }\n if (file instanceof File) {\n // make chunk\n const fileId = await getFileId(file);\n\n const maxFileSize = fileConfig?.maxFilesize\n if (maxFileSize && file.size > maxFileSize * 1024) {\n throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`)\n }\n\n const chunkSize = fileConfig?.chunkSize\n\n // send metadata\n const filemeta: XansqlFileMeta = {\n fileId: fileId,\n name: file.name,\n size: file.size,\n type: file.type,\n totalChunks: totalChunks(file, chunkSize),\n chunkIndex: 0,\n isFinish: false\n }\n for await (let { chunk, chunkIndex } of chunkFile(file, chunkSize)) {\n filemeta.chunkIndex = chunkIndex;\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\n filemeta.chunkIndex = chunkIndex\n await this.uploadFile({\n chunk,\n meta: filemeta\n })\n }\n return filemeta\n }\n\n if (file.meta.chunkIndex === 0 && !fileScaner(file.chunk).valid) {\n throw new XansqlError({\n code: \"FILE_ERROR\",\n message: `Failed to process file \"${file.meta.name}\".`\n });\n }\n return await this.config.file.upload(file.chunk, file.meta, this);\n }\n\n async deleteFile(fileId: string) {\n if (!this.config.file?.delete) {\n throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: `File delete is not supported by the current dialect.`\n });\n }\n return await this.config.file.delete(fileId, this);\n }\n\n async migrate() {\n const models = Array.from(this.models.values())\n for (let model of models) {\n await this.Migration.migrate(model)\n }\n }\n}\n\nexport default Xansql"],"names":["file","getFileId","totalChunks","__asyncValues","chunkFile"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Xansql.cjs","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired, XansqlFileMeta, XansqlFileUploadArgs } from \"./types\";\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\nimport XansqlConfig from \"./classes/XansqlConfig\";\nimport XansqlError from \"./XansqlError\";\nimport { ModelClass } from \"../model/types\";\nimport { chunkFile, getFileId, totalChunks } from \"../utils/file\";\nimport Migration from \"./Migration\";\nimport fileScaner from \"../utils/fileScaner\";\n\nclass Xansql {\n private XansqlConfig: XansqlConfig;\n readonly config: XansqlConfigTypeRequired;\n readonly XansqlTransaction: XansqlTransaction;\n readonly models = new Map<ModelClass<any>, Model>()\n readonly Migration: Migration\n\n constructor(config: XansqlConfigType) {\n this.XansqlConfig = new XansqlConfig(this, config);\n this.config = this.XansqlConfig.parse()\n this.XansqlTransaction = new XansqlTransaction(this);\n this.Migration = new Migration(this)\n }\n\n get dialect() {\n return this.config.dialect;\n }\n\n model<M extends Model<any>>(model: ModelClass<M>, hooks?: any) {\n if (this.models.has(model)) {\n return this.models.get(model) as Model<ReturnType<M['schema']>>\n }\n const _model = new model(this)\n this.models.set(model, _model)\n return _model as Model<ReturnType<M['schema']>>\n }\n\n async execute(sql: string, debug = this.config.debug): Promise<ExecuterResult> {\n const query = sql.trim().replace(/\\s+/g, ' ');\n const isDebug = debug ?? false\n\n if (isDebug) {\n console.log(`[DB] Executing → ${query}`);\n }\n\n try {\n const execute = await this.dialect.execute(query, this) as ExecuterResult;\n if (isDebug) {\n console.log(`[DB] Executed ✓`);\n console.dir(execute.results, { depth: null });\n }\n return execute;\n } catch (error) {\n if (isDebug) {\n console.error(`[DB] Execution failed ✗`);\n console.error(query);\n }\n throw error\n }\n }\n\n async uploadFile(file: XansqlFileUploadArgs) {\n const fileConfig = this.config.file\n if (!fileConfig?.upload) {\n throw new XansqlError({\n code: \"NOT_FOUND\",\n message: `File upload is not supported by the current dialect.`\n });\n }\n if (file instanceof File) {\n // make chunk\n const fileId = await getFileId(file);\n\n const maxFileSize = fileConfig?.maxFilesize\n if (maxFileSize && file.size > maxFileSize * 1024) {\n throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`)\n }\n\n const chunkSize = fileConfig?.chunkSize\n\n // send metadata\n const filemeta: XansqlFileMeta = {\n fileId: fileId,\n name: file.name,\n size: file.size,\n type: file.type,\n totalChunks: totalChunks(file, chunkSize),\n chunkIndex: 0,\n isFinish: false\n }\n for await (let { chunk, chunkIndex } of chunkFile(file, chunkSize)) {\n filemeta.chunkIndex = chunkIndex;\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\n filemeta.chunkIndex = chunkIndex\n await this.uploadFile({\n chunk,\n meta: filemeta\n })\n }\n return filemeta\n }\n\n if (file.meta.chunkIndex === 0 && !fileScaner(file.chunk).valid) {\n throw new XansqlError({\n code: \"FILE_ERROR\",\n message: `Failed to process file \"${file.meta.name}\".`\n });\n }\n return await this.config.file.upload(file.chunk, file.meta, this);\n }\n\n async deleteFile(fileId: string) {\n if (!this.config.file?.delete) {\n throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: `File delete is not supported by the current dialect.`\n });\n }\n return await this.config.file.delete(fileId, this);\n }\n\n async migrate(force?: boolean) {\n const models = Array.from(this.models.values())\n for (let model of models) {\n await this.Migration.migrate(model, force)\n }\n }\n}\n\nexport default Xansql"],"names":["file","getFileId","totalChunks","__asyncValues","chunkFile"],"mappings":"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"}
|
package/core/Xansql.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ declare class Xansql {
|
|
|
16
16
|
execute(sql: string, debug?: boolean): Promise<ExecuterResult>;
|
|
17
17
|
uploadFile(file: XansqlFileUploadArgs): Promise<XansqlFileMeta>;
|
|
18
18
|
deleteFile(fileId: string): Promise<void>;
|
|
19
|
-
migrate(): Promise<void>;
|
|
19
|
+
migrate(force?: boolean): Promise<void>;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
export { Xansql as default };
|
package/core/Xansql.js
CHANGED
|
@@ -115,10 +115,10 @@ class Xansql {
|
|
|
115
115
|
}
|
|
116
116
|
return await this.config.file.delete(fileId, this);
|
|
117
117
|
}
|
|
118
|
-
async migrate() {
|
|
118
|
+
async migrate(force) {
|
|
119
119
|
const models = Array.from(this.models.values());
|
|
120
120
|
for (let model of models) {
|
|
121
|
-
await this.Migration.migrate(model);
|
|
121
|
+
await this.Migration.migrate(model, force);
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
}
|
package/core/Xansql.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Xansql.js","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired, XansqlFileMeta, XansqlFileUploadArgs } from \"./types\";\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\nimport XansqlConfig from \"./classes/XansqlConfig\";\nimport XansqlError from \"./XansqlError\";\nimport { ModelClass } from \"../model/types\";\nimport { chunkFile, getFileId, totalChunks } from \"../utils/file\";\nimport Migration from \"./Migration\";\nimport fileScaner from \"../utils/fileScaner\";\n\nclass Xansql {\n private XansqlConfig: XansqlConfig;\n readonly config: XansqlConfigTypeRequired;\n readonly XansqlTransaction: XansqlTransaction;\n readonly models = new Map<ModelClass<any>, Model>()\n readonly Migration: Migration\n\n constructor(config: XansqlConfigType) {\n this.XansqlConfig = new XansqlConfig(this, config);\n this.config = this.XansqlConfig.parse()\n this.XansqlTransaction = new XansqlTransaction(this);\n this.Migration = new Migration(this)\n }\n\n get dialect() {\n return this.config.dialect;\n }\n\n model<M extends Model<any>>(model: ModelClass<M>, hooks?: any) {\n if (this.models.has(model)) {\n return this.models.get(model) as Model<ReturnType<M['schema']>>\n }\n const _model = new model(this)\n this.models.set(model, _model)\n return _model as Model<ReturnType<M['schema']>>\n }\n\n async execute(sql: string, debug = this.config.debug): Promise<ExecuterResult> {\n const query = sql.trim().replace(/\\s+/g, ' ');\n const isDebug = debug ?? false\n\n if (isDebug) {\n console.log(`[DB] Executing → ${query}`);\n }\n\n try {\n const execute = await this.dialect.execute(query, this) as ExecuterResult;\n if (isDebug) {\n console.log(`[DB] Executed ✓`);\n console.dir(execute.results, { depth: null });\n }\n return execute;\n } catch (error) {\n if (isDebug) {\n console.error(`[DB] Execution failed ✗`);\n console.error(query);\n }\n throw error\n }\n }\n\n async uploadFile(file: XansqlFileUploadArgs) {\n const fileConfig = this.config.file\n if (!fileConfig?.upload) {\n throw new XansqlError({\n code: \"NOT_FOUND\",\n message: `File upload is not supported by the current dialect.`\n });\n }\n if (file instanceof File) {\n // make chunk\n const fileId = await getFileId(file);\n\n const maxFileSize = fileConfig?.maxFilesize\n if (maxFileSize && file.size > maxFileSize * 1024) {\n throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`)\n }\n\n const chunkSize = fileConfig?.chunkSize\n\n // send metadata\n const filemeta: XansqlFileMeta = {\n fileId: fileId,\n name: file.name,\n size: file.size,\n type: file.type,\n totalChunks: totalChunks(file, chunkSize),\n chunkIndex: 0,\n isFinish: false\n }\n for await (let { chunk, chunkIndex } of chunkFile(file, chunkSize)) {\n filemeta.chunkIndex = chunkIndex;\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\n filemeta.chunkIndex = chunkIndex\n await this.uploadFile({\n chunk,\n meta: filemeta\n })\n }\n return filemeta\n }\n\n if (file.meta.chunkIndex === 0 && !fileScaner(file.chunk).valid) {\n throw new XansqlError({\n code: \"FILE_ERROR\",\n message: `Failed to process file \"${file.meta.name}\".`\n });\n }\n return await this.config.file.upload(file.chunk, file.meta, this);\n }\n\n async deleteFile(fileId: string) {\n if (!this.config.file?.delete) {\n throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: `File delete is not supported by the current dialect.`\n });\n }\n return await this.config.file.delete(fileId, this);\n }\n\n async migrate() {\n const models = Array.from(this.models.values())\n for (let model of models) {\n await this.Migration.migrate(model)\n }\n }\n}\n\nexport default Xansql"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Xansql.js","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired, XansqlFileMeta, XansqlFileUploadArgs } from \"./types\";\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\nimport XansqlConfig from \"./classes/XansqlConfig\";\nimport XansqlError from \"./XansqlError\";\nimport { ModelClass } from \"../model/types\";\nimport { chunkFile, getFileId, totalChunks } from \"../utils/file\";\nimport Migration from \"./Migration\";\nimport fileScaner from \"../utils/fileScaner\";\n\nclass Xansql {\n private XansqlConfig: XansqlConfig;\n readonly config: XansqlConfigTypeRequired;\n readonly XansqlTransaction: XansqlTransaction;\n readonly models = new Map<ModelClass<any>, Model>()\n readonly Migration: Migration\n\n constructor(config: XansqlConfigType) {\n this.XansqlConfig = new XansqlConfig(this, config);\n this.config = this.XansqlConfig.parse()\n this.XansqlTransaction = new XansqlTransaction(this);\n this.Migration = new Migration(this)\n }\n\n get dialect() {\n return this.config.dialect;\n }\n\n model<M extends Model<any>>(model: ModelClass<M>, hooks?: any) {\n if (this.models.has(model)) {\n return this.models.get(model) as Model<ReturnType<M['schema']>>\n }\n const _model = new model(this)\n this.models.set(model, _model)\n return _model as Model<ReturnType<M['schema']>>\n }\n\n async execute(sql: string, debug = this.config.debug): Promise<ExecuterResult> {\n const query = sql.trim().replace(/\\s+/g, ' ');\n const isDebug = debug ?? false\n\n if (isDebug) {\n console.log(`[DB] Executing → ${query}`);\n }\n\n try {\n const execute = await this.dialect.execute(query, this) as ExecuterResult;\n if (isDebug) {\n console.log(`[DB] Executed ✓`);\n console.dir(execute.results, { depth: null });\n }\n return execute;\n } catch (error) {\n if (isDebug) {\n console.error(`[DB] Execution failed ✗`);\n console.error(query);\n }\n throw error\n }\n }\n\n async uploadFile(file: XansqlFileUploadArgs) {\n const fileConfig = this.config.file\n if (!fileConfig?.upload) {\n throw new XansqlError({\n code: \"NOT_FOUND\",\n message: `File upload is not supported by the current dialect.`\n });\n }\n if (file instanceof File) {\n // make chunk\n const fileId = await getFileId(file);\n\n const maxFileSize = fileConfig?.maxFilesize\n if (maxFileSize && file.size > maxFileSize * 1024) {\n throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`)\n }\n\n const chunkSize = fileConfig?.chunkSize\n\n // send metadata\n const filemeta: XansqlFileMeta = {\n fileId: fileId,\n name: file.name,\n size: file.size,\n type: file.type,\n totalChunks: totalChunks(file, chunkSize),\n chunkIndex: 0,\n isFinish: false\n }\n for await (let { chunk, chunkIndex } of chunkFile(file, chunkSize)) {\n filemeta.chunkIndex = chunkIndex;\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\n filemeta.chunkIndex = chunkIndex\n await this.uploadFile({\n chunk,\n meta: filemeta\n })\n }\n return filemeta\n }\n\n if (file.meta.chunkIndex === 0 && !fileScaner(file.chunk).valid) {\n throw new XansqlError({\n code: \"FILE_ERROR\",\n message: `Failed to process file \"${file.meta.name}\".`\n });\n }\n return await this.config.file.upload(file.chunk, file.meta, this);\n }\n\n async deleteFile(fileId: string) {\n if (!this.config.file?.delete) {\n throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: `File delete is not supported by the current dialect.`\n });\n }\n return await this.config.file.delete(fileId, this);\n }\n\n async migrate(force?: boolean) {\n const models = Array.from(this.models.values())\n for (let model of models) {\n await this.Migration.migrate(model, force)\n }\n }\n}\n\nexport default Xansql"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/xt/XqlFieldInfo.cjs
CHANGED
package/xt/XqlFieldInfo.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XqlFieldInfo.cjs","sources":["../../src/xt/XqlFieldInfo.ts"],"sourcesContent":["import XansqlError from \"../core/XansqlError\";\nimport { escapeSqlValue, iof, quote } from \"../utils\";\nimport XqlArray from \"./fields/Array\";\nimport XqlBoolean from \"./fields/Boolean\";\nimport XqlDate from \"./fields/Date\";\nimport XqlEnum from \"./fields/Enum\";\nimport XqlFile from \"./fields/File\";\nimport XqlIDField from \"./fields/IDField\";\nimport XqlNumber from \"./fields/Number\";\nimport XqlObject from \"./fields/Object\";\nimport XqlRecord from \"./fields/Record\";\nimport XqlRelationOne from \"./fields/RelationOne\";\nimport XqlString from \"./fields/String\";\nimport XqlTuple from \"./fields/Tuple\";\nimport XqlUnion from \"./fields/Union\";\nimport { XqlField } from \"./types\";\n\nexport type XqlFieldInfoSchema = {\n type: string,\n length: number | null,\n default: any,\n unique: boolean,\n nullable: boolean,\n index: string | null\n}\n\nclass XqlFieldInfo {\n readonly schema: XqlFieldInfoSchema\n readonly sql: {\n column: string,\n alter_column: string,\n drop_column: string;\n create_index: string\n drop_index: string\n }\n\n constructor(field: XqlField) {\n\n const table = (field as any).table\n const column = (field as any).column_name\n const engine = (field as any).engine\n\n const meta = field.meta || {};\n const nullable = meta.nullable || meta.optional ? 'NULL ' : 'NOT NULL ';\n const unique = meta.unique ? 'UNIQUE ' : '';\n\n let default_value = ''\n if (meta.default !== undefined) {\n try {\n default_value = field.parse(undefined)\n } catch (error) { }\n }\n\n\n let type = \"\"\n\n if (iof(field, XqlRelationOne)) {\n if (engine === 'mysql' || engine === 'postgres') {\n type = \"BIGINT\"\n } else if (engine === 'sqlite') {\n type = \"INTEGER\"\n }\n } else if (iof(field, XqlIDField)) {\n if (engine === 'mysql') {\n type = \"BIGINT AUTO_INCREMENT PRIMARY KEY\"\n } else if (engine === 'postgres') {\n type = \"BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY\"\n } else if (engine === 'sqlite') {\n type = \"INTEGER PRIMARY KEY AUTOINCREMENT\"\n }\n } else if (iof(field, XqlString)) {\n let length = meta.length || meta.max\n if (meta.text || length > 65535 || engine === 'sqlite') {\n type = \"TEXT\"\n } else {\n type = `VARCHAR(${length || 255})`\n }\n } else if (iof(field, XqlFile)) {\n type = \"VARCHAR(255)\"\n } else if (iof(field, XqlNumber)) {\n if (meta.float) {\n if (engine === \"mysql\") {\n type = \"FLOAT\"\n } else {\n type = \"REAL\"\n }\n } else if (meta.integer) {\n type = \"INTEGER\"\n } else if (meta.bigint) {\n if (engine === \"mysql\" || engine === \"postgres\") {\n type = \"BIGINT\"\n } else {\n type = \"INTEGER\"\n }\n } else if (meta.decimal) {\n if (engine === \"mysql\" || engine === \"sqlite\") {\n type = `DECIMAL(${meta.decimal.precision}, ${meta.decimal.scale})`\n } else {\n type = `NUMERIC(${meta.decimal.precision}, ${meta.decimal.scale})`\n }\n } else if (meta.double) {\n if (engine === \"mysql\") {\n type = `DOUBLE`\n } else if (engine === \"postgres\") {\n type = `DOUBLE PRECISION`\n } else {\n type = `REAL`\n }\n } else {\n if (engine === \"sqlite\") {\n type = \"INTEGER\"\n } else {\n type = \"BIGINT\"\n }\n }\n } else if (iof(field, XqlBoolean)) {\n type = \"SMALLINT\"\n default_value = default_value ? \"1\" : \"0\"\n } else if (iof(field, XqlDate)) {\n if (engine === \"mysql\") {\n type = \"DATETIME(3)\" // supports milliseconds\n } else if (engine === \"postgres\") {\n type = \"TIMESTAMP(3) WITH TIME ZONE\" // best practice in PG\n } else if (engine === \"sqlite\") {\n type = \"TEXT\" // store ISO 8601 string\n }\n } else if (iof(field, XqlEnum)) {\n let options = field.enum_options\n const valuesList = options.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ');\n type = `VARCHAR(255) CHECK(${quote(engine, column)} IN (${valuesList}))`\n } else if (iof(field, XqlArray, XqlObject, XqlRecord, XqlTuple, XqlUnion)) {\n type = \"TEXT\"\n } else {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\n model: table,\n field: column\n });\n }\n\n this.schema = {\n type: field.constructor.name,\n length: meta.length || meta.max || null,\n default: default_value || undefined,\n unique: meta.unique ? true : false,\n nullable: !!meta.nullable,\n index: meta.index ? `${table}_${column}_index` : \"\"\n }\n\n let create_index = ''\n if (this.schema.index) {\n create_index = `CREATE INDEX ${this.schema.index} ON ${quote(engine, table)} (${quote(engine, column)});`\n if (unique) {\n create_index = `CREATE UNIQUE INDEX ${this.schema.index} ON ${quote(engine, table)} (${quote(engine, column)});`\n }\n }\n const _column = `${quote(engine, column)} ${type} ${nullable}${default_value ? ` DEFAULT ${default_value} ` : ''}${unique}`.trim().replace(/ +/g, ' ')\n this.sql = {\n column: _column,\n alter_column: `ALTER TABLE ${field.table} ADD COLUMN ${_column}`,\n drop_column: `ALTER TABLE ${field.table} DROP COLUMN ${quote(engine, column)}`,\n create_index: create_index,\n drop_index: this.schema.index ? `DROP INDEX ${quote(engine, this.schema.index)};` : ''\n }\n\n }\n}\n\nexport default XqlFieldInfo"],"names":["iof","XqlRelationOne","XqlIDField","XqlString","XqlFile","XqlNumber","XqlBoolean","XqlDate","XqlEnum","escapeSqlValue","quote","XqlArray","XqlObject","XqlRecord","XqlTuple","XqlUnion"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"XqlFieldInfo.cjs","sources":["../../src/xt/XqlFieldInfo.ts"],"sourcesContent":["import XansqlError from \"../core/XansqlError\";\nimport { escapeSqlValue, iof, quote } from \"../utils\";\nimport XqlArray from \"./fields/Array\";\nimport XqlBoolean from \"./fields/Boolean\";\nimport XqlDate from \"./fields/Date\";\nimport XqlEnum from \"./fields/Enum\";\nimport XqlFile from \"./fields/File\";\nimport XqlIDField from \"./fields/IDField\";\nimport XqlNumber from \"./fields/Number\";\nimport XqlObject from \"./fields/Object\";\nimport XqlRecord from \"./fields/Record\";\nimport XqlRelationOne from \"./fields/RelationOne\";\nimport XqlString from \"./fields/String\";\nimport XqlTuple from \"./fields/Tuple\";\nimport XqlUnion from \"./fields/Union\";\nimport { XqlField } from \"./types\";\n\nexport type XqlFieldInfoSchema = {\n type: string,\n length: number | null,\n default: any,\n unique: boolean,\n nullable: boolean,\n index: string | null\n}\n\nclass XqlFieldInfo {\n readonly schema: XqlFieldInfoSchema\n readonly sql: {\n column: string,\n alter_column: string,\n drop_column: string;\n create_index: string\n drop_index: string\n }\n\n constructor(field: XqlField) {\n\n const table = (field as any).table\n const column = (field as any).column_name\n const engine = (field as any).engine\n\n const meta = field.meta || {};\n const nullable = meta.nullable || meta.optional ? 'NULL ' : 'NOT NULL ';\n const unique = meta.unique ? 'UNIQUE ' : '';\n\n let default_value = ''\n if (meta.default !== undefined) {\n try {\n const parse = field.parse(undefined)\n default_value = (field as any).value.toSql(parse)\n } catch (error) { }\n }\n\n\n let type = \"\"\n\n if (iof(field, XqlRelationOne)) {\n if (engine === 'mysql' || engine === 'postgres') {\n type = \"BIGINT\"\n } else if (engine === 'sqlite') {\n type = \"INTEGER\"\n }\n } else if (iof(field, XqlIDField)) {\n if (engine === 'mysql') {\n type = \"BIGINT AUTO_INCREMENT PRIMARY KEY\"\n } else if (engine === 'postgres') {\n type = \"BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY\"\n } else if (engine === 'sqlite') {\n type = \"INTEGER PRIMARY KEY AUTOINCREMENT\"\n }\n } else if (iof(field, XqlString)) {\n let length = meta.length || meta.max\n if (meta.text || length > 65535 || engine === 'sqlite') {\n type = \"TEXT\"\n } else {\n type = `VARCHAR(${length || 255})`\n }\n } else if (iof(field, XqlFile)) {\n type = \"VARCHAR(255)\"\n } else if (iof(field, XqlNumber)) {\n if (meta.float) {\n if (engine === \"mysql\") {\n type = \"FLOAT\"\n } else {\n type = \"REAL\"\n }\n } else if (meta.integer) {\n type = \"INTEGER\"\n } else if (meta.bigint) {\n if (engine === \"mysql\" || engine === \"postgres\") {\n type = \"BIGINT\"\n } else {\n type = \"INTEGER\"\n }\n } else if (meta.decimal) {\n if (engine === \"mysql\" || engine === \"sqlite\") {\n type = `DECIMAL(${meta.decimal.precision}, ${meta.decimal.scale})`\n } else {\n type = `NUMERIC(${meta.decimal.precision}, ${meta.decimal.scale})`\n }\n } else if (meta.double) {\n if (engine === \"mysql\") {\n type = `DOUBLE`\n } else if (engine === \"postgres\") {\n type = `DOUBLE PRECISION`\n } else {\n type = `REAL`\n }\n } else {\n if (engine === \"sqlite\") {\n type = \"INTEGER\"\n } else {\n type = \"BIGINT\"\n }\n }\n } else if (iof(field, XqlBoolean)) {\n type = \"SMALLINT\"\n default_value = default_value ? \"1\" : \"0\"\n } else if (iof(field, XqlDate)) {\n if (engine === \"mysql\") {\n type = \"DATETIME(3)\" // supports milliseconds\n } else if (engine === \"postgres\") {\n type = \"TIMESTAMP(3) WITH TIME ZONE\" // best practice in PG\n } else if (engine === \"sqlite\") {\n type = \"TEXT\" // store ISO 8601 string\n }\n } else if (iof(field, XqlEnum)) {\n let options = field.enum_options\n const valuesList = options.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ');\n type = `VARCHAR(255) CHECK(${quote(engine, column)} IN (${valuesList}))`\n } else if (iof(field, XqlArray, XqlObject, XqlRecord, XqlTuple, XqlUnion)) {\n type = \"TEXT\"\n } else {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\n model: table,\n field: column\n });\n }\n\n this.schema = {\n type: field.constructor.name,\n length: meta.length || meta.max || null,\n default: default_value || undefined,\n unique: meta.unique ? true : false,\n nullable: !!meta.nullable,\n index: meta.index ? `${table}_${column}_index` : \"\"\n }\n\n let create_index = ''\n if (this.schema.index) {\n create_index = `CREATE INDEX ${this.schema.index} ON ${quote(engine, table)} (${quote(engine, column)});`\n if (unique) {\n create_index = `CREATE UNIQUE INDEX ${this.schema.index} ON ${quote(engine, table)} (${quote(engine, column)});`\n }\n }\n const _column = `${quote(engine, column)} ${type} ${nullable}${default_value ? ` DEFAULT ${default_value} ` : ''}${unique}`.trim().replace(/ +/g, ' ')\n this.sql = {\n column: _column,\n alter_column: `ALTER TABLE ${field.table} ADD COLUMN ${_column}`,\n drop_column: `ALTER TABLE ${field.table} DROP COLUMN ${quote(engine, column)}`,\n create_index: create_index,\n drop_index: this.schema.index ? `DROP INDEX ${quote(engine, this.schema.index)};` : ''\n }\n\n }\n}\n\nexport default XqlFieldInfo"],"names":["iof","XqlRelationOne","XqlIDField","XqlString","XqlFile","XqlNumber","XqlBoolean","XqlDate","XqlEnum","escapeSqlValue","quote","XqlArray","XqlObject","XqlRecord","XqlTuple","XqlUnion"],"mappings":"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"}
|
package/xt/XqlFieldInfo.js
CHANGED
package/xt/XqlFieldInfo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XqlFieldInfo.js","sources":["../../src/xt/XqlFieldInfo.ts"],"sourcesContent":["import XansqlError from \"../core/XansqlError\";\nimport { escapeSqlValue, iof, quote } from \"../utils\";\nimport XqlArray from \"./fields/Array\";\nimport XqlBoolean from \"./fields/Boolean\";\nimport XqlDate from \"./fields/Date\";\nimport XqlEnum from \"./fields/Enum\";\nimport XqlFile from \"./fields/File\";\nimport XqlIDField from \"./fields/IDField\";\nimport XqlNumber from \"./fields/Number\";\nimport XqlObject from \"./fields/Object\";\nimport XqlRecord from \"./fields/Record\";\nimport XqlRelationOne from \"./fields/RelationOne\";\nimport XqlString from \"./fields/String\";\nimport XqlTuple from \"./fields/Tuple\";\nimport XqlUnion from \"./fields/Union\";\nimport { XqlField } from \"./types\";\n\nexport type XqlFieldInfoSchema = {\n type: string,\n length: number | null,\n default: any,\n unique: boolean,\n nullable: boolean,\n index: string | null\n}\n\nclass XqlFieldInfo {\n readonly schema: XqlFieldInfoSchema\n readonly sql: {\n column: string,\n alter_column: string,\n drop_column: string;\n create_index: string\n drop_index: string\n }\n\n constructor(field: XqlField) {\n\n const table = (field as any).table\n const column = (field as any).column_name\n const engine = (field as any).engine\n\n const meta = field.meta || {};\n const nullable = meta.nullable || meta.optional ? 'NULL ' : 'NOT NULL ';\n const unique = meta.unique ? 'UNIQUE ' : '';\n\n let default_value = ''\n if (meta.default !== undefined) {\n try {\n default_value = field.parse(undefined)\n } catch (error) { }\n }\n\n\n let type = \"\"\n\n if (iof(field, XqlRelationOne)) {\n if (engine === 'mysql' || engine === 'postgres') {\n type = \"BIGINT\"\n } else if (engine === 'sqlite') {\n type = \"INTEGER\"\n }\n } else if (iof(field, XqlIDField)) {\n if (engine === 'mysql') {\n type = \"BIGINT AUTO_INCREMENT PRIMARY KEY\"\n } else if (engine === 'postgres') {\n type = \"BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY\"\n } else if (engine === 'sqlite') {\n type = \"INTEGER PRIMARY KEY AUTOINCREMENT\"\n }\n } else if (iof(field, XqlString)) {\n let length = meta.length || meta.max\n if (meta.text || length > 65535 || engine === 'sqlite') {\n type = \"TEXT\"\n } else {\n type = `VARCHAR(${length || 255})`\n }\n } else if (iof(field, XqlFile)) {\n type = \"VARCHAR(255)\"\n } else if (iof(field, XqlNumber)) {\n if (meta.float) {\n if (engine === \"mysql\") {\n type = \"FLOAT\"\n } else {\n type = \"REAL\"\n }\n } else if (meta.integer) {\n type = \"INTEGER\"\n } else if (meta.bigint) {\n if (engine === \"mysql\" || engine === \"postgres\") {\n type = \"BIGINT\"\n } else {\n type = \"INTEGER\"\n }\n } else if (meta.decimal) {\n if (engine === \"mysql\" || engine === \"sqlite\") {\n type = `DECIMAL(${meta.decimal.precision}, ${meta.decimal.scale})`\n } else {\n type = `NUMERIC(${meta.decimal.precision}, ${meta.decimal.scale})`\n }\n } else if (meta.double) {\n if (engine === \"mysql\") {\n type = `DOUBLE`\n } else if (engine === \"postgres\") {\n type = `DOUBLE PRECISION`\n } else {\n type = `REAL`\n }\n } else {\n if (engine === \"sqlite\") {\n type = \"INTEGER\"\n } else {\n type = \"BIGINT\"\n }\n }\n } else if (iof(field, XqlBoolean)) {\n type = \"SMALLINT\"\n default_value = default_value ? \"1\" : \"0\"\n } else if (iof(field, XqlDate)) {\n if (engine === \"mysql\") {\n type = \"DATETIME(3)\" // supports milliseconds\n } else if (engine === \"postgres\") {\n type = \"TIMESTAMP(3) WITH TIME ZONE\" // best practice in PG\n } else if (engine === \"sqlite\") {\n type = \"TEXT\" // store ISO 8601 string\n }\n } else if (iof(field, XqlEnum)) {\n let options = field.enum_options\n const valuesList = options.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ');\n type = `VARCHAR(255) CHECK(${quote(engine, column)} IN (${valuesList}))`\n } else if (iof(field, XqlArray, XqlObject, XqlRecord, XqlTuple, XqlUnion)) {\n type = \"TEXT\"\n } else {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\n model: table,\n field: column\n });\n }\n\n this.schema = {\n type: field.constructor.name,\n length: meta.length || meta.max || null,\n default: default_value || undefined,\n unique: meta.unique ? true : false,\n nullable: !!meta.nullable,\n index: meta.index ? `${table}_${column}_index` : \"\"\n }\n\n let create_index = ''\n if (this.schema.index) {\n create_index = `CREATE INDEX ${this.schema.index} ON ${quote(engine, table)} (${quote(engine, column)});`\n if (unique) {\n create_index = `CREATE UNIQUE INDEX ${this.schema.index} ON ${quote(engine, table)} (${quote(engine, column)});`\n }\n }\n const _column = `${quote(engine, column)} ${type} ${nullable}${default_value ? ` DEFAULT ${default_value} ` : ''}${unique}`.trim().replace(/ +/g, ' ')\n this.sql = {\n column: _column,\n alter_column: `ALTER TABLE ${field.table} ADD COLUMN ${_column}`,\n drop_column: `ALTER TABLE ${field.table} DROP COLUMN ${quote(engine, column)}`,\n create_index: create_index,\n drop_index: this.schema.index ? `DROP INDEX ${quote(engine, this.schema.index)};` : ''\n }\n\n }\n}\n\nexport default XqlFieldInfo"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"XqlFieldInfo.js","sources":["../../src/xt/XqlFieldInfo.ts"],"sourcesContent":["import XansqlError from \"../core/XansqlError\";\nimport { escapeSqlValue, iof, quote } from \"../utils\";\nimport XqlArray from \"./fields/Array\";\nimport XqlBoolean from \"./fields/Boolean\";\nimport XqlDate from \"./fields/Date\";\nimport XqlEnum from \"./fields/Enum\";\nimport XqlFile from \"./fields/File\";\nimport XqlIDField from \"./fields/IDField\";\nimport XqlNumber from \"./fields/Number\";\nimport XqlObject from \"./fields/Object\";\nimport XqlRecord from \"./fields/Record\";\nimport XqlRelationOne from \"./fields/RelationOne\";\nimport XqlString from \"./fields/String\";\nimport XqlTuple from \"./fields/Tuple\";\nimport XqlUnion from \"./fields/Union\";\nimport { XqlField } from \"./types\";\n\nexport type XqlFieldInfoSchema = {\n type: string,\n length: number | null,\n default: any,\n unique: boolean,\n nullable: boolean,\n index: string | null\n}\n\nclass XqlFieldInfo {\n readonly schema: XqlFieldInfoSchema\n readonly sql: {\n column: string,\n alter_column: string,\n drop_column: string;\n create_index: string\n drop_index: string\n }\n\n constructor(field: XqlField) {\n\n const table = (field as any).table\n const column = (field as any).column_name\n const engine = (field as any).engine\n\n const meta = field.meta || {};\n const nullable = meta.nullable || meta.optional ? 'NULL ' : 'NOT NULL ';\n const unique = meta.unique ? 'UNIQUE ' : '';\n\n let default_value = ''\n if (meta.default !== undefined) {\n try {\n const parse = field.parse(undefined)\n default_value = (field as any).value.toSql(parse)\n } catch (error) { }\n }\n\n\n let type = \"\"\n\n if (iof(field, XqlRelationOne)) {\n if (engine === 'mysql' || engine === 'postgres') {\n type = \"BIGINT\"\n } else if (engine === 'sqlite') {\n type = \"INTEGER\"\n }\n } else if (iof(field, XqlIDField)) {\n if (engine === 'mysql') {\n type = \"BIGINT AUTO_INCREMENT PRIMARY KEY\"\n } else if (engine === 'postgres') {\n type = \"BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY\"\n } else if (engine === 'sqlite') {\n type = \"INTEGER PRIMARY KEY AUTOINCREMENT\"\n }\n } else if (iof(field, XqlString)) {\n let length = meta.length || meta.max\n if (meta.text || length > 65535 || engine === 'sqlite') {\n type = \"TEXT\"\n } else {\n type = `VARCHAR(${length || 255})`\n }\n } else if (iof(field, XqlFile)) {\n type = \"VARCHAR(255)\"\n } else if (iof(field, XqlNumber)) {\n if (meta.float) {\n if (engine === \"mysql\") {\n type = \"FLOAT\"\n } else {\n type = \"REAL\"\n }\n } else if (meta.integer) {\n type = \"INTEGER\"\n } else if (meta.bigint) {\n if (engine === \"mysql\" || engine === \"postgres\") {\n type = \"BIGINT\"\n } else {\n type = \"INTEGER\"\n }\n } else if (meta.decimal) {\n if (engine === \"mysql\" || engine === \"sqlite\") {\n type = `DECIMAL(${meta.decimal.precision}, ${meta.decimal.scale})`\n } else {\n type = `NUMERIC(${meta.decimal.precision}, ${meta.decimal.scale})`\n }\n } else if (meta.double) {\n if (engine === \"mysql\") {\n type = `DOUBLE`\n } else if (engine === \"postgres\") {\n type = `DOUBLE PRECISION`\n } else {\n type = `REAL`\n }\n } else {\n if (engine === \"sqlite\") {\n type = \"INTEGER\"\n } else {\n type = \"BIGINT\"\n }\n }\n } else if (iof(field, XqlBoolean)) {\n type = \"SMALLINT\"\n default_value = default_value ? \"1\" : \"0\"\n } else if (iof(field, XqlDate)) {\n if (engine === \"mysql\") {\n type = \"DATETIME(3)\" // supports milliseconds\n } else if (engine === \"postgres\") {\n type = \"TIMESTAMP(3) WITH TIME ZONE\" // best practice in PG\n } else if (engine === \"sqlite\") {\n type = \"TEXT\" // store ISO 8601 string\n }\n } else if (iof(field, XqlEnum)) {\n let options = field.enum_options\n const valuesList = options.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ');\n type = `VARCHAR(255) CHECK(${quote(engine, column)} IN (${valuesList}))`\n } else if (iof(field, XqlArray, XqlObject, XqlRecord, XqlTuple, XqlUnion)) {\n type = \"TEXT\"\n } else {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\n model: table,\n field: column\n });\n }\n\n this.schema = {\n type: field.constructor.name,\n length: meta.length || meta.max || null,\n default: default_value || undefined,\n unique: meta.unique ? true : false,\n nullable: !!meta.nullable,\n index: meta.index ? `${table}_${column}_index` : \"\"\n }\n\n let create_index = ''\n if (this.schema.index) {\n create_index = `CREATE INDEX ${this.schema.index} ON ${quote(engine, table)} (${quote(engine, column)});`\n if (unique) {\n create_index = `CREATE UNIQUE INDEX ${this.schema.index} ON ${quote(engine, table)} (${quote(engine, column)});`\n }\n }\n const _column = `${quote(engine, column)} ${type} ${nullable}${default_value ? ` DEFAULT ${default_value} ` : ''}${unique}`.trim().replace(/ +/g, ' ')\n this.sql = {\n column: _column,\n alter_column: `ALTER TABLE ${field.table} ADD COLUMN ${_column}`,\n drop_column: `ALTER TABLE ${field.table} DROP COLUMN ${quote(engine, column)}`,\n create_index: create_index,\n drop_index: this.schema.index ? `DROP INDEX ${quote(engine, this.schema.index)};` : ''\n }\n\n }\n}\n\nexport default XqlFieldInfo"],"names":[],"mappings":"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"}
|