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.
Files changed (70) hide show
  1. package/core/Migration.d.ts +7 -1
  2. package/core/Xansql.cjs +3 -3
  3. package/core/Xansql.cjs.map +1 -1
  4. package/core/Xansql.js +1 -1
  5. package/core/XansqlError.cjs +1 -4
  6. package/core/XansqlError.cjs.map +1 -1
  7. package/core/XansqlError.d.ts +1 -1
  8. package/core/XansqlError.js +1 -1
  9. package/core/XansqlError.js.map +1 -1
  10. package/core/classes/XansqlConfig.cjs +4 -4
  11. package/core/classes/XansqlConfig.cjs.map +1 -1
  12. package/core/classes/XansqlConfig.js +1 -1
  13. package/dialects/Bridge/dialect.cjs +6 -6
  14. package/dialects/Bridge/dialect.cjs.map +1 -1
  15. package/dialects/Bridge/dialect.js +1 -1
  16. package/dialects/Bridge/server.cjs +1 -1
  17. package/dialects/Bridge/server.cjs.map +1 -1
  18. package/dialects/Bridge/server.js +1 -1
  19. package/index.cjs +1 -1
  20. package/index.d.ts +1 -1
  21. package/index.js +1 -1
  22. package/model/AliasGenerate.cjs +78 -0
  23. package/model/AliasGenerate.cjs.map +1 -0
  24. package/model/AliasGenerate.js +76 -0
  25. package/model/AliasGenerate.js.map +1 -0
  26. package/model/Build/AggregateArgs/index.cjs +3 -3
  27. package/model/Build/AggregateArgs/index.cjs.map +1 -1
  28. package/model/Build/AggregateArgs/index.js +1 -1
  29. package/model/Build/AggregateSelectArgs/index.cjs +8 -9
  30. package/model/Build/AggregateSelectArgs/index.cjs.map +1 -1
  31. package/model/Build/AggregateSelectArgs/index.js +7 -8
  32. package/model/Build/AggregateSelectArgs/index.js.map +1 -1
  33. package/model/Build/CreateArgs/index.cjs +10 -11
  34. package/model/Build/CreateArgs/index.cjs.map +1 -1
  35. package/model/Build/CreateArgs/index.js +3 -4
  36. package/model/Build/CreateArgs/index.js.map +1 -1
  37. package/model/Build/FindArgs/index.cjs +15 -10
  38. package/model/Build/FindArgs/index.cjs.map +1 -1
  39. package/model/Build/FindArgs/index.js +15 -10
  40. package/model/Build/FindArgs/index.js.map +1 -1
  41. package/model/Build/LimitArgs/index.cjs +2 -2
  42. package/model/Build/LimitArgs/index.cjs.map +1 -1
  43. package/model/Build/LimitArgs/index.js +1 -1
  44. package/model/Build/OrderByArgs/index.cjs +2 -2
  45. package/model/Build/OrderByArgs/index.cjs.map +1 -1
  46. package/model/Build/OrderByArgs/index.js +1 -1
  47. package/model/Build/SelectArgs/index.cjs +1 -1
  48. package/model/Build/SelectArgs/index.cjs.map +1 -1
  49. package/model/Build/SelectArgs/index.js +1 -1
  50. package/model/Build/UpdateArgs/index.cjs +12 -10
  51. package/model/Build/UpdateArgs/index.cjs.map +1 -1
  52. package/model/Build/UpdateArgs/index.js +7 -5
  53. package/model/Build/UpdateArgs/index.js.map +1 -1
  54. package/model/Build/UpsertArgs/index.cjs +3 -1
  55. package/model/Build/UpsertArgs/index.cjs.map +1 -1
  56. package/model/Build/UpsertArgs/index.js +3 -1
  57. package/model/Build/UpsertArgs/index.js.map +1 -1
  58. package/model/Build/WhereArgs/index.cjs +5 -5
  59. package/model/Build/WhereArgs/index.cjs.map +1 -1
  60. package/model/Build/WhereArgs/index.js +1 -1
  61. package/model/index.cjs +10 -70
  62. package/model/index.cjs.map +1 -1
  63. package/model/index.d.ts +15 -9
  64. package/model/index.js +5 -65
  65. package/model/index.js.map +1 -1
  66. package/model/types.d.ts +56 -32
  67. package/package.json +1 -1
  68. package/xt/XqlFieldInfo.cjs +1 -1
  69. package/xt/XqlFieldInfo.cjs.map +1 -1
  70. package/xt/XqlFieldInfo.js +1 -1
@@ -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<any>;
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.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.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.XansqlError({
113
+ throw new XansqlError({
114
114
  code: "INTERNAL_ERROR",
115
115
  message: `File delete is not supported by the current dialect.`
116
116
  });
@@ -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","XansqlError","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.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 { XansqlError } from './XansqlError.js';
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';
@@ -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.XansqlError = XansqlError;
67
- exports.default = XansqlError;
64
+ module.exports = XansqlError;
68
65
  //# sourceMappingURL=XansqlError.cjs.map
@@ -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\nexport class 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;AAEK,MAAO,WAAY,SAAQ,KAAK,CAAA;AAOnC,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;;;;;"}
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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"}
@@ -17,5 +17,5 @@ declare class XansqlError extends Error {
17
17
  get pretty(): string;
18
18
  }
19
19
 
20
- export { XansqlError, XansqlError as default };
20
+ export { XansqlError as default };
21
21
  export type { XansqlErrorCode, XansqlErrorOptions };
@@ -59,5 +59,5 @@ class XansqlError extends Error {
59
59
  }
60
60
  }
61
61
 
62
- export { XansqlError, XansqlError as default };
62
+ export { XansqlError as default };
63
63
  //# sourceMappingURL=XansqlError.js.map
@@ -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\nexport class 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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"}
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":"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"}
@@ -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.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.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.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.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":["XansqlError"],"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,IAAIA,uBAAW,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,IAAIA,uBAAW,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,IAAIA,uBAAW,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,IAAIA,uBAAW,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;;;;"}
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;;;;"}
@@ -1,4 +1,4 @@
1
- import { XansqlError } from '../XansqlError.js';
1
+ import XansqlError from '../XansqlError.js';
2
2
 
3
3
  class XansqlConfig {
4
4
  constructor(xansql, config) {
@@ -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.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.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.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.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.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.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","XansqlError","sqlparser","makePath"],"mappings":"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"}
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":";;;;;;AAMA,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAE,MAA4B,KAAI;IACvE,IAAI,QAAQ,GAA0B,IAAI;AAC1C,IAAA,MAAM,SAAS,GAAG,OAAO,MAAc,KAAI;QACxC,IAAI,CAAC,QAAQ,EAAE;AACZ,YAAA,MAAM,MAAM,GAAGA,eAAU,CAAC,MAAM,CAAC;YACjC,QAAQ,GAAG,IAAIC,uBAAc,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACjD;AACA,QAAA,OAAO,QAAQ;AAClB,IAAA,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,GAAW,EAAE,MAAc,KAA6B;AAC5E,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAChC,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,IAAI,EAAE,gBAAgB;AACtB,gBAAA,OAAO,EAAE,+DAA+D;AAC1E,aAAA,CAAC;QACL;AACA,QAAA,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC;AACtC,QAAA,MAAM,IAAI,GAAGC,cAAS,CAAC,GAAG,CAAC;AAC3B,QAAA,MAAM,IAAI,GAAG;YACV,GAAG;YACH,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACrB;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;YAC3B,IAAI,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,MAAMC,aAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC5E,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;gBACf,MAAM,IAAI,WAAW,CAAC;AACnB,oBAAA,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,GAAG,CAAC;AACf,iBAAA,CAAC;YACL;AACA,YAAA,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI;QAE1B;AAAO,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;YAClC,IAAI,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAMA,aAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7E,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;gBACf,MAAM,IAAI,WAAW,CAAC;AACnB,oBAAA,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,GAAG,CAAC;AACf,iBAAA,CAAC;YACL;AACA,YAAA,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI;QAC1B;AAAO,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;YAClC,IAAI,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,MAAMA,aAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC5E,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;gBACf,MAAM,IAAI,WAAW,CAAC;AACnB,oBAAA,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,GAAG,CAAC;AACf,iBAAA,CAAC;YACL;AACA,YAAA,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI;QAC1B;AAAO,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;YAClC,IAAI,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAMA,aAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACjF,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;gBACf,MAAM,IAAI,WAAW,CAAC;AACnB,oBAAA,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,GAAG,CAAC;AACf,iBAAA,CAAC;YACL;AACA,YAAA,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI;QAC1B;aAAO;YAEJ,IAAI,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAMA,aAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC/E,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;gBACf,MAAM,IAAI,WAAW,CAAC;AACnB,oBAAA,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,GAAG,CAAC;AACf,iBAAA,CAAC;YACL;AACA,YAAA,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI;QAC1B;AACH,IAAA,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,KAAiB,EAAE,IAAoB,EAAE,MAAc,KAA6B;AAC3G,QAAA,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC;AACtC,QAAA,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;YACjC,KAAK;YACL;AACF,SAAA,CAAC;QACF,OAAO,GAAG,CAAC,IAAI;AAClB,IAAA,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,MAAc,EAAE,MAAc,KAAI;AACzD,QAAA,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC;AACtC,QAAA,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;AAClC,IAAA,CAAC;IAED,OAAO;AACJ,QAAA,OAAO,EAAE;YACN,MAAM,EAAE,MAAM,IAAI,OAAO;YACzB,OAAO;AACT,SAAA;AACD,QAAA,IAAI,EAAE;AACH,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,MAAM,EAAE;AACV;KACH;AACJ;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { SecurequClient } from 'securequ';
2
2
  import { sqlparser, makePath, makeSecret } from './base.js';
3
- import { XansqlError } from '../../core/XansqlError.js';
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.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":["XansqlError","makeSecret","SecurequServer","makePath"],"mappings":"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"}
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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"}
@@ -1,4 +1,4 @@
1
- import { XansqlError } from '../../core/XansqlError.js';
1
+ import XansqlError from '../../core/XansqlError.js';
2
2
  import { makeSecret, makePath } from './base.js';
3
3
  import { SecurequServer } from 'securequ';
4
4
 
package/index.cjs CHANGED
@@ -9,6 +9,6 @@ var index$1 = require('./xt/index.cjs');
9
9
 
10
10
  exports.Xansql = Xansql;
11
11
  exports.Model = index;
12
- exports.XansqlError = XansqlError.XansqlError;
12
+ exports.XansqlError = XansqlError;
13
13
  exports.xt = index$1;
14
14
  //# sourceMappingURL=index.cjs.map
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":"MAGa,aAAa,CAAA;IAWvB,WAAA,CACW,MAAc,EACd,KAAiB,EAAA;QADjB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;AAJR,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,GAAG,EAAU;QAM7B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,CAAC,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QACtC;IACH;AAEQ,IAAA,UAAU,CAAC,GAAW,EAAA;QAC3B,IAAI,CAAC,GAAG,UAAU;AAClB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClC,YAAA,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;YACtB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC;QAC7B;QACA,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;IAChC;AAEQ,IAAA,UAAU,CAAC,IAAY,EAAA;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IACnD;AAEQ,IAAA,SAAS,CAAC,KAAa,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;IACvE;IAEQ,QAAQ,CAAC,KAAe,EAAE,KAAa,EAAA;AAC5C,QAAA,IAAI,IAAI,GACL,KAAK,CAAC,MAAM,KAAK;cACZ,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACrB,cAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAErC,QAAA,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAEzB,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAClB,YAAA,IAAI,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE;QAClD;AAEA,QAAA,OAAO,IAAI;IACd;IAEA,QAAQ,GAAA;AACL,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;QAGpC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;;QAGxC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,YAAA,OAAO,IAAI;QACd;;QAGA,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;QACrE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvB,YAAA,OAAO,QAAQ;QAClB;;AAGA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/C,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACrB,YAAA,OAAO,MAAM;QAChB;;QAGA,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;AAAE,YAAA,CAAC,EAAE;AACpC,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AACzB,QAAA,OAAO,UAAU;IACpB;;AArFe,aAAA,CAAA,YAAY,GAAG,IAAI,GAAG,CAAC;IACnC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;AACnF,IAAA,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM;AAC5E,IAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;AAC9E,IAAA,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ;AAC/E,IAAA,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE;AACrF,CAAA,CAAC;;;;"}