xansql 1.0.0
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/Types/fields/Array.d.ts +7 -0
- package/Types/fields/Array.js +6 -0
- package/Types/fields/Array.js.map +1 -0
- package/Types/fields/Array.mjs +6 -0
- package/Types/fields/Array.mjs.map +1 -0
- package/Types/fields/Boolean.d.ts +8 -0
- package/Types/fields/Boolean.js +11 -0
- package/Types/fields/Boolean.js.map +1 -0
- package/Types/fields/Boolean.mjs +11 -0
- package/Types/fields/Boolean.mjs.map +1 -0
- package/Types/fields/Date.d.ts +10 -0
- package/Types/fields/Date.js +22 -0
- package/Types/fields/Date.js.map +1 -0
- package/Types/fields/Date.mjs +22 -0
- package/Types/fields/Date.mjs.map +1 -0
- package/Types/fields/Enum.d.ts +8 -0
- package/Types/fields/Enum.js +10 -0
- package/Types/fields/Enum.js.map +1 -0
- package/Types/fields/Enum.mjs +10 -0
- package/Types/fields/Enum.mjs.map +1 -0
- package/Types/fields/File.d.ts +7 -0
- package/Types/fields/File.js +6 -0
- package/Types/fields/File.js.map +1 -0
- package/Types/fields/File.mjs +6 -0
- package/Types/fields/File.mjs.map +1 -0
- package/Types/fields/IDField.d.ts +6 -0
- package/Types/fields/IDField.js +2 -0
- package/Types/fields/IDField.js.map +1 -0
- package/Types/fields/IDField.mjs +2 -0
- package/Types/fields/IDField.mjs.map +1 -0
- package/Types/fields/Number.d.ts +8 -0
- package/Types/fields/Number.js +11 -0
- package/Types/fields/Number.js.map +1 -0
- package/Types/fields/Number.mjs +11 -0
- package/Types/fields/Number.mjs.map +1 -0
- package/Types/fields/Object.d.ts +8 -0
- package/Types/fields/Object.js +11 -0
- package/Types/fields/Object.js.map +1 -0
- package/Types/fields/Object.mjs +11 -0
- package/Types/fields/Object.mjs.map +1 -0
- package/Types/fields/Record.d.ts +8 -0
- package/Types/fields/Record.js +11 -0
- package/Types/fields/Record.js.map +1 -0
- package/Types/fields/Record.mjs +11 -0
- package/Types/fields/Record.mjs.map +1 -0
- package/Types/fields/Schema.d.ts +16 -0
- package/Types/fields/Schema.js +34 -0
- package/Types/fields/Schema.js.map +1 -0
- package/Types/fields/Schema.mjs +34 -0
- package/Types/fields/Schema.mjs.map +1 -0
- package/Types/fields/String.d.ts +10 -0
- package/Types/fields/String.js +20 -0
- package/Types/fields/String.js.map +1 -0
- package/Types/fields/String.mjs +20 -0
- package/Types/fields/String.mjs.map +1 -0
- package/Types/fields/Tuple.d.ts +8 -0
- package/Types/fields/Tuple.js +11 -0
- package/Types/fields/Tuple.js.map +1 -0
- package/Types/fields/Tuple.mjs +11 -0
- package/Types/fields/Tuple.mjs.map +1 -0
- package/Types/fields/Union.d.ts +8 -0
- package/Types/fields/Union.js +11 -0
- package/Types/fields/Union.js.map +1 -0
- package/Types/fields/Union.mjs +11 -0
- package/Types/fields/Union.mjs.map +1 -0
- package/Types/index.d.ts +56 -0
- package/Types/index.js +129 -0
- package/Types/index.js.map +1 -0
- package/Types/index.mjs +129 -0
- package/Types/index.mjs.map +1 -0
- package/Types/types.d.ts +20 -0
- package/core/ExcuteMeta.d.ts +11 -0
- package/core/ExcuteMeta.js +22 -0
- package/core/ExcuteMeta.js.map +1 -0
- package/core/ExcuteMeta.mjs +22 -0
- package/core/ExcuteMeta.mjs.map +1 -0
- package/core/Xansql.d.ts +46 -0
- package/core/Xansql.js +132 -0
- package/core/Xansql.js.map +1 -0
- package/core/Xansql.mjs +132 -0
- package/core/Xansql.mjs.map +1 -0
- package/core/XansqlError.js +11 -0
- package/core/XansqlError.js.map +1 -0
- package/core/XansqlError.mjs +11 -0
- package/core/XansqlError.mjs.map +1 -0
- package/core/XansqlResult.d.ts +12 -0
- package/core/XansqlResult.js +32 -0
- package/core/XansqlResult.js.map +1 -0
- package/core/XansqlResult.mjs +32 -0
- package/core/XansqlResult.mjs.map +1 -0
- package/core/classes/EventManager.d.ts +72 -0
- package/core/classes/EventManager.js +21 -0
- package/core/classes/EventManager.js.map +1 -0
- package/core/classes/EventManager.mjs +21 -0
- package/core/classes/EventManager.mjs.map +1 -0
- package/core/classes/ForeignInfo.js +51 -0
- package/core/classes/ForeignInfo.js.map +1 -0
- package/core/classes/ForeignInfo.mjs +51 -0
- package/core/classes/ForeignInfo.mjs.map +1 -0
- package/core/classes/Migration/ForeingMigration.d.ts +12 -0
- package/core/classes/Migration/ForeingMigration.js +52 -0
- package/core/classes/Migration/ForeingMigration.js.map +1 -0
- package/core/classes/Migration/ForeingMigration.mjs +52 -0
- package/core/classes/Migration/ForeingMigration.mjs.map +1 -0
- package/core/classes/Migration/IndexMigration.d.ts +12 -0
- package/core/classes/Migration/IndexMigration.js +49 -0
- package/core/classes/Migration/IndexMigration.js.map +1 -0
- package/core/classes/Migration/IndexMigration.mjs +49 -0
- package/core/classes/Migration/IndexMigration.mjs.map +1 -0
- package/core/classes/Migration/TableMigration.d.ts +33 -0
- package/core/classes/Migration/TableMigration.js +215 -0
- package/core/classes/Migration/TableMigration.js.map +1 -0
- package/core/classes/Migration/TableMigration.mjs +215 -0
- package/core/classes/Migration/TableMigration.mjs.map +1 -0
- package/core/classes/Migration/index.d.ts +12 -0
- package/core/classes/Migration/index.js +189 -0
- package/core/classes/Migration/index.js.map +1 -0
- package/core/classes/Migration/index.mjs +189 -0
- package/core/classes/Migration/index.mjs.map +1 -0
- package/core/classes/ModelFormatter.js +166 -0
- package/core/classes/ModelFormatter.js.map +1 -0
- package/core/classes/ModelFormatter.mjs +166 -0
- package/core/classes/ModelFormatter.mjs.map +1 -0
- package/core/classes/TypesGenerator.d.ts +13 -0
- package/core/classes/TypesGenerator.js +170 -0
- package/core/classes/TypesGenerator.js.map +1 -0
- package/core/classes/TypesGenerator.mjs +170 -0
- package/core/classes/TypesGenerator.mjs.map +1 -0
- package/core/classes/XansqlConfig.js +33 -0
- package/core/classes/XansqlConfig.js.map +1 -0
- package/core/classes/XansqlConfig.mjs +33 -0
- package/core/classes/XansqlConfig.mjs.map +1 -0
- package/core/classes/XansqlFetch.js +304 -0
- package/core/classes/XansqlFetch.js.map +1 -0
- package/core/classes/XansqlFetch.mjs +304 -0
- package/core/classes/XansqlFetch.mjs.map +1 -0
- package/core/classes/XansqlTransaction.d.ts +13 -0
- package/core/classes/XansqlTransaction.js +46 -0
- package/core/classes/XansqlTransaction.js.map +1 -0
- package/core/classes/XansqlTransaction.mjs +46 -0
- package/core/classes/XansqlTransaction.mjs.map +1 -0
- package/core/type.d.ts +117 -0
- package/index.d.ts +3 -0
- package/index.js +1 -0
- package/index.js.map +1 -0
- package/index.mjs +1 -0
- package/index.mjs.map +1 -0
- package/model/Args/RelationExcuteArgs.js +5 -0
- package/model/Args/RelationExcuteArgs.js.map +1 -0
- package/model/Args/RelationExcuteArgs.mjs +5 -0
- package/model/Args/RelationExcuteArgs.mjs.map +1 -0
- package/model/Args/WhereArgs.js +226 -0
- package/model/Args/WhereArgs.js.map +1 -0
- package/model/Args/WhereArgs.mjs +226 -0
- package/model/Args/WhereArgs.mjs.map +1 -0
- package/model/Base.d.ts +26 -0
- package/model/Base.js +64 -0
- package/model/Base.js.map +1 -0
- package/model/Base.mjs +64 -0
- package/model/Base.mjs.map +1 -0
- package/model/Executer/Aggregate/SelectArgs.js +59 -0
- package/model/Executer/Aggregate/SelectArgs.js.map +1 -0
- package/model/Executer/Aggregate/SelectArgs.mjs +59 -0
- package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -0
- package/model/Executer/Aggregate/index.js +59 -0
- package/model/Executer/Aggregate/index.js.map +1 -0
- package/model/Executer/Aggregate/index.mjs +59 -0
- package/model/Executer/Aggregate/index.mjs.map +1 -0
- package/model/Executer/Create/CreateDataArgs.js +145 -0
- package/model/Executer/Create/CreateDataArgs.js.map +1 -0
- package/model/Executer/Create/CreateDataArgs.mjs +145 -0
- package/model/Executer/Create/CreateDataArgs.mjs.map +1 -0
- package/model/Executer/Create/index.js +101 -0
- package/model/Executer/Create/index.js.map +1 -0
- package/model/Executer/Create/index.mjs +101 -0
- package/model/Executer/Create/index.mjs.map +1 -0
- package/model/Executer/Delete/index.js +112 -0
- package/model/Executer/Delete/index.js.map +1 -0
- package/model/Executer/Delete/index.mjs +112 -0
- package/model/Executer/Delete/index.mjs.map +1 -0
- package/model/Executer/Find/DistinctArgs.js +32 -0
- package/model/Executer/Find/DistinctArgs.js.map +1 -0
- package/model/Executer/Find/DistinctArgs.mjs +32 -0
- package/model/Executer/Find/DistinctArgs.mjs.map +1 -0
- package/model/Executer/Find/LimitArgs.js +31 -0
- package/model/Executer/Find/LimitArgs.js.map +1 -0
- package/model/Executer/Find/LimitArgs.mjs +31 -0
- package/model/Executer/Find/LimitArgs.mjs.map +1 -0
- package/model/Executer/Find/OrderByArgs.js +29 -0
- package/model/Executer/Find/OrderByArgs.js.map +1 -0
- package/model/Executer/Find/OrderByArgs.mjs +29 -0
- package/model/Executer/Find/OrderByArgs.mjs.map +1 -0
- package/model/Executer/Find/SelectArgs.js +119 -0
- package/model/Executer/Find/SelectArgs.js.map +1 -0
- package/model/Executer/Find/SelectArgs.mjs +119 -0
- package/model/Executer/Find/SelectArgs.mjs.map +1 -0
- package/model/Executer/Find/index.js +338 -0
- package/model/Executer/Find/index.js.map +1 -0
- package/model/Executer/Find/index.mjs +338 -0
- package/model/Executer/Find/index.mjs.map +1 -0
- package/model/Executer/Update/UpdateDataArgs.js +124 -0
- package/model/Executer/Update/UpdateDataArgs.js.map +1 -0
- package/model/Executer/Update/UpdateDataArgs.mjs +124 -0
- package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -0
- package/model/Executer/Update/index.js +207 -0
- package/model/Executer/Update/index.js.map +1 -0
- package/model/Executer/Update/index.mjs +207 -0
- package/model/Executer/Update/index.mjs.map +1 -0
- package/model/include/ValueFormatter.js +99 -0
- package/model/include/ValueFormatter.js.map +1 -0
- package/model/include/ValueFormatter.mjs +99 -0
- package/model/include/ValueFormatter.mjs.map +1 -0
- package/model/index.d.ts +29 -0
- package/model/index.js +236 -0
- package/model/index.js.map +1 -0
- package/model/index.mjs +236 -0
- package/model/index.mjs.map +1 -0
- package/model/type.d.ts +106 -0
- package/package.json +32 -0
- package/readme.md +359 -0
- package/utils/chunker.js +53 -0
- package/utils/chunker.js.map +1 -0
- package/utils/chunker.mjs +53 -0
- package/utils/chunker.mjs.map +1 -0
- package/utils/index.js +49 -0
- package/utils/index.js.map +1 -0
- package/utils/index.mjs +49 -0
- package/utils/index.mjs.map +1 -0
- package/utils/sha256.js +66 -0
- package/utils/sha256.js.map +1 -0
- package/utils/sha256.mjs +66 -0
- package/utils/sha256.mjs.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XansqlFetch.mjs","sources":["../../../src/core/classes/XansqlFetch.ts"],"sourcesContent":["import { crypto, SecurequClient, SecurequServer } from \"securequ\";\nimport Xansql from \"../Xansql\"\nimport { ExecuterResult, XansqlFetchConfig, XansqlFileMeta, XansqlOnFetchInfo } from \"../type\";\nimport ExecuteMeta, { ExecuteMetaData } from \"../ExcuteMeta\";\nimport Model from \"../../model\";\nimport XansqlError from \"../XansqlError\";\n\nlet clientModule: typeof import(\"securequ/client\").default | null = null;\nlet serverModule: typeof import(\"securequ/server\").default | null = null;\n\n\nclass XansqlFetch {\n xansql: Xansql\n private _client: SecurequClient | null = null\n private _server: SecurequServer | null = null\n private secretCache: string | null = null\n private fetchConfig: XansqlFetchConfig\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n let config = xansql.config.fetch as XansqlFetchConfig\n if (config) {\n if (typeof config === 'string') {\n config = {\n url: config\n }\n }\n }\n this.fetchConfig = config\n }\n\n async client() {\n if (!this._client) {\n const secret = await this.makeSecret()\n const config = this.fetchConfig as XansqlFetchConfig\n clientModule = clientModule || (await import(\"securequ/client\")).default\n this._client = new clientModule({\n url: config.url,\n secret\n });\n }\n return this._client;\n }\n\n async server() {\n if (!this._server) {\n const xansql = this.xansql\n const config = xansql.config\n const fetchConfig = this.fetchConfig as XansqlFetchConfig\n const secret = await this.makeSecret()\n serverModule = serverModule || (await import(\"securequ/server\")).default;\n const url = new URL(fetchConfig.url)\n this._server = new serverModule({\n mode: fetchConfig.mode,\n basepath: `/${url.pathname.replace(/^\\/+/, '')}`,\n file: config.file,\n clients: [\n {\n origin: `*`,\n secret\n }\n ]\n });\n }\n return this._server;\n }\n\n async execute(sql: string, executeId: string): Promise<ExecuterResult> {\n\n const client = await this.client()\n const meta = ExecuteMeta.get(executeId) as ExecuteMetaData\n const data = {\n sql,\n table: meta.model.table,\n action: meta.action,\n modelType: meta.modelType,\n args: meta.args\n };\n\n if (meta.action === \"SELECT\" || meta.action === \"AGGREGATE\") {\n let res = await client.get(await this.makePath('find'), { params: data })\n !res.success && console.error(res);\n return res.data || null\n } else if (meta.action === \"INSERT\") {\n let res = await client.post(await this.makePath('insert'), { body: data })\n !res.success && console.error(res);\n return res.data || null\n } else if (meta.action === \"UPDATE\") {\n let res = await client.put(await this.makePath('update'), { body: data })\n !res.success && console.error(res);\n return res.data || null\n } else if (meta.action === \"DELETE\") {\n let res = await client.delete(await this.makePath('delete'), { params: data })\n !res.success && console.error(res);\n return res.data || null\n } else {\n let res = await client.post(await this.makePath('executer'), { body: data })\n !res.success && console.error(res);\n return res.data || null\n }\n }\n\n async getSchema(): Promise<any> {\n const client = await this.client()\n const res = await client.get(await this.makePath('raw_schema'))\n if (!res.success) {\n throw new XansqlError({\n message: `Failed to fetch schema: ${res.message || 'Unknown error'}`\n })\n }\n return res.data\n }\n\n private loaded = false\n async onFetch(url: string, info: XansqlOnFetchInfo) {\n const xansql = this.xansql\n const config = xansql.config\n\n if (typeof window !== \"undefined\") throw new XansqlError({\n message: `XansqlFetch.onFetch cannot be called in browser environment.`,\n })\n const hasUrl = typeof config.fetch === \"string\" || typeof config.fetch.url === \"string\"\n if (!config.fetch || !hasUrl) throw new XansqlError({\n message: `Xansql fetch configuration is not provided.`,\n })\n\n let server = await this.server()\n\n if (!this.loaded) {\n this.loaded = true\n server.get(await this.makePath('find'), async (req: any) => {\n const params: any = req.searchParams\n if (info.isAuthorized) {\n const isPermit = await info.isAuthorized({\n method: \"GET\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n modelType: params.modelType,\n args: params.args\n })\n if (!isPermit) throw new XansqlError({\n message: \"isAuthorized denied for fetch request.\",\n model: params.table,\n })\n }\n throw await xansql.execute(params.sql);\n })\n server.post(await this.makePath('insert'), async (req: any) => {\n const params: any = req.body\n if (info.isAuthorized) {\n const isPermit = await info.isAuthorized({\n method: \"POST\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n modelType: params.modelType,\n args: params.args,\n })\n if (!isPermit) throw new XansqlError({\n message: \"isAuthorized denied for fetch request.\",\n model: params.table,\n })\n }\n throw await xansql.execute(params.sql);\n })\n server.put(await this.makePath('update'), async (req: any) => {\n const params: any = req.body\n if (info.isAuthorized) {\n const isPermit = await info.isAuthorized({\n method: \"PUT\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n modelType: params.modelType,\n args: params.args,\n })\n if (!isPermit) throw new XansqlError({\n message: \"isAuthorized denied for fetch request.\",\n model: params.table,\n })\n }\n throw await xansql.execute(params.sql);\n })\n server.delete(await this.makePath('delete'), async (req: any) => {\n const params: any = req.searchParams\n if (info.isAuthorized) {\n const isPermit = await info.isAuthorized({\n method: \"DELETE\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n modelType: params.modelType,\n args: params.args,\n })\n if (!isPermit) throw new XansqlError({\n message: \"isAuthorized denied for fetch request.\",\n model: params.table,\n })\n }\n throw await xansql.execute(params.sql);\n })\n server.post(await this.makePath('executer'), async (req: any) => {\n const params: any = req.body\n if (info.isAuthorized) {\n const isPermit = await info.isAuthorized({\n method: \"POST\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n modelType: params.modelType,\n args: params.args,\n })\n if (!isPermit) throw new XansqlError({\n message: \"isAuthorized denied for fetch request.\",\n model: params.table,\n })\n }\n throw await xansql.execute(params.sql);\n })\n server.get(await this.makePath('raw_schema'), async (req: any) => {\n if (info.isAuthorized) {\n const isPermit = await info.isAuthorized({\n method: \"GET\",\n action: \"getSchema\",\n model: null as any,\n modelType: \"main\",\n args: {},\n })\n if (!isPermit) throw new XansqlError({\n message: \"isAuthorized denied for fetch request.\",\n })\n }\n throw await xansql.dialect.getSchema();\n })\n }\n\n try {\n const res = await server.listen(url, {\n body: info.body,\n headers: info.headers,\n })\n\n return {\n status: res.status,\n body: res.content,\n }\n } catch (error: any) {\n const secret = await this.makeSecret()\n return {\n status: 500,\n body: await crypto.encryptBuffer({\n success: false,\n message: error.message || 'Internal Server Error'\n }, secret)\n }\n }\n }\n\n async uploadFile(file: File, executeId?: string): Promise<XansqlFileMeta> {\n const xansql = this.xansql;\n if (!xansql.config.file || !xansql.config.file.upload) {\n throw new XansqlError(\"Xansql file upload configuration is not provided.\");\n }\n\n if (typeof window !== \"undefined\" && !xansql.config.fetch) {\n throw new XansqlError(\"Xansql fetch configuration is required in client side.\");\n }\n\n if (typeof window !== \"undefined\") {\n const client = await this.client();\n const res = await client.uploadFile(file);\n ExecuteMeta.delete(executeId!);\n return res.data\n } else {\n const server = await this.server();\n return await server.uploadFile(file);\n }\n }\n\n async deleteFile(fileId: string, executeId?: string) {\n const xansql = this.xansql;\n if (!xansql.config.file || !xansql.config.file.delete) {\n throw new XansqlError(\"Xansql file delete configuration is not provided.\");\n }\n if (typeof window !== \"undefined\" && !xansql.config.fetch) {\n throw new XansqlError(\"Xansql fetch configuration is required in client side.\");\n }\n if (typeof window !== \"undefined\") {\n const client = await this.client();\n const res = await client.deleteFile(fileId);\n ExecuteMeta.delete(executeId!);\n return res;\n } else {\n const server = await this.server();\n const res = await server.deleteFile(fileId);\n return res;\n }\n }\n\n private async makeSecret() {\n if (this.secretCache) return this.secretCache;\n const models = this.xansql.models\n let uid = ''\n for (let model of models.values()) {\n uid += model.table\n for (let column in model.schema) {\n uid += column\n const field = model.schema[column]\n const meta = field.meta || {}\n uid += JSON.stringify(meta)\n }\n }\n\n this.secretCache = await crypto.hash(uid)\n return this.secretCache;\n }\n\n private async makePath(path: string) {\n const secret = await this.makeSecret()\n const gen = `/${await crypto.hash(path + secret)}`\n return gen;\n }\n\n}\n\nexport default XansqlFetch"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import Xansql from '../Xansql.js';
|
|
2
|
+
|
|
3
|
+
declare class XansqlTransection {
|
|
4
|
+
private xansql;
|
|
5
|
+
private isBegin;
|
|
6
|
+
constructor(xansql: Xansql);
|
|
7
|
+
begin(): Promise<void>;
|
|
8
|
+
commit(): Promise<void>;
|
|
9
|
+
rollback(): Promise<void>;
|
|
10
|
+
transaction(callback: () => Promise<any>): Promise<any>;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { XansqlTransection as default };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});class XansqlTransection {
|
|
2
|
+
// private commitTimer: NodeJS.Timeout | null = null;
|
|
3
|
+
constructor(xansql) {
|
|
4
|
+
this.isBegin = false;
|
|
5
|
+
this.xansql = xansql;
|
|
6
|
+
}
|
|
7
|
+
async begin() {
|
|
8
|
+
if (!this.isBegin) {
|
|
9
|
+
if (typeof window !== "undefined") {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
this.isBegin = true;
|
|
13
|
+
await this.xansql.execute('BEGIN');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
async commit() {
|
|
17
|
+
if (this.isBegin) {
|
|
18
|
+
if (typeof window !== "undefined") {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.isBegin = false;
|
|
22
|
+
await this.xansql.execute('COMMIT');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async rollback() {
|
|
26
|
+
if (this.isBegin) {
|
|
27
|
+
if (typeof window !== "undefined") {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
this.isBegin = false;
|
|
31
|
+
await this.xansql.execute('ROLLBACK');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async transaction(callback) {
|
|
35
|
+
try {
|
|
36
|
+
await this.begin();
|
|
37
|
+
const result = await callback();
|
|
38
|
+
await this.commit();
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
await this.rollback();
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}exports.default=XansqlTransection;//# sourceMappingURL=XansqlTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XansqlTransaction.js","sources":["../../../src/core/classes/XansqlTransaction.ts"],"sourcesContent":["import { Xansql } from \"../..\";\nimport ExecuteMeta from \"../ExcuteMeta\";\n\nexport type XansqlTransactionKey = string\nexport type XansqlTransactionValue = boolean\n\nclass XansqlTransection {\n private xansql: Xansql\n private isBegin = false;\n // private commitTimer: NodeJS.Timeout | null = null;\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n }\n\n async begin() {\n if (!this.isBegin) {\n if (typeof window !== \"undefined\") {\n return\n }\n this.isBegin = true;\n await this.xansql.execute('BEGIN');\n }\n }\n\n async commit() {\n if (this.isBegin) {\n if (typeof window !== \"undefined\") {\n return\n }\n this.isBegin = false;\n await this.xansql.execute('COMMIT');\n }\n }\n\n async rollback() {\n if (this.isBegin) {\n if (typeof window !== \"undefined\") {\n return\n }\n this.isBegin = false;\n await this.xansql.execute('ROLLBACK');\n }\n }\n\n async transaction(callback: () => Promise<any>): Promise<any> {\n try {\n await this.begin();\n const result = await callback();\n await this.commit();\n return result;\n } catch (error) {\n await this.rollback();\n throw error;\n }\n }\n}\n\nexport default XansqlTransection;"],"names":[],"mappings":"sEAMA,MAAM,iBAAiB,CAAA;;AAKpB,IAAA,WAAA,CAAY,MAAc,EAAA;QAHlB,IAAA,CAAA,OAAO,GAAG,KAAK;AAIpB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AAEA,IAAA,MAAM,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;gBAChC;YACH;AACA,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QACrC;IACH;AAEA,IAAA,MAAM,MAAM,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;gBAChC;YACH;AACA,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;QACtC;IACH;AAEA,IAAA,MAAM,QAAQ,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;gBAChC;YACH;AACA,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;QACxC;IACH;IAEA,MAAM,WAAW,CAAC,QAA4B,EAAA;AAC3C,QAAA,IAAI;AACD,YAAA,MAAM,IAAI,CAAC,KAAK,EAAE;AAClB,YAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE;AAC/B,YAAA,MAAM,IAAI,CAAC,MAAM,EAAE;AACnB,YAAA,OAAO,MAAM;QAChB;QAAE,OAAO,KAAK,EAAE;AACb,YAAA,MAAM,IAAI,CAAC,QAAQ,EAAE;AACrB,YAAA,MAAM,KAAK;QACd;IACH;AACF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
class XansqlTransection {
|
|
2
|
+
// private commitTimer: NodeJS.Timeout | null = null;
|
|
3
|
+
constructor(xansql) {
|
|
4
|
+
this.isBegin = false;
|
|
5
|
+
this.xansql = xansql;
|
|
6
|
+
}
|
|
7
|
+
async begin() {
|
|
8
|
+
if (!this.isBegin) {
|
|
9
|
+
if (typeof window !== "undefined") {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
this.isBegin = true;
|
|
13
|
+
await this.xansql.execute('BEGIN');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
async commit() {
|
|
17
|
+
if (this.isBegin) {
|
|
18
|
+
if (typeof window !== "undefined") {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.isBegin = false;
|
|
22
|
+
await this.xansql.execute('COMMIT');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async rollback() {
|
|
26
|
+
if (this.isBegin) {
|
|
27
|
+
if (typeof window !== "undefined") {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
this.isBegin = false;
|
|
31
|
+
await this.xansql.execute('ROLLBACK');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async transaction(callback) {
|
|
35
|
+
try {
|
|
36
|
+
await this.begin();
|
|
37
|
+
const result = await callback();
|
|
38
|
+
await this.commit();
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
await this.rollback();
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}export{XansqlTransection as default};//# sourceMappingURL=XansqlTransaction.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XansqlTransaction.mjs","sources":["../../../src/core/classes/XansqlTransaction.ts"],"sourcesContent":["import { Xansql } from \"../..\";\nimport ExecuteMeta from \"../ExcuteMeta\";\n\nexport type XansqlTransactionKey = string\nexport type XansqlTransactionValue = boolean\n\nclass XansqlTransection {\n private xansql: Xansql\n private isBegin = false;\n // private commitTimer: NodeJS.Timeout | null = null;\n\n constructor(xansql: Xansql) {\n this.xansql = xansql\n }\n\n async begin() {\n if (!this.isBegin) {\n if (typeof window !== \"undefined\") {\n return\n }\n this.isBegin = true;\n await this.xansql.execute('BEGIN');\n }\n }\n\n async commit() {\n if (this.isBegin) {\n if (typeof window !== \"undefined\") {\n return\n }\n this.isBegin = false;\n await this.xansql.execute('COMMIT');\n }\n }\n\n async rollback() {\n if (this.isBegin) {\n if (typeof window !== \"undefined\") {\n return\n }\n this.isBegin = false;\n await this.xansql.execute('ROLLBACK');\n }\n }\n\n async transaction(callback: () => Promise<any>): Promise<any> {\n try {\n await this.begin();\n const result = await callback();\n await this.commit();\n return result;\n } catch (error) {\n await this.rollback();\n throw error;\n }\n }\n}\n\nexport default XansqlTransection;"],"names":[],"mappings":"AAMA,MAAM,iBAAiB,CAAA;;AAKpB,IAAA,WAAA,CAAY,MAAc,EAAA;QAHlB,IAAA,CAAA,OAAO,GAAG,KAAK;AAIpB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AAEA,IAAA,MAAM,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;gBAChC;YACH;AACA,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QACrC;IACH;AAEA,IAAA,MAAM,MAAM,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;gBAChC;YACH;AACA,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;QACtC;IACH;AAEA,IAAA,MAAM,QAAQ,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;gBAChC;YACH;AACA,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;QACxC;IACH;IAEA,MAAM,WAAW,CAAC,QAA4B,EAAA;AAC3C,QAAA,IAAI;AACD,YAAA,MAAM,IAAI,CAAC,KAAK,EAAE;AAClB,YAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE;AAC/B,YAAA,MAAM,IAAI,CAAC,MAAM,EAAE;AACnB,YAAA,OAAO,MAAM;QAChB;QAAE,OAAO,KAAK,EAAE;AACb,YAAA,MAAM,IAAI,CAAC,QAAQ,EAAE;AACrB,YAAA,MAAM,KAAK;QACd;IACH;AACF"}
|
package/core/type.d.ts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { UploadFileMeta } from 'securequ';
|
|
2
|
+
import Model from '../model/index.js';
|
|
3
|
+
import { FindArgsType, CreateArgsType, UpdateArgsType, DeleteArgsType, AggregateArgsType } from '../model/type.js';
|
|
4
|
+
import { ExecuteMetaData } from './ExcuteMeta.js';
|
|
5
|
+
|
|
6
|
+
type RowObject = {
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
};
|
|
9
|
+
type ResultData = RowObject[];
|
|
10
|
+
type ExecuterResult<Row = RowObject> = {
|
|
11
|
+
results: ResultData;
|
|
12
|
+
affectedRows: number;
|
|
13
|
+
insertId: number | null;
|
|
14
|
+
};
|
|
15
|
+
type XansqlDialectEngine = 'mysql' | 'postgresql' | 'sqlite';
|
|
16
|
+
type XansqlDialectSchemaColumn = {
|
|
17
|
+
name: string;
|
|
18
|
+
type: string;
|
|
19
|
+
notnull: boolean;
|
|
20
|
+
default_value: any;
|
|
21
|
+
pk: boolean;
|
|
22
|
+
index: boolean;
|
|
23
|
+
unique: boolean;
|
|
24
|
+
};
|
|
25
|
+
type XansqlDialectSchemaType = {
|
|
26
|
+
[table: string]: XansqlDialectSchemaColumn[];
|
|
27
|
+
};
|
|
28
|
+
type XansqlDialect = {
|
|
29
|
+
engine: XansqlDialectEngine;
|
|
30
|
+
execute: (sql: string) => Promise<ExecuterResult | null>;
|
|
31
|
+
getSchema: () => Promise<XansqlDialectSchemaType | void>;
|
|
32
|
+
};
|
|
33
|
+
type XansqlFetchMethod = "GET" | "POST" | "PUT" | "DELETE";
|
|
34
|
+
type XansqlFetchPermissionInfo = ExecuteMetaData & {
|
|
35
|
+
method: XansqlFetchMethod;
|
|
36
|
+
};
|
|
37
|
+
type XansqlOnFetchInfo = {
|
|
38
|
+
body: any;
|
|
39
|
+
headers: {
|
|
40
|
+
[key: string]: string;
|
|
41
|
+
};
|
|
42
|
+
cookies: {
|
|
43
|
+
[key: string]: string;
|
|
44
|
+
};
|
|
45
|
+
isAuthorized?: (info: XansqlFetchPermissionInfo) => Promise<boolean>;
|
|
46
|
+
};
|
|
47
|
+
type XansqlSocket = {
|
|
48
|
+
open: (socket: WebSocket) => Promise<void>;
|
|
49
|
+
message: (socket: WebSocket, data: any) => Promise<void>;
|
|
50
|
+
close: (socket: WebSocket) => Promise<void>;
|
|
51
|
+
};
|
|
52
|
+
type XansqlCache<Row = object> = {
|
|
53
|
+
cache: (sql: string, model: Model) => Promise<Row[] | void>;
|
|
54
|
+
clear: (model: Model) => Promise<void>;
|
|
55
|
+
onFind: (sql: string, model: Model, data: Row) => Promise<void>;
|
|
56
|
+
onCreate: (model: Model, insertId: number) => Promise<void>;
|
|
57
|
+
onUpdate: (model: Model, rows: Row[]) => Promise<void>;
|
|
58
|
+
onDelete: (model: Model, rows: Row[]) => Promise<void>;
|
|
59
|
+
};
|
|
60
|
+
type XansqlFetchUrl = string;
|
|
61
|
+
type XansqlFetchConfig = {
|
|
62
|
+
url: XansqlFetchUrl;
|
|
63
|
+
mode?: "production" | "development";
|
|
64
|
+
};
|
|
65
|
+
type XansqlFileConfig = {
|
|
66
|
+
maxFilesize?: number;
|
|
67
|
+
checkFileType?: boolean;
|
|
68
|
+
chunkSize?: number;
|
|
69
|
+
upload: (chunk: Uint8Array, filemeta: UploadFileMeta) => Promise<void>;
|
|
70
|
+
delete: (filename: string) => Promise<void>;
|
|
71
|
+
};
|
|
72
|
+
type XansqlConfigType = {
|
|
73
|
+
dialect: XansqlDialect;
|
|
74
|
+
fetch?: XansqlFetchUrl | XansqlFetchConfig;
|
|
75
|
+
socket?: XansqlSocket;
|
|
76
|
+
cache?: XansqlCache;
|
|
77
|
+
file?: XansqlFileConfig;
|
|
78
|
+
maxLimit?: {
|
|
79
|
+
find?: number;
|
|
80
|
+
create?: number;
|
|
81
|
+
update?: number;
|
|
82
|
+
delete?: number;
|
|
83
|
+
};
|
|
84
|
+
hooks?: {
|
|
85
|
+
beforeFind?: (model: Model, args: FindArgsType) => Promise<FindArgsType>;
|
|
86
|
+
afterFind?: (model: Model, result: ResultData, args: FindArgsType) => Promise<ResultData>;
|
|
87
|
+
beforeCreate?: (model: Model, args: CreateArgsType) => Promise<CreateArgsType>;
|
|
88
|
+
afterCreate?: (model: Model, result: ResultData, args: CreateArgsType) => Promise<ResultData>;
|
|
89
|
+
beforeUpdate?: (model: Model, args: UpdateArgsType) => Promise<UpdateArgsType>;
|
|
90
|
+
afterUpdate?: (model: Model, result: ResultData, args: UpdateArgsType) => Promise<ResultData>;
|
|
91
|
+
beforeDelete?: (model: Model, args: DeleteArgsType) => Promise<DeleteArgsType>;
|
|
92
|
+
afterDelete?: (model: Model, result: ResultData, args: DeleteArgsType) => Promise<ResultData>;
|
|
93
|
+
beforeAggregate?: (model: Model, args: AggregateArgsType) => Promise<AggregateArgsType>;
|
|
94
|
+
afterAggregate?: (model: Model, result: ResultData, args: AggregateArgsType) => Promise<ResultData>;
|
|
95
|
+
transform?: (model: Model, row: RowObject) => Promise<RowObject>;
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
type XansqlConfigTypeRequired = Required<XansqlConfigType> & {
|
|
99
|
+
maxLimit: Required<XansqlConfigType['maxLimit']>;
|
|
100
|
+
};
|
|
101
|
+
type XansqlModelOptions = {
|
|
102
|
+
hooks?: {
|
|
103
|
+
beforeFind?: (args: FindArgsType) => Promise<FindArgsType>;
|
|
104
|
+
afterFind?: (result: ResultData, args: FindArgsType) => Promise<ResultData>;
|
|
105
|
+
beforeCreate?: (args: CreateArgsType) => Promise<CreateArgsType> | void;
|
|
106
|
+
afterCreate?: (result: ResultData, args: CreateArgsType) => Promise<ResultData>;
|
|
107
|
+
beforeUpdate?: (args: UpdateArgsType) => Promise<UpdateArgsType>;
|
|
108
|
+
afterUpdate?: (result: ResultData, args: UpdateArgsType) => Promise<ResultData>;
|
|
109
|
+
beforeDelete?: (args: DeleteArgsType) => Promise<DeleteArgsType>;
|
|
110
|
+
afterDelete?: (result: ResultData, args: DeleteArgsType) => Promise<ResultData>;
|
|
111
|
+
beforeAggregate?: (args: AggregateArgsType) => Promise<AggregateArgsType>;
|
|
112
|
+
afterAggregate?: (result: ResultData, args: AggregateArgsType) => Promise<ResultData>;
|
|
113
|
+
transform?: (row: RowObject) => Promise<RowObject>;
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export type { ExecuterResult, ResultData, RowObject, XansqlCache, XansqlConfigType, XansqlConfigTypeRequired, XansqlDialect, XansqlDialectEngine, XansqlDialectSchemaColumn, XansqlDialectSchemaType, XansqlFetchConfig, XansqlFetchMethod, XansqlFetchPermissionInfo, XansqlFetchUrl, XansqlFileConfig, XansqlModelOptions, XansqlOnFetchInfo, XansqlSocket };
|
package/index.d.ts
ADDED
package/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var Xansql=require('./core/Xansql.js'),index=require('./model/index.js'),index$1=require('./Types/index.js');exports.Xansql=Xansql.default;exports.Model=index.default;exports.xt=index$1.xt;//# sourceMappingURL=index.js.map
|
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{default as Xansql}from'./core/Xansql.mjs';export{default as Model}from'./model/index.mjs';export{xt}from'./Types/index.mjs';//# sourceMappingURL=index.mjs.map
|
package/index.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RelationExcuteArgs.js","sources":["../../../src/model/Args/RelationExcuteArgs.ts"],"sourcesContent":["class RelationExecuteArgs {\n args: any\n constructor(args: any) {\n this.args = args\n }\n}\n\nexport default RelationExecuteArgs"],"names":[],"mappings":"sEAAA,MAAM,mBAAmB,CAAA;AAEtB,IAAA,WAAA,CAAY,IAAS,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IACnB;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RelationExcuteArgs.mjs","sources":["../../../src/model/Args/RelationExcuteArgs.ts"],"sourcesContent":["class RelationExecuteArgs {\n args: any\n constructor(args: any) {\n this.args = args\n }\n}\n\nexport default RelationExecuteArgs"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,CAAA;AAEtB,IAAA,WAAA,CAAY,IAAS,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IACnB;AACF"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var ForeignInfo=require('../../core/classes/ForeignInfo.js'),XansqlError=require('../../core/XansqlError.js'),Array$1=require('../../Types/fields/Array.js'),Object$1=require('../../Types/fields/Object.js'),Record=require('../../Types/fields/Record.js'),Tuple=require('../../Types/fields/Tuple.js'),index=require('../../utils/index.js'),ValueFormatter=require('../include/ValueFormatter.js');class WhereArgs {
|
|
2
|
+
constructor(model, where, meta) {
|
|
3
|
+
this.sql = '';
|
|
4
|
+
this.condition_keys = ["equals", "not", "lt", "lte", "gt", "gte", "in", "notIn", "between", "notBetween", "contains", "notContains", "startsWith", "endsWith", "isNull", "isNotNull", "isEmpty", "isNotEmpty", "isTrue", "isFalse"];
|
|
5
|
+
this.model = model;
|
|
6
|
+
let schema = model.schema;
|
|
7
|
+
let wheres = [];
|
|
8
|
+
if (Array.isArray(where)) {
|
|
9
|
+
let _ors = [];
|
|
10
|
+
for (let w of where) {
|
|
11
|
+
const whereArgs = new WhereArgs(model, w, meta);
|
|
12
|
+
if (whereArgs.sql) {
|
|
13
|
+
if (whereArgs.wheres.length > 1) {
|
|
14
|
+
_ors.push(`(${whereArgs.wheres.join(" AND ")})`);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
_ors.push(`${whereArgs.wheres.join(" AND ")}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (_ors.length) {
|
|
22
|
+
wheres.push(`(${_ors.join(" OR ")})`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
for (let column in where) {
|
|
27
|
+
this.checkIsAllowed(column);
|
|
28
|
+
const value = where[column];
|
|
29
|
+
const field = schema[column];
|
|
30
|
+
if (ForeignInfo.default.is(field)) {
|
|
31
|
+
if (!index.isArray(value) && !index.isObject(value)) {
|
|
32
|
+
throw new XansqlError.default({
|
|
33
|
+
message: `${column} must be an object or array in the WHERE clause, but received ${typeof value} in table ${model.table}`,
|
|
34
|
+
model: model.table,
|
|
35
|
+
column
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
else if (index.isObject(value) && Object.keys(value).length === 0 || index.isArray(value) && value.length === 0) {
|
|
39
|
+
// skip empty object
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (ForeignInfo.default.isSchema(field) && index.isObject(value) && Object.keys(value).some(k => this.condition_keys.includes(k))) {
|
|
43
|
+
const v = this.condition(column, value);
|
|
44
|
+
wheres.push(v);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
let foreign = ForeignInfo.default.get(model, column);
|
|
48
|
+
let FModel = model.xansql.getModel(foreign.table);
|
|
49
|
+
if (meta && meta.parentTable === foreign.table) {
|
|
50
|
+
throw new XansqlError.default({
|
|
51
|
+
message: `Circular reference detected in WHERE clause for table ${model.table} on column ${column}`,
|
|
52
|
+
model: model.table,
|
|
53
|
+
column
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
let _sql = '';
|
|
57
|
+
if (Array.isArray(value) || index.isObject(value)) {
|
|
58
|
+
const where = new WhereArgs(FModel, value, { parentTable: model.table });
|
|
59
|
+
if (where.sql) {
|
|
60
|
+
_sql = where.wheres.join(" AND ");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
throw new XansqlError.default({
|
|
65
|
+
message: `Invalid value for foreign key ${column} in WHERE clause of table ${model.table}`,
|
|
66
|
+
model: model.table,
|
|
67
|
+
column
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
wheres.push(`EXISTS (SELECT 1 FROM ${foreign.table} WHERE ${foreign.sql} ${_sql ? ` AND ${_sql}` : ""})`);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
let v = '';
|
|
74
|
+
if (Array.isArray(value)) {
|
|
75
|
+
const sub = value.map((_v) => {
|
|
76
|
+
return index.isObject(_v)
|
|
77
|
+
? this.condition(column, _v)
|
|
78
|
+
: `${model.table}.${column} = ${ValueFormatter.default.toSql(model, column, _v)}`;
|
|
79
|
+
});
|
|
80
|
+
if (sub.length > 1) {
|
|
81
|
+
v = `(${sub.join(" OR ")})`;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
v = sub.join(" OR ");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else if (index.isObject(value)) {
|
|
88
|
+
v = this.condition(column, value);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
v = `${model.table}.${column} = ${ValueFormatter.default.toSql(model, column, value)}`;
|
|
92
|
+
}
|
|
93
|
+
wheres.push(v);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
this.wheres = wheres;
|
|
98
|
+
this.sql = this.wheres.length ? `WHERE ${this.wheres.join(" AND ")} ` : "";
|
|
99
|
+
}
|
|
100
|
+
condition(column, conditions) {
|
|
101
|
+
const model = this.model;
|
|
102
|
+
const generate = Object.keys(conditions).map((subKey) => {
|
|
103
|
+
let value = conditions[subKey];
|
|
104
|
+
if (index.isObject(value)) {
|
|
105
|
+
throw new XansqlError.default({
|
|
106
|
+
message: `Invalid value for where condition ${subKey} on column ${column} in table ${model.table}`,
|
|
107
|
+
model: model.table,
|
|
108
|
+
column
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
let val = value;
|
|
112
|
+
if (Array.isArray(val)) {
|
|
113
|
+
if (['in', 'notIn'].includes(subKey)) {
|
|
114
|
+
val = val.map((item) => ValueFormatter.default.toSql(model, column, item)).join(", ");
|
|
115
|
+
}
|
|
116
|
+
else if (['between', 'notBetween'].includes(subKey)) {
|
|
117
|
+
if (val.length !== 2) {
|
|
118
|
+
throw new XansqlError.default({
|
|
119
|
+
message: `The 'between' and 'notBetween' operators require an array of exactly two values for column ${column} in table ${model.table}.`,
|
|
120
|
+
model: model.table,
|
|
121
|
+
column
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
val = val.map((item) => ValueFormatter.default.toSql(model, column, item)).join(" AND ");
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
throw new XansqlError.default({
|
|
128
|
+
message: `Array value is not supported for operator ${subKey} on column ${column} in table ${model.table}.`,
|
|
129
|
+
model: model.table,
|
|
130
|
+
column
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if (typeof val === 'boolean') {
|
|
135
|
+
val = val ? "1" : "0";
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
val = ValueFormatter.default.toSql(model, column, val);
|
|
139
|
+
}
|
|
140
|
+
let col = model.table + "." + column;
|
|
141
|
+
switch (subKey) {
|
|
142
|
+
case 'equals':
|
|
143
|
+
if (val === "NULL")
|
|
144
|
+
return `${col} IS NULL`;
|
|
145
|
+
return `${col} = ${val}`;
|
|
146
|
+
case 'not':
|
|
147
|
+
if (val === "NULL")
|
|
148
|
+
return `${col} IS NOT NULL`;
|
|
149
|
+
return `${col} != ${val}`;
|
|
150
|
+
case 'lt':
|
|
151
|
+
return `${col} < ${val}`;
|
|
152
|
+
case 'lte':
|
|
153
|
+
return `${col} <= ${val}`;
|
|
154
|
+
case 'gt':
|
|
155
|
+
return `${col} > ${val}`;
|
|
156
|
+
case 'gte':
|
|
157
|
+
return `${col} >= ${val}`;
|
|
158
|
+
case 'in':
|
|
159
|
+
if ((val === null || val === void 0 ? void 0 : val.length) === 0) {
|
|
160
|
+
return `1 = 0`;
|
|
161
|
+
}
|
|
162
|
+
else if (!val.includes(",")) {
|
|
163
|
+
return `${col} = ${val}`;
|
|
164
|
+
}
|
|
165
|
+
return `${col} IN (${val})`;
|
|
166
|
+
case 'notIn':
|
|
167
|
+
// handle empty array and val is a single value
|
|
168
|
+
if (val.length === 0) {
|
|
169
|
+
return `1 = 1`;
|
|
170
|
+
}
|
|
171
|
+
else if (!val.includes(",")) {
|
|
172
|
+
return `${col} != ${val}`;
|
|
173
|
+
}
|
|
174
|
+
return `${col} NOT IN (${val})`;
|
|
175
|
+
case 'between':
|
|
176
|
+
return `${col} BETWEEN (${val})`;
|
|
177
|
+
case 'notBetween':
|
|
178
|
+
return `${col} NOT BETWEEN (${val})`;
|
|
179
|
+
case 'contains':
|
|
180
|
+
return `${col} LIKE '%${index.escapeSqlValue(value)}%'`;
|
|
181
|
+
case 'notContains':
|
|
182
|
+
return `${col} NOT LIKE '%${index.escapeSqlValue(value)}%'`;
|
|
183
|
+
case 'startsWith':
|
|
184
|
+
return `${col} LIKE '${index.escapeSqlValue(value)}%'`;
|
|
185
|
+
case 'endsWith':
|
|
186
|
+
return `${col} LIKE '%${index.escapeSqlValue(value)}'`;
|
|
187
|
+
case 'isNull':
|
|
188
|
+
return `${col} IS NULL`;
|
|
189
|
+
case 'isNotNull':
|
|
190
|
+
return `${col} IS NOT NULL`;
|
|
191
|
+
case 'isEmpty':
|
|
192
|
+
return `(${col} IS NULL OR LENGTH(${col}) = 0)`;
|
|
193
|
+
case 'isNotEmpty':
|
|
194
|
+
return `(WHERE ${col} IS NOT NULL AND LENGTH(${col}) > 0)`;
|
|
195
|
+
case 'isTrue':
|
|
196
|
+
return `${col} = TRUE`;
|
|
197
|
+
case 'isFalse':
|
|
198
|
+
return `${col} = FALSE`;
|
|
199
|
+
default:
|
|
200
|
+
throw new XansqlError.default({
|
|
201
|
+
message: `Unknown where condition ${subKey} on column ${column} in table ${model.table}`,
|
|
202
|
+
model: model.table,
|
|
203
|
+
column
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
return `${generate.join(' AND ')}`;
|
|
208
|
+
}
|
|
209
|
+
checkIsAllowed(column) {
|
|
210
|
+
const xanv = this.model.schema[column];
|
|
211
|
+
if (ForeignInfo.default.isArray(xanv))
|
|
212
|
+
return true;
|
|
213
|
+
const isNotAllowed = xanv instanceof Array$1.default
|
|
214
|
+
|| xanv instanceof Object$1.default
|
|
215
|
+
|| xanv instanceof Record.default
|
|
216
|
+
|| xanv instanceof Tuple.default;
|
|
217
|
+
// || xanv instanceof XqlFile
|
|
218
|
+
if (isNotAllowed) {
|
|
219
|
+
throw new XansqlError.default({
|
|
220
|
+
message: `Field ${column} of type ${xanv.constructor.name} is not allowed in WHERE clause in table ${this.model.table}`,
|
|
221
|
+
model: this.model.table,
|
|
222
|
+
column
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}exports.default=WhereArgs;//# sourceMappingURL=WhereArgs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WhereArgs.js","sources":["../../../src/model/Args/WhereArgs.ts"],"sourcesContent":["import Model from \"..\";\nimport Foreign from \"../../core/classes/ForeignInfo\";\nimport XansqlError from \"../../core/XansqlError\";\nimport XqlArray from \"../../Types/fields/Array\";\nimport XqlObject from \"../../Types/fields/Object\";\nimport XqlRecord from \"../../Types/fields/Record\";\nimport XqlTuple from \"../../Types/fields/Tuple\";\nimport { escapeSqlValue, isArray, isObject } from \"../../utils\";\nimport ValueFormatter from \"../include/ValueFormatter\";\nimport { WhereArgsType, WhereSubCondition } from \"../type\";\n\ntype Meta = {\n parentTable: string\n}\n\nclass WhereArgs {\n private model: Model\n // private where: WhereArgsType\n // private meta: Meta | undefined\n readonly wheres: string[]\n readonly sql: string = ''\n private condition_keys = [\"equals\", \"not\", \"lt\", \"lte\", \"gt\", \"gte\", \"in\", \"notIn\", \"between\", \"notBetween\", \"contains\", \"notContains\", \"startsWith\", \"endsWith\", \"isNull\", \"isNotNull\", \"isEmpty\", \"isNotEmpty\", \"isTrue\", \"isFalse\"]\n\n constructor(model: Model, where: WhereArgsType | WhereArgsType[], meta?: Meta) {\n this.model = model\n\n let schema = model.schema\n let wheres: string[] = []\n\n if (Array.isArray(where)) {\n let _ors = []\n for (let w of where) {\n const whereArgs = new WhereArgs(model, w, meta)\n if (whereArgs.sql) {\n if (whereArgs.wheres.length > 1) {\n _ors.push(`(${whereArgs.wheres.join(\" AND \")})`)\n } else {\n _ors.push(`${whereArgs.wheres.join(\" AND \")}`)\n }\n }\n }\n\n if (_ors.length) {\n wheres.push(`(${_ors.join(\" OR \")})`)\n }\n } else {\n for (let column in where) {\n this.checkIsAllowed(column)\n const value: any = where[column]\n const field = schema[column]\n\n if (Foreign.is(field)) {\n if (!isArray(value) && !isObject(value)) {\n throw new XansqlError({\n message: `${column} must be an object or array in the WHERE clause, but received ${typeof value} in table ${model.table}`,\n model: model.table,\n column\n });\n } else if (isObject(value) && Object.keys(value).length === 0 || isArray(value) && value.length === 0) {\n // skip empty object\n continue;\n }\n\n if (Foreign.isSchema(field) && isObject(value) && Object.keys(value).some(k => this.condition_keys.includes(k))) {\n const v = this.condition(column, value as WhereSubCondition)\n wheres.push(v)\n continue\n }\n\n let foreign = Foreign.get(model, column)\n let FModel = model.xansql.getModel(foreign.table)\n if (meta && meta.parentTable === foreign.table) {\n throw new XansqlError({\n message: `Circular reference detected in WHERE clause for table ${model.table} on column ${column}`,\n model: model.table,\n column\n });\n }\n let _sql = ''\n if (Array.isArray(value) || isObject(value)) {\n const where = new WhereArgs(FModel, value, { parentTable: model.table })\n if (where.sql) {\n _sql = where.wheres.join(\" AND \")\n }\n } else {\n throw new XansqlError({\n message: `Invalid value for foreign key ${column} in WHERE clause of table ${model.table}`,\n model: model.table,\n column\n });\n }\n\n wheres.push(`EXISTS (SELECT 1 FROM ${foreign.table} WHERE ${foreign.sql} ${_sql ? ` AND ${_sql}` : \"\"})`)\n } else {\n let v = ''\n if (Array.isArray(value)) {\n const sub = value.map((_v: any) => {\n return isObject(_v)\n ? this.condition(column, _v)\n : `${model.table}.${column} = ${ValueFormatter.toSql(model, column, _v)}`\n })\n if (sub.length > 1) {\n v = `(${sub.join(\" OR \")})`\n } else {\n v = sub.join(\" OR \")\n }\n } else if (isObject(value)) {\n v = this.condition(column, value)\n } else {\n v = `${model.table}.${column} = ${ValueFormatter.toSql(model, column, value)}`\n }\n wheres.push(v)\n }\n }\n }\n\n this.wheres = wheres\n this.sql = this.wheres.length ? `WHERE ${this.wheres.join(\" AND \")} ` : \"\"\n }\n\n private condition(column: string, conditions: WhereSubCondition) {\n const model = this.model\n const generate = Object.keys(conditions).map((subKey) => {\n let value = (conditions as any)[subKey];\n if (isObject(value)) {\n throw new XansqlError({\n message: `Invalid value for where condition ${subKey} on column ${column} in table ${model.table}`,\n model: model.table,\n column\n });\n }\n let val: string = value;\n if (Array.isArray(val)) {\n if (['in', 'notIn'].includes(subKey)) {\n val = val.map((item) => ValueFormatter.toSql(model, column, item)).join(\", \");\n } else if (['between', 'notBetween'].includes(subKey)) {\n if (val.length !== 2) {\n throw new XansqlError({\n message: `The 'between' and 'notBetween' operators require an array of exactly two values for column ${column} in table ${model.table}.`,\n model: model.table,\n column\n });\n }\n val = val.map((item) => ValueFormatter.toSql(model, column, item)).join(\" AND \");\n } else {\n throw new XansqlError({\n message: `Array value is not supported for operator ${subKey} on column ${column} in table ${model.table}.`,\n model: model.table,\n column\n });\n }\n } else if (typeof val === 'boolean') {\n val = val ? \"1\" : \"0\";\n } else {\n val = ValueFormatter.toSql(model, column, val);\n }\n\n let col = model.table + \".\" + column;\n switch (subKey) {\n case 'equals':\n if (val === \"NULL\") return `${col} IS NULL`;\n return `${col} = ${val}`;\n case 'not':\n if (val === \"NULL\") return `${col} IS NOT NULL`;\n return `${col} != ${val}`;\n case 'lt':\n return `${col} < ${val}`;\n case 'lte':\n return `${col} <= ${val}`;\n case 'gt':\n return `${col} > ${val}`;\n case 'gte':\n return `${col} >= ${val}`;\n case 'in':\n if (val?.length === 0) {\n return `1 = 0`;\n } else if (!val.includes(\",\")) {\n return `${col} = ${val}`;\n }\n return `${col} IN (${val})`;\n case 'notIn':\n // handle empty array and val is a single value\n if (val.length === 0) {\n return `1 = 1`;\n } else if (!val.includes(\",\")) {\n return `${col} != ${val}`;\n }\n return `${col} NOT IN (${val})`;\n case 'between':\n return `${col} BETWEEN (${val})`;\n case 'notBetween':\n return `${col} NOT BETWEEN (${val})`;\n case 'contains':\n return `${col} LIKE '%${escapeSqlValue(value)}%'`;\n case 'notContains':\n return `${col} NOT LIKE '%${escapeSqlValue(value)}%'`;\n case 'startsWith':\n return `${col} LIKE '${escapeSqlValue(value)}%'`;\n case 'endsWith':\n return `${col} LIKE '%${escapeSqlValue(value)}'`;\n case 'isNull':\n return `${col} IS NULL`;\n case 'isNotNull':\n return `${col} IS NOT NULL`;\n case 'isEmpty':\n return `(${col} IS NULL OR LENGTH(${col}) = 0)`;\n case 'isNotEmpty':\n return `(WHERE ${col} IS NOT NULL AND LENGTH(${col}) > 0)`;\n case 'isTrue':\n return `${col} = TRUE`;\n case 'isFalse':\n return `${col} = FALSE`;\n default:\n throw new XansqlError({\n message: `Unknown where condition ${subKey} on column ${column} in table ${model.table}`,\n model: model.table,\n column\n });\n }\n });\n\n return `${generate.join(' AND ')}`;\n }\n\n private checkIsAllowed(column: string) {\n const xanv = this.model.schema[column]\n if (Foreign.isArray(xanv)) return true\n const isNotAllowed = xanv instanceof XqlArray\n || xanv instanceof XqlObject\n || xanv instanceof XqlRecord\n || xanv instanceof XqlTuple\n // || xanv instanceof XqlFile\n\n if (isNotAllowed) {\n throw new XansqlError({\n message: `Field ${column} of type ${xanv.constructor.name} is not allowed in WHERE clause in table ${this.model.table}`,\n model: this.model.table,\n column\n });\n }\n }\n}\n\nexport default WhereArgs;"],"names":["Foreign","isArray","isObject","XansqlError","ValueFormatter","escapeSqlValue","XqlArray","XqlObject","XqlRecord","XqlTuple"],"mappings":"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"}
|