xansql 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/core/Xansql.cjs +7 -8
  2. package/core/Xansql.cjs.map +1 -1
  3. package/core/Xansql.d.ts +2 -3
  4. package/core/Xansql.mjs +7 -8
  5. package/core/Xansql.mjs.map +1 -1
  6. package/core/classes/ForeignInfo.cjs +3 -2
  7. package/core/classes/ForeignInfo.cjs.map +1 -1
  8. package/core/classes/ForeignInfo.d.ts +1 -2
  9. package/core/classes/ForeignInfo.mjs +3 -2
  10. package/core/classes/ForeignInfo.mjs.map +1 -1
  11. package/core/classes/Migration/TableMigration.cjs +24 -15
  12. package/core/classes/Migration/TableMigration.cjs.map +1 -1
  13. package/core/classes/Migration/TableMigration.mjs +25 -16
  14. package/core/classes/Migration/TableMigration.mjs.map +1 -1
  15. package/core/classes/Migration/index.cjs +13 -10
  16. package/core/classes/Migration/index.cjs.map +1 -1
  17. package/core/classes/Migration/index.mjs +14 -11
  18. package/core/classes/Migration/index.mjs.map +1 -1
  19. package/core/classes/{ModelFormatter.cjs → ModelFactory.cjs} +82 -56
  20. package/core/classes/ModelFactory.cjs.map +1 -0
  21. package/core/classes/{ModelFormatter.d.ts → ModelFactory.d.ts} +7 -2
  22. package/core/classes/{ModelFormatter.mjs → ModelFactory.mjs} +82 -56
  23. package/core/classes/ModelFactory.mjs.map +1 -0
  24. package/core/types.d.ts +1 -1
  25. package/dialect/MysqlDialect.cjs +7 -4
  26. package/dialect/MysqlDialect.cjs.map +1 -1
  27. package/dialect/MysqlDialect.d.ts +7 -4
  28. package/dialect/MysqlDialect.mjs +7 -4
  29. package/dialect/MysqlDialect.mjs.map +1 -1
  30. package/dialect/PostgresDialect.cjs +5 -2
  31. package/dialect/PostgresDialect.cjs.map +1 -1
  32. package/dialect/PostgresDialect.d.ts +5 -2
  33. package/dialect/PostgresDialect.mjs +5 -2
  34. package/dialect/PostgresDialect.mjs.map +1 -1
  35. package/dialect/SqliteDialect.cjs +3 -2
  36. package/dialect/SqliteDialect.cjs.map +1 -1
  37. package/dialect/SqliteDialect.d.ts +3 -2
  38. package/dialect/SqliteDialect.mjs +3 -2
  39. package/dialect/SqliteDialect.mjs.map +1 -1
  40. package/dialect/XansqlBridge/XansqlBridgeServer.cjs.map +1 -1
  41. package/dialect/XansqlBridge/XansqlBridgeServer.mjs.map +1 -1
  42. package/dialect/XansqlBridge/base.cjs +10 -5
  43. package/dialect/XansqlBridge/base.cjs.map +1 -1
  44. package/dialect/XansqlBridge/base.mjs +10 -5
  45. package/dialect/XansqlBridge/base.mjs.map +1 -1
  46. package/model/Args/WhereArgs.cjs +5 -8
  47. package/model/Args/WhereArgs.cjs.map +1 -1
  48. package/model/Args/WhereArgs.mjs +6 -9
  49. package/model/Args/WhereArgs.mjs.map +1 -1
  50. package/model/Base.cjs +2 -1
  51. package/model/Base.cjs.map +1 -1
  52. package/model/Base.mjs +2 -1
  53. package/model/Base.mjs.map +1 -1
  54. package/model/Executer/Aggregate/SelectArgs.cjs +2 -1
  55. package/model/Executer/Aggregate/SelectArgs.cjs.map +1 -1
  56. package/model/Executer/Aggregate/SelectArgs.mjs +2 -1
  57. package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -1
  58. package/model/Executer/Aggregate/index.cjs +4 -4
  59. package/model/Executer/Aggregate/index.cjs.map +1 -1
  60. package/model/Executer/Aggregate/index.mjs +4 -4
  61. package/model/Executer/Aggregate/index.mjs.map +1 -1
  62. package/model/Executer/Create/CreateDataArgs.cjs +9 -5
  63. package/model/Executer/Create/CreateDataArgs.cjs.map +1 -1
  64. package/model/Executer/Create/CreateDataArgs.mjs +10 -6
  65. package/model/Executer/Create/CreateDataArgs.mjs.map +1 -1
  66. package/model/Executer/Create/index.cjs +1 -1
  67. package/model/Executer/Create/index.cjs.map +1 -1
  68. package/model/Executer/Create/index.mjs +1 -1
  69. package/model/Executer/Create/index.mjs.map +1 -1
  70. package/model/Executer/Delete/index.cjs +2 -1
  71. package/model/Executer/Delete/index.cjs.map +1 -1
  72. package/model/Executer/Delete/index.mjs +2 -1
  73. package/model/Executer/Delete/index.mjs.map +1 -1
  74. package/model/Executer/Find/SelectArgs.cjs +3 -3
  75. package/model/Executer/Find/SelectArgs.cjs.map +1 -1
  76. package/model/Executer/Find/SelectArgs.mjs +3 -3
  77. package/model/Executer/Find/SelectArgs.mjs.map +1 -1
  78. package/model/Executer/Update/UpdateDataArgs.cjs +4 -4
  79. package/model/Executer/Update/UpdateDataArgs.cjs.map +1 -1
  80. package/model/Executer/Update/UpdateDataArgs.mjs +5 -5
  81. package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -1
  82. package/model/Executer/Update/index.cjs +1 -1
  83. package/model/Executer/Update/index.cjs.map +1 -1
  84. package/model/Executer/Update/index.mjs +1 -1
  85. package/model/Executer/Update/index.mjs.map +1 -1
  86. package/model/include/ValueFormatter.cjs +72 -17
  87. package/model/include/ValueFormatter.cjs.map +1 -1
  88. package/model/include/ValueFormatter.d.ts +1 -1
  89. package/model/include/ValueFormatter.mjs +72 -17
  90. package/model/include/ValueFormatter.mjs.map +1 -1
  91. package/model/index.cjs +8 -7
  92. package/model/index.cjs.map +1 -1
  93. package/model/index.mjs +8 -7
  94. package/model/index.mjs.map +1 -1
  95. package/package.json +12 -7
  96. package/utils/index.cjs +5 -2
  97. package/utils/index.cjs.map +1 -1
  98. package/utils/index.d.ts +2 -1
  99. package/utils/index.mjs +5 -3
  100. package/utils/index.mjs.map +1 -1
  101. package/xt/additional/IP.cjs +22 -0
  102. package/xt/additional/IP.cjs.map +1 -0
  103. package/xt/additional/IP.d.ts +6 -0
  104. package/xt/additional/IP.mjs +20 -0
  105. package/xt/additional/IP.mjs.map +1 -0
  106. package/xt/additional/Name.cjs +21 -0
  107. package/xt/additional/Name.cjs.map +1 -0
  108. package/xt/additional/Name.d.ts +6 -0
  109. package/xt/additional/Name.mjs +19 -0
  110. package/xt/additional/Name.mjs.map +1 -0
  111. package/xt/additional/Password.cjs +25 -0
  112. package/xt/additional/Password.cjs.map +1 -0
  113. package/xt/additional/Password.d.ts +6 -0
  114. package/xt/additional/Password.mjs +23 -0
  115. package/xt/additional/Password.mjs.map +1 -0
  116. package/xt/additional/Phone.cjs +21 -0
  117. package/xt/additional/Phone.cjs.map +1 -0
  118. package/xt/additional/Phone.d.ts +6 -0
  119. package/xt/additional/Phone.mjs +19 -0
  120. package/xt/additional/Phone.mjs.map +1 -0
  121. package/xt/additional/Photo.cjs +21 -0
  122. package/xt/additional/Photo.cjs.map +1 -0
  123. package/xt/additional/Photo.d.ts +6 -0
  124. package/xt/additional/Photo.mjs +19 -0
  125. package/xt/additional/Photo.mjs.map +1 -0
  126. package/xt/additional/Slug.cjs +21 -0
  127. package/xt/additional/Slug.cjs.map +1 -0
  128. package/xt/additional/Slug.d.ts +6 -0
  129. package/xt/additional/Slug.mjs +19 -0
  130. package/xt/additional/Slug.mjs.map +1 -0
  131. package/xt/additional/Url.cjs +26 -0
  132. package/xt/additional/Url.cjs.map +1 -0
  133. package/xt/additional/Url.d.ts +6 -0
  134. package/xt/additional/Url.mjs +24 -0
  135. package/xt/additional/Url.mjs.map +1 -0
  136. package/xt/additional/Username.cjs +21 -0
  137. package/xt/additional/Username.cjs.map +1 -0
  138. package/xt/additional/Username.d.ts +6 -0
  139. package/xt/additional/Username.mjs +19 -0
  140. package/xt/additional/Username.mjs.map +1 -0
  141. package/xt/fields/Array.cjs +9 -2
  142. package/xt/fields/Array.cjs.map +1 -1
  143. package/xt/fields/Array.d.ts +2 -0
  144. package/xt/fields/Array.mjs +9 -2
  145. package/xt/fields/Array.mjs.map +1 -1
  146. package/xt/fields/Boolean.cjs +10 -5
  147. package/xt/fields/Boolean.cjs.map +1 -1
  148. package/xt/fields/Boolean.d.ts +2 -0
  149. package/xt/fields/Boolean.mjs +10 -5
  150. package/xt/fields/Boolean.mjs.map +1 -1
  151. package/xt/fields/Date.cjs +12 -12
  152. package/xt/fields/Date.cjs.map +1 -1
  153. package/xt/fields/Date.d.ts +2 -0
  154. package/xt/fields/Date.mjs +12 -12
  155. package/xt/fields/Date.mjs.map +1 -1
  156. package/xt/fields/Enum.cjs +10 -4
  157. package/xt/fields/Enum.cjs.map +1 -1
  158. package/xt/fields/Enum.d.ts +2 -0
  159. package/xt/fields/Enum.mjs +10 -4
  160. package/xt/fields/Enum.mjs.map +1 -1
  161. package/xt/fields/File.cjs +9 -2
  162. package/xt/fields/File.cjs.map +1 -1
  163. package/xt/fields/File.d.ts +2 -0
  164. package/xt/fields/File.mjs +9 -2
  165. package/xt/fields/File.mjs.map +1 -1
  166. package/xt/fields/IDField.cjs +8 -0
  167. package/xt/fields/IDField.cjs.map +1 -1
  168. package/xt/fields/IDField.d.ts +2 -0
  169. package/xt/fields/IDField.mjs +8 -0
  170. package/xt/fields/IDField.mjs.map +1 -1
  171. package/xt/fields/Number.cjs +10 -5
  172. package/xt/fields/Number.cjs.map +1 -1
  173. package/xt/fields/Number.d.ts +2 -0
  174. package/xt/fields/Number.mjs +10 -5
  175. package/xt/fields/Number.mjs.map +1 -1
  176. package/xt/fields/Object.cjs +10 -5
  177. package/xt/fields/Object.cjs.map +1 -1
  178. package/xt/fields/Object.d.ts +2 -0
  179. package/xt/fields/Object.mjs +10 -5
  180. package/xt/fields/Object.mjs.map +1 -1
  181. package/xt/fields/Record.cjs +10 -5
  182. package/xt/fields/Record.cjs.map +1 -1
  183. package/xt/fields/Record.d.ts +2 -0
  184. package/xt/fields/Record.mjs +10 -5
  185. package/xt/fields/Record.mjs.map +1 -1
  186. package/xt/fields/Schema.cjs +12 -1
  187. package/xt/fields/Schema.cjs.map +1 -1
  188. package/xt/fields/Schema.d.ts +4 -1
  189. package/xt/fields/Schema.mjs +12 -1
  190. package/xt/fields/Schema.mjs.map +1 -1
  191. package/xt/fields/String.cjs +12 -9
  192. package/xt/fields/String.cjs.map +1 -1
  193. package/xt/fields/String.d.ts +2 -0
  194. package/xt/fields/String.mjs +12 -9
  195. package/xt/fields/String.mjs.map +1 -1
  196. package/xt/fields/Tuple.cjs +10 -5
  197. package/xt/fields/Tuple.cjs.map +1 -1
  198. package/xt/fields/Tuple.d.ts +2 -0
  199. package/xt/fields/Tuple.mjs +10 -5
  200. package/xt/fields/Tuple.mjs.map +1 -1
  201. package/xt/fields/Union.cjs +10 -5
  202. package/xt/fields/Union.cjs.map +1 -1
  203. package/xt/fields/Union.d.ts +2 -0
  204. package/xt/fields/Union.mjs +10 -5
  205. package/xt/fields/Union.mjs.map +1 -1
  206. package/xt/index.cjs +16 -100
  207. package/xt/index.cjs.map +1 -1
  208. package/xt/index.d.ts +16 -9
  209. package/xt/index.mjs +16 -100
  210. package/xt/index.mjs.map +1 -1
  211. package/core/classes/ModelFormatter.cjs.map +0 -1
  212. package/core/classes/ModelFormatter.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MysqlDialect.mjs","sources":["../../src/dialect/MysqlDialect.ts"],"sourcesContent":["import { PoolOptions } from 'mysql2';\nimport mysql from 'mysql2/promise';\nimport { ExecuterResult } from '../core/types';\n\nconst MysqlDialect = (config: string | PoolOptions) => {\n const pool = mysql.createPool(\n typeof config === 'string' ? { uri: config } : config\n );\n\n const execute = async (sql: string, params: any[] = []): Promise<ExecuterResult> => {\n const conn = await pool.getConnection();\n try {\n const [rows] = await conn.query(sql, params);\n const result: any = rows;\n\n return {\n results: result,\n insertId: result?.insertId ?? 0,\n affectedRows: result?.affectedRows ?? 0\n };\n } finally {\n conn.release();\n }\n };\n\n const getSchema = async () => {\n const conn = await pool.getConnection();\n\n try {\n const [tables] = await conn.query<any[]>(\n `SELECT table_name as name\n FROM information_schema.tables \n WHERE table_schema = DATABASE();`\n );\n\n const schema: Record<string, any[]> = {};\n\n for (const t of tables) {\n const table = t.name;\n schema[table] = [];\n\n // Columns\n const [columns] = await conn.query<any[]>(\n `SELECT \n COLUMN_NAME as name,\n COLUMN_TYPE as type,\n IS_NULLABLE,\n COLUMN_DEFAULT,\n COLUMN_KEY\n FROM information_schema.columns\n WHERE table_schema = DATABASE()\n AND table_name = ?`,\n [table]\n );\n\n // Indexes\n const [indexes] = await conn.query<any[]>(\n `SHOW INDEX FROM \\`${table}\\``\n );\n\n for (const col of columns) {\n const colName = col.name;\n\n const isIndexed = indexes.some(i => i.Column_name === colName);\n const isUnique = indexes.some(i => i.Column_name === colName && i.Non_unique === 0);\n\n schema[table].push({\n name: colName,\n type: col.type,\n notnull: col.IS_NULLABLE === \"NO\",\n default_value: col.COLUMN_DEFAULT,\n pk: col.COLUMN_KEY === \"PRI\",\n index: isIndexed,\n unique: isUnique,\n });\n }\n }\n\n return schema;\n } finally {\n conn.release();\n }\n };\n\n return {\n engine: 'mysql' as const,\n execute,\n getSchema\n };\n};\n\nexport default MysqlDialect;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MysqlDialect.mjs","sources":["../../src/dialect/MysqlDialect.ts"],"sourcesContent":["import { PoolOptions } from 'mysql2';\nimport mysql from 'mysql2/promise';\nimport { ExecuterResult, XansqlDialectEngine, XansqlFileConfig } from '../core/types';\n\nconst MysqlDialect = ({ file, ...config }: PoolOptions & { file?: XansqlFileConfig }) => {\n const pool = mysql.createPool(typeof config === 'string' ? { uri: config } : config);\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n const conn = await pool.getConnection();\n try {\n const [rows] = await conn.query(sql);\n const result: any = rows;\n\n return {\n results: result,\n insertId: result?.insertId ?? 0,\n affectedRows: result?.affectedRows ?? 0\n };\n } finally {\n conn.release();\n }\n };\n\n const getSchema = async () => {\n const conn = await pool.getConnection();\n\n try {\n const [tables] = await conn.query<any[]>(\n `SELECT table_name as name\n FROM information_schema.tables \n WHERE table_schema = DATABASE();`\n );\n\n const schema: Record<string, any[]> = {};\n\n for (const t of tables) {\n const table = t.name;\n schema[table] = [];\n\n // Columns\n const [columns] = await conn.query<any[]>(\n `SELECT \n COLUMN_NAME as name,\n COLUMN_TYPE as type,\n IS_NULLABLE,\n COLUMN_DEFAULT,\n COLUMN_KEY\n FROM information_schema.columns\n WHERE table_schema = DATABASE()\n AND table_name = ?`,\n [table]\n );\n\n // Indexes\n const [indexes] = await conn.query<any[]>(\n `SHOW INDEX FROM \\`${table}\\``\n );\n\n for (const col of columns) {\n const colName = col.name;\n\n const isIndexed = indexes.some(i => i.Column_name === colName);\n const isUnique = indexes.some(i => i.Column_name === colName && i.Non_unique === 0);\n\n schema[table].push({\n name: colName,\n type: col.type,\n notnull: col.IS_NULLABLE === \"NO\",\n default_value: col.COLUMN_DEFAULT,\n pk: col.COLUMN_KEY === \"PRI\",\n index: isIndexed,\n unique: isUnique,\n });\n }\n }\n\n return schema;\n } finally {\n conn.release();\n }\n };\n\n return {\n engine: 'mysql' as XansqlDialectEngine,\n execute,\n getSchema,\n file\n };\n};\n\nexport default MysqlDialect;\n"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  'use strict';
2
2
 
3
+ var tslib = require('tslib');
3
4
  var postpres = require('pg');
4
5
 
5
- const PostgresDialect = (config) => {
6
+ const PostgresDialect = (_a) => {
7
+ var { file } = _a, config = tslib.__rest(_a, ["file"]);
6
8
  let pool = new postpres.Pool(config);
7
9
  const execute = async (sql) => {
8
10
  const client = await pool.connect();
@@ -106,7 +108,8 @@ const PostgresDialect = (config) => {
106
108
  return {
107
109
  engine: 'postgres',
108
110
  execute,
109
- getSchema
111
+ getSchema,
112
+ file
110
113
  };
111
114
  };
112
115
 
@@ -1 +1 @@
1
- {"version":3,"file":"PostgresDialect.cjs","sources":["../../src/dialect/PostgresDialect.ts"],"sourcesContent":["import postpres, { PoolConfig } from 'pg';\nimport { ExecuterResult } from '../core/types';\n\n\nconst PostgresDialect = (config: PoolConfig) => {\n let pool = new postpres.Pool(config);\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n const client = await pool.connect()\n try {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n if (sql.startsWith('SELECT')) {\n const res = await client.query(sql);\n results = res.rows;\n affectedRows = res.rowCount || 0;\n } else {\n const res = await client.query(sql + ' RETURNING *'); // capture inserted rows\n results = res.rows;\n affectedRows = res.rowCount || 0;\n if (results[0] && 'id' in results[0]) {\n insertId = results[0].id; // assumes primary key column is `id`\n }\n }\n return { results, insertId, affectedRows };\n } finally {\n client.release();\n }\n };\n\n\n\n const getSchema = async () => {\n // Get tables (only public schema)\n const client = await pool.connect()\n const tablesRes = await client.query(`\n SELECT table_name \n FROM information_schema.tables\n WHERE table_schema = 'public';\n `);\n\n const schema: Record<string, any[]> = {};\n\n for (const row of tablesRes.rows) {\n const table = row.table_name;\n schema[table] = [];\n\n // Columns\n const columnsRes = await client.query(`\n SELECT \n column_name AS name,\n data_type AS type,\n is_nullable,\n column_default,\n udt_name\n FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = '${table}';\n `);\n\n // Indexes\n const indexesRes = await client.query(`\n SELECT\n i.relname AS index_name,\n ix.indisunique AS unique,\n a.attname AS column_name\n FROM \n pg_class t,\n pg_class i,\n pg_index ix,\n pg_attribute a\n WHERE \n t.oid = ix.indrelid\n AND i.oid = ix.indexrelid\n AND a.attrelid = t.oid\n AND a.attnum = ANY(ix.indkey)\n AND t.relkind = 'r'\n AND t.relname = '${table}';\n `);\n\n // Primary keys\n const pkRes = await client.query(`\n SELECT\n kcu.column_name\n FROM \n information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu \n ON tc.constraint_name = kcu.constraint_name\n WHERE \n tc.constraint_type = 'PRIMARY KEY'\n AND tc.table_name = '${table}';\n `);\n\n const pkColumns = pkRes.rows.map(r => r.column_name);\n\n for (const col of columnsRes.rows) {\n const colName = col.name;\n\n const isIndexed = indexesRes.rows.some(i => i.column_name === colName);\n const isUnique = indexesRes.rows.some(i => i.column_name === colName && i.unique);\n\n schema[table].push({\n name: colName,\n type: col.udt_name ?? col.type,\n notnull: col.is_nullable === \"NO\",\n default_value: col.column_default,\n pk: pkColumns.includes(colName),\n index: isIndexed,\n unique: isUnique\n });\n }\n }\n\n return schema;\n };\n\n\n return {\n engine: 'postgres' as const,\n execute,\n getSchema\n };\n};\n\nexport default PostgresDialect;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PostgresDialect.cjs","sources":["../../src/dialect/PostgresDialect.ts"],"sourcesContent":["import postpres, { PoolConfig } from 'pg';\nimport { ExecuterResult, XansqlFileConfig } from '../core/types';\n\n\nconst PostgresDialect = ({ file, ...config }: PoolConfig & { file?: XansqlFileConfig }) => {\n let pool = new postpres.Pool(config);\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n const client = await pool.connect()\n try {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n if (sql.startsWith('SELECT')) {\n const res = await client.query(sql);\n results = res.rows;\n affectedRows = res.rowCount || 0;\n } else {\n const res = await client.query(sql + ' RETURNING *'); // capture inserted rows\n results = res.rows;\n affectedRows = res.rowCount || 0;\n if (results[0] && 'id' in results[0]) {\n insertId = results[0].id; // assumes primary key column is `id`\n }\n }\n return { results, insertId, affectedRows };\n } finally {\n client.release();\n }\n };\n\n\n\n const getSchema = async () => {\n // Get tables (only public schema)\n const client = await pool.connect()\n const tablesRes = await client.query(`\n SELECT table_name \n FROM information_schema.tables\n WHERE table_schema = 'public';\n `);\n\n const schema: Record<string, any[]> = {};\n\n for (const row of tablesRes.rows) {\n const table = row.table_name;\n schema[table] = [];\n\n // Columns\n const columnsRes = await client.query(`\n SELECT \n column_name AS name,\n data_type AS type,\n is_nullable,\n column_default,\n udt_name\n FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = '${table}';\n `);\n\n // Indexes\n const indexesRes = await client.query(`\n SELECT\n i.relname AS index_name,\n ix.indisunique AS unique,\n a.attname AS column_name\n FROM \n pg_class t,\n pg_class i,\n pg_index ix,\n pg_attribute a\n WHERE \n t.oid = ix.indrelid\n AND i.oid = ix.indexrelid\n AND a.attrelid = t.oid\n AND a.attnum = ANY(ix.indkey)\n AND t.relkind = 'r'\n AND t.relname = '${table}';\n `);\n\n // Primary keys\n const pkRes = await client.query(`\n SELECT\n kcu.column_name\n FROM \n information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu \n ON tc.constraint_name = kcu.constraint_name\n WHERE \n tc.constraint_type = 'PRIMARY KEY'\n AND tc.table_name = '${table}';\n `);\n\n const pkColumns = pkRes.rows.map(r => r.column_name);\n\n for (const col of columnsRes.rows) {\n const colName = col.name;\n\n const isIndexed = indexesRes.rows.some(i => i.column_name === colName);\n const isUnique = indexesRes.rows.some(i => i.column_name === colName && i.unique);\n\n schema[table].push({\n name: colName,\n type: col.udt_name ?? col.type,\n notnull: col.is_nullable === \"NO\",\n default_value: col.column_default,\n pk: pkColumns.includes(colName),\n index: isIndexed,\n unique: isUnique\n });\n }\n }\n\n return schema;\n };\n\n\n return {\n engine: 'postgres' as const,\n execute,\n getSchema,\n file\n };\n};\n\nexport default PostgresDialect;\n"],"names":["__rest"],"mappings":"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"}
@@ -1,8 +1,11 @@
1
1
  import { PoolConfig } from 'pg';
2
- import { ExecuterResult } from '../core/types';
3
- declare const PostgresDialect: (config: PoolConfig) => {
2
+ import { ExecuterResult, XansqlFileConfig } from '../core/types';
3
+ declare const PostgresDialect: ({ file, ...config }: PoolConfig & {
4
+ file?: XansqlFileConfig;
5
+ }) => {
4
6
  engine: "postgres";
5
7
  execute: (sql: string) => Promise<ExecuterResult>;
6
8
  getSchema: () => Promise<Record<string, any[]>>;
9
+ file: XansqlFileConfig;
7
10
  };
8
11
  export default PostgresDialect;
@@ -1,6 +1,8 @@
1
+ import { __rest } from 'tslib';
1
2
  import postpres from 'pg';
2
3
 
3
- const PostgresDialect = (config) => {
4
+ const PostgresDialect = (_a) => {
5
+ var { file } = _a, config = __rest(_a, ["file"]);
4
6
  let pool = new postpres.Pool(config);
5
7
  const execute = async (sql) => {
6
8
  const client = await pool.connect();
@@ -104,7 +106,8 @@ const PostgresDialect = (config) => {
104
106
  return {
105
107
  engine: 'postgres',
106
108
  execute,
107
- getSchema
109
+ getSchema,
110
+ file
108
111
  };
109
112
  };
110
113
 
@@ -1 +1 @@
1
- {"version":3,"file":"PostgresDialect.mjs","sources":["../../src/dialect/PostgresDialect.ts"],"sourcesContent":["import postpres, { PoolConfig } from 'pg';\nimport { ExecuterResult } from '../core/types';\n\n\nconst PostgresDialect = (config: PoolConfig) => {\n let pool = new postpres.Pool(config);\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n const client = await pool.connect()\n try {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n if (sql.startsWith('SELECT')) {\n const res = await client.query(sql);\n results = res.rows;\n affectedRows = res.rowCount || 0;\n } else {\n const res = await client.query(sql + ' RETURNING *'); // capture inserted rows\n results = res.rows;\n affectedRows = res.rowCount || 0;\n if (results[0] && 'id' in results[0]) {\n insertId = results[0].id; // assumes primary key column is `id`\n }\n }\n return { results, insertId, affectedRows };\n } finally {\n client.release();\n }\n };\n\n\n\n const getSchema = async () => {\n // Get tables (only public schema)\n const client = await pool.connect()\n const tablesRes = await client.query(`\n SELECT table_name \n FROM information_schema.tables\n WHERE table_schema = 'public';\n `);\n\n const schema: Record<string, any[]> = {};\n\n for (const row of tablesRes.rows) {\n const table = row.table_name;\n schema[table] = [];\n\n // Columns\n const columnsRes = await client.query(`\n SELECT \n column_name AS name,\n data_type AS type,\n is_nullable,\n column_default,\n udt_name\n FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = '${table}';\n `);\n\n // Indexes\n const indexesRes = await client.query(`\n SELECT\n i.relname AS index_name,\n ix.indisunique AS unique,\n a.attname AS column_name\n FROM \n pg_class t,\n pg_class i,\n pg_index ix,\n pg_attribute a\n WHERE \n t.oid = ix.indrelid\n AND i.oid = ix.indexrelid\n AND a.attrelid = t.oid\n AND a.attnum = ANY(ix.indkey)\n AND t.relkind = 'r'\n AND t.relname = '${table}';\n `);\n\n // Primary keys\n const pkRes = await client.query(`\n SELECT\n kcu.column_name\n FROM \n information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu \n ON tc.constraint_name = kcu.constraint_name\n WHERE \n tc.constraint_type = 'PRIMARY KEY'\n AND tc.table_name = '${table}';\n `);\n\n const pkColumns = pkRes.rows.map(r => r.column_name);\n\n for (const col of columnsRes.rows) {\n const colName = col.name;\n\n const isIndexed = indexesRes.rows.some(i => i.column_name === colName);\n const isUnique = indexesRes.rows.some(i => i.column_name === colName && i.unique);\n\n schema[table].push({\n name: colName,\n type: col.udt_name ?? col.type,\n notnull: col.is_nullable === \"NO\",\n default_value: col.column_default,\n pk: pkColumns.includes(colName),\n index: isIndexed,\n unique: isUnique\n });\n }\n }\n\n return schema;\n };\n\n\n return {\n engine: 'postgres' as const,\n execute,\n getSchema\n };\n};\n\nexport default PostgresDialect;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PostgresDialect.mjs","sources":["../../src/dialect/PostgresDialect.ts"],"sourcesContent":["import postpres, { PoolConfig } from 'pg';\nimport { ExecuterResult, XansqlFileConfig } from '../core/types';\n\n\nconst PostgresDialect = ({ file, ...config }: PoolConfig & { file?: XansqlFileConfig }) => {\n let pool = new postpres.Pool(config);\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n const client = await pool.connect()\n try {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n if (sql.startsWith('SELECT')) {\n const res = await client.query(sql);\n results = res.rows;\n affectedRows = res.rowCount || 0;\n } else {\n const res = await client.query(sql + ' RETURNING *'); // capture inserted rows\n results = res.rows;\n affectedRows = res.rowCount || 0;\n if (results[0] && 'id' in results[0]) {\n insertId = results[0].id; // assumes primary key column is `id`\n }\n }\n return { results, insertId, affectedRows };\n } finally {\n client.release();\n }\n };\n\n\n\n const getSchema = async () => {\n // Get tables (only public schema)\n const client = await pool.connect()\n const tablesRes = await client.query(`\n SELECT table_name \n FROM information_schema.tables\n WHERE table_schema = 'public';\n `);\n\n const schema: Record<string, any[]> = {};\n\n for (const row of tablesRes.rows) {\n const table = row.table_name;\n schema[table] = [];\n\n // Columns\n const columnsRes = await client.query(`\n SELECT \n column_name AS name,\n data_type AS type,\n is_nullable,\n column_default,\n udt_name\n FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = '${table}';\n `);\n\n // Indexes\n const indexesRes = await client.query(`\n SELECT\n i.relname AS index_name,\n ix.indisunique AS unique,\n a.attname AS column_name\n FROM \n pg_class t,\n pg_class i,\n pg_index ix,\n pg_attribute a\n WHERE \n t.oid = ix.indrelid\n AND i.oid = ix.indexrelid\n AND a.attrelid = t.oid\n AND a.attnum = ANY(ix.indkey)\n AND t.relkind = 'r'\n AND t.relname = '${table}';\n `);\n\n // Primary keys\n const pkRes = await client.query(`\n SELECT\n kcu.column_name\n FROM \n information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu \n ON tc.constraint_name = kcu.constraint_name\n WHERE \n tc.constraint_type = 'PRIMARY KEY'\n AND tc.table_name = '${table}';\n `);\n\n const pkColumns = pkRes.rows.map(r => r.column_name);\n\n for (const col of columnsRes.rows) {\n const colName = col.name;\n\n const isIndexed = indexesRes.rows.some(i => i.column_name === colName);\n const isUnique = indexesRes.rows.some(i => i.column_name === colName && i.unique);\n\n schema[table].push({\n name: colName,\n type: col.udt_name ?? col.type,\n notnull: col.is_nullable === \"NO\",\n default_value: col.column_default,\n pk: pkColumns.includes(colName),\n index: isIndexed,\n unique: isUnique\n });\n }\n }\n\n return schema;\n };\n\n\n return {\n engine: 'postgres' as const,\n execute,\n getSchema,\n file\n };\n};\n\nexport default PostgresDialect;\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var sqlite = require('better-sqlite3');
4
4
 
5
- const SqliteDialect = (filePath = ':memory:') => {
5
+ const SqliteDialect = (filePath = ':memory:', file) => {
6
6
  const db = new sqlite(filePath);
7
7
  const execute = async (sql) => {
8
8
  let results;
@@ -49,7 +49,8 @@ const SqliteDialect = (filePath = ':memory:') => {
49
49
  return {
50
50
  engine: 'sqlite',
51
51
  execute,
52
- getSchema
52
+ getSchema,
53
+ file
53
54
  };
54
55
  };
55
56
 
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteDialect.cjs","sources":["../../src/dialect/SqliteDialect.ts"],"sourcesContent":["import sqlite from 'better-sqlite3';\nimport { ExecuterResult, XansqlDialectSchemaType } from '../core/types';\n\nconst SqliteDialect = (filePath: string = ':memory:') => {\n const db = new sqlite(filePath)\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n // Detect query type\n if (sql.trim().startsWith('SELECT')) {\n results = db.prepare(sql).all();\n } else {\n const stmt = db.prepare(sql);\n const info = stmt.run();\n results = info;\n insertId = info.lastInsertRowid ? Number(info.lastInsertRowid) : 0;\n affectedRows = info.changes || 0;\n }\n return { results, insertId, affectedRows };\n };\n\n const getSchema = async () => {\n const tablesRes = db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';`).all();\n const tables = tablesRes.map((row: any) => row.name);\n const schema: XansqlDialectSchemaType = {};\n\n for (const table of tables) {\n const columnsRes = db.prepare(`PRAGMA table_info(${table});`).all();\n const indexesRes = db.prepare(`PRAGMA index_list(${table});`).all();\n\n schema[table] = columnsRes.map((col: any) => ({\n name: col.name,\n type: col.type,\n notnull: col.notnull,\n default_value: col.dflt_value,\n pk: col.pk,\n index: indexesRes.some((idx: any) => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n }),\n unique: indexesRes.some((idx: any) => idx.unique && (() => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n })()),\n }));\n }\n return schema;\n }\n\n return {\n engine: 'sqlite' as const,\n execute,\n getSchema\n };\n};\n\nexport default SqliteDialect;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SqliteDialect.cjs","sources":["../../src/dialect/SqliteDialect.ts"],"sourcesContent":["import sqlite from 'better-sqlite3';\nimport { ExecuterResult, XansqlDialectSchemaType, XansqlFileConfig } from '../core/types';\n\nconst SqliteDialect = (filePath: string = ':memory:', file?: XansqlFileConfig) => {\n const db = new sqlite(filePath)\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n // Detect query type\n if (sql.trim().startsWith('SELECT')) {\n results = db.prepare(sql).all();\n } else {\n const stmt = db.prepare(sql);\n const info = stmt.run();\n results = info;\n insertId = info.lastInsertRowid ? Number(info.lastInsertRowid) : 0;\n affectedRows = info.changes || 0;\n }\n return { results, insertId, affectedRows };\n };\n\n const getSchema = async () => {\n const tablesRes = db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';`).all();\n const tables = tablesRes.map((row: any) => row.name);\n const schema: XansqlDialectSchemaType = {};\n\n for (const table of tables) {\n const columnsRes = db.prepare(`PRAGMA table_info(${table});`).all();\n const indexesRes = db.prepare(`PRAGMA index_list(${table});`).all();\n\n schema[table] = columnsRes.map((col: any) => ({\n name: col.name,\n type: col.type,\n notnull: col.notnull,\n default_value: col.dflt_value,\n pk: col.pk,\n index: indexesRes.some((idx: any) => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n }),\n unique: indexesRes.some((idx: any) => idx.unique && (() => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n })()),\n }));\n }\n return schema;\n }\n\n return {\n engine: 'sqlite' as const,\n execute,\n getSchema,\n file\n };\n};\n\nexport default SqliteDialect;\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import { ExecuterResult, XansqlDialectSchemaType } from '../core/types';
2
- declare const SqliteDialect: (filePath?: string) => {
1
+ import { ExecuterResult, XansqlDialectSchemaType, XansqlFileConfig } from '../core/types';
2
+ declare const SqliteDialect: (filePath?: string, file?: XansqlFileConfig) => {
3
3
  engine: "sqlite";
4
4
  execute: (sql: string) => Promise<ExecuterResult>;
5
5
  getSchema: () => Promise<XansqlDialectSchemaType>;
6
+ file: XansqlFileConfig;
6
7
  };
7
8
  export default SqliteDialect;
@@ -1,6 +1,6 @@
1
1
  import sqlite from 'better-sqlite3';
2
2
 
3
- const SqliteDialect = (filePath = ':memory:') => {
3
+ const SqliteDialect = (filePath = ':memory:', file) => {
4
4
  const db = new sqlite(filePath);
5
5
  const execute = async (sql) => {
6
6
  let results;
@@ -47,7 +47,8 @@ const SqliteDialect = (filePath = ':memory:') => {
47
47
  return {
48
48
  engine: 'sqlite',
49
49
  execute,
50
- getSchema
50
+ getSchema,
51
+ file
51
52
  };
52
53
  };
53
54
 
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteDialect.mjs","sources":["../../src/dialect/SqliteDialect.ts"],"sourcesContent":["import sqlite from 'better-sqlite3';\nimport { ExecuterResult, XansqlDialectSchemaType } from '../core/types';\n\nconst SqliteDialect = (filePath: string = ':memory:') => {\n const db = new sqlite(filePath)\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n // Detect query type\n if (sql.trim().startsWith('SELECT')) {\n results = db.prepare(sql).all();\n } else {\n const stmt = db.prepare(sql);\n const info = stmt.run();\n results = info;\n insertId = info.lastInsertRowid ? Number(info.lastInsertRowid) : 0;\n affectedRows = info.changes || 0;\n }\n return { results, insertId, affectedRows };\n };\n\n const getSchema = async () => {\n const tablesRes = db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';`).all();\n const tables = tablesRes.map((row: any) => row.name);\n const schema: XansqlDialectSchemaType = {};\n\n for (const table of tables) {\n const columnsRes = db.prepare(`PRAGMA table_info(${table});`).all();\n const indexesRes = db.prepare(`PRAGMA index_list(${table});`).all();\n\n schema[table] = columnsRes.map((col: any) => ({\n name: col.name,\n type: col.type,\n notnull: col.notnull,\n default_value: col.dflt_value,\n pk: col.pk,\n index: indexesRes.some((idx: any) => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n }),\n unique: indexesRes.some((idx: any) => idx.unique && (() => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n })()),\n }));\n }\n return schema;\n }\n\n return {\n engine: 'sqlite' as const,\n execute,\n getSchema\n };\n};\n\nexport default SqliteDialect;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SqliteDialect.mjs","sources":["../../src/dialect/SqliteDialect.ts"],"sourcesContent":["import sqlite from 'better-sqlite3';\nimport { ExecuterResult, XansqlDialectSchemaType, XansqlFileConfig } from '../core/types';\n\nconst SqliteDialect = (filePath: string = ':memory:', file?: XansqlFileConfig) => {\n const db = new sqlite(filePath)\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n // Detect query type\n if (sql.trim().startsWith('SELECT')) {\n results = db.prepare(sql).all();\n } else {\n const stmt = db.prepare(sql);\n const info = stmt.run();\n results = info;\n insertId = info.lastInsertRowid ? Number(info.lastInsertRowid) : 0;\n affectedRows = info.changes || 0;\n }\n return { results, insertId, affectedRows };\n };\n\n const getSchema = async () => {\n const tablesRes = db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';`).all();\n const tables = tablesRes.map((row: any) => row.name);\n const schema: XansqlDialectSchemaType = {};\n\n for (const table of tables) {\n const columnsRes = db.prepare(`PRAGMA table_info(${table});`).all();\n const indexesRes = db.prepare(`PRAGMA index_list(${table});`).all();\n\n schema[table] = columnsRes.map((col: any) => ({\n name: col.name,\n type: col.type,\n notnull: col.notnull,\n default_value: col.dflt_value,\n pk: col.pk,\n index: indexesRes.some((idx: any) => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n }),\n unique: indexesRes.some((idx: any) => idx.unique && (() => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n })()),\n }));\n }\n return schema;\n }\n\n return {\n engine: 'sqlite' as const,\n execute,\n getSchema,\n file\n };\n};\n\nexport default SqliteDialect;\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"XansqlBridgeServer.cjs","sources":["../../../src/dialect/XansqlBridge/XansqlBridgeServer.ts"],"sourcesContent":["import { crypto, SecurequServer } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\nimport { makePath, makeSecret } from \"./base\";\nimport XansqlError from \"../../core/XansqlError\";\nimport Model from \"../../model\";\nimport { ListenOptions, XansqlBridgeAuthorizedInfo, XansqlBridgeServerConfig } from \"./types\";\n\n\n\nclass XansqlBridgeServer {\n readonly XANFETCH_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 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 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: xansql.models.get(params.table) as Model,\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: xansql.models.get(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: xansql.models.get(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: xansql.models.get(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: xansql.models.get(params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.get(await makePath('raw_schema', xansql), async (req: any) => {\n throw await xansql.dialect.getSchema(xansql);\n })\n\n this.server = server;\n return this.server;\n }\n\n async listen(url: string, options: ListenOptions) {\n\n const server = await this.initial()\n try {\n const res = await server.listen(url, options)\n return {\n status: res.status,\n value: res.value,\n }\n } catch (error: any) {\n\n const secret = await makeSecret(this.xansql)\n return {\n status: 500,\n value: await crypto.encryptBuffer({\n success: false,\n message: error.message || 'Internal Server Error'\n }, secret)\n }\n }\n }\n}\n\nexport default XansqlBridgeServer"],"names":["XansqlError","makeSecret","SecurequServer","makePath","crypto"],"mappings":"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"}
1
+ {"version":3,"file":"XansqlBridgeServer.cjs","sources":["../../../src/dialect/XansqlBridge/XansqlBridgeServer.ts"],"sourcesContent":["import { crypto, SecurequServer } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\nimport { makePath, makeSecret } from \"./base\";\nimport XansqlError from \"../../core/XansqlError\";\nimport Model from \"../../model\";\nimport { ListenOptions, XansqlBridgeAuthorizedInfo, XansqlBridgeServerConfig } from \"./types\";\n\nclass XansqlBridgeServer {\n readonly XANFETCH_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 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 clients: [\n {\n origin: `*`,\n secret\n }\n ]\n });\n\n server.get(await makePath('find', xansql), async (req: any) => {\n\n const params: any = req.searchParams\n await this.authorized({\n method: \"GET\",\n model: xansql.models.get(params.table) as Model,\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: xansql.models.get(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: xansql.models.get(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: xansql.models.get(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: xansql.models.get(params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.get(await makePath('raw_schema', xansql), async (req: any) => {\n throw await xansql.dialect.getSchema(xansql);\n })\n\n this.server = server;\n return this.server;\n }\n\n async listen(url: string, options: ListenOptions) {\n\n const server = await this.initial()\n try {\n const res = await server.listen(url, options)\n return {\n status: res.status,\n value: res.value,\n }\n } catch (error: any) {\n\n const secret = await makeSecret(this.xansql)\n return {\n status: 500,\n value: await crypto.encryptBuffer({\n success: false,\n message: error.message || 'Internal Server Error'\n }, secret)\n }\n }\n }\n}\n\nexport default XansqlBridgeServer"],"names":["XansqlError","makeSecret","SecurequServer","makePath","crypto"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"XansqlBridgeServer.mjs","sources":["../../../src/dialect/XansqlBridge/XansqlBridgeServer.ts"],"sourcesContent":["import { crypto, SecurequServer } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\nimport { makePath, makeSecret } from \"./base\";\nimport XansqlError from \"../../core/XansqlError\";\nimport Model from \"../../model\";\nimport { ListenOptions, XansqlBridgeAuthorizedInfo, XansqlBridgeServerConfig } from \"./types\";\n\n\n\nclass XansqlBridgeServer {\n readonly XANFETCH_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 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 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: xansql.models.get(params.table) as Model,\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: xansql.models.get(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: xansql.models.get(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: xansql.models.get(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: xansql.models.get(params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.get(await makePath('raw_schema', xansql), async (req: any) => {\n throw await xansql.dialect.getSchema(xansql);\n })\n\n this.server = server;\n return this.server;\n }\n\n async listen(url: string, options: ListenOptions) {\n\n const server = await this.initial()\n try {\n const res = await server.listen(url, options)\n return {\n status: res.status,\n value: res.value,\n }\n } catch (error: any) {\n\n const secret = await makeSecret(this.xansql)\n return {\n status: 500,\n value: await crypto.encryptBuffer({\n success: false,\n message: error.message || 'Internal Server Error'\n }, secret)\n }\n }\n }\n}\n\nexport default XansqlBridgeServer"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"XansqlBridgeServer.mjs","sources":["../../../src/dialect/XansqlBridge/XansqlBridgeServer.ts"],"sourcesContent":["import { crypto, SecurequServer } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\nimport { makePath, makeSecret } from \"./base\";\nimport XansqlError from \"../../core/XansqlError\";\nimport Model from \"../../model\";\nimport { ListenOptions, XansqlBridgeAuthorizedInfo, XansqlBridgeServerConfig } from \"./types\";\n\nclass XansqlBridgeServer {\n readonly XANFETCH_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 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 clients: [\n {\n origin: `*`,\n secret\n }\n ]\n });\n\n server.get(await makePath('find', xansql), async (req: any) => {\n\n const params: any = req.searchParams\n await this.authorized({\n method: \"GET\",\n model: xansql.models.get(params.table) as Model,\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: xansql.models.get(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: xansql.models.get(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: xansql.models.get(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: xansql.models.get(params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.get(await makePath('raw_schema', xansql), async (req: any) => {\n throw await xansql.dialect.getSchema(xansql);\n })\n\n this.server = server;\n return this.server;\n }\n\n async listen(url: string, options: ListenOptions) {\n\n const server = await this.initial()\n try {\n const res = await server.listen(url, options)\n return {\n status: res.status,\n value: res.value,\n }\n } catch (error: any) {\n\n const secret = await makeSecret(this.xansql)\n return {\n status: 500,\n value: await crypto.encryptBuffer({\n success: false,\n message: error.message || 'Internal Server Error'\n }, secret)\n }\n }\n }\n}\n\nexport default XansqlBridgeServer"],"names":[],"mappings":"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"}
@@ -7,17 +7,22 @@ const makeSecret = async (xansql) => {
7
7
  if (secretCache)
8
8
  return secretCache;
9
9
  const models = xansql.models;
10
- let uid = '';
10
+ let uid = [];
11
11
  for (let model of models.values()) {
12
- uid += model.table;
12
+ uid.push(model.table);
13
13
  for (let column in model.schema) {
14
- uid += column;
14
+ uid.push(column);
15
15
  const field = model.schema[column];
16
16
  const meta = field.meta || {};
17
- uid += JSON.stringify(meta);
17
+ const keys = Object.keys(meta);
18
+ if (keys.length) {
19
+ keys.sort();
20
+ uid.push(...keys);
21
+ }
18
22
  }
19
23
  }
20
- secretCache = await securequ.crypto.hash(uid);
24
+ uid = uid.sort();
25
+ secretCache = await securequ.crypto.hash(uid.join(""));
21
26
  return secretCache;
22
27
  };
23
28
  const makePath = async (path, xansql) => {
@@ -1 +1 @@
1
- {"version":3,"file":"base.cjs","sources":["../../../src/dialect/XansqlBridge/base.ts"],"sourcesContent":["import { crypto } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\n\nlet secretCache: string | null = null;\nexport const makeSecret = async (xansql: Xansql) => {\n if (secretCache) return secretCache;\n const models = xansql.models\n let uid = ''\n for (let model of models.values()) {\n uid += model.table\n for (let column in model.schema) {\n uid += column\n const field = model.schema[column]\n const meta = field.meta || {}\n uid += JSON.stringify(meta)\n }\n }\n\n secretCache = await crypto.hash(uid)\n return secretCache;\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/dialect/XansqlBridge/base.ts"],"sourcesContent":["import { crypto } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\n\nlet secretCache: string | null = null;\nexport const makeSecret = async (xansql: Xansql) => {\n if (secretCache) return secretCache;\n const models = xansql.models\n let uid = []\n for (let model of models.values()) {\n uid.push(model.table)\n for (let column in model.schema) {\n uid.push(column)\n const field = model.schema[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 uid = uid.sort()\n\n secretCache = await crypto.hash(uid.join(\"\"))\n return secretCache;\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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"}
@@ -5,17 +5,22 @@ const makeSecret = async (xansql) => {
5
5
  if (secretCache)
6
6
  return secretCache;
7
7
  const models = xansql.models;
8
- let uid = '';
8
+ let uid = [];
9
9
  for (let model of models.values()) {
10
- uid += model.table;
10
+ uid.push(model.table);
11
11
  for (let column in model.schema) {
12
- uid += column;
12
+ uid.push(column);
13
13
  const field = model.schema[column];
14
14
  const meta = field.meta || {};
15
- uid += JSON.stringify(meta);
15
+ const keys = Object.keys(meta);
16
+ if (keys.length) {
17
+ keys.sort();
18
+ uid.push(...keys);
19
+ }
16
20
  }
17
21
  }
18
- secretCache = await crypto.hash(uid);
22
+ uid = uid.sort();
23
+ secretCache = await crypto.hash(uid.join(""));
19
24
  return secretCache;
20
25
  };
21
26
  const makePath = async (path, xansql) => {
@@ -1 +1 @@
1
- {"version":3,"file":"base.mjs","sources":["../../../src/dialect/XansqlBridge/base.ts"],"sourcesContent":["import { crypto } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\n\nlet secretCache: string | null = null;\nexport const makeSecret = async (xansql: Xansql) => {\n if (secretCache) return secretCache;\n const models = xansql.models\n let uid = ''\n for (let model of models.values()) {\n uid += model.table\n for (let column in model.schema) {\n uid += column\n const field = model.schema[column]\n const meta = field.meta || {}\n uid += JSON.stringify(meta)\n }\n }\n\n secretCache = await crypto.hash(uid)\n return secretCache;\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.mjs","sources":["../../../src/dialect/XansqlBridge/base.ts"],"sourcesContent":["import { crypto } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\n\nlet secretCache: string | null = null;\nexport const makeSecret = async (xansql: Xansql) => {\n if (secretCache) return secretCache;\n const models = xansql.models\n let uid = []\n for (let model of models.values()) {\n uid.push(model.table)\n for (let column in model.schema) {\n uid.push(column)\n const field = model.schema[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 uid = uid.sort()\n\n secretCache = await crypto.hash(uid.join(\"\"))\n return secretCache;\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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"}
@@ -8,6 +8,7 @@ var xt_fields_Record = require('../../xt/fields/Record.cjs');
8
8
  var xt_fields_Tuple = require('../../xt/fields/Tuple.cjs');
9
9
  var utils_index = require('../../utils/index.cjs');
10
10
  var model_include_ValueFormatter = require('../include/ValueFormatter.cjs');
11
+ var xt_fields_File = require('../../xt/fields/File.cjs');
11
12
 
12
13
  class WhereArgs {
13
14
  constructor(model, where, meta) {
@@ -218,17 +219,13 @@ class WhereArgs {
218
219
  return `${generate.join(' AND ')}`;
219
220
  }
220
221
  checkIsAllowed(column) {
221
- const xanv = this.model.schema[column];
222
- if (core_classes_ForeignInfo.isArray(xanv))
222
+ const field = this.model.schema[column];
223
+ if (core_classes_ForeignInfo.isArray(field))
223
224
  return true;
224
- const isNotAllowed = xanv instanceof xt_fields_Array
225
- || xanv instanceof xt_fields_Object
226
- || xanv instanceof xt_fields_Record
227
- || xanv instanceof xt_fields_Tuple;
228
- // || xanv instanceof XqlFile
225
+ const isNotAllowed = utils_index.iof(field, xt_fields_Array, xt_fields_Object, xt_fields_Record, xt_fields_Tuple, xt_fields_File);
229
226
  if (isNotAllowed) {
230
227
  throw new core_XansqlError({
231
- message: `Field ${column} of type ${xanv.constructor.name} is not allowed in WHERE clause in table ${this.model.table}`,
228
+ message: `Field ${column} of type ${field.constructor.name} is not allowed in WHERE clause in table ${this.model.table}`,
232
229
  model: this.model.table,
233
230
  column
234
231
  });