xansql 1.1.18 → 1.1.20
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.d.ts +7 -1
- package/core/Xansql.cjs +3 -3
- package/core/Xansql.cjs.map +1 -1
- package/core/Xansql.js +1 -1
- package/core/XansqlError.cjs +1 -4
- package/core/XansqlError.cjs.map +1 -1
- package/core/XansqlError.d.ts +1 -1
- package/core/XansqlError.js +1 -1
- package/core/XansqlError.js.map +1 -1
- package/core/classes/XansqlConfig.cjs +4 -4
- package/core/classes/XansqlConfig.cjs.map +1 -1
- package/core/classes/XansqlConfig.js +1 -1
- package/dialects/Bridge/dialect.cjs +6 -6
- package/dialects/Bridge/dialect.cjs.map +1 -1
- package/dialects/Bridge/dialect.js +1 -1
- package/dialects/Bridge/server.cjs +1 -1
- package/dialects/Bridge/server.cjs.map +1 -1
- package/dialects/Bridge/server.js +1 -1
- package/index.cjs +1 -1
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/model/AliasGenerate.cjs +78 -0
- package/model/AliasGenerate.cjs.map +1 -0
- package/model/AliasGenerate.js +76 -0
- package/model/AliasGenerate.js.map +1 -0
- package/model/Build/AggregateArgs/index.cjs +3 -3
- package/model/Build/AggregateArgs/index.cjs.map +1 -1
- package/model/Build/AggregateArgs/index.js +1 -1
- package/model/Build/AggregateSelectArgs/index.cjs +8 -9
- package/model/Build/AggregateSelectArgs/index.cjs.map +1 -1
- package/model/Build/AggregateSelectArgs/index.js +7 -8
- package/model/Build/AggregateSelectArgs/index.js.map +1 -1
- package/model/Build/CreateArgs/index.cjs +10 -11
- package/model/Build/CreateArgs/index.cjs.map +1 -1
- package/model/Build/CreateArgs/index.js +3 -4
- package/model/Build/CreateArgs/index.js.map +1 -1
- package/model/Build/FindArgs/index.cjs +15 -10
- package/model/Build/FindArgs/index.cjs.map +1 -1
- package/model/Build/FindArgs/index.js +15 -10
- package/model/Build/FindArgs/index.js.map +1 -1
- package/model/Build/LimitArgs/index.cjs +2 -2
- package/model/Build/LimitArgs/index.cjs.map +1 -1
- package/model/Build/LimitArgs/index.js +1 -1
- package/model/Build/OrderByArgs/index.cjs +2 -2
- package/model/Build/OrderByArgs/index.cjs.map +1 -1
- package/model/Build/OrderByArgs/index.js +1 -1
- package/model/Build/SelectArgs/index.cjs +1 -1
- package/model/Build/SelectArgs/index.cjs.map +1 -1
- package/model/Build/SelectArgs/index.js +1 -1
- package/model/Build/UpdateArgs/index.cjs +12 -10
- package/model/Build/UpdateArgs/index.cjs.map +1 -1
- package/model/Build/UpdateArgs/index.js +7 -5
- package/model/Build/UpdateArgs/index.js.map +1 -1
- package/model/Build/UpsertArgs/index.cjs +3 -1
- package/model/Build/UpsertArgs/index.cjs.map +1 -1
- package/model/Build/UpsertArgs/index.js +3 -1
- package/model/Build/UpsertArgs/index.js.map +1 -1
- package/model/Build/WhereArgs/index.cjs +5 -5
- package/model/Build/WhereArgs/index.cjs.map +1 -1
- package/model/Build/WhereArgs/index.js +1 -1
- package/model/index.cjs +10 -70
- package/model/index.cjs.map +1 -1
- package/model/index.d.ts +15 -9
- package/model/index.js +5 -65
- package/model/index.js.map +1 -1
- package/model/types.d.ts +56 -32
- package/package.json +1 -1
- package/xt/XqlFieldInfo.cjs +1 -1
- package/xt/XqlFieldInfo.cjs.map +1 -1
- package/xt/XqlFieldInfo.js +1 -1
package/core/Migration.d.ts
CHANGED
|
@@ -31,7 +31,13 @@ declare class Migration {
|
|
|
31
31
|
};
|
|
32
32
|
}>;
|
|
33
33
|
constructor(xansql: Xansql);
|
|
34
|
-
migrate<M extends Model<any>>(model: M, force?: boolean): Promise<
|
|
34
|
+
migrate<M extends Model<any>>(model: M, force?: boolean): Promise<{
|
|
35
|
+
id: number;
|
|
36
|
+
model: string;
|
|
37
|
+
schema: Record<unknown, unknown>;
|
|
38
|
+
created_at: Date;
|
|
39
|
+
updated_at: Date;
|
|
40
|
+
}[] | null | undefined>;
|
|
35
41
|
get(model: Model): Promise<{
|
|
36
42
|
id: number;
|
|
37
43
|
model: string;
|
package/core/Xansql.cjs
CHANGED
|
@@ -53,7 +53,7 @@ class Xansql {
|
|
|
53
53
|
var _a, e_1, _b, _c;
|
|
54
54
|
const fileConfig = this.config.file;
|
|
55
55
|
if (!(fileConfig === null || fileConfig === void 0 ? void 0 : fileConfig.upload)) {
|
|
56
|
-
throw new XansqlError
|
|
56
|
+
throw new XansqlError({
|
|
57
57
|
code: "NOT_FOUND",
|
|
58
58
|
message: `File upload is not supported by the current dialect.`
|
|
59
59
|
});
|
|
@@ -100,7 +100,7 @@ class Xansql {
|
|
|
100
100
|
return filemeta;
|
|
101
101
|
}
|
|
102
102
|
if (file$1.meta.chunkIndex === 0 && !fileScaner(file$1.chunk).valid) {
|
|
103
|
-
throw new XansqlError
|
|
103
|
+
throw new XansqlError({
|
|
104
104
|
code: "FILE_ERROR",
|
|
105
105
|
message: `Failed to process file "${file$1.meta.name}".`
|
|
106
106
|
});
|
|
@@ -110,7 +110,7 @@ class Xansql {
|
|
|
110
110
|
async deleteFile(fileId) {
|
|
111
111
|
var _a;
|
|
112
112
|
if (!((_a = this.config.file) === null || _a === void 0 ? void 0 : _a.delete)) {
|
|
113
|
-
throw new XansqlError
|
|
113
|
+
throw new XansqlError({
|
|
114
114
|
code: "INTERNAL_ERROR",
|
|
115
115
|
message: `File delete is not supported by the current dialect.`
|
|
116
116
|
});
|
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(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","
|
|
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":";;;;;;;;;;AAUA,MAAM,MAAM,CAAA;AAOT,IAAA,WAAA,CAAY,MAAwB,EAAA;AAH3B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAA0B;QAIhD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;QACvC,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC;IACvC;AAEA,IAAA,IAAI,OAAO,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;IAC7B;IAEA,KAAK,CAAuB,KAAoB,EAAE,KAAW,EAAA;QAC1D,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACzB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAmC;QAClE;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;AAC9B,QAAA,OAAO,MAAwC;IAClD;IAEA,MAAM,OAAO,CAAC,GAAW,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAA;AACjD,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAL,KAAK,GAAI,KAAK;QAE9B,IAAI,OAAO,EAAE;AACV,YAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAA,CAAE,CAAC;QAC3C;AAEA,QAAA,IAAI;AACD,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAmB;YACzE,IAAI,OAAO,EAAE;AACV,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,eAAA,CAAiB,CAAC;AAC9B,gBAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAChD;AACA,YAAA,OAAO,OAAO;QACjB;QAAE,OAAO,KAAK,EAAE;YACb,IAAI,OAAO,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAA,uBAAA,CAAyB,CAAC;AACxC,gBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YACvB;AACA,YAAA,MAAM,KAAK;QACd;IACH;IAEA,MAAM,UAAU,CAACA,MAA0B,EAAA;;AACxC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;QACnC,IAAI,EAAC,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,MAAA,GAAA,MAAA,GAAV,UAAU,CAAE,MAAM,CAAA,EAAE;YACtB,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,OAAO,EAAE,CAAA,oDAAA;AACX,aAAA,CAAC;QACL;AACA,QAAA,IAAIA,MAAI,YAAY,IAAI,EAAE;;AAEvB,YAAA,MAAM,MAAM,GAAG,MAAMC,cAAS,CAACD,MAAI,CAAC;YAEpC,MAAM,WAAW,GAAG,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,MAAA,GAAA,MAAA,GAAV,UAAU,CAAE,WAAW;YAC3C,IAAI,WAAW,IAAIA,MAAI,CAAC,IAAI,GAAG,WAAW,GAAG,IAAI,EAAE;gBAChD,MAAM,IAAI,KAAK,CAAC,CAAA,+BAAA,EAAkC,WAAW,GAAG,IAAI,CAAA,GAAA,CAAK,CAAC;YAC7E;YAEA,MAAM,SAAS,GAAG,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,MAAA,GAAA,MAAA,GAAV,UAAU,CAAE,SAAS;;AAGvC,YAAA,MAAM,QAAQ,GAAmB;AAC9B,gBAAA,MAAM,EAAE,MAAM;gBACd,IAAI,EAAEA,MAAI,CAAC,IAAI;gBACf,IAAI,EAAEA,MAAI,CAAC,IAAI;gBACf,IAAI,EAAEA,MAAI,CAAC,IAAI;AACf,gBAAA,WAAW,EAAEE,gBAAW,CAACF,MAAI,EAAE,SAAS,CAAC;AACzC,gBAAA,UAAU,EAAE,CAAC;AACb,gBAAA,QAAQ,EAAE;aACZ;;AACD,gBAAA,KAAwC,IAAA,EAAA,GAAA,IAAA,EAAA,EAAA,GAAAG,mBAAA,CAAAC,cAAS,CAACJ,MAAI,EAAE,SAAS,CAAC,CAAA,EAAA,EAAA,EAAA,EAAA,GAAA,MAAA,EAAA,CAAA,IAAA,EAAA,EAAA,EAAA,GAAA,EAAA,CAAA,IAAA,EAAA,CAAA,EAAA,EAAA,EAAA,GAAA,IAAA,EAAE;oBAA5B,EAAA,GAAA,EAAA,CAAA,KAAA;oBAAA,EAAA,GAAA,KAAA;AAA7B,oBAAA,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAA;AACjC,oBAAA,QAAQ,CAAC,UAAU,GAAG,UAAU;oBAChC,QAAQ,CAAC,QAAQ,GAAG,UAAU,GAAG,CAAC,KAAK,QAAQ,CAAC,WAAW;AAC3D,oBAAA,QAAQ,CAAC,UAAU,GAAG,UAAU;oBAChC,MAAM,IAAI,CAAC,UAAU,CAAC;wBACnB,KAAK;AACL,wBAAA,IAAI,EAAE;AACR,qBAAA,CAAC;gBACL;;;;;;;;;AACA,YAAA,OAAO,QAAQ;QAClB;AAEA,QAAA,IAAIA,MAAI,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,UAAU,CAACA,MAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;YAC9D,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,OAAO,EAAE,CAAA,wBAAA,EAA2BA,MAAI,CAAC,IAAI,CAAC,IAAI,CAAA,EAAA;AACpD,aAAA,CAAC;QACL;AACA,QAAA,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAACA,MAAI,CAAC,KAAK,EAAEA,MAAI,CAAC,IAAI,EAAE,IAAI,CAAC;IACpE;IAEA,MAAM,UAAU,CAAC,MAAc,EAAA;;AAC5B,QAAA,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAA,EAAE;YAC5B,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,IAAI,EAAE,gBAAgB;AACtB,gBAAA,OAAO,EAAE,CAAA,oDAAA;AACX,aAAA,CAAC;QACL;AACA,QAAA,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;IACrD;IAEA,MAAM,OAAO,CAAC,KAAe,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AAC/C,QAAA,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;YACvB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;QAC7C;IACH;AACF;;;;"}
|
package/core/Xansql.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __asyncValues } from 'tslib';
|
|
2
2
|
import XansqlTransaction from './classes/XansqlTransaction.js';
|
|
3
3
|
import XansqlConfig from './classes/XansqlConfig.js';
|
|
4
|
-
import
|
|
4
|
+
import XansqlError from './XansqlError.js';
|
|
5
5
|
import { getFileId, totalChunks, chunkFile } from '../utils/file.js';
|
|
6
6
|
import Migration from './Migration.js';
|
|
7
7
|
import fileScaner from '../utils/fileScaner.js';
|
package/core/XansqlError.cjs
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
3
|
// 🎨 ANSI helpers
|
|
6
4
|
const ansi = {
|
|
7
5
|
reset: "\x1b[0m",
|
|
@@ -63,6 +61,5 @@ class XansqlError extends Error {
|
|
|
63
61
|
}
|
|
64
62
|
}
|
|
65
63
|
|
|
66
|
-
exports
|
|
67
|
-
exports.default = XansqlError;
|
|
64
|
+
module.exports = XansqlError;
|
|
68
65
|
//# sourceMappingURL=XansqlError.cjs.map
|
package/core/XansqlError.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XansqlError.cjs","sources":["../../src/core/XansqlError.ts"],"sourcesContent":["export type XansqlErrorCode =\n | \"INVALID_ARGUMENTS\"\n | \"VALIDATION_ERROR\"\n | \"QUERY_ERROR\"\n | \"CONNECTION_ERROR\"\n | \"NOT_FOUND\"\n | \"UNIQUE_CONSTRAINT\"\n | \"FOREIGN_KEY_CONSTRAINT\"\n | \"MIGRATION_ERROR\"\n | \"INTERNAL_ERROR\"\n | \"FILE_ERROR\"\n\nexport interface XansqlErrorOptions {\n code: XansqlErrorCode\n message: string\n model?: string\n field?: string\n sql?: string\n params?: object\n}\n\n// 🎨 ANSI helpers\nconst ansi = {\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n\n red: \"\\x1b[31m\",\n yellow: \"\\x1b[33m\",\n cyan: \"\\x1b[36m\",\n magenta: \"\\x1b[35m\",\n gray: \"\\x1b[90m\",\n\n bgRed: \"\\x1b[41m\",\n black: \"\\x1b[30m\",\n white: \"\\x1b[37m\",\n}\n\nconst color = {\n bold: (s: string) => ansi.bold + s + ansi.reset,\n red: (s: string) => ansi.red + s + ansi.reset,\n yellow: (s: string) => ansi.yellow + s + ansi.reset,\n cyan: (s: string) => ansi.cyan + s + ansi.reset,\n magenta: (s: string) => ansi.magenta + s + ansi.reset,\n gray: (s: string) => ansi.gray + s + ansi.reset,\n bgRedWhite: (s: string) => ansi.bgRed + ansi.white + s + ansi.reset,\n}\n\
|
|
1
|
+
{"version":3,"file":"XansqlError.cjs","sources":["../../src/core/XansqlError.ts"],"sourcesContent":["export type XansqlErrorCode =\n | \"INVALID_ARGUMENTS\"\n | \"VALIDATION_ERROR\"\n | \"QUERY_ERROR\"\n | \"CONNECTION_ERROR\"\n | \"NOT_FOUND\"\n | \"UNIQUE_CONSTRAINT\"\n | \"FOREIGN_KEY_CONSTRAINT\"\n | \"MIGRATION_ERROR\"\n | \"INTERNAL_ERROR\"\n | \"FILE_ERROR\"\n\nexport interface XansqlErrorOptions {\n code: XansqlErrorCode\n message: string\n model?: string\n field?: string\n sql?: string\n params?: object\n}\n\n// 🎨 ANSI helpers\nconst ansi = {\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n\n red: \"\\x1b[31m\",\n yellow: \"\\x1b[33m\",\n cyan: \"\\x1b[36m\",\n magenta: \"\\x1b[35m\",\n gray: \"\\x1b[90m\",\n\n bgRed: \"\\x1b[41m\",\n black: \"\\x1b[30m\",\n white: \"\\x1b[37m\",\n}\n\nconst color = {\n bold: (s: string) => ansi.bold + s + ansi.reset,\n red: (s: string) => ansi.red + s + ansi.reset,\n yellow: (s: string) => ansi.yellow + s + ansi.reset,\n cyan: (s: string) => ansi.cyan + s + ansi.reset,\n magenta: (s: string) => ansi.magenta + s + ansi.reset,\n gray: (s: string) => ansi.gray + s + ansi.reset,\n bgRedWhite: (s: string) => ansi.bgRed + ansi.white + s + ansi.reset,\n}\n\nclass XansqlError extends Error {\n public readonly code: XansqlErrorCode\n public readonly model?: string\n public readonly field?: string\n public readonly sql?: string\n public readonly params?: object\n\n constructor(options: XansqlErrorOptions) {\n super(options.message)\n\n this.name = \"XansqlError\"\n this.code = options.code\n this.model = options.model\n this.field = options.field\n this.sql = options.sql\n this.params = options.params\n\n Object.setPrototypeOf(this, new.target.prototype)\n Error.captureStackTrace?.(this, XansqlError)\n }\n\n // 🎨 Pretty colored output (terminal)\n get pretty(): string {\n const context: string[] = []\n if (this.model) context.push(color.cyan(\"Model: \") + this.model)\n if (this.field) context.push(color.cyan(\"Field: \") + this.field)\n if (this.sql) context.push(color.cyan(\"SQL: \") + this.sql)\n if (this.params) {\n context.push(\n color.cyan(\"Params: \") +\n color.gray(JSON.stringify(this.params, null, 2))\n )\n }\n\n return [\n color.bold(color.bgRedWhite(\" XANSQL ERROR \")) +\n \" \" +\n color.bold(color.red(this.code)),\n \"\",\n color.bold(color.yellow(\"Message:\")),\n \" \" + this.message,\n \"\",\n context.length ? context.join(\"\\n\") : color.gray(\" (none)\"),\n \"\",\n ].join(\"\\n\")\n }\n}\n\nexport default XansqlError"],"names":[],"mappings":"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"}
|
package/core/XansqlError.d.ts
CHANGED
package/core/XansqlError.js
CHANGED
package/core/XansqlError.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XansqlError.js","sources":["../../src/core/XansqlError.ts"],"sourcesContent":["export type XansqlErrorCode =\n | \"INVALID_ARGUMENTS\"\n | \"VALIDATION_ERROR\"\n | \"QUERY_ERROR\"\n | \"CONNECTION_ERROR\"\n | \"NOT_FOUND\"\n | \"UNIQUE_CONSTRAINT\"\n | \"FOREIGN_KEY_CONSTRAINT\"\n | \"MIGRATION_ERROR\"\n | \"INTERNAL_ERROR\"\n | \"FILE_ERROR\"\n\nexport interface XansqlErrorOptions {\n code: XansqlErrorCode\n message: string\n model?: string\n field?: string\n sql?: string\n params?: object\n}\n\n// 🎨 ANSI helpers\nconst ansi = {\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n\n red: \"\\x1b[31m\",\n yellow: \"\\x1b[33m\",\n cyan: \"\\x1b[36m\",\n magenta: \"\\x1b[35m\",\n gray: \"\\x1b[90m\",\n\n bgRed: \"\\x1b[41m\",\n black: \"\\x1b[30m\",\n white: \"\\x1b[37m\",\n}\n\nconst color = {\n bold: (s: string) => ansi.bold + s + ansi.reset,\n red: (s: string) => ansi.red + s + ansi.reset,\n yellow: (s: string) => ansi.yellow + s + ansi.reset,\n cyan: (s: string) => ansi.cyan + s + ansi.reset,\n magenta: (s: string) => ansi.magenta + s + ansi.reset,\n gray: (s: string) => ansi.gray + s + ansi.reset,\n bgRedWhite: (s: string) => ansi.bgRed + ansi.white + s + ansi.reset,\n}\n\
|
|
1
|
+
{"version":3,"file":"XansqlError.js","sources":["../../src/core/XansqlError.ts"],"sourcesContent":["export type XansqlErrorCode =\n | \"INVALID_ARGUMENTS\"\n | \"VALIDATION_ERROR\"\n | \"QUERY_ERROR\"\n | \"CONNECTION_ERROR\"\n | \"NOT_FOUND\"\n | \"UNIQUE_CONSTRAINT\"\n | \"FOREIGN_KEY_CONSTRAINT\"\n | \"MIGRATION_ERROR\"\n | \"INTERNAL_ERROR\"\n | \"FILE_ERROR\"\n\nexport interface XansqlErrorOptions {\n code: XansqlErrorCode\n message: string\n model?: string\n field?: string\n sql?: string\n params?: object\n}\n\n// 🎨 ANSI helpers\nconst ansi = {\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n\n red: \"\\x1b[31m\",\n yellow: \"\\x1b[33m\",\n cyan: \"\\x1b[36m\",\n magenta: \"\\x1b[35m\",\n gray: \"\\x1b[90m\",\n\n bgRed: \"\\x1b[41m\",\n black: \"\\x1b[30m\",\n white: \"\\x1b[37m\",\n}\n\nconst color = {\n bold: (s: string) => ansi.bold + s + ansi.reset,\n red: (s: string) => ansi.red + s + ansi.reset,\n yellow: (s: string) => ansi.yellow + s + ansi.reset,\n cyan: (s: string) => ansi.cyan + s + ansi.reset,\n magenta: (s: string) => ansi.magenta + s + ansi.reset,\n gray: (s: string) => ansi.gray + s + ansi.reset,\n bgRedWhite: (s: string) => ansi.bgRed + ansi.white + s + ansi.reset,\n}\n\nclass XansqlError extends Error {\n public readonly code: XansqlErrorCode\n public readonly model?: string\n public readonly field?: string\n public readonly sql?: string\n public readonly params?: object\n\n constructor(options: XansqlErrorOptions) {\n super(options.message)\n\n this.name = \"XansqlError\"\n this.code = options.code\n this.model = options.model\n this.field = options.field\n this.sql = options.sql\n this.params = options.params\n\n Object.setPrototypeOf(this, new.target.prototype)\n Error.captureStackTrace?.(this, XansqlError)\n }\n\n // 🎨 Pretty colored output (terminal)\n get pretty(): string {\n const context: string[] = []\n if (this.model) context.push(color.cyan(\"Model: \") + this.model)\n if (this.field) context.push(color.cyan(\"Field: \") + this.field)\n if (this.sql) context.push(color.cyan(\"SQL: \") + this.sql)\n if (this.params) {\n context.push(\n color.cyan(\"Params: \") +\n color.gray(JSON.stringify(this.params, null, 2))\n )\n }\n\n return [\n color.bold(color.bgRedWhite(\" XANSQL ERROR \")) +\n \" \" +\n color.bold(color.red(this.code)),\n \"\",\n color.bold(color.yellow(\"Message:\")),\n \" \" + this.message,\n \"\",\n context.length ? context.join(\"\\n\") : color.gray(\" (none)\"),\n \"\",\n ].join(\"\\n\")\n }\n}\n\nexport default XansqlError"],"names":[],"mappings":"AAqBA;AACA,MAAM,IAAI,GAAG;AACV,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,IAAI,EAAE,SAAS;AACf,IAEA,GAAG,EAAE,UAAU;AACf,IAAA,MAAM,EAAE,UAAU;AAClB,IAAA,IAAI,EAAE,UAAU;AAChB,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,IAAI,EAAE,UAAU;AAEhB,IAAA,KAAK,EAAE,UAAU;AACjB,IACA,KAAK,EAAE,UAAU;CACnB;AAED,MAAM,KAAK,GAAG;AACX,IAAA,IAAI,EAAE,CAAC,CAAS,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK;AAC/C,IAAA,GAAG,EAAE,CAAC,CAAS,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK;AAC7C,IAAA,MAAM,EAAE,CAAC,CAAS,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK;AACnD,IAAA,IAAI,EAAE,CAAC,CAAS,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK;AAC/C,IAAA,OAAO,EAAE,CAAC,CAAS,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK;AACrD,IAAA,IAAI,EAAE,CAAC,CAAS,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK;AAC/C,IAAA,UAAU,EAAE,CAAC,CAAS,KAAK,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK;CACrE;AAED,MAAM,WAAY,SAAQ,KAAK,CAAA;AAO5B,IAAA,WAAA,CAAY,OAA2B,EAAA;;AACpC,QAAA,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;AAEtB,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;AAC1B,QAAA,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;QAE5B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;QACjD,CAAA,EAAA,GAAA,KAAK,CAAC,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAG,IAAI,EAAE,WAAW,CAAC;IAC/C;;AAGA,IAAA,IAAI,MAAM,GAAA;QACP,MAAM,OAAO,GAAa,EAAE;QAC5B,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAChE,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAChE,IAAI,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;AAC1D,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACd,OAAO,CAAC,IAAI,CACT,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;AACtB,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAClD;QACJ;QAEA,OAAO;YACJ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;gBAC9C,GAAG;gBACH,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,EAAE;YACF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACpC,IAAI,GAAG,IAAI,CAAC,OAAO;YACnB,EAAE;AACF,YAAA,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5D,EAAE;AACJ,SAAA,CAAC,IAAI,CAAC,IAAI,CAAC;IACf;AACF;;;;"}
|
|
@@ -8,22 +8,22 @@ class XansqlConfig {
|
|
|
8
8
|
this.xansql = xansql;
|
|
9
9
|
this.config = config;
|
|
10
10
|
if (!config.dialect)
|
|
11
|
-
throw new XansqlError
|
|
11
|
+
throw new XansqlError({
|
|
12
12
|
code: "INTERNAL_ERROR",
|
|
13
13
|
message: `Dialect configuration is required in Xansql config.`,
|
|
14
14
|
});
|
|
15
15
|
if (!config.dialect.engine || !config.dialect.execute)
|
|
16
|
-
throw new XansqlError
|
|
16
|
+
throw new XansqlError({
|
|
17
17
|
code: "INTERNAL_ERROR",
|
|
18
18
|
message: `Dialect engine and execute function are required in Xansql config.`,
|
|
19
19
|
});
|
|
20
20
|
if (this.engins.indexOf(config.dialect.engine) === -1)
|
|
21
|
-
throw new XansqlError
|
|
21
|
+
throw new XansqlError({
|
|
22
22
|
code: "INTERNAL_ERROR",
|
|
23
23
|
message: `Dialect engine must be one of ${this.engins.join(', ')}`,
|
|
24
24
|
});
|
|
25
25
|
if (typeof config.dialect.execute !== 'function')
|
|
26
|
-
throw new XansqlError
|
|
26
|
+
throw new XansqlError({
|
|
27
27
|
code: "INTERNAL_ERROR",
|
|
28
28
|
message: `Dialect execute must be a function.`,
|
|
29
29
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XansqlConfig.cjs","sources":["../../../src/core/classes/XansqlConfig.ts"],"sourcesContent":["import { XansqlConfigTypeRequired, XansqlConfigType, XansqlDialectEngine } from \"../types\";\nimport Xansql from \"../Xansql\";\nimport XansqlError from \"../XansqlError\";\n\nclass XansqlConfig {\n readonly xansql: Xansql;\n readonly config: XansqlConfigType;\n readonly engins: XansqlDialectEngine[] = ['mysql', 'postgres', 'sqlite'];\n constructor(xansql: Xansql, config: XansqlConfigType) {\n this.xansql = xansql;\n this.config = config;\n\n if (!config.dialect) throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: `Dialect configuration is required in Xansql config.`,\n })\n if (!config.dialect.engine || !config.dialect.execute) throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: `Dialect engine and execute function are required in Xansql config.`,\n })\n if (this.engins.indexOf(config.dialect.engine) === -1) throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: `Dialect engine must be one of ${this.engins.join(', ')}`,\n })\n if (typeof config.dialect.execute !== 'function') throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: `Dialect execute must be a function.`,\n })\n }\n\n parse() {\n const config = {\n ...this.config,\n }\n\n return config as XansqlConfigTypeRequired\n }\n}\n\nexport default XansqlConfig;"],"names":[
|
|
1
|
+
{"version":3,"file":"XansqlConfig.cjs","sources":["../../../src/core/classes/XansqlConfig.ts"],"sourcesContent":["import { XansqlConfigTypeRequired, XansqlConfigType, XansqlDialectEngine } from \"../types\";\nimport Xansql from \"../Xansql\";\nimport XansqlError from \"../XansqlError\";\n\nclass XansqlConfig {\n readonly xansql: Xansql;\n readonly config: XansqlConfigType;\n readonly engins: XansqlDialectEngine[] = ['mysql', 'postgres', 'sqlite'];\n constructor(xansql: Xansql, config: XansqlConfigType) {\n this.xansql = xansql;\n this.config = config;\n\n if (!config.dialect) throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: `Dialect configuration is required in Xansql config.`,\n })\n if (!config.dialect.engine || !config.dialect.execute) throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: `Dialect engine and execute function are required in Xansql config.`,\n })\n if (this.engins.indexOf(config.dialect.engine) === -1) throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: `Dialect engine must be one of ${this.engins.join(', ')}`,\n })\n if (typeof config.dialect.execute !== 'function') throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: `Dialect execute must be a function.`,\n })\n }\n\n parse() {\n const config = {\n ...this.config,\n }\n\n return config as XansqlConfigTypeRequired\n }\n}\n\nexport default XansqlConfig;"],"names":[],"mappings":";;;;AAIA,MAAM,YAAY,CAAA;IAIf,WAAA,CAAY,MAAc,EAAE,MAAwB,EAAA;QAD3C,IAAA,CAAA,MAAM,GAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC;AAErE,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QAEpB,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,IAAI,WAAW,CAAC;AACxC,gBAAA,IAAI,EAAE,gBAAgB;AACtB,gBAAA,OAAO,EAAE,CAAA,mDAAA,CAAqD;AAChE,aAAA,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO;YAAE,MAAM,IAAI,WAAW,CAAC;AAC1E,gBAAA,IAAI,EAAE,gBAAgB;AACtB,gBAAA,OAAO,EAAE,CAAA,kEAAA,CAAoE;AAC/E,aAAA,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE;YAAE,MAAM,IAAI,WAAW,CAAC;AAC1E,gBAAA,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,CAAA,8BAAA,EAAiC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE;AACpE,aAAA,CAAC;AACF,QAAA,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,KAAK,UAAU;YAAE,MAAM,IAAI,WAAW,CAAC;AACrE,gBAAA,IAAI,EAAE,gBAAgB;AACtB,gBAAA,OAAO,EAAE,CAAA,mCAAA,CAAqC;AAChD,aAAA,CAAC;IACL;IAEA,KAAK,GAAA;AACF,QAAA,MAAM,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACN,IAAI,CAAC,MAAM,CAChB;AAED,QAAA,OAAO,MAAkC;IAC5C;AACF;;;;"}
|
|
@@ -15,7 +15,7 @@ const XansqlBridgeDialect = (url, engine) => {
|
|
|
15
15
|
};
|
|
16
16
|
const execute = async (sql, xansql) => {
|
|
17
17
|
if (typeof window === 'undefined') {
|
|
18
|
-
throw new XansqlError
|
|
18
|
+
throw new XansqlError({
|
|
19
19
|
code: "INTERNAL_ERROR",
|
|
20
20
|
message: "XansqlBridge dialect can only be used in browser environment.",
|
|
21
21
|
});
|
|
@@ -30,7 +30,7 @@ const XansqlBridgeDialect = (url, engine) => {
|
|
|
30
30
|
if (meta.action === "SELECT") {
|
|
31
31
|
let res = await client.get(await base.makePath('find', xansql), { params: data });
|
|
32
32
|
if (!res.success) {
|
|
33
|
-
throw new XansqlError
|
|
33
|
+
throw new XansqlError({
|
|
34
34
|
code: "QUERY_ERROR",
|
|
35
35
|
message: res.message
|
|
36
36
|
});
|
|
@@ -40,7 +40,7 @@ const XansqlBridgeDialect = (url, engine) => {
|
|
|
40
40
|
else if (meta.action === "INSERT") {
|
|
41
41
|
let res = await client.post(await base.makePath('insert', xansql), { body: data });
|
|
42
42
|
if (!res.success) {
|
|
43
|
-
throw new XansqlError
|
|
43
|
+
throw new XansqlError({
|
|
44
44
|
code: "QUERY_ERROR",
|
|
45
45
|
message: res.message
|
|
46
46
|
});
|
|
@@ -50,7 +50,7 @@ const XansqlBridgeDialect = (url, engine) => {
|
|
|
50
50
|
else if (meta.action === "UPDATE") {
|
|
51
51
|
let res = await client.put(await base.makePath('update', xansql), { body: data });
|
|
52
52
|
if (!res.success) {
|
|
53
|
-
throw new XansqlError
|
|
53
|
+
throw new XansqlError({
|
|
54
54
|
code: "QUERY_ERROR",
|
|
55
55
|
message: res.message
|
|
56
56
|
});
|
|
@@ -60,7 +60,7 @@ const XansqlBridgeDialect = (url, engine) => {
|
|
|
60
60
|
else if (meta.action === "DELETE") {
|
|
61
61
|
let res = await client.delete(await base.makePath('delete', xansql), { params: data });
|
|
62
62
|
if (!res.success) {
|
|
63
|
-
throw new XansqlError
|
|
63
|
+
throw new XansqlError({
|
|
64
64
|
code: "QUERY_ERROR",
|
|
65
65
|
message: res.message
|
|
66
66
|
});
|
|
@@ -70,7 +70,7 @@ const XansqlBridgeDialect = (url, engine) => {
|
|
|
70
70
|
else {
|
|
71
71
|
let res = await client.post(await base.makePath('executer', xansql), { body: data });
|
|
72
72
|
if (!res.success) {
|
|
73
|
-
throw new XansqlError
|
|
73
|
+
throw new XansqlError({
|
|
74
74
|
code: "QUERY_ERROR",
|
|
75
75
|
message: res.message
|
|
76
76
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialect.cjs","sources":["../../../src/dialects/Bridge/dialect.ts"],"sourcesContent":["import { SecurequClient } from \"securequ\";\nimport { makePath, makeSecret, sqlparser } from \"./base\";\nimport { ExecuterResult, XansqlDialectEngine, XansqlFileMeta } from \"../../core/types\";\nimport Xansql from \"../../core/Xansql\";\nimport XansqlError from \"../../core/XansqlError\";\n\nconst XansqlBridgeDialect = (url: string, engine?: XansqlDialectEngine) => {\n let instance: SecurequClient | null = null;\n const getClient = async (xansql: Xansql) => {\n if (!instance) {\n const secret = makeSecret(xansql)\n instance = new SecurequClient({ secret, url });\n }\n return instance;\n }\n\n const execute = async (sql: string, xansql: Xansql): Promise<ExecuterResult> => {\n if (typeof window === 'undefined') {\n throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: \"XansqlBridge dialect can only be used in browser environment.\",\n })\n }\n const client = await getClient(xansql)\n const meta = sqlparser(sql);\n const data = {\n sql,\n table: meta.table,\n action: meta.action,\n };\n\n if (meta.action === \"SELECT\") {\n let res = await client.get(await makePath('find', xansql), { params: data })\n if (!res.success) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: res.message\n });\n }\n return res.data || null\n\n } else if (meta.action === \"INSERT\") {\n let res = await client.post(await makePath('insert', xansql), { body: data })\n if (!res.success) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: res.message\n });\n }\n return res.data || null\n } else if (meta.action === \"UPDATE\") {\n let res = await client.put(await makePath('update', xansql), { body: data })\n if (!res.success) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: res.message\n });\n }\n return res.data || null\n } else if (meta.action === \"DELETE\") {\n let res = await client.delete(await makePath('delete', xansql), { params: data })\n if (!res.success) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: res.message\n });\n }\n return res.data || null\n } else {\n\n let res = await client.post(await makePath('executer', xansql), { body: data })\n if (!res.success) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: res.message\n });\n }\n return res.data || null\n }\n };\n\n const uploadFile = async (chunk: Uint8Array, meta: XansqlFileMeta, xansql: Xansql): Promise<XansqlFileMeta> => {\n const client = await getClient(xansql);\n const res = await client.uploadFile({\n chunk,\n meta\n });\n return res.data\n }\n\n const deleteFile = async (fileId: string, xansql: Xansql) => {\n const client = await getClient(xansql);\n await client.deleteFile(fileId);\n }\n\n return {\n dialect: {\n engine: engine || 'mysql',\n execute,\n },\n file: {\n upload: uploadFile,\n delete: deleteFile\n }\n };\n};\n\n\nexport default XansqlBridgeDialect;\n"],"names":["makeSecret","SecurequClient","
|
|
1
|
+
{"version":3,"file":"dialect.cjs","sources":["../../../src/dialects/Bridge/dialect.ts"],"sourcesContent":["import { SecurequClient } from \"securequ\";\nimport { makePath, makeSecret, sqlparser } from \"./base\";\nimport { ExecuterResult, XansqlDialectEngine, XansqlFileMeta } from \"../../core/types\";\nimport Xansql from \"../../core/Xansql\";\nimport XansqlError from \"../../core/XansqlError\";\n\nconst XansqlBridgeDialect = (url: string, engine?: XansqlDialectEngine) => {\n let instance: SecurequClient | null = null;\n const getClient = async (xansql: Xansql) => {\n if (!instance) {\n const secret = makeSecret(xansql)\n instance = new SecurequClient({ secret, url });\n }\n return instance;\n }\n\n const execute = async (sql: string, xansql: Xansql): Promise<ExecuterResult> => {\n if (typeof window === 'undefined') {\n throw new XansqlError({\n code: \"INTERNAL_ERROR\",\n message: \"XansqlBridge dialect can only be used in browser environment.\",\n })\n }\n const client = await getClient(xansql)\n const meta = sqlparser(sql);\n const data = {\n sql,\n table: meta.table,\n action: meta.action,\n };\n\n if (meta.action === \"SELECT\") {\n let res = await client.get(await makePath('find', xansql), { params: data })\n if (!res.success) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: res.message\n });\n }\n return res.data || null\n\n } else if (meta.action === \"INSERT\") {\n let res = await client.post(await makePath('insert', xansql), { body: data })\n if (!res.success) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: res.message\n });\n }\n return res.data || null\n } else if (meta.action === \"UPDATE\") {\n let res = await client.put(await makePath('update', xansql), { body: data })\n if (!res.success) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: res.message\n });\n }\n return res.data || null\n } else if (meta.action === \"DELETE\") {\n let res = await client.delete(await makePath('delete', xansql), { params: data })\n if (!res.success) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: res.message\n });\n }\n return res.data || null\n } else {\n\n let res = await client.post(await makePath('executer', xansql), { body: data })\n if (!res.success) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: res.message\n });\n }\n return res.data || null\n }\n };\n\n const uploadFile = async (chunk: Uint8Array, meta: XansqlFileMeta, xansql: Xansql): Promise<XansqlFileMeta> => {\n const client = await getClient(xansql);\n const res = await client.uploadFile({\n chunk,\n meta\n });\n return res.data\n }\n\n const deleteFile = async (fileId: string, xansql: Xansql) => {\n const client = await getClient(xansql);\n await client.deleteFile(fileId);\n }\n\n return {\n dialect: {\n engine: engine || 'mysql',\n execute,\n },\n file: {\n upload: uploadFile,\n delete: deleteFile\n }\n };\n};\n\n\nexport default XansqlBridgeDialect;\n"],"names":["makeSecret","SecurequClient","sqlparser","makePath"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SecurequClient } from 'securequ';
|
|
2
2
|
import { sqlparser, makePath, makeSecret } from './base.js';
|
|
3
|
-
import
|
|
3
|
+
import XansqlError from '../../core/XansqlError.js';
|
|
4
4
|
|
|
5
5
|
const XansqlBridgeDialect = (url, engine) => {
|
|
6
6
|
let instance = null;
|
|
@@ -16,7 +16,7 @@ class XansqlBridgeServer {
|
|
|
16
16
|
if (config.isAuthorized) {
|
|
17
17
|
const isPermit = await config.isAuthorized(info);
|
|
18
18
|
if (!isPermit)
|
|
19
|
-
throw new XansqlError
|
|
19
|
+
throw new XansqlError({
|
|
20
20
|
code: "VALIDATION_ERROR",
|
|
21
21
|
message: "isAuthorized denied for server initialization.",
|
|
22
22
|
model: info.model ? info.model.table : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.cjs","sources":["../../../src/dialects/Bridge/server.ts"],"sourcesContent":["import Xansql from \"../../core/Xansql\";\nimport XansqlError from \"../../core/XansqlError\";\nimport Model from \"../../model\";\nimport { makePath, makeSecret } from \"./base\";\nimport { ListenOptions, XansqlBridgeAuthorizedInfo, XansqlBridgeServerConfig } from \"./types\";\nimport { SecurequServer } from \"securequ\";\n\nclass XansqlBridgeServer {\n readonly REQUEST_CONTENT_TYPE = 'application/octet-stream';\n xansql: Xansql;\n config: XansqlBridgeServerConfig;\n private server: SecurequServer | null = null;\n\n constructor(xansql: Xansql, config: XansqlBridgeServerConfig) {\n this.xansql = xansql;\n this.config = config;\n }\n\n async authorized(info: XansqlBridgeAuthorizedInfo) {\n const config = this.config;\n if (config.isAuthorized) {\n const isPermit = await config.isAuthorized(info)\n if (!isPermit) throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: \"isAuthorized denied for server initialization.\",\n model: info.model ? info.model.table : undefined,\n })\n }\n }\n\n async initial() {\n if (this.server) return this.server;\n\n const config = this.config;\n const xansql = this.xansql\n const secret = makeSecret(this.xansql);\n\n const server = new SecurequServer({\n ...(config || {}),\n file: {\n checkFileType: true,\n async upload(chunk, filemeta) {\n return await xansql.uploadFile({\n chunk,\n meta: filemeta\n }) as any\n },\n async delete(fileId) {\n return await xansql.deleteFile(fileId)\n },\n },\n clients: [\n {\n origin: `*`,\n secret\n }\n ]\n });\n this.server = server;\n\n\n server.get(await makePath('find', xansql), async (req: any) => {\n const params: any = req.searchParams\n await this.authorized({\n method: \"GET\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model<any>,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('insert', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.put(await makePath('update', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"PUT\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.delete(await makePath('delete', xansql), async (req: any) => {\n const params: any = req.searchParams\n await this.authorized({\n method: \"DELETE\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('executer', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n return this.server;\n }\n\n async listen(url: string, options: ListenOptions) {\n const server = await this.initial()\n return await server.listen(url, options)\n }\n}\n\nexport default XansqlBridgeServer"],"names":["
|
|
1
|
+
{"version":3,"file":"server.cjs","sources":["../../../src/dialects/Bridge/server.ts"],"sourcesContent":["import Xansql from \"../../core/Xansql\";\nimport XansqlError from \"../../core/XansqlError\";\nimport Model from \"../../model\";\nimport { makePath, makeSecret } from \"./base\";\nimport { ListenOptions, XansqlBridgeAuthorizedInfo, XansqlBridgeServerConfig } from \"./types\";\nimport { SecurequServer } from \"securequ\";\n\nclass XansqlBridgeServer {\n readonly REQUEST_CONTENT_TYPE = 'application/octet-stream';\n xansql: Xansql;\n config: XansqlBridgeServerConfig;\n private server: SecurequServer | null = null;\n\n constructor(xansql: Xansql, config: XansqlBridgeServerConfig) {\n this.xansql = xansql;\n this.config = config;\n }\n\n async authorized(info: XansqlBridgeAuthorizedInfo) {\n const config = this.config;\n if (config.isAuthorized) {\n const isPermit = await config.isAuthorized(info)\n if (!isPermit) throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: \"isAuthorized denied for server initialization.\",\n model: info.model ? info.model.table : undefined,\n })\n }\n }\n\n async initial() {\n if (this.server) return this.server;\n\n const config = this.config;\n const xansql = this.xansql\n const secret = makeSecret(this.xansql);\n\n const server = new SecurequServer({\n ...(config || {}),\n file: {\n checkFileType: true,\n async upload(chunk, filemeta) {\n return await xansql.uploadFile({\n chunk,\n meta: filemeta\n }) as any\n },\n async delete(fileId) {\n return await xansql.deleteFile(fileId)\n },\n },\n clients: [\n {\n origin: `*`,\n secret\n }\n ]\n });\n this.server = server;\n\n\n server.get(await makePath('find', xansql), async (req: any) => {\n const params: any = req.searchParams\n await this.authorized({\n method: \"GET\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model<any>,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('insert', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.put(await makePath('update', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"PUT\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.delete(await makePath('delete', xansql), async (req: any) => {\n const params: any = req.searchParams\n await this.authorized({\n method: \"DELETE\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('executer', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: Array.from(xansql.models.values()).find(m => m.table === params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n return this.server;\n }\n\n async listen(url: string, options: ListenOptions) {\n const server = await this.initial()\n return await server.listen(url, options)\n }\n}\n\nexport default XansqlBridgeServer"],"names":["makeSecret","SecurequServer","makePath"],"mappings":"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"}
|
package/index.cjs
CHANGED
package/index.d.ts
CHANGED
|
@@ -2,6 +2,6 @@ export { default as Xansql } from './core/Xansql.js';
|
|
|
2
2
|
export { default as Model } from './model/index.js';
|
|
3
3
|
export { default as XansqlError } from './core/XansqlError.js';
|
|
4
4
|
export { default as xt } from './xt/index.js';
|
|
5
|
-
export { AggregateArgs, AggregateArgsValue, AggregateFunctions, AggregateGroupByArgs, AggregateOrderBy, AggregateSelectArgs, CreateArgs, CreateDataArgs, CreateDataValue, DeleteArgs, ExactArgs, FindAggregateArgs, FindArgs, FindResult, FindResultColumnMap, FindResultFullSchema, FindResultMap, InferWhereValue, IsRelationField, IsRelationMany, IsRelationOne, LimitArgs, ModelClass, ModelHooks, ModelOptions, ModelRowObject, Normalize, OrderByArgs, PaginateArgs, SchemaAllColumns, SchemaShape, SelectArgs, UpdateArgs, UpdateDataArgs, UpdateDataValue, UpdateRelationArgs, UpsertArgs, WhereArgs, WhereColumnArgs, WhereSubConditionArgs } from './model/types.js';
|
|
5
|
+
export { AggregateArgs, AggregateArgsValue, AggregateFunctions, AggregateGroupByArgs, AggregateOrderBy, AggregateResult, AggregateResultGroupBy, AggregateSelectArgs, CreateArgs, CreateDataArgs, CreateDataValue, CreateResult, DeleteArgs, DeleteResult, ExactArgs, FindAggregateArgs, FindArgs, FindResult, FindResultColumnMap, FindResultFullSchema, FindResultMap, InferWhereValue, IsRelationField, IsRelationMany, IsRelationOne, LimitArgs, ModelClass, ModelHooks, ModelOptions, ModelRowObject, Normalize, OrderByArgs, PaginateArgs, SchemaAllColumns, SchemaShape, SelectArgs, UpdateArgs, UpdateDataArgs, UpdateDataValue, UpdateRelationArgs, UpdateResult, UpsertArgs, UpsertResult, WhereArgs, WhereColumnArgs, WhereSubConditionArgs } from './model/types.js';
|
|
6
6
|
export { ExecuterResult, ResultData, RowObject, XansqlCache, XansqlConfigType, XansqlConfigTypeRequired, XansqlDialect, XansqlDialectEngine, XansqlFileConfig, XansqlFileMeta, XansqlFileUploadArgs, XansqlHooks, XansqlSocket } from './core/types.js';
|
|
7
7
|
export { XqlField } from './xt/types.js';
|
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { default as Xansql } from './core/Xansql.js';
|
|
2
2
|
export { default as Model } from './model/index.js';
|
|
3
|
-
export { XansqlError } from './core/XansqlError.js';
|
|
3
|
+
export { default as XansqlError } from './core/XansqlError.js';
|
|
4
4
|
export { default as xt } from './xt/index.js';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
class AliasGenerate {
|
|
4
|
+
constructor(xansql, model) {
|
|
5
|
+
this.xansql = xansql;
|
|
6
|
+
this.model = model;
|
|
7
|
+
this.used = new Set();
|
|
8
|
+
for (const m of xansql.models.values()) {
|
|
9
|
+
if (m.alias)
|
|
10
|
+
this.used.add(m.alias);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
base36Hash(str) {
|
|
14
|
+
let h = 2166136261;
|
|
15
|
+
for (let i = 0; i < str.length; i++) {
|
|
16
|
+
h ^= str.charCodeAt(i);
|
|
17
|
+
h = Math.imul(h, 16777619);
|
|
18
|
+
}
|
|
19
|
+
return (h >>> 0).toString(36);
|
|
20
|
+
}
|
|
21
|
+
splitWords(name) {
|
|
22
|
+
return name.split(/_|(?=[A-Z])/).filter(Boolean);
|
|
23
|
+
}
|
|
24
|
+
isInvalid(alias) {
|
|
25
|
+
return this.used.has(alias) || AliasGenerate.SQL_KEYWORDS.has(alias);
|
|
26
|
+
}
|
|
27
|
+
makeBase(words, table) {
|
|
28
|
+
let base = words.length === 1
|
|
29
|
+
? words[0].slice(0, 2)
|
|
30
|
+
: words.map(w => w[0]).join('');
|
|
31
|
+
base = base.toLowerCase();
|
|
32
|
+
if (base.length < 2) {
|
|
33
|
+
base = (base + table.slice(1, 2)).toLowerCase();
|
|
34
|
+
}
|
|
35
|
+
return base;
|
|
36
|
+
}
|
|
37
|
+
generate() {
|
|
38
|
+
const table = this.model.table;
|
|
39
|
+
const words = this.splitWords(table);
|
|
40
|
+
// 1️⃣ readable base
|
|
41
|
+
const base = this.makeBase(words, table);
|
|
42
|
+
// 2️⃣ clean base
|
|
43
|
+
if (!this.isInvalid(base)) {
|
|
44
|
+
this.used.add(base);
|
|
45
|
+
return base;
|
|
46
|
+
}
|
|
47
|
+
// 3️⃣ expanded readable
|
|
48
|
+
const expanded = words.map(w => w.slice(0, 2)).join('').toLowerCase();
|
|
49
|
+
if (!this.isInvalid(expanded)) {
|
|
50
|
+
this.used.add(expanded);
|
|
51
|
+
return expanded;
|
|
52
|
+
}
|
|
53
|
+
// 4️⃣ deterministic hash suffix
|
|
54
|
+
const hash = this.base36Hash(table).slice(0, 2);
|
|
55
|
+
const hashed = (base + hash).slice(0, 4);
|
|
56
|
+
if (!this.isInvalid(hashed)) {
|
|
57
|
+
this.used.add(hashed);
|
|
58
|
+
return hashed;
|
|
59
|
+
}
|
|
60
|
+
// 5️⃣ guaranteed unique fallback
|
|
61
|
+
let i = 1;
|
|
62
|
+
while (this.isInvalid(base + i))
|
|
63
|
+
i++;
|
|
64
|
+
const finalAlias = base + i;
|
|
65
|
+
this.used.add(finalAlias);
|
|
66
|
+
return finalAlias;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
AliasGenerate.SQL_KEYWORDS = new Set([
|
|
70
|
+
"as", "in", "is", "on", "or", "to", "by", "and", "not", "all", "any", "asc", "desc",
|
|
71
|
+
"select", "from", "where", "join", "left", "right", "inner", "outer", "full",
|
|
72
|
+
"group", "order", "having", "limit", "offset", "union", "case", "when", "then",
|
|
73
|
+
"else", "end", "exists", "between", "like", "into", "create", "table", "insert",
|
|
74
|
+
"update", "delete", "drop", "alter", "index", "view", "primary", "foreign", "key", "use"
|
|
75
|
+
]);
|
|
76
|
+
|
|
77
|
+
exports.AliasGenerate = AliasGenerate;
|
|
78
|
+
//# sourceMappingURL=AliasGenerate.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AliasGenerate.cjs","sources":["../../src/model/AliasGenerate.ts"],"sourcesContent":["import Model from \".\";\nimport Xansql from \"../core/Xansql\";\n\nexport class AliasGenerate {\n private static SQL_KEYWORDS = new Set([\n \"as\", \"in\", \"is\", \"on\", \"or\", \"to\", \"by\", \"and\", \"not\", \"all\", \"any\", \"asc\", \"desc\",\n \"select\", \"from\", \"where\", \"join\", \"left\", \"right\", \"inner\", \"outer\", \"full\",\n \"group\", \"order\", \"having\", \"limit\", \"offset\", \"union\", \"case\", \"when\", \"then\",\n \"else\", \"end\", \"exists\", \"between\", \"like\", \"into\", \"create\", \"table\", \"insert\",\n \"update\", \"delete\", \"drop\", \"alter\", \"index\", \"view\", \"primary\", \"foreign\", \"key\", \"use\"\n ]);\n\n private used = new Set<string>();\n\n constructor(\n private xansql: Xansql,\n private model: Model<any>\n ) {\n for (const m of xansql.models.values()) {\n if (m.alias) this.used.add(m.alias);\n }\n }\n\n private base36Hash(str: string): string {\n let h = 2166136261;\n for (let i = 0; i < str.length; i++) {\n h ^= str.charCodeAt(i);\n h = Math.imul(h, 16777619);\n }\n return (h >>> 0).toString(36);\n }\n\n private splitWords(name: string): string[] {\n return name.split(/_|(?=[A-Z])/).filter(Boolean);\n }\n\n private isInvalid(alias: string): boolean {\n return this.used.has(alias) || AliasGenerate.SQL_KEYWORDS.has(alias);\n }\n\n private makeBase(words: string[], table: string): string {\n let base =\n words.length === 1\n ? words[0].slice(0, 2)\n : words.map(w => w[0]).join('');\n\n base = base.toLowerCase();\n\n if (base.length < 2) {\n base = (base + table.slice(1, 2)).toLowerCase();\n }\n\n return base;\n }\n\n generate(): string {\n const table = this.model.table;\n const words = this.splitWords(table);\n\n // 1️⃣ readable base\n const base = this.makeBase(words, table);\n\n // 2️⃣ clean base\n if (!this.isInvalid(base)) {\n this.used.add(base);\n return base;\n }\n\n // 3️⃣ expanded readable\n const expanded = words.map(w => w.slice(0, 2)).join('').toLowerCase();\n if (!this.isInvalid(expanded)) {\n this.used.add(expanded);\n return expanded;\n }\n\n // 4️⃣ deterministic hash suffix\n const hash = this.base36Hash(table).slice(0, 2);\n const hashed = (base + hash).slice(0, 4);\n if (!this.isInvalid(hashed)) {\n this.used.add(hashed);\n return hashed;\n }\n\n // 5️⃣ guaranteed unique fallback\n let i = 1;\n while (this.isInvalid(base + i)) i++;\n const finalAlias = base + i;\n this.used.add(finalAlias);\n return finalAlias;\n }\n}"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
class AliasGenerate {
|
|
2
|
+
constructor(xansql, model) {
|
|
3
|
+
this.xansql = xansql;
|
|
4
|
+
this.model = model;
|
|
5
|
+
this.used = new Set();
|
|
6
|
+
for (const m of xansql.models.values()) {
|
|
7
|
+
if (m.alias)
|
|
8
|
+
this.used.add(m.alias);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
base36Hash(str) {
|
|
12
|
+
let h = 2166136261;
|
|
13
|
+
for (let i = 0; i < str.length; i++) {
|
|
14
|
+
h ^= str.charCodeAt(i);
|
|
15
|
+
h = Math.imul(h, 16777619);
|
|
16
|
+
}
|
|
17
|
+
return (h >>> 0).toString(36);
|
|
18
|
+
}
|
|
19
|
+
splitWords(name) {
|
|
20
|
+
return name.split(/_|(?=[A-Z])/).filter(Boolean);
|
|
21
|
+
}
|
|
22
|
+
isInvalid(alias) {
|
|
23
|
+
return this.used.has(alias) || AliasGenerate.SQL_KEYWORDS.has(alias);
|
|
24
|
+
}
|
|
25
|
+
makeBase(words, table) {
|
|
26
|
+
let base = words.length === 1
|
|
27
|
+
? words[0].slice(0, 2)
|
|
28
|
+
: words.map(w => w[0]).join('');
|
|
29
|
+
base = base.toLowerCase();
|
|
30
|
+
if (base.length < 2) {
|
|
31
|
+
base = (base + table.slice(1, 2)).toLowerCase();
|
|
32
|
+
}
|
|
33
|
+
return base;
|
|
34
|
+
}
|
|
35
|
+
generate() {
|
|
36
|
+
const table = this.model.table;
|
|
37
|
+
const words = this.splitWords(table);
|
|
38
|
+
// 1️⃣ readable base
|
|
39
|
+
const base = this.makeBase(words, table);
|
|
40
|
+
// 2️⃣ clean base
|
|
41
|
+
if (!this.isInvalid(base)) {
|
|
42
|
+
this.used.add(base);
|
|
43
|
+
return base;
|
|
44
|
+
}
|
|
45
|
+
// 3️⃣ expanded readable
|
|
46
|
+
const expanded = words.map(w => w.slice(0, 2)).join('').toLowerCase();
|
|
47
|
+
if (!this.isInvalid(expanded)) {
|
|
48
|
+
this.used.add(expanded);
|
|
49
|
+
return expanded;
|
|
50
|
+
}
|
|
51
|
+
// 4️⃣ deterministic hash suffix
|
|
52
|
+
const hash = this.base36Hash(table).slice(0, 2);
|
|
53
|
+
const hashed = (base + hash).slice(0, 4);
|
|
54
|
+
if (!this.isInvalid(hashed)) {
|
|
55
|
+
this.used.add(hashed);
|
|
56
|
+
return hashed;
|
|
57
|
+
}
|
|
58
|
+
// 5️⃣ guaranteed unique fallback
|
|
59
|
+
let i = 1;
|
|
60
|
+
while (this.isInvalid(base + i))
|
|
61
|
+
i++;
|
|
62
|
+
const finalAlias = base + i;
|
|
63
|
+
this.used.add(finalAlias);
|
|
64
|
+
return finalAlias;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
AliasGenerate.SQL_KEYWORDS = new Set([
|
|
68
|
+
"as", "in", "is", "on", "or", "to", "by", "and", "not", "all", "any", "asc", "desc",
|
|
69
|
+
"select", "from", "where", "join", "left", "right", "inner", "outer", "full",
|
|
70
|
+
"group", "order", "having", "limit", "offset", "union", "case", "when", "then",
|
|
71
|
+
"else", "end", "exists", "between", "like", "into", "create", "table", "insert",
|
|
72
|
+
"update", "delete", "drop", "alter", "index", "view", "primary", "foreign", "key", "use"
|
|
73
|
+
]);
|
|
74
|
+
|
|
75
|
+
export { AliasGenerate };
|
|
76
|
+
//# sourceMappingURL=AliasGenerate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AliasGenerate.js","sources":["../../src/model/AliasGenerate.ts"],"sourcesContent":["import Model from \".\";\nimport Xansql from \"../core/Xansql\";\n\nexport class AliasGenerate {\n private static SQL_KEYWORDS = new Set([\n \"as\", \"in\", \"is\", \"on\", \"or\", \"to\", \"by\", \"and\", \"not\", \"all\", \"any\", \"asc\", \"desc\",\n \"select\", \"from\", \"where\", \"join\", \"left\", \"right\", \"inner\", \"outer\", \"full\",\n \"group\", \"order\", \"having\", \"limit\", \"offset\", \"union\", \"case\", \"when\", \"then\",\n \"else\", \"end\", \"exists\", \"between\", \"like\", \"into\", \"create\", \"table\", \"insert\",\n \"update\", \"delete\", \"drop\", \"alter\", \"index\", \"view\", \"primary\", \"foreign\", \"key\", \"use\"\n ]);\n\n private used = new Set<string>();\n\n constructor(\n private xansql: Xansql,\n private model: Model<any>\n ) {\n for (const m of xansql.models.values()) {\n if (m.alias) this.used.add(m.alias);\n }\n }\n\n private base36Hash(str: string): string {\n let h = 2166136261;\n for (let i = 0; i < str.length; i++) {\n h ^= str.charCodeAt(i);\n h = Math.imul(h, 16777619);\n }\n return (h >>> 0).toString(36);\n }\n\n private splitWords(name: string): string[] {\n return name.split(/_|(?=[A-Z])/).filter(Boolean);\n }\n\n private isInvalid(alias: string): boolean {\n return this.used.has(alias) || AliasGenerate.SQL_KEYWORDS.has(alias);\n }\n\n private makeBase(words: string[], table: string): string {\n let base =\n words.length === 1\n ? words[0].slice(0, 2)\n : words.map(w => w[0]).join('');\n\n base = base.toLowerCase();\n\n if (base.length < 2) {\n base = (base + table.slice(1, 2)).toLowerCase();\n }\n\n return base;\n }\n\n generate(): string {\n const table = this.model.table;\n const words = this.splitWords(table);\n\n // 1️⃣ readable base\n const base = this.makeBase(words, table);\n\n // 2️⃣ clean base\n if (!this.isInvalid(base)) {\n this.used.add(base);\n return base;\n }\n\n // 3️⃣ expanded readable\n const expanded = words.map(w => w.slice(0, 2)).join('').toLowerCase();\n if (!this.isInvalid(expanded)) {\n this.used.add(expanded);\n return expanded;\n }\n\n // 4️⃣ deterministic hash suffix\n const hash = this.base36Hash(table).slice(0, 2);\n const hashed = (base + hash).slice(0, 4);\n if (!this.isInvalid(hashed)) {\n this.used.add(hashed);\n return hashed;\n }\n\n // 5️⃣ guaranteed unique fallback\n let i = 1;\n while (this.isInvalid(base + i)) i++;\n const finalAlias = base + i;\n this.used.add(finalAlias);\n return finalAlias;\n }\n}"],"names":[],"mappings":"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"}
|