xansql 1.1.13 → 1.1.15

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.
@@ -2,8 +2,24 @@
2
2
 
3
3
  var securequ = require('securequ');
4
4
 
5
+ function secret32(input) {
6
+ let h1 = 0xdeadbeef ^ input.length;
7
+ let h2 = 0x41c6ce57 ^ input.length;
8
+ for (let i = 0; i < input.length; i++) {
9
+ const ch = input.charCodeAt(i);
10
+ h1 = Math.imul(h1 ^ ch, 2654435761);
11
+ h2 = Math.imul(h2 ^ ch, 1597334677);
12
+ }
13
+ h1 = (h1 ^ (h1 >>> 16)) >>> 0;
14
+ h2 = (h2 ^ (h2 >>> 16)) >>> 0;
15
+ const hex = h1.toString(16).padStart(8, "0") +
16
+ h2.toString(16).padStart(8, "0") +
17
+ (h1 ^ h2).toString(16).padStart(8, "0") +
18
+ (h1 + h2).toString(16).padStart(8, "0");
19
+ return hex.slice(0, 32);
20
+ }
5
21
  const Secrets = new Map();
6
- const makeSecret = async (xansql) => {
22
+ const makeSecret = (xansql) => {
7
23
  if (Secrets.has(xansql))
8
24
  return Secrets.get(xansql);
9
25
  const models = xansql.models;
@@ -26,12 +42,12 @@ const makeSecret = async (xansql) => {
26
42
  }
27
43
  uid = Array.from(new Set(uid)); // unique
28
44
  uid = uid.sort();
29
- const secret = await securequ.crypto.hash(uid.join(""));
45
+ const secret = secret32(uid.join(""));
30
46
  Secrets.set(xansql, secret);
31
47
  return secret;
32
48
  };
33
49
  const makePath = async (path, xansql) => {
34
- const secret = await makeSecret(xansql);
50
+ const secret = makeSecret(xansql);
35
51
  const gen = `/${await securequ.crypto.hash(path + secret)}`;
36
52
  return gen;
37
53
  };
@@ -1 +1 @@
1
- {"version":3,"file":"base.cjs","sources":["../../../src/dialects/Bridge/base.ts"],"sourcesContent":["import { crypto } from \"securequ\"\nimport Xansql from \"../../core/Xansql\"\n\nconst Secrets = new Map<Xansql, string>()\nexport const makeSecret = async (xansql: Xansql) => {\n if (Secrets.has(xansql)) return Secrets.get(xansql) as string\n const models = xansql.models\n let uid = []\n for (let model of models.values()) {\n uid.push(model.table)\n const schema = (model as any).schema()\n for (let column in schema) {\n const field: any = schema[column]\n if (field.type !== 'relation-many') {\n uid.push(column)\n const meta = field.meta || {}\n const keys = Object.keys(meta)\n if (keys.length) {\n keys.sort()\n uid.push(...keys)\n }\n }\n }\n }\n uid = Array.from(new Set(uid)) // unique\n uid = uid.sort()\n\n const secret = await crypto.hash(uid.join(\"\"))\n Secrets.set(xansql, secret)\n return secret;\n}\n\nexport const makePath = async (path: string, xansql: Xansql) => {\n const secret = await makeSecret(xansql)\n const gen = `/${await crypto.hash(path + secret)}`\n return gen;\n}\n\n\nexport type XansqlBridgeAction =\n | \"SELECT\"\n | \"INSERT\"\n | \"UPDATE\"\n | \"DELETE\"\n | \"DROP\"\n | \"ALTER\"\n | \"CREATE\"\n | \"TRUNCATE\"\n | \"REPLACE\"\n | \"DESCRIBE\"\n | \"SHOW\"\n | \"USE\"\n | \"UNKNOWN\";\n\nexport interface SqlParserResult {\n action: XansqlBridgeAction;\n table: string | null;\n}\n\nexport const sqlparser = (sql: string): SqlParserResult => {\n const normalized = sql.trim().replace(/\\s+/g, \" \");\n\n // Detect the primary verb (first SQL keyword)\n const verbMatch = normalized.match(\n /^(SELECT|INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|TRUNCATE|REPLACE|DESCRIBE|DESC|SHOW|USE)\\b/i\n );\n\n let verb: XansqlBridgeAction = \"UNKNOWN\";\n\n if (verbMatch) {\n const v = verbMatch[1].toUpperCase();\n verb = v === \"DESC\" ? \"DESCRIBE\" : (v as XansqlBridgeAction);\n }\n\n // Matches identifiers: table, `table`, \"table\", [table]\n const IDENT = `([\\\\\\`\"\\\\[]?)([A-Za-z0-9_.-]+)\\\\1`;\n\n const extractTable = (): string | null => {\n switch (verb) {\n case \"SELECT\": {\n // 1. Normal SELECT ... FROM table\n const normal = normalized.match(/\\bFROM\\s+([`\"\\[]?)([A-Za-z0-9_.-]+)\\1/i);\n if (normal && normal[2] !== \"(\") {\n return normal[2]; // real table\n }\n\n // 2. Extract real tables inside a subquery: SELECT ... FROM ( SELECT ... FROM table )\n const inner = normalized.match(\n /\\(\\s*SELECT[\\s\\S]+?\\bFROM\\s+([`\"\\[]?)([A-Za-z0-9_.-]+)\\1/i\n );\n if (inner) return inner[2];\n\n return null;\n }\n case \"INSERT\": {\n const match = new RegExp(`\\\\bINTO\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n case \"UPDATE\": {\n const match = new RegExp(`^UPDATE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n case \"DELETE\": {\n const match = new RegExp(`\\\\bFROM\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // CREATE TABLE tableName\n case \"CREATE\": {\n const match = new RegExp(`\\\\bCREATE\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // DROP TABLE tableName\n case \"DROP\": {\n const match = new RegExp(`\\\\bDROP\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // ALTER TABLE tableName\n case \"ALTER\": {\n const match = new RegExp(`\\\\bALTER\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // TRUNCATE TABLE tableName\n case \"TRUNCATE\": {\n const match = new RegExp(`\\\\bTRUNCATE\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // REPLACE INTO tableName\n case \"REPLACE\": {\n const match = new RegExp(`\\\\bREPLACE\\\\s+INTO\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // DESCRIBE tableName\n case \"DESCRIBE\": {\n const match = new RegExp(`\\\\b(DESCRIBE|DESC)\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // SHOW TABLES / SHOW DATABASES => no table\n case \"SHOW\": {\n const match = new RegExp(`\\\\bSHOW\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null; // e.g. SHOW TABLES\n }\n\n // USE databaseName\n case \"USE\": {\n const match = new RegExp(`\\\\bUSE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n default:\n return null;\n }\n };\n\n return {\n action: verb,\n table: extractTable(),\n };\n};\n"],"names":["crypto"],"mappings":"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"}
1
+ {"version":3,"file":"base.cjs","sources":["../../../src/dialects/Bridge/base.ts"],"sourcesContent":["import { crypto } from \"securequ\"\nimport Xansql from \"../../core/Xansql\"\n\nfunction secret32(input: string) {\n let h1 = 0xdeadbeef ^ input.length;\n let h2 = 0x41c6ce57 ^ input.length;\n\n for (let i = 0; i < input.length; i++) {\n const ch = input.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n\n h1 = (h1 ^ (h1 >>> 16)) >>> 0;\n h2 = (h2 ^ (h2 >>> 16)) >>> 0;\n\n const hex =\n h1.toString(16).padStart(8, \"0\") +\n h2.toString(16).padStart(8, \"0\") +\n (h1 ^ h2).toString(16).padStart(8, \"0\") +\n (h1 + h2).toString(16).padStart(8, \"0\");\n\n return hex.slice(0, 32);\n}\n\nconst Secrets = new Map<Xansql, string>()\nexport const makeSecret = (xansql: Xansql) => {\n if (Secrets.has(xansql)) return Secrets.get(xansql) as string\n const models = xansql.models\n let uid = []\n for (let model of models.values()) {\n uid.push(model.table)\n const schema = (model as any).schema()\n for (let column in schema) {\n const field: any = schema[column]\n if (field.type !== 'relation-many') {\n uid.push(column)\n const meta = field.meta || {}\n const keys = Object.keys(meta)\n if (keys.length) {\n keys.sort()\n uid.push(...keys)\n }\n }\n }\n }\n uid = Array.from(new Set(uid)) // unique\n uid = uid.sort()\n\n const secret = secret32(uid.join(\"\"))\n Secrets.set(xansql, secret)\n return secret;\n}\n\nexport const makePath = async (path: string, xansql: Xansql) => {\n const secret = makeSecret(xansql)\n const gen = `/${await crypto.hash(path + secret)}`\n return gen;\n}\n\n\nexport type XansqlBridgeAction =\n | \"SELECT\"\n | \"INSERT\"\n | \"UPDATE\"\n | \"DELETE\"\n | \"DROP\"\n | \"ALTER\"\n | \"CREATE\"\n | \"TRUNCATE\"\n | \"REPLACE\"\n | \"DESCRIBE\"\n | \"SHOW\"\n | \"USE\"\n | \"UNKNOWN\";\n\nexport interface SqlParserResult {\n action: XansqlBridgeAction;\n table: string | null;\n}\n\nexport const sqlparser = (sql: string): SqlParserResult => {\n const normalized = sql.trim().replace(/\\s+/g, \" \");\n\n // Detect the primary verb (first SQL keyword)\n const verbMatch = normalized.match(\n /^(SELECT|INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|TRUNCATE|REPLACE|DESCRIBE|DESC|SHOW|USE)\\b/i\n );\n\n let verb: XansqlBridgeAction = \"UNKNOWN\";\n\n if (verbMatch) {\n const v = verbMatch[1].toUpperCase();\n verb = v === \"DESC\" ? \"DESCRIBE\" : (v as XansqlBridgeAction);\n }\n\n // Matches identifiers: table, `table`, \"table\", [table]\n const IDENT = `([\\\\\\`\"\\\\[]?)([A-Za-z0-9_.-]+)\\\\1`;\n\n const extractTable = (): string | null => {\n switch (verb) {\n case \"SELECT\": {\n // 1. Normal SELECT ... FROM table\n const normal = normalized.match(/\\bFROM\\s+([`\"\\[]?)([A-Za-z0-9_.-]+)\\1/i);\n if (normal && normal[2] !== \"(\") {\n return normal[2]; // real table\n }\n\n // 2. Extract real tables inside a subquery: SELECT ... FROM ( SELECT ... FROM table )\n const inner = normalized.match(\n /\\(\\s*SELECT[\\s\\S]+?\\bFROM\\s+([`\"\\[]?)([A-Za-z0-9_.-]+)\\1/i\n );\n if (inner) return inner[2];\n\n return null;\n }\n case \"INSERT\": {\n const match = new RegExp(`\\\\bINTO\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n case \"UPDATE\": {\n const match = new RegExp(`^UPDATE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n case \"DELETE\": {\n const match = new RegExp(`\\\\bFROM\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // CREATE TABLE tableName\n case \"CREATE\": {\n const match = new RegExp(`\\\\bCREATE\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // DROP TABLE tableName\n case \"DROP\": {\n const match = new RegExp(`\\\\bDROP\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // ALTER TABLE tableName\n case \"ALTER\": {\n const match = new RegExp(`\\\\bALTER\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // TRUNCATE TABLE tableName\n case \"TRUNCATE\": {\n const match = new RegExp(`\\\\bTRUNCATE\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // REPLACE INTO tableName\n case \"REPLACE\": {\n const match = new RegExp(`\\\\bREPLACE\\\\s+INTO\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // DESCRIBE tableName\n case \"DESCRIBE\": {\n const match = new RegExp(`\\\\b(DESCRIBE|DESC)\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // SHOW TABLES / SHOW DATABASES => no table\n case \"SHOW\": {\n const match = new RegExp(`\\\\bSHOW\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null; // e.g. SHOW TABLES\n }\n\n // USE databaseName\n case \"USE\": {\n const match = new RegExp(`\\\\bUSE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n default:\n return null;\n }\n };\n\n return {\n action: verb,\n table: extractTable(),\n };\n};\n"],"names":["crypto"],"mappings":"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"}
@@ -1,7 +1,23 @@
1
1
  import { crypto } from 'securequ';
2
2
 
3
+ function secret32(input) {
4
+ let h1 = 0xdeadbeef ^ input.length;
5
+ let h2 = 0x41c6ce57 ^ input.length;
6
+ for (let i = 0; i < input.length; i++) {
7
+ const ch = input.charCodeAt(i);
8
+ h1 = Math.imul(h1 ^ ch, 2654435761);
9
+ h2 = Math.imul(h2 ^ ch, 1597334677);
10
+ }
11
+ h1 = (h1 ^ (h1 >>> 16)) >>> 0;
12
+ h2 = (h2 ^ (h2 >>> 16)) >>> 0;
13
+ const hex = h1.toString(16).padStart(8, "0") +
14
+ h2.toString(16).padStart(8, "0") +
15
+ (h1 ^ h2).toString(16).padStart(8, "0") +
16
+ (h1 + h2).toString(16).padStart(8, "0");
17
+ return hex.slice(0, 32);
18
+ }
3
19
  const Secrets = new Map();
4
- const makeSecret = async (xansql) => {
20
+ const makeSecret = (xansql) => {
5
21
  if (Secrets.has(xansql))
6
22
  return Secrets.get(xansql);
7
23
  const models = xansql.models;
@@ -24,12 +40,12 @@ const makeSecret = async (xansql) => {
24
40
  }
25
41
  uid = Array.from(new Set(uid)); // unique
26
42
  uid = uid.sort();
27
- const secret = await crypto.hash(uid.join(""));
43
+ const secret = secret32(uid.join(""));
28
44
  Secrets.set(xansql, secret);
29
45
  return secret;
30
46
  };
31
47
  const makePath = async (path, xansql) => {
32
- const secret = await makeSecret(xansql);
48
+ const secret = makeSecret(xansql);
33
49
  const gen = `/${await crypto.hash(path + secret)}`;
34
50
  return gen;
35
51
  };
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sources":["../../../src/dialects/Bridge/base.ts"],"sourcesContent":["import { crypto } from \"securequ\"\nimport Xansql from \"../../core/Xansql\"\n\nconst Secrets = new Map<Xansql, string>()\nexport const makeSecret = async (xansql: Xansql) => {\n if (Secrets.has(xansql)) return Secrets.get(xansql) as string\n const models = xansql.models\n let uid = []\n for (let model of models.values()) {\n uid.push(model.table)\n const schema = (model as any).schema()\n for (let column in schema) {\n const field: any = schema[column]\n if (field.type !== 'relation-many') {\n uid.push(column)\n const meta = field.meta || {}\n const keys = Object.keys(meta)\n if (keys.length) {\n keys.sort()\n uid.push(...keys)\n }\n }\n }\n }\n uid = Array.from(new Set(uid)) // unique\n uid = uid.sort()\n\n const secret = await crypto.hash(uid.join(\"\"))\n Secrets.set(xansql, secret)\n return secret;\n}\n\nexport const makePath = async (path: string, xansql: Xansql) => {\n const secret = await makeSecret(xansql)\n const gen = `/${await crypto.hash(path + secret)}`\n return gen;\n}\n\n\nexport type XansqlBridgeAction =\n | \"SELECT\"\n | \"INSERT\"\n | \"UPDATE\"\n | \"DELETE\"\n | \"DROP\"\n | \"ALTER\"\n | \"CREATE\"\n | \"TRUNCATE\"\n | \"REPLACE\"\n | \"DESCRIBE\"\n | \"SHOW\"\n | \"USE\"\n | \"UNKNOWN\";\n\nexport interface SqlParserResult {\n action: XansqlBridgeAction;\n table: string | null;\n}\n\nexport const sqlparser = (sql: string): SqlParserResult => {\n const normalized = sql.trim().replace(/\\s+/g, \" \");\n\n // Detect the primary verb (first SQL keyword)\n const verbMatch = normalized.match(\n /^(SELECT|INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|TRUNCATE|REPLACE|DESCRIBE|DESC|SHOW|USE)\\b/i\n );\n\n let verb: XansqlBridgeAction = \"UNKNOWN\";\n\n if (verbMatch) {\n const v = verbMatch[1].toUpperCase();\n verb = v === \"DESC\" ? \"DESCRIBE\" : (v as XansqlBridgeAction);\n }\n\n // Matches identifiers: table, `table`, \"table\", [table]\n const IDENT = `([\\\\\\`\"\\\\[]?)([A-Za-z0-9_.-]+)\\\\1`;\n\n const extractTable = (): string | null => {\n switch (verb) {\n case \"SELECT\": {\n // 1. Normal SELECT ... FROM table\n const normal = normalized.match(/\\bFROM\\s+([`\"\\[]?)([A-Za-z0-9_.-]+)\\1/i);\n if (normal && normal[2] !== \"(\") {\n return normal[2]; // real table\n }\n\n // 2. Extract real tables inside a subquery: SELECT ... FROM ( SELECT ... FROM table )\n const inner = normalized.match(\n /\\(\\s*SELECT[\\s\\S]+?\\bFROM\\s+([`\"\\[]?)([A-Za-z0-9_.-]+)\\1/i\n );\n if (inner) return inner[2];\n\n return null;\n }\n case \"INSERT\": {\n const match = new RegExp(`\\\\bINTO\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n case \"UPDATE\": {\n const match = new RegExp(`^UPDATE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n case \"DELETE\": {\n const match = new RegExp(`\\\\bFROM\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // CREATE TABLE tableName\n case \"CREATE\": {\n const match = new RegExp(`\\\\bCREATE\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // DROP TABLE tableName\n case \"DROP\": {\n const match = new RegExp(`\\\\bDROP\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // ALTER TABLE tableName\n case \"ALTER\": {\n const match = new RegExp(`\\\\bALTER\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // TRUNCATE TABLE tableName\n case \"TRUNCATE\": {\n const match = new RegExp(`\\\\bTRUNCATE\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // REPLACE INTO tableName\n case \"REPLACE\": {\n const match = new RegExp(`\\\\bREPLACE\\\\s+INTO\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // DESCRIBE tableName\n case \"DESCRIBE\": {\n const match = new RegExp(`\\\\b(DESCRIBE|DESC)\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // SHOW TABLES / SHOW DATABASES => no table\n case \"SHOW\": {\n const match = new RegExp(`\\\\bSHOW\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null; // e.g. SHOW TABLES\n }\n\n // USE databaseName\n case \"USE\": {\n const match = new RegExp(`\\\\bUSE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n default:\n return null;\n }\n };\n\n return {\n action: verb,\n table: extractTable(),\n };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sources":["../../../src/dialects/Bridge/base.ts"],"sourcesContent":["import { crypto } from \"securequ\"\nimport Xansql from \"../../core/Xansql\"\n\nfunction secret32(input: string) {\n let h1 = 0xdeadbeef ^ input.length;\n let h2 = 0x41c6ce57 ^ input.length;\n\n for (let i = 0; i < input.length; i++) {\n const ch = input.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n\n h1 = (h1 ^ (h1 >>> 16)) >>> 0;\n h2 = (h2 ^ (h2 >>> 16)) >>> 0;\n\n const hex =\n h1.toString(16).padStart(8, \"0\") +\n h2.toString(16).padStart(8, \"0\") +\n (h1 ^ h2).toString(16).padStart(8, \"0\") +\n (h1 + h2).toString(16).padStart(8, \"0\");\n\n return hex.slice(0, 32);\n}\n\nconst Secrets = new Map<Xansql, string>()\nexport const makeSecret = (xansql: Xansql) => {\n if (Secrets.has(xansql)) return Secrets.get(xansql) as string\n const models = xansql.models\n let uid = []\n for (let model of models.values()) {\n uid.push(model.table)\n const schema = (model as any).schema()\n for (let column in schema) {\n const field: any = schema[column]\n if (field.type !== 'relation-many') {\n uid.push(column)\n const meta = field.meta || {}\n const keys = Object.keys(meta)\n if (keys.length) {\n keys.sort()\n uid.push(...keys)\n }\n }\n }\n }\n uid = Array.from(new Set(uid)) // unique\n uid = uid.sort()\n\n const secret = secret32(uid.join(\"\"))\n Secrets.set(xansql, secret)\n return secret;\n}\n\nexport const makePath = async (path: string, xansql: Xansql) => {\n const secret = makeSecret(xansql)\n const gen = `/${await crypto.hash(path + secret)}`\n return gen;\n}\n\n\nexport type XansqlBridgeAction =\n | \"SELECT\"\n | \"INSERT\"\n | \"UPDATE\"\n | \"DELETE\"\n | \"DROP\"\n | \"ALTER\"\n | \"CREATE\"\n | \"TRUNCATE\"\n | \"REPLACE\"\n | \"DESCRIBE\"\n | \"SHOW\"\n | \"USE\"\n | \"UNKNOWN\";\n\nexport interface SqlParserResult {\n action: XansqlBridgeAction;\n table: string | null;\n}\n\nexport const sqlparser = (sql: string): SqlParserResult => {\n const normalized = sql.trim().replace(/\\s+/g, \" \");\n\n // Detect the primary verb (first SQL keyword)\n const verbMatch = normalized.match(\n /^(SELECT|INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|TRUNCATE|REPLACE|DESCRIBE|DESC|SHOW|USE)\\b/i\n );\n\n let verb: XansqlBridgeAction = \"UNKNOWN\";\n\n if (verbMatch) {\n const v = verbMatch[1].toUpperCase();\n verb = v === \"DESC\" ? \"DESCRIBE\" : (v as XansqlBridgeAction);\n }\n\n // Matches identifiers: table, `table`, \"table\", [table]\n const IDENT = `([\\\\\\`\"\\\\[]?)([A-Za-z0-9_.-]+)\\\\1`;\n\n const extractTable = (): string | null => {\n switch (verb) {\n case \"SELECT\": {\n // 1. Normal SELECT ... FROM table\n const normal = normalized.match(/\\bFROM\\s+([`\"\\[]?)([A-Za-z0-9_.-]+)\\1/i);\n if (normal && normal[2] !== \"(\") {\n return normal[2]; // real table\n }\n\n // 2. Extract real tables inside a subquery: SELECT ... FROM ( SELECT ... FROM table )\n const inner = normalized.match(\n /\\(\\s*SELECT[\\s\\S]+?\\bFROM\\s+([`\"\\[]?)([A-Za-z0-9_.-]+)\\1/i\n );\n if (inner) return inner[2];\n\n return null;\n }\n case \"INSERT\": {\n const match = new RegExp(`\\\\bINTO\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n case \"UPDATE\": {\n const match = new RegExp(`^UPDATE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n case \"DELETE\": {\n const match = new RegExp(`\\\\bFROM\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // CREATE TABLE tableName\n case \"CREATE\": {\n const match = new RegExp(`\\\\bCREATE\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // DROP TABLE tableName\n case \"DROP\": {\n const match = new RegExp(`\\\\bDROP\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // ALTER TABLE tableName\n case \"ALTER\": {\n const match = new RegExp(`\\\\bALTER\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // TRUNCATE TABLE tableName\n case \"TRUNCATE\": {\n const match = new RegExp(`\\\\bTRUNCATE\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // REPLACE INTO tableName\n case \"REPLACE\": {\n const match = new RegExp(`\\\\bREPLACE\\\\s+INTO\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // DESCRIBE tableName\n case \"DESCRIBE\": {\n const match = new RegExp(`\\\\b(DESCRIBE|DESC)\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // SHOW TABLES / SHOW DATABASES => no table\n case \"SHOW\": {\n const match = new RegExp(`\\\\bSHOW\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null; // e.g. SHOW TABLES\n }\n\n // USE databaseName\n case \"USE\": {\n const match = new RegExp(`\\\\bUSE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n default:\n return null;\n }\n };\n\n return {\n action: verb,\n table: extractTable(),\n };\n};\n"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ const XansqlBridgeDialect = (url, engine) => {
8
8
  let instance = null;
9
9
  const getClient = async (xansql) => {
10
10
  if (!instance) {
11
- const secret = await base.makeSecret(xansql);
11
+ const secret = base.makeSecret(xansql);
12
12
  instance = new securequ.SecurequClient({ secret, url });
13
13
  }
14
14
  return instance;
@@ -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\n let instance: SecurequClient | null = null;\n const getClient = async (xansql: Xansql) => {\n if (!instance) {\n const secret = await 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","XansqlError","sqlparser","makePath"],"mappings":"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"}
@@ -6,7 +6,7 @@ const XansqlBridgeDialect = (url, engine) => {
6
6
  let instance = null;
7
7
  const getClient = async (xansql) => {
8
8
  if (!instance) {
9
- const secret = await makeSecret(xansql);
9
+ const secret = makeSecret(xansql);
10
10
  instance = new SecurequClient({ secret, url });
11
11
  }
12
12
  return instance;
@@ -1 +1 @@
1
- {"version":3,"file":"dialect.js","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\n let instance: SecurequClient | null = null;\n const getClient = async (xansql: Xansql) => {\n if (!instance) {\n const secret = await 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":[],"mappings":"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"}
1
+ {"version":3,"file":"dialect.js","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":[],"mappings":"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"}
@@ -28,7 +28,7 @@ class XansqlBridgeServer {
28
28
  return this.server;
29
29
  const config = this.config;
30
30
  const xansql = this.xansql;
31
- const secret = await base.makeSecret(this.xansql);
31
+ const secret = base.makeSecret(this.xansql);
32
32
  const server = new securequ.SecurequServer(Object.assign(Object.assign({}, (config || {})), { file: {
33
33
  checkFileType: true,
34
34
  async upload(chunk, filemeta) {
@@ -46,6 +46,7 @@ class XansqlBridgeServer {
46
46
  secret
47
47
  }
48
48
  ] }));
49
+ this.server = server;
49
50
  server.get(await base.makePath('find', xansql), async (req) => {
50
51
  const params = req.searchParams;
51
52
  await this.authorized({
@@ -91,7 +92,6 @@ class XansqlBridgeServer {
91
92
  });
92
93
  throw await xansql.execute(params.sql);
93
94
  });
94
- this.server = server;
95
95
  return this.server;
96
96
  }
97
97
  async listen(url, options) {
@@ -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 = await 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\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 this.server = server;\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":["XansqlError","makeSecret","SecurequServer","makePath"],"mappings":"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"}
@@ -26,7 +26,7 @@ class XansqlBridgeServer {
26
26
  return this.server;
27
27
  const config = this.config;
28
28
  const xansql = this.xansql;
29
- const secret = await makeSecret(this.xansql);
29
+ const secret = makeSecret(this.xansql);
30
30
  const server = new SecurequServer(Object.assign(Object.assign({}, (config || {})), { file: {
31
31
  checkFileType: true,
32
32
  async upload(chunk, filemeta) {
@@ -44,6 +44,7 @@ class XansqlBridgeServer {
44
44
  secret
45
45
  }
46
46
  ] }));
47
+ this.server = server;
47
48
  server.get(await makePath('find', xansql), async (req) => {
48
49
  const params = req.searchParams;
49
50
  await this.authorized({
@@ -89,7 +90,6 @@ class XansqlBridgeServer {
89
90
  });
90
91
  throw await xansql.execute(params.sql);
91
92
  });
92
- this.server = server;
93
93
  return this.server;
94
94
  }
95
95
  async listen(url, options) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","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 = await 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\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 this.server = server;\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":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","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":[],"mappings":"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"}
@@ -138,7 +138,7 @@ class BuildDeleteArgs {
138
138
  for (let col in frow) {
139
139
  const field = schema[col];
140
140
  if (index$3.iof(field, File)) {
141
- const fileMeta = field.value.fromSql(frow[col]);
141
+ const fileMeta = frow[col];
142
142
  if (fileMeta) {
143
143
  await xansql.deleteFile(fileMeta.fileId);
144
144
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/model/Build/DeleteArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { XansqlFileMeta } from \"../../../core/types\";\nimport { iof } from \"../../../utils\";\nimport { chunkArray } from \"../../../utils/chunker\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport { DeleteArgs, SchemaShape } from \"../../types\";\nimport BuildFindArgs from \"../FindArgs\";\nimport BuildSelectArgs from \"../SelectArgs\";\nimport BuildUpdateArgs from \"../UpdateArgs\";\nimport BuildWhereArgs from \"../WhereArgs\";\n\nclass BuildDeleteArgs {\n constructor(private args: DeleteArgs<SchemaShape>, private model: Model<SchemaShape>, private isSubquery = false) {\n\n }\n\n async results() {\n const model = this.model\n const args = this.args\n const isSubquery = this.isSubquery\n const schema = model.schema()\n const xansql = model.xansql\n const models = xansql.models\n\n for (let m of Array.from(models.values())) {\n const mschema = m.schema()\n for (let col in mschema) {\n const field = mschema[col] as any\n\n if (field.type === \"relation-one\" && field.model == model.constructor) {\n const isNullable = field.meta.nullable\n const isSameModel = m.table === model.table\n\n let ids: number[] = []\n if (isSameModel) {\n const fargs = new BuildFindArgs({\n select: {\n [m.IDColumn]: true,\n [col]: {\n select: {\n [m.IDColumn]: true,\n }\n }\n },\n where: args.where,\n debug: false\n }, m)\n const res = await fargs.results()\n if (res?.length) {\n for (let r of res) {\n if (r[col] && r[col][m.IDColumn]) {\n ids.push(r[col][m.IDColumn])\n }\n }\n }\n }\n if (isNullable) {\n if (isSameModel) {\n if (ids?.length) {\n for (let { chunk } of chunkArray(ids)) {\n const build = new BuildUpdateArgs({\n data: {\n [col]: null\n },\n where: {\n [model.IDColumn]: {\n in: chunk\n }\n },\n debug: args.debug\n }, m)\n await build.results()\n }\n }\n } else {\n const build = new BuildUpdateArgs({\n data: {\n [col]: null\n },\n where: {\n [col]: args.where\n },\n debug: args.debug\n }, m)\n await build.results()\n }\n } else {\n if (isSameModel) {\n if (ids.length) {\n for (let { chunk } of chunkArray(ids)) {\n const build = new BuildDeleteArgs({\n where: {\n [model.IDColumn]: {\n in: chunk\n }\n },\n debug: args.debug\n }, m, true)\n\n await build.results()\n }\n }\n } else {\n const build = new BuildDeleteArgs({\n where: {\n [col]: args.where\n },\n debug: args.debug\n }, m, true)\n await build.results()\n }\n }\n }\n }\n }\n\n\n const wargs = new BuildWhereArgs(args.where, model)\n const _select: any = {}\n for (let col in schema) {\n const field = schema[col] as any\n if (iof(field, XqlFile)) {\n _select[col] = true\n }\n }\n\n const fargs = new BuildFindArgs({\n select: {\n [model.IDColumn]: true,\n ..._select\n },\n where: args.where,\n debug: false\n }, model)\n const fileRows = await fargs.results()\n\n let results\n if (!isSubquery) {\n const build = new BuildFindArgs(args, model)\n results = await build.results()\n }\n\n const sql = `DELETE FROM ${model.table} as ${model.alias} ${wargs.sql}`.trim()\n const execute = await model.execute(sql, args.debug)\n\n if (execute.affectedRows && fileRows?.length) {\n for (let { chunk } of chunkArray(fileRows)) {\n for (let frow of chunk) {\n for (let col in frow) {\n const field = schema[col]\n if (iof(field, XqlFile)) {\n const fileMeta: XansqlFileMeta = field.value.fromSql(frow[col]) as any\n if (fileMeta) {\n await xansql.deleteFile(fileMeta.fileId)\n }\n }\n }\n }\n }\n }\n\n return results\n }\n}\n\nexport default BuildDeleteArgs"],"names":["BuildFindArgs","chunkArray","BuildUpdateArgs","BuildWhereArgs","iof","XqlFile"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/model/Build/DeleteArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { XansqlFileMeta } from \"../../../core/types\";\nimport { iof } from \"../../../utils\";\nimport { chunkArray } from \"../../../utils/chunker\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport { DeleteArgs, SchemaShape } from \"../../types\";\nimport BuildFindArgs from \"../FindArgs\";\nimport BuildSelectArgs from \"../SelectArgs\";\nimport BuildUpdateArgs from \"../UpdateArgs\";\nimport BuildWhereArgs from \"../WhereArgs\";\n\nclass BuildDeleteArgs {\n constructor(private args: DeleteArgs<SchemaShape>, private model: Model<SchemaShape>, private isSubquery = false) {\n\n }\n\n async results() {\n const model = this.model\n const args = this.args\n const isSubquery = this.isSubquery\n const schema = model.schema()\n const xansql = model.xansql\n const models = xansql.models\n\n for (let m of Array.from(models.values())) {\n const mschema = m.schema()\n for (let col in mschema) {\n const field = mschema[col] as any\n\n if (field.type === \"relation-one\" && field.model == model.constructor) {\n const isNullable = field.meta.nullable\n const isSameModel = m.table === model.table\n\n let ids: number[] = []\n if (isSameModel) {\n const fargs = new BuildFindArgs({\n select: {\n [m.IDColumn]: true,\n [col]: {\n select: {\n [m.IDColumn]: true,\n }\n }\n },\n where: args.where,\n debug: false\n }, m)\n const res = await fargs.results()\n if (res?.length) {\n for (let r of res) {\n if (r[col] && r[col][m.IDColumn]) {\n ids.push(r[col][m.IDColumn])\n }\n }\n }\n }\n if (isNullable) {\n if (isSameModel) {\n if (ids?.length) {\n for (let { chunk } of chunkArray(ids)) {\n const build = new BuildUpdateArgs({\n data: {\n [col]: null\n },\n where: {\n [model.IDColumn]: {\n in: chunk\n }\n },\n debug: args.debug\n }, m)\n await build.results()\n }\n }\n } else {\n const build = new BuildUpdateArgs({\n data: {\n [col]: null\n },\n where: {\n [col]: args.where\n },\n debug: args.debug\n }, m)\n await build.results()\n }\n } else {\n if (isSameModel) {\n if (ids.length) {\n for (let { chunk } of chunkArray(ids)) {\n const build = new BuildDeleteArgs({\n where: {\n [model.IDColumn]: {\n in: chunk\n }\n },\n debug: args.debug\n }, m, true)\n\n await build.results()\n }\n }\n } else {\n const build = new BuildDeleteArgs({\n where: {\n [col]: args.where\n },\n debug: args.debug\n }, m, true)\n await build.results()\n }\n }\n }\n }\n }\n\n\n const wargs = new BuildWhereArgs(args.where, model)\n const _select: any = {}\n for (let col in schema) {\n const field = schema[col] as any\n if (iof(field, XqlFile)) {\n _select[col] = true\n }\n }\n\n const fargs = new BuildFindArgs({\n select: {\n [model.IDColumn]: true,\n ..._select\n },\n where: args.where,\n debug: false\n }, model)\n const fileRows = await fargs.results()\n\n let results\n if (!isSubquery) {\n const build = new BuildFindArgs(args, model)\n results = await build.results()\n }\n\n const sql = `DELETE FROM ${model.table} as ${model.alias} ${wargs.sql}`.trim()\n const execute = await model.execute(sql, args.debug)\n\n if (execute.affectedRows && fileRows?.length) {\n for (let { chunk } of chunkArray(fileRows)) {\n for (let frow of chunk) {\n for (let col in frow) {\n const field = schema[col]\n if (iof(field, XqlFile)) {\n const fileMeta = frow[col]\n if (fileMeta) {\n await xansql.deleteFile(fileMeta.fileId)\n }\n }\n }\n }\n }\n }\n\n return results\n }\n}\n\nexport default BuildDeleteArgs"],"names":["BuildFindArgs","chunkArray","BuildUpdateArgs","BuildWhereArgs","iof","XqlFile"],"mappings":"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"}
@@ -136,7 +136,7 @@ class BuildDeleteArgs {
136
136
  for (let col in frow) {
137
137
  const field = schema[col];
138
138
  if (iof(field, XqlFile)) {
139
- const fileMeta = field.value.fromSql(frow[col]);
139
+ const fileMeta = frow[col];
140
140
  if (fileMeta) {
141
141
  await xansql.deleteFile(fileMeta.fileId);
142
142
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/model/Build/DeleteArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { XansqlFileMeta } from \"../../../core/types\";\nimport { iof } from \"../../../utils\";\nimport { chunkArray } from \"../../../utils/chunker\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport { DeleteArgs, SchemaShape } from \"../../types\";\nimport BuildFindArgs from \"../FindArgs\";\nimport BuildSelectArgs from \"../SelectArgs\";\nimport BuildUpdateArgs from \"../UpdateArgs\";\nimport BuildWhereArgs from \"../WhereArgs\";\n\nclass BuildDeleteArgs {\n constructor(private args: DeleteArgs<SchemaShape>, private model: Model<SchemaShape>, private isSubquery = false) {\n\n }\n\n async results() {\n const model = this.model\n const args = this.args\n const isSubquery = this.isSubquery\n const schema = model.schema()\n const xansql = model.xansql\n const models = xansql.models\n\n for (let m of Array.from(models.values())) {\n const mschema = m.schema()\n for (let col in mschema) {\n const field = mschema[col] as any\n\n if (field.type === \"relation-one\" && field.model == model.constructor) {\n const isNullable = field.meta.nullable\n const isSameModel = m.table === model.table\n\n let ids: number[] = []\n if (isSameModel) {\n const fargs = new BuildFindArgs({\n select: {\n [m.IDColumn]: true,\n [col]: {\n select: {\n [m.IDColumn]: true,\n }\n }\n },\n where: args.where,\n debug: false\n }, m)\n const res = await fargs.results()\n if (res?.length) {\n for (let r of res) {\n if (r[col] && r[col][m.IDColumn]) {\n ids.push(r[col][m.IDColumn])\n }\n }\n }\n }\n if (isNullable) {\n if (isSameModel) {\n if (ids?.length) {\n for (let { chunk } of chunkArray(ids)) {\n const build = new BuildUpdateArgs({\n data: {\n [col]: null\n },\n where: {\n [model.IDColumn]: {\n in: chunk\n }\n },\n debug: args.debug\n }, m)\n await build.results()\n }\n }\n } else {\n const build = new BuildUpdateArgs({\n data: {\n [col]: null\n },\n where: {\n [col]: args.where\n },\n debug: args.debug\n }, m)\n await build.results()\n }\n } else {\n if (isSameModel) {\n if (ids.length) {\n for (let { chunk } of chunkArray(ids)) {\n const build = new BuildDeleteArgs({\n where: {\n [model.IDColumn]: {\n in: chunk\n }\n },\n debug: args.debug\n }, m, true)\n\n await build.results()\n }\n }\n } else {\n const build = new BuildDeleteArgs({\n where: {\n [col]: args.where\n },\n debug: args.debug\n }, m, true)\n await build.results()\n }\n }\n }\n }\n }\n\n\n const wargs = new BuildWhereArgs(args.where, model)\n const _select: any = {}\n for (let col in schema) {\n const field = schema[col] as any\n if (iof(field, XqlFile)) {\n _select[col] = true\n }\n }\n\n const fargs = new BuildFindArgs({\n select: {\n [model.IDColumn]: true,\n ..._select\n },\n where: args.where,\n debug: false\n }, model)\n const fileRows = await fargs.results()\n\n let results\n if (!isSubquery) {\n const build = new BuildFindArgs(args, model)\n results = await build.results()\n }\n\n const sql = `DELETE FROM ${model.table} as ${model.alias} ${wargs.sql}`.trim()\n const execute = await model.execute(sql, args.debug)\n\n if (execute.affectedRows && fileRows?.length) {\n for (let { chunk } of chunkArray(fileRows)) {\n for (let frow of chunk) {\n for (let col in frow) {\n const field = schema[col]\n if (iof(field, XqlFile)) {\n const fileMeta: XansqlFileMeta = field.value.fromSql(frow[col]) as any\n if (fileMeta) {\n await xansql.deleteFile(fileMeta.fileId)\n }\n }\n }\n }\n }\n }\n\n return results\n }\n}\n\nexport default BuildDeleteArgs"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/model/Build/DeleteArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { XansqlFileMeta } from \"../../../core/types\";\nimport { iof } from \"../../../utils\";\nimport { chunkArray } from \"../../../utils/chunker\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport { DeleteArgs, SchemaShape } from \"../../types\";\nimport BuildFindArgs from \"../FindArgs\";\nimport BuildSelectArgs from \"../SelectArgs\";\nimport BuildUpdateArgs from \"../UpdateArgs\";\nimport BuildWhereArgs from \"../WhereArgs\";\n\nclass BuildDeleteArgs {\n constructor(private args: DeleteArgs<SchemaShape>, private model: Model<SchemaShape>, private isSubquery = false) {\n\n }\n\n async results() {\n const model = this.model\n const args = this.args\n const isSubquery = this.isSubquery\n const schema = model.schema()\n const xansql = model.xansql\n const models = xansql.models\n\n for (let m of Array.from(models.values())) {\n const mschema = m.schema()\n for (let col in mschema) {\n const field = mschema[col] as any\n\n if (field.type === \"relation-one\" && field.model == model.constructor) {\n const isNullable = field.meta.nullable\n const isSameModel = m.table === model.table\n\n let ids: number[] = []\n if (isSameModel) {\n const fargs = new BuildFindArgs({\n select: {\n [m.IDColumn]: true,\n [col]: {\n select: {\n [m.IDColumn]: true,\n }\n }\n },\n where: args.where,\n debug: false\n }, m)\n const res = await fargs.results()\n if (res?.length) {\n for (let r of res) {\n if (r[col] && r[col][m.IDColumn]) {\n ids.push(r[col][m.IDColumn])\n }\n }\n }\n }\n if (isNullable) {\n if (isSameModel) {\n if (ids?.length) {\n for (let { chunk } of chunkArray(ids)) {\n const build = new BuildUpdateArgs({\n data: {\n [col]: null\n },\n where: {\n [model.IDColumn]: {\n in: chunk\n }\n },\n debug: args.debug\n }, m)\n await build.results()\n }\n }\n } else {\n const build = new BuildUpdateArgs({\n data: {\n [col]: null\n },\n where: {\n [col]: args.where\n },\n debug: args.debug\n }, m)\n await build.results()\n }\n } else {\n if (isSameModel) {\n if (ids.length) {\n for (let { chunk } of chunkArray(ids)) {\n const build = new BuildDeleteArgs({\n where: {\n [model.IDColumn]: {\n in: chunk\n }\n },\n debug: args.debug\n }, m, true)\n\n await build.results()\n }\n }\n } else {\n const build = new BuildDeleteArgs({\n where: {\n [col]: args.where\n },\n debug: args.debug\n }, m, true)\n await build.results()\n }\n }\n }\n }\n }\n\n\n const wargs = new BuildWhereArgs(args.where, model)\n const _select: any = {}\n for (let col in schema) {\n const field = schema[col] as any\n if (iof(field, XqlFile)) {\n _select[col] = true\n }\n }\n\n const fargs = new BuildFindArgs({\n select: {\n [model.IDColumn]: true,\n ..._select\n },\n where: args.where,\n debug: false\n }, model)\n const fileRows = await fargs.results()\n\n let results\n if (!isSubquery) {\n const build = new BuildFindArgs(args, model)\n results = await build.results()\n }\n\n const sql = `DELETE FROM ${model.table} as ${model.alias} ${wargs.sql}`.trim()\n const execute = await model.execute(sql, args.debug)\n\n if (execute.affectedRows && fileRows?.length) {\n for (let { chunk } of chunkArray(fileRows)) {\n for (let frow of chunk) {\n for (let col in frow) {\n const field = schema[col]\n if (iof(field, XqlFile)) {\n const fileMeta = frow[col]\n if (fileMeta) {\n await xansql.deleteFile(fileMeta.fileId)\n }\n }\n }\n }\n }\n }\n\n return results\n }\n}\n\nexport default BuildDeleteArgs"],"names":[],"mappings":";;;;;;;AAWA,MAAM,eAAe,CAAA;AAClB,IAAA,WAAA,CAAoB,IAA6B,EAAU,KAAyB,EAAU,aAAa,KAAK,EAAA;QAA5F,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAmC,IAAA,CAAA,KAAK,GAAL,KAAK;QAA8B,IAAA,CAAA,UAAU,GAAV,UAAU;IAExG;AAEA,IAAA,MAAM,OAAO,GAAA;AACV,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;AAClC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;AAC7B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC3B,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAE5B,QAAA,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;AACxC,YAAA,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE;AAC1B,YAAA,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE;AACtB,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAQ;AAEjC,gBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE;AACpE,oBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ;oBACtC,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;oBAE3C,IAAI,GAAG,GAAa,EAAE;oBACtB,IAAI,WAAW,EAAE;AACd,wBAAA,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC;AAC7B,4BAAA,MAAM,EAAE;AACL,gCAAA,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI;gCAClB,CAAC,GAAG,GAAG;AACJ,oCAAA,MAAM,EAAE;AACL,wCAAA,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI;AACpB;AACH;AACH,6BAAA;4BACD,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,4BAAA,KAAK,EAAE;yBACT,EAAE,CAAC,CAAC;AACL,wBAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;wBACjC,IAAI,GAAG,aAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,MAAM,EAAE;AACd,4BAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EAAE;AAChB,gCAAA,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;AAC/B,oCAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gCAC/B;4BACH;wBACH;oBACH;oBACA,IAAI,UAAU,EAAE;wBACb,IAAI,WAAW,EAAE;4BACd,IAAI,GAAG,aAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,MAAM,EAAE;gCACd,KAAK,IAAI,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;AACpC,oCAAA,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC;AAC/B,wCAAA,IAAI,EAAE;4CACH,CAAC,GAAG,GAAG;AACT,yCAAA;AACD,wCAAA,KAAK,EAAE;AACJ,4CAAA,CAAC,KAAK,CAAC,QAAQ,GAAG;AACf,gDAAA,EAAE,EAAE;AACN;AACH,yCAAA;wCACD,KAAK,EAAE,IAAI,CAAC;qCACd,EAAE,CAAC,CAAC;AACL,oCAAA,MAAM,KAAK,CAAC,OAAO,EAAE;gCACxB;4BACH;wBACH;6BAAO;AACJ,4BAAA,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC;AAC/B,gCAAA,IAAI,EAAE;oCACH,CAAC,GAAG,GAAG;AACT,iCAAA;AACD,gCAAA,KAAK,EAAE;AACJ,oCAAA,CAAC,GAAG,GAAG,IAAI,CAAC;AACd,iCAAA;gCACD,KAAK,EAAE,IAAI,CAAC;6BACd,EAAE,CAAC,CAAC;AACL,4BAAA,MAAM,KAAK,CAAC,OAAO,EAAE;wBACxB;oBACH;yBAAO;wBACJ,IAAI,WAAW,EAAE;AACd,4BAAA,IAAI,GAAG,CAAC,MAAM,EAAE;gCACb,KAAK,IAAI,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;AACpC,oCAAA,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC;AAC/B,wCAAA,KAAK,EAAE;AACJ,4CAAA,CAAC,KAAK,CAAC,QAAQ,GAAG;AACf,gDAAA,EAAE,EAAE;AACN;AACH,yCAAA;wCACD,KAAK,EAAE,IAAI,CAAC;AACd,qCAAA,EAAE,CAAC,EAAE,IAAI,CAAC;AAEX,oCAAA,MAAM,KAAK,CAAC,OAAO,EAAE;gCACxB;4BACH;wBACH;6BAAO;AACJ,4BAAA,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC;AAC/B,gCAAA,KAAK,EAAE;AACJ,oCAAA,CAAC,GAAG,GAAG,IAAI,CAAC;AACd,iCAAA;gCACD,KAAK,EAAE,IAAI,CAAC;AACd,6BAAA,EAAE,CAAC,EAAE,IAAI,CAAC;AACX,4BAAA,MAAM,KAAK,CAAC,OAAO,EAAE;wBACxB;oBACH;gBACH;YACH;QACH;QAGA,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;QACnD,MAAM,OAAO,GAAQ,EAAE;AACvB,QAAA,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;AACrB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAQ;AAChC,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AACtB,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;YACtB;QACH;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC;YAC7B,MAAM,EAAA,MAAA,CAAA,MAAA,CAAA,EACH,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,EAAA,EACnB,OAAO,CACZ;YACD,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,KAAK,EAAE;SACT,EAAE,KAAK,CAAC;AACT,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;AAEtC,QAAA,IAAI,OAAO;QACX,IAAI,CAAC,UAAU,EAAE;YACd,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;AAC5C,YAAA,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;QAClC;AAEA,QAAA,MAAM,GAAG,GAAG,CAAA,YAAA,EAAe,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE;AAC9E,QAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;AAEpD,QAAA,IAAI,OAAO,CAAC,YAAY,KAAI,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,MAAM,CAAA,EAAE;YAC3C,KAAK,IAAI,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE;AACzC,gBAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;AACrB,oBAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;AACnB,wBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AACzB,wBAAA,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AACtB,4BAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;4BAC1B,IAAI,QAAQ,EAAE;gCACX,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;4BAC3C;wBACH;oBACH;gBACH;YACH;QACH;AAEA,QAAA,OAAO,OAAO;IACjB;AACF;;;;"}
@@ -105,8 +105,7 @@ class BuildUpdateArgs {
105
105
  if (oldFileResults) {
106
106
  for (let row of oldFileResults) {
107
107
  for (let col in fileMetas) {
108
- const field = schema[col];
109
- const meta = field.value.fromSql(row[col]);
108
+ const meta = row[col];
110
109
  if (meta) {
111
110
  await xansql.deleteFile(meta.fileId);
112
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/model/Build/UpdateArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { XansqlFileMeta } from \"../../../core/types\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { iof, isNumber, isObject, quote } from \"../../../utils\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport { SchemaShape, SelectArgs, UpdateArgs } from \"../../types\";\nimport BuildFindArgs from \"../FindArgs\";\nimport BuildWhereArgs from \"../WhereArgs\";\n\nclass BuildUpdateArgs {\n\n constructor(private args: UpdateArgs<SchemaShape>, private model: Model<any>, private isSubquery = false) {\n this.validateData(args.data)\n }\n\n async results() {\n const model = this.model\n const xansql = this.model.xansql\n const args = this.args\n const isSubquery = this.isSubquery\n const schema = model.schema()\n const data = args.data\n\n const wargs = new BuildWhereArgs(args.where, model)\n const values: string[] = []\n const relations: { [col: string]: UpdateArgs<any>['data'] } = {}\n const fileMetas: { [col: string]: XansqlFileMeta } = {}\n\n for (let col in data) {\n const value = data[col]\n const field = schema[col]\n if (field.isRelation) {\n if (field.type === \"relation-one\") {\n values.push(`${quote(xansql.dialect.engine, col)}=${value}`)\n } else {\n relations[col] = value\n }\n } else {\n if (iof(field, XqlFile)) {\n try {\n const filemeta = await xansql.uploadFile(value) as any\n (fileMetas as any)[col] = filemeta\n values.push(`${quote(xansql.dialect.engine, col)}='${JSON.stringify(filemeta)}'`)\n } catch (error: any) {\n throw new XansqlError({\n code: \"FILE_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n } else {\n try {\n values.push(`${quote(xansql.dialect.engine, col)}=${field.value.toSql(value)}`)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n }\n }\n }\n\n // set updatedAt and update\n for (let col in schema) {\n const field = schema[col]\n if (iof(field, XqlDate) && field.meta.updatedAt) {\n const v = field.value.toSql(new Date())\n values.push(`${quote(xansql.dialect.engine, col)}=${v}`)\n }\n }\n\n // taking old filemetas\n let oldFileResults\n if (Object.keys(fileMetas).length) {\n let select: any = {}\n for (let col in fileMetas) {\n select[col] = true\n }\n const build = new BuildFindArgs({\n select,\n where: args.where,\n debug: false\n }, model)\n oldFileResults = await build.results()\n }\n\n let execute\n try {\n let sql = `UPDATE ${model.table} as ${model.alias} SET ${values.join(\", \")} ${wargs.sql}`.trim()\n execute = await model.execute(sql.replace(/\\s+/gi, \" \"), args.debug)\n } catch (error) {\n for (let col in fileMetas) {\n await xansql.deleteFile(fileMetas[col].fileId)\n }\n throw error\n }\n\n if (execute?.affectedRows && Object.keys(relations).length) {\n\n // delete Old files\n if (oldFileResults) {\n for (let row of oldFileResults) {\n for (let col in fileMetas) {\n const field = schema[col]\n const meta = field.value.fromSql(row[col]) as XansqlFileMeta\n if (meta) {\n await xansql.deleteFile(meta.fileId)\n }\n }\n }\n }\n\n for (let col in relations) {\n const rargs = relations[col] as UpdateArgs<any>\n const field = schema[col]\n const rinfo = field.relationInfo\n const RModel = xansql.model(field.model)\n\n const build = new BuildUpdateArgs({\n ...rargs,\n where: {\n ...rargs.where,\n [rinfo.target.column]: args.where\n },\n debug: args.debug\n }, RModel, true)\n await build.results()\n }\n }\n\n if (!isSubquery && execute?.affectedRows) {\n let sargs: SelectArgs = this.makeSelectArgs(data, model)\n const buildFind = new BuildFindArgs({\n select: sargs,\n where: {\n ...args.where,\n },\n debug: args.debug\n }, model)\n return await buildFind.results()\n }\n }\n\n private makeSelectArgs(data: UpdateArgs<any>['data'], model: Model<any>) {\n let args: any = {}\n const schema = model.schema()\n const xansql = model.xansql\n\n for (let col in data) {\n const field = schema[col] as any\n if (field.type === \"relation-many\") {\n const RModel = xansql.model(field.model)\n const sub_args = data[col] as UpdateArgs<any>\n const childargs = this.makeSelectArgs(sub_args.data as any, RModel)\n if (Object.keys(childargs).length) {\n args[col] = {\n select: childargs,\n where: sub_args.where\n }\n } else {\n args[col] = {\n where: sub_args.where\n }\n }\n } else {\n args[col] = true\n }\n }\n\n return args\n }\n\n private validateData(data: UpdateArgs<any>['data']) {\n const model = this.model\n const schema = model.schema()\n\n if (!isObject(data)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Expected \"data\" to be an object, received ${typeof data}`,\n model: model.table,\n params: data\n })\n }\n\n // check if idColumn exists\n if (model.IDColumn in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `You cannot set a value for the primary key \"${model.IDColumn}\" in table \"${model.table}\".`,\n model: model.table,\n field: model.IDColumn,\n })\n }\n\n for (let col in data) {\n const value = data[col]\n const field = schema[col]\n\n if (field.meta.create || field.meta.update) {\n if (col in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Cannot set a value for \"${col}\" in table \"${model.table}\" — this field is automatically managed.`,\n model: model.table,\n field: col,\n })\n }\n }\n\n if (field.type === \"relation-one\" && !(isNumber(value) || value === null)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for foreign key \"${col}\" in table \"${model.table}\". Expected a number, got ${typeof value}.`,\n model: model.table,\n field: col,\n })\n }\n\n if (iof(field, XqlFile) && !iof(value, File)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for \"${col}\" in table \"${model.table}\". Expected a File, received ${typeof value}.`,\n model: model.table,\n field: col\n })\n }\n }\n }\n}\n\nexport default BuildUpdateArgs"],"names":["BuildWhereArgs","quote","iof","XqlFile","XansqlError","XqlDate","BuildFindArgs","isObject","isNumber"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/model/Build/UpdateArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { XansqlFileMeta } from \"../../../core/types\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { iof, isNumber, isObject, quote } from \"../../../utils\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport { SchemaShape, SelectArgs, UpdateArgs } from \"../../types\";\nimport BuildFindArgs from \"../FindArgs\";\nimport BuildWhereArgs from \"../WhereArgs\";\n\nclass BuildUpdateArgs {\n\n constructor(private args: UpdateArgs<SchemaShape>, private model: Model<any>, private isSubquery = false) {\n this.validateData(args.data)\n }\n\n async results() {\n const model = this.model\n const xansql = this.model.xansql\n const args = this.args\n const isSubquery = this.isSubquery\n const schema = model.schema()\n const data = args.data\n\n const wargs = new BuildWhereArgs(args.where, model)\n const values: string[] = []\n const relations: { [col: string]: UpdateArgs<any>['data'] } = {}\n const fileMetas: { [col: string]: XansqlFileMeta } = {}\n\n for (let col in data) {\n const value = data[col]\n const field = schema[col]\n if (field.isRelation) {\n if (field.type === \"relation-one\") {\n values.push(`${quote(xansql.dialect.engine, col)}=${value}`)\n } else {\n relations[col] = value\n }\n } else {\n if (iof(field, XqlFile)) {\n try {\n const filemeta = await xansql.uploadFile(value) as any\n (fileMetas as any)[col] = filemeta\n values.push(`${quote(xansql.dialect.engine, col)}='${JSON.stringify(filemeta)}'`)\n } catch (error: any) {\n throw new XansqlError({\n code: \"FILE_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n } else {\n try {\n values.push(`${quote(xansql.dialect.engine, col)}=${field.value.toSql(value)}`)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n }\n }\n }\n\n // set updatedAt and update\n for (let col in schema) {\n const field = schema[col]\n if (iof(field, XqlDate) && field.meta.updatedAt) {\n const v = field.value.toSql(new Date())\n values.push(`${quote(xansql.dialect.engine, col)}=${v}`)\n }\n }\n\n // taking old filemetas\n let oldFileResults\n if (Object.keys(fileMetas).length) {\n let select: any = {}\n for (let col in fileMetas) {\n select[col] = true\n }\n const build = new BuildFindArgs({\n select,\n where: args.where,\n debug: false\n }, model)\n oldFileResults = await build.results()\n }\n\n let execute\n try {\n let sql = `UPDATE ${model.table} as ${model.alias} SET ${values.join(\", \")} ${wargs.sql}`.trim()\n execute = await model.execute(sql.replace(/\\s+/gi, \" \"), args.debug)\n } catch (error) {\n for (let col in fileMetas) {\n await xansql.deleteFile(fileMetas[col].fileId)\n }\n throw error\n }\n\n if (execute?.affectedRows && Object.keys(relations).length) {\n\n // delete Old files\n if (oldFileResults) {\n for (let row of oldFileResults) {\n for (let col in fileMetas) {\n const meta = row[col]\n if (meta) {\n await xansql.deleteFile(meta.fileId)\n }\n }\n }\n }\n\n for (let col in relations) {\n const rargs = relations[col] as UpdateArgs<any>\n const field = schema[col]\n const rinfo = field.relationInfo\n const RModel = xansql.model(field.model)\n\n const build = new BuildUpdateArgs({\n ...rargs,\n where: {\n ...rargs.where,\n [rinfo.target.column]: args.where\n },\n debug: args.debug\n }, RModel, true)\n await build.results()\n }\n }\n\n if (!isSubquery && execute?.affectedRows) {\n let sargs: SelectArgs = this.makeSelectArgs(data, model)\n const buildFind = new BuildFindArgs({\n select: sargs,\n where: {\n ...args.where,\n },\n debug: args.debug\n }, model)\n return await buildFind.results()\n }\n }\n\n private makeSelectArgs(data: UpdateArgs<any>['data'], model: Model<any>) {\n let args: any = {}\n const schema = model.schema()\n const xansql = model.xansql\n\n for (let col in data) {\n const field = schema[col] as any\n if (field.type === \"relation-many\") {\n const RModel = xansql.model(field.model)\n const sub_args = data[col] as UpdateArgs<any>\n const childargs = this.makeSelectArgs(sub_args.data as any, RModel)\n if (Object.keys(childargs).length) {\n args[col] = {\n select: childargs,\n where: sub_args.where\n }\n } else {\n args[col] = {\n where: sub_args.where\n }\n }\n } else {\n args[col] = true\n }\n }\n\n return args\n }\n\n private validateData(data: UpdateArgs<any>['data']) {\n const model = this.model\n const schema = model.schema()\n\n if (!isObject(data)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Expected \"data\" to be an object, received ${typeof data}`,\n model: model.table,\n params: data\n })\n }\n\n // check if idColumn exists\n if (model.IDColumn in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `You cannot set a value for the primary key \"${model.IDColumn}\" in table \"${model.table}\".`,\n model: model.table,\n field: model.IDColumn,\n })\n }\n\n for (let col in data) {\n const value = data[col]\n const field = schema[col]\n\n if (field.meta.create || field.meta.update) {\n if (col in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Cannot set a value for \"${col}\" in table \"${model.table}\" — this field is automatically managed.`,\n model: model.table,\n field: col,\n })\n }\n }\n\n if (field.type === \"relation-one\" && !(isNumber(value) || value === null)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for foreign key \"${col}\" in table \"${model.table}\". Expected a number, got ${typeof value}.`,\n model: model.table,\n field: col,\n })\n }\n\n if (iof(field, XqlFile) && !iof(value, File)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for \"${col}\" in table \"${model.table}\". Expected a File, received ${typeof value}.`,\n model: model.table,\n field: col\n })\n }\n }\n }\n}\n\nexport default BuildUpdateArgs"],"names":["BuildWhereArgs","quote","iof","XqlFile","XansqlError","XqlDate","BuildFindArgs","isObject","isNumber"],"mappings":"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"}
@@ -103,8 +103,7 @@ class BuildUpdateArgs {
103
103
  if (oldFileResults) {
104
104
  for (let row of oldFileResults) {
105
105
  for (let col in fileMetas) {
106
- const field = schema[col];
107
- const meta = field.value.fromSql(row[col]);
106
+ const meta = row[col];
108
107
  if (meta) {
109
108
  await xansql.deleteFile(meta.fileId);
110
109
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/model/Build/UpdateArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { XansqlFileMeta } from \"../../../core/types\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { iof, isNumber, isObject, quote } from \"../../../utils\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport { SchemaShape, SelectArgs, UpdateArgs } from \"../../types\";\nimport BuildFindArgs from \"../FindArgs\";\nimport BuildWhereArgs from \"../WhereArgs\";\n\nclass BuildUpdateArgs {\n\n constructor(private args: UpdateArgs<SchemaShape>, private model: Model<any>, private isSubquery = false) {\n this.validateData(args.data)\n }\n\n async results() {\n const model = this.model\n const xansql = this.model.xansql\n const args = this.args\n const isSubquery = this.isSubquery\n const schema = model.schema()\n const data = args.data\n\n const wargs = new BuildWhereArgs(args.where, model)\n const values: string[] = []\n const relations: { [col: string]: UpdateArgs<any>['data'] } = {}\n const fileMetas: { [col: string]: XansqlFileMeta } = {}\n\n for (let col in data) {\n const value = data[col]\n const field = schema[col]\n if (field.isRelation) {\n if (field.type === \"relation-one\") {\n values.push(`${quote(xansql.dialect.engine, col)}=${value}`)\n } else {\n relations[col] = value\n }\n } else {\n if (iof(field, XqlFile)) {\n try {\n const filemeta = await xansql.uploadFile(value) as any\n (fileMetas as any)[col] = filemeta\n values.push(`${quote(xansql.dialect.engine, col)}='${JSON.stringify(filemeta)}'`)\n } catch (error: any) {\n throw new XansqlError({\n code: \"FILE_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n } else {\n try {\n values.push(`${quote(xansql.dialect.engine, col)}=${field.value.toSql(value)}`)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n }\n }\n }\n\n // set updatedAt and update\n for (let col in schema) {\n const field = schema[col]\n if (iof(field, XqlDate) && field.meta.updatedAt) {\n const v = field.value.toSql(new Date())\n values.push(`${quote(xansql.dialect.engine, col)}=${v}`)\n }\n }\n\n // taking old filemetas\n let oldFileResults\n if (Object.keys(fileMetas).length) {\n let select: any = {}\n for (let col in fileMetas) {\n select[col] = true\n }\n const build = new BuildFindArgs({\n select,\n where: args.where,\n debug: false\n }, model)\n oldFileResults = await build.results()\n }\n\n let execute\n try {\n let sql = `UPDATE ${model.table} as ${model.alias} SET ${values.join(\", \")} ${wargs.sql}`.trim()\n execute = await model.execute(sql.replace(/\\s+/gi, \" \"), args.debug)\n } catch (error) {\n for (let col in fileMetas) {\n await xansql.deleteFile(fileMetas[col].fileId)\n }\n throw error\n }\n\n if (execute?.affectedRows && Object.keys(relations).length) {\n\n // delete Old files\n if (oldFileResults) {\n for (let row of oldFileResults) {\n for (let col in fileMetas) {\n const field = schema[col]\n const meta = field.value.fromSql(row[col]) as XansqlFileMeta\n if (meta) {\n await xansql.deleteFile(meta.fileId)\n }\n }\n }\n }\n\n for (let col in relations) {\n const rargs = relations[col] as UpdateArgs<any>\n const field = schema[col]\n const rinfo = field.relationInfo\n const RModel = xansql.model(field.model)\n\n const build = new BuildUpdateArgs({\n ...rargs,\n where: {\n ...rargs.where,\n [rinfo.target.column]: args.where\n },\n debug: args.debug\n }, RModel, true)\n await build.results()\n }\n }\n\n if (!isSubquery && execute?.affectedRows) {\n let sargs: SelectArgs = this.makeSelectArgs(data, model)\n const buildFind = new BuildFindArgs({\n select: sargs,\n where: {\n ...args.where,\n },\n debug: args.debug\n }, model)\n return await buildFind.results()\n }\n }\n\n private makeSelectArgs(data: UpdateArgs<any>['data'], model: Model<any>) {\n let args: any = {}\n const schema = model.schema()\n const xansql = model.xansql\n\n for (let col in data) {\n const field = schema[col] as any\n if (field.type === \"relation-many\") {\n const RModel = xansql.model(field.model)\n const sub_args = data[col] as UpdateArgs<any>\n const childargs = this.makeSelectArgs(sub_args.data as any, RModel)\n if (Object.keys(childargs).length) {\n args[col] = {\n select: childargs,\n where: sub_args.where\n }\n } else {\n args[col] = {\n where: sub_args.where\n }\n }\n } else {\n args[col] = true\n }\n }\n\n return args\n }\n\n private validateData(data: UpdateArgs<any>['data']) {\n const model = this.model\n const schema = model.schema()\n\n if (!isObject(data)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Expected \"data\" to be an object, received ${typeof data}`,\n model: model.table,\n params: data\n })\n }\n\n // check if idColumn exists\n if (model.IDColumn in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `You cannot set a value for the primary key \"${model.IDColumn}\" in table \"${model.table}\".`,\n model: model.table,\n field: model.IDColumn,\n })\n }\n\n for (let col in data) {\n const value = data[col]\n const field = schema[col]\n\n if (field.meta.create || field.meta.update) {\n if (col in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Cannot set a value for \"${col}\" in table \"${model.table}\" — this field is automatically managed.`,\n model: model.table,\n field: col,\n })\n }\n }\n\n if (field.type === \"relation-one\" && !(isNumber(value) || value === null)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for foreign key \"${col}\" in table \"${model.table}\". Expected a number, got ${typeof value}.`,\n model: model.table,\n field: col,\n })\n }\n\n if (iof(field, XqlFile) && !iof(value, File)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for \"${col}\" in table \"${model.table}\". Expected a File, received ${typeof value}.`,\n model: model.table,\n field: col\n })\n }\n }\n }\n}\n\nexport default BuildUpdateArgs"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/model/Build/UpdateArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { XansqlFileMeta } from \"../../../core/types\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { iof, isNumber, isObject, quote } from \"../../../utils\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport { SchemaShape, SelectArgs, UpdateArgs } from \"../../types\";\nimport BuildFindArgs from \"../FindArgs\";\nimport BuildWhereArgs from \"../WhereArgs\";\n\nclass BuildUpdateArgs {\n\n constructor(private args: UpdateArgs<SchemaShape>, private model: Model<any>, private isSubquery = false) {\n this.validateData(args.data)\n }\n\n async results() {\n const model = this.model\n const xansql = this.model.xansql\n const args = this.args\n const isSubquery = this.isSubquery\n const schema = model.schema()\n const data = args.data\n\n const wargs = new BuildWhereArgs(args.where, model)\n const values: string[] = []\n const relations: { [col: string]: UpdateArgs<any>['data'] } = {}\n const fileMetas: { [col: string]: XansqlFileMeta } = {}\n\n for (let col in data) {\n const value = data[col]\n const field = schema[col]\n if (field.isRelation) {\n if (field.type === \"relation-one\") {\n values.push(`${quote(xansql.dialect.engine, col)}=${value}`)\n } else {\n relations[col] = value\n }\n } else {\n if (iof(field, XqlFile)) {\n try {\n const filemeta = await xansql.uploadFile(value) as any\n (fileMetas as any)[col] = filemeta\n values.push(`${quote(xansql.dialect.engine, col)}='${JSON.stringify(filemeta)}'`)\n } catch (error: any) {\n throw new XansqlError({\n code: \"FILE_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n } else {\n try {\n values.push(`${quote(xansql.dialect.engine, col)}=${field.value.toSql(value)}`)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: error.message,\n model: model.table,\n field: col\n })\n }\n }\n }\n }\n\n // set updatedAt and update\n for (let col in schema) {\n const field = schema[col]\n if (iof(field, XqlDate) && field.meta.updatedAt) {\n const v = field.value.toSql(new Date())\n values.push(`${quote(xansql.dialect.engine, col)}=${v}`)\n }\n }\n\n // taking old filemetas\n let oldFileResults\n if (Object.keys(fileMetas).length) {\n let select: any = {}\n for (let col in fileMetas) {\n select[col] = true\n }\n const build = new BuildFindArgs({\n select,\n where: args.where,\n debug: false\n }, model)\n oldFileResults = await build.results()\n }\n\n let execute\n try {\n let sql = `UPDATE ${model.table} as ${model.alias} SET ${values.join(\", \")} ${wargs.sql}`.trim()\n execute = await model.execute(sql.replace(/\\s+/gi, \" \"), args.debug)\n } catch (error) {\n for (let col in fileMetas) {\n await xansql.deleteFile(fileMetas[col].fileId)\n }\n throw error\n }\n\n if (execute?.affectedRows && Object.keys(relations).length) {\n\n // delete Old files\n if (oldFileResults) {\n for (let row of oldFileResults) {\n for (let col in fileMetas) {\n const meta = row[col]\n if (meta) {\n await xansql.deleteFile(meta.fileId)\n }\n }\n }\n }\n\n for (let col in relations) {\n const rargs = relations[col] as UpdateArgs<any>\n const field = schema[col]\n const rinfo = field.relationInfo\n const RModel = xansql.model(field.model)\n\n const build = new BuildUpdateArgs({\n ...rargs,\n where: {\n ...rargs.where,\n [rinfo.target.column]: args.where\n },\n debug: args.debug\n }, RModel, true)\n await build.results()\n }\n }\n\n if (!isSubquery && execute?.affectedRows) {\n let sargs: SelectArgs = this.makeSelectArgs(data, model)\n const buildFind = new BuildFindArgs({\n select: sargs,\n where: {\n ...args.where,\n },\n debug: args.debug\n }, model)\n return await buildFind.results()\n }\n }\n\n private makeSelectArgs(data: UpdateArgs<any>['data'], model: Model<any>) {\n let args: any = {}\n const schema = model.schema()\n const xansql = model.xansql\n\n for (let col in data) {\n const field = schema[col] as any\n if (field.type === \"relation-many\") {\n const RModel = xansql.model(field.model)\n const sub_args = data[col] as UpdateArgs<any>\n const childargs = this.makeSelectArgs(sub_args.data as any, RModel)\n if (Object.keys(childargs).length) {\n args[col] = {\n select: childargs,\n where: sub_args.where\n }\n } else {\n args[col] = {\n where: sub_args.where\n }\n }\n } else {\n args[col] = true\n }\n }\n\n return args\n }\n\n private validateData(data: UpdateArgs<any>['data']) {\n const model = this.model\n const schema = model.schema()\n\n if (!isObject(data)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Expected \"data\" to be an object, received ${typeof data}`,\n model: model.table,\n params: data\n })\n }\n\n // check if idColumn exists\n if (model.IDColumn in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `You cannot set a value for the primary key \"${model.IDColumn}\" in table \"${model.table}\".`,\n model: model.table,\n field: model.IDColumn,\n })\n }\n\n for (let col in data) {\n const value = data[col]\n const field = schema[col]\n\n if (field.meta.create || field.meta.update) {\n if (col in data) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Cannot set a value for \"${col}\" in table \"${model.table}\" — this field is automatically managed.`,\n model: model.table,\n field: col,\n })\n }\n }\n\n if (field.type === \"relation-one\" && !(isNumber(value) || value === null)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for foreign key \"${col}\" in table \"${model.table}\". Expected a number, got ${typeof value}.`,\n model: model.table,\n field: col,\n })\n }\n\n if (iof(field, XqlFile) && !iof(value, File)) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for \"${col}\" in table \"${model.table}\". Expected a File, received ${typeof value}.`,\n model: model.table,\n field: col\n })\n }\n }\n }\n}\n\nexport default BuildUpdateArgs"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xansql",
3
- "version": "1.1.13",
3
+ "version": "1.1.15",
4
4
  "main": "./index.cjs",
5
5
  "module": "./index.js",
6
6
  "types": "./index.d.ts",