xansql 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/core/type.d.ts CHANGED
@@ -3,6 +3,13 @@ import Model from '../model/index.js';
3
3
  import { FindArgsType, CreateArgsType, UpdateArgsType, DeleteArgsType, AggregateArgsType } from '../model/type.js';
4
4
  import { ExecuteMetaData } from './ExcuteMeta.js';
5
5
 
6
+ type XansqlConnectionOptions = {
7
+ host: string;
8
+ user: string;
9
+ password: string;
10
+ database: string;
11
+ port: number;
12
+ };
6
13
  type RowObject = {
7
14
  [key: string]: any;
8
15
  };
@@ -44,6 +51,16 @@ type XansqlOnFetchInfo = {
44
51
  };
45
52
  isAuthorized?: (info: XansqlFetchPermissionInfo) => Promise<boolean>;
46
53
  };
54
+ type XansqlOnFetchResponse = {
55
+ status: number;
56
+ body: any;
57
+ headers?: {
58
+ [key: string]: string;
59
+ };
60
+ cookies?: {
61
+ [key: string]: string;
62
+ };
63
+ };
47
64
  type XansqlSocket = {
48
65
  open: (socket: WebSocket) => Promise<void>;
49
66
  message: (socket: WebSocket, data: any) => Promise<void>;
@@ -57,6 +74,7 @@ type XansqlCache<Row = object> = {
57
74
  onUpdate: (model: Model, rows: Row[]) => Promise<void>;
58
75
  onDelete: (model: Model, rows: Row[]) => Promise<void>;
59
76
  };
77
+ type XansqlFileMeta = UploadFileMeta;
60
78
  type XansqlFetchUrl = string;
61
79
  type XansqlFetchConfig = {
62
80
  url: XansqlFetchUrl;
@@ -114,4 +132,4 @@ type XansqlModelOptions = {
114
132
  };
115
133
  };
116
134
 
117
- export type { ExecuterResult, ResultData, RowObject, XansqlCache, XansqlConfigType, XansqlConfigTypeRequired, XansqlDialect, XansqlDialectEngine, XansqlDialectSchemaColumn, XansqlDialectSchemaType, XansqlFetchConfig, XansqlFetchMethod, XansqlFetchPermissionInfo, XansqlFetchUrl, XansqlFileConfig, XansqlModelOptions, XansqlOnFetchInfo, XansqlSocket };
135
+ export type { ExecuterResult, ResultData, RowObject, XansqlCache, XansqlConfigType, XansqlConfigTypeRequired, XansqlConnectionOptions, XansqlDialect, XansqlDialectEngine, XansqlDialectSchemaColumn, XansqlDialectSchemaType, XansqlFetchConfig, XansqlFetchMethod, XansqlFetchPermissionInfo, XansqlFetchUrl, XansqlFileConfig, XansqlFileMeta, XansqlModelOptions, XansqlOnFetchInfo, XansqlOnFetchResponse, XansqlSocket };
@@ -0,0 +1,10 @@
1
+ import { PoolOptions } from 'mysql2';
2
+ import { ExecuterResult } from '../core/type.js';
3
+
4
+ declare const MysqlDialect: (config: string | PoolOptions) => {
5
+ engine: "mysql";
6
+ execute: (sql: string, params?: any[]) => Promise<ExecuterResult>;
7
+ getSchema: () => Promise<Record<string, any[]>>;
8
+ };
9
+
10
+ export { MysqlDialect as default };
@@ -0,0 +1,72 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});let mysql;
2
+ const MysqlDialect = (config) => {
3
+ let pool;
4
+ const getConnection = async () => {
5
+ if (!mysql)
6
+ mysql = await import('mysql2/promise');
7
+ if (!pool)
8
+ pool = mysql.createPool(typeof config === 'string' ? { uri: config } : config);
9
+ return pool.getConnection();
10
+ };
11
+ const execute = async (sql, params = []) => {
12
+ if (typeof window === 'undefined') {
13
+ const conn = await getConnection();
14
+ try {
15
+ const [rows] = await conn.query(sql, params);
16
+ return {
17
+ results: rows,
18
+ insertId: 'insertId' in rows ? rows.insertId || 0 : 0,
19
+ affectedRows: 'affectedRows' in rows ? rows.affectedRows || 0 : 0,
20
+ };
21
+ }
22
+ finally {
23
+ conn.release();
24
+ }
25
+ }
26
+ throw new Error('MysqlDialect can only be used in a Node.js environment.');
27
+ };
28
+ const getSchema = async () => {
29
+ const conn = await getConnection();
30
+ const [tablesRes] = await conn.query(`SELECT table_name
31
+ FROM information_schema.tables
32
+ WHERE table_schema = DATABASE();`);
33
+ const schema = {};
34
+ for (const row of tablesRes) {
35
+ const table = row.TABLE_NAME;
36
+ schema[table] = [];
37
+ // Get columns
38
+ const [columns] = await conn.query(`SELECT
39
+ COLUMN_NAME as name,
40
+ COLUMN_TYPE as type,
41
+ IS_NULLABLE,
42
+ COLUMN_DEFAULT,
43
+ COLUMN_KEY
44
+ FROM information_schema.columns
45
+ WHERE table_schema = DATABASE()
46
+ AND table_name = '${table}'`);
47
+ // Get indexes
48
+ const [indexes] = await conn.query(`SHOW INDEX FROM \`${table}\``);
49
+ for (const col of columns) {
50
+ const colName = col.name;
51
+ const isPrimary = col.COLUMN_KEY === "PRI";
52
+ const isIndexed = indexes.some(i => i.Column_name === colName);
53
+ const isUnique = indexes.some(i => i.Column_name === colName && i.Non_unique === 0);
54
+ schema[table].push({
55
+ name: colName,
56
+ type: col.type,
57
+ notnull: col.IS_NULLABLE === "NO",
58
+ default_value: col.COLUMN_DEFAULT,
59
+ pk: isPrimary,
60
+ index: isIndexed,
61
+ unique: isUnique
62
+ });
63
+ }
64
+ }
65
+ return schema;
66
+ };
67
+ return {
68
+ engine: 'mysql',
69
+ execute,
70
+ getSchema
71
+ };
72
+ };exports.default=MysqlDialect;//# sourceMappingURL=MysqlDialect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MysqlDialect.js","sources":["../../src/dialect/MysqlDialect.ts"],"sourcesContent":["import { PoolOptions } from 'mysql2';\nimport { ExecuterResult } from '../core/type';\n\nlet mysql: typeof import('mysql2/promise');\n\nconst MysqlDialect = (config: string | PoolOptions) => {\n let pool: import('mysql2/promise').Pool;\n\n const getConnection = async () => {\n if (!mysql) mysql = await import('mysql2/promise')\n if (!pool) pool = mysql.createPool(typeof config === 'string' ? { uri: config } : config);\n return pool.getConnection()\n }\n\n const execute = async (sql: string, params: any[] = []): Promise<ExecuterResult> => {\n if (typeof window === 'undefined') {\n const conn = await getConnection();\n try {\n const [rows] = await conn.query(sql, params);\n return {\n results: rows as any,\n insertId: 'insertId' in rows ? rows.insertId || 0 : 0,\n affectedRows: 'affectedRows' in rows ? rows.affectedRows || 0 : 0,\n };\n } finally {\n conn.release();\n }\n }\n throw new Error('MysqlDialect can only be used in a Node.js environment.');\n };\n\n const getSchema = async () => {\n const conn = await getConnection()\n const [tablesRes] = await conn.query<any[]>(\n `SELECT table_name \n FROM information_schema.tables \n WHERE table_schema = DATABASE();`\n );\n\n const schema: Record<string, any[]> = {};\n\n for (const row of tablesRes) {\n const table = row.TABLE_NAME;\n schema[table] = [];\n\n // Get 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 = '${table}'`\n );\n\n // Get 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 const isPrimary = col.COLUMN_KEY === \"PRI\";\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: isPrimary,\n index: isIndexed,\n unique: isUnique\n });\n }\n }\n\n return schema;\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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"}
@@ -0,0 +1,72 @@
1
+ let mysql;
2
+ const MysqlDialect = (config) => {
3
+ let pool;
4
+ const getConnection = async () => {
5
+ if (!mysql)
6
+ mysql = await import('mysql2/promise');
7
+ if (!pool)
8
+ pool = mysql.createPool(typeof config === 'string' ? { uri: config } : config);
9
+ return pool.getConnection();
10
+ };
11
+ const execute = async (sql, params = []) => {
12
+ if (typeof window === 'undefined') {
13
+ const conn = await getConnection();
14
+ try {
15
+ const [rows] = await conn.query(sql, params);
16
+ return {
17
+ results: rows,
18
+ insertId: 'insertId' in rows ? rows.insertId || 0 : 0,
19
+ affectedRows: 'affectedRows' in rows ? rows.affectedRows || 0 : 0,
20
+ };
21
+ }
22
+ finally {
23
+ conn.release();
24
+ }
25
+ }
26
+ throw new Error('MysqlDialect can only be used in a Node.js environment.');
27
+ };
28
+ const getSchema = async () => {
29
+ const conn = await getConnection();
30
+ const [tablesRes] = await conn.query(`SELECT table_name
31
+ FROM information_schema.tables
32
+ WHERE table_schema = DATABASE();`);
33
+ const schema = {};
34
+ for (const row of tablesRes) {
35
+ const table = row.TABLE_NAME;
36
+ schema[table] = [];
37
+ // Get columns
38
+ const [columns] = await conn.query(`SELECT
39
+ COLUMN_NAME as name,
40
+ COLUMN_TYPE as type,
41
+ IS_NULLABLE,
42
+ COLUMN_DEFAULT,
43
+ COLUMN_KEY
44
+ FROM information_schema.columns
45
+ WHERE table_schema = DATABASE()
46
+ AND table_name = '${table}'`);
47
+ // Get indexes
48
+ const [indexes] = await conn.query(`SHOW INDEX FROM \`${table}\``);
49
+ for (const col of columns) {
50
+ const colName = col.name;
51
+ const isPrimary = col.COLUMN_KEY === "PRI";
52
+ const isIndexed = indexes.some(i => i.Column_name === colName);
53
+ const isUnique = indexes.some(i => i.Column_name === colName && i.Non_unique === 0);
54
+ schema[table].push({
55
+ name: colName,
56
+ type: col.type,
57
+ notnull: col.IS_NULLABLE === "NO",
58
+ default_value: col.COLUMN_DEFAULT,
59
+ pk: isPrimary,
60
+ index: isIndexed,
61
+ unique: isUnique
62
+ });
63
+ }
64
+ }
65
+ return schema;
66
+ };
67
+ return {
68
+ engine: 'mysql',
69
+ execute,
70
+ getSchema
71
+ };
72
+ };export{MysqlDialect as default};//# sourceMappingURL=MysqlDialect.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MysqlDialect.mjs","sources":["../../src/dialect/MysqlDialect.ts"],"sourcesContent":["import { PoolOptions } from 'mysql2';\nimport { ExecuterResult } from '../core/type';\n\nlet mysql: typeof import('mysql2/promise');\n\nconst MysqlDialect = (config: string | PoolOptions) => {\n let pool: import('mysql2/promise').Pool;\n\n const getConnection = async () => {\n if (!mysql) mysql = await import('mysql2/promise')\n if (!pool) pool = mysql.createPool(typeof config === 'string' ? { uri: config } : config);\n return pool.getConnection()\n }\n\n const execute = async (sql: string, params: any[] = []): Promise<ExecuterResult> => {\n if (typeof window === 'undefined') {\n const conn = await getConnection();\n try {\n const [rows] = await conn.query(sql, params);\n return {\n results: rows as any,\n insertId: 'insertId' in rows ? rows.insertId || 0 : 0,\n affectedRows: 'affectedRows' in rows ? rows.affectedRows || 0 : 0,\n };\n } finally {\n conn.release();\n }\n }\n throw new Error('MysqlDialect can only be used in a Node.js environment.');\n };\n\n const getSchema = async () => {\n const conn = await getConnection()\n const [tablesRes] = await conn.query<any[]>(\n `SELECT table_name \n FROM information_schema.tables \n WHERE table_schema = DATABASE();`\n );\n\n const schema: Record<string, any[]> = {};\n\n for (const row of tablesRes) {\n const table = row.TABLE_NAME;\n schema[table] = [];\n\n // Get 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 = '${table}'`\n );\n\n // Get 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 const isPrimary = col.COLUMN_KEY === \"PRI\";\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: isPrimary,\n index: isIndexed,\n unique: isUnique\n });\n }\n }\n\n return schema;\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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"}
@@ -0,0 +1,10 @@
1
+ import { PoolConfig } from 'pg';
2
+ import { ExecuterResult } from '../core/type.js';
3
+
4
+ declare const PostgresDialect: (config: PoolConfig) => {
5
+ engine: "postgres";
6
+ execute: (sql: string) => Promise<ExecuterResult>;
7
+ getSchema: () => Promise<Record<string, any[]>>;
8
+ };
9
+
10
+ export { PostgresDialect as default };
@@ -0,0 +1,118 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});let postpres;
2
+ const PostgresDialect = (config) => {
3
+ let pool;
4
+ const getConnection = async () => {
5
+ if (!postpres)
6
+ postpres = await import('pg');
7
+ if (!pool)
8
+ pool = new postpres.Pool(config);
9
+ return pool.connect();
10
+ };
11
+ const execute = async (sql) => {
12
+ if (typeof window === 'undefined') {
13
+ const client = await getConnection();
14
+ try {
15
+ let results;
16
+ let insertId = 0;
17
+ let affectedRows = 0;
18
+ if (sql.startsWith('SELECT')) {
19
+ const res = await client.query(sql);
20
+ results = res.rows;
21
+ affectedRows = res.rowCount || 0;
22
+ }
23
+ else {
24
+ const res = await client.query(sql + ' RETURNING *'); // capture inserted rows
25
+ results = res.rows;
26
+ affectedRows = res.rowCount || 0;
27
+ if (results[0] && 'id' in results[0]) {
28
+ insertId = results[0].id; // assumes primary key column is `id`
29
+ }
30
+ }
31
+ return { results, insertId, affectedRows };
32
+ }
33
+ finally {
34
+ client.release();
35
+ }
36
+ }
37
+ throw new Error("PostgresDialect can only be used in a Node.js environment.");
38
+ };
39
+ const getSchema = async () => {
40
+ var _a;
41
+ // Get tables (only public schema)
42
+ const client = await getConnection();
43
+ const tablesRes = await client.query(`
44
+ SELECT table_name
45
+ FROM information_schema.tables
46
+ WHERE table_schema = 'public';
47
+ `);
48
+ const schema = {};
49
+ for (const row of tablesRes.rows) {
50
+ const table = row.table_name;
51
+ schema[table] = [];
52
+ // Columns
53
+ const columnsRes = await client.query(`
54
+ SELECT
55
+ column_name AS name,
56
+ data_type AS type,
57
+ is_nullable,
58
+ column_default,
59
+ udt_name
60
+ FROM information_schema.columns
61
+ WHERE table_schema = 'public'
62
+ AND table_name = '${table}';
63
+ `);
64
+ // Indexes
65
+ const indexesRes = await client.query(`
66
+ SELECT
67
+ i.relname AS index_name,
68
+ ix.indisunique AS unique,
69
+ a.attname AS column_name
70
+ FROM
71
+ pg_class t,
72
+ pg_class i,
73
+ pg_index ix,
74
+ pg_attribute a
75
+ WHERE
76
+ t.oid = ix.indrelid
77
+ AND i.oid = ix.indexrelid
78
+ AND a.attrelid = t.oid
79
+ AND a.attnum = ANY(ix.indkey)
80
+ AND t.relkind = 'r'
81
+ AND t.relname = '${table}';
82
+ `);
83
+ // Primary keys
84
+ const pkRes = await client.query(`
85
+ SELECT
86
+ kcu.column_name
87
+ FROM
88
+ information_schema.table_constraints tc
89
+ JOIN information_schema.key_column_usage kcu
90
+ ON tc.constraint_name = kcu.constraint_name
91
+ WHERE
92
+ tc.constraint_type = 'PRIMARY KEY'
93
+ AND tc.table_name = '${table}';
94
+ `);
95
+ const pkColumns = pkRes.rows.map(r => r.column_name);
96
+ for (const col of columnsRes.rows) {
97
+ const colName = col.name;
98
+ const isIndexed = indexesRes.rows.some(i => i.column_name === colName);
99
+ const isUnique = indexesRes.rows.some(i => i.column_name === colName && i.unique);
100
+ schema[table].push({
101
+ name: colName,
102
+ type: (_a = col.udt_name) !== null && _a !== void 0 ? _a : col.type,
103
+ notnull: col.is_nullable === "NO",
104
+ default_value: col.column_default,
105
+ pk: pkColumns.includes(colName),
106
+ index: isIndexed,
107
+ unique: isUnique
108
+ });
109
+ }
110
+ }
111
+ return schema;
112
+ };
113
+ return {
114
+ engine: 'postgres',
115
+ execute,
116
+ getSchema
117
+ };
118
+ };exports.default=PostgresDialect;//# sourceMappingURL=PostgresDialect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresDialect.js","sources":["../../src/dialect/PostgresDialect.ts"],"sourcesContent":["import { PoolConfig } from 'pg';\nimport { ExecuterResult } from '../core/type';\n\nlet postpres: typeof import('pg');\n\nconst PostgresDialect = (config: PoolConfig) => {\n let pool: import('pg').Pool;\n\n const getConnection = async () => {\n if (!postpres) postpres = await import('pg')\n if (!pool) pool = new postpres.Pool(config);\n return pool.connect()\n }\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n if (typeof window === 'undefined') {\n const client = await getConnection();\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 throw new Error(\"PostgresDialect can only be used in a Node.js environment.\");\n };\n\n\n\n const getSchema = async () => {\n // Get tables (only public schema)\n const client = await getConnection();\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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"}
@@ -0,0 +1,118 @@
1
+ let postpres;
2
+ const PostgresDialect = (config) => {
3
+ let pool;
4
+ const getConnection = async () => {
5
+ if (!postpres)
6
+ postpres = await import('pg');
7
+ if (!pool)
8
+ pool = new postpres.Pool(config);
9
+ return pool.connect();
10
+ };
11
+ const execute = async (sql) => {
12
+ if (typeof window === 'undefined') {
13
+ const client = await getConnection();
14
+ try {
15
+ let results;
16
+ let insertId = 0;
17
+ let affectedRows = 0;
18
+ if (sql.startsWith('SELECT')) {
19
+ const res = await client.query(sql);
20
+ results = res.rows;
21
+ affectedRows = res.rowCount || 0;
22
+ }
23
+ else {
24
+ const res = await client.query(sql + ' RETURNING *'); // capture inserted rows
25
+ results = res.rows;
26
+ affectedRows = res.rowCount || 0;
27
+ if (results[0] && 'id' in results[0]) {
28
+ insertId = results[0].id; // assumes primary key column is `id`
29
+ }
30
+ }
31
+ return { results, insertId, affectedRows };
32
+ }
33
+ finally {
34
+ client.release();
35
+ }
36
+ }
37
+ throw new Error("PostgresDialect can only be used in a Node.js environment.");
38
+ };
39
+ const getSchema = async () => {
40
+ var _a;
41
+ // Get tables (only public schema)
42
+ const client = await getConnection();
43
+ const tablesRes = await client.query(`
44
+ SELECT table_name
45
+ FROM information_schema.tables
46
+ WHERE table_schema = 'public';
47
+ `);
48
+ const schema = {};
49
+ for (const row of tablesRes.rows) {
50
+ const table = row.table_name;
51
+ schema[table] = [];
52
+ // Columns
53
+ const columnsRes = await client.query(`
54
+ SELECT
55
+ column_name AS name,
56
+ data_type AS type,
57
+ is_nullable,
58
+ column_default,
59
+ udt_name
60
+ FROM information_schema.columns
61
+ WHERE table_schema = 'public'
62
+ AND table_name = '${table}';
63
+ `);
64
+ // Indexes
65
+ const indexesRes = await client.query(`
66
+ SELECT
67
+ i.relname AS index_name,
68
+ ix.indisunique AS unique,
69
+ a.attname AS column_name
70
+ FROM
71
+ pg_class t,
72
+ pg_class i,
73
+ pg_index ix,
74
+ pg_attribute a
75
+ WHERE
76
+ t.oid = ix.indrelid
77
+ AND i.oid = ix.indexrelid
78
+ AND a.attrelid = t.oid
79
+ AND a.attnum = ANY(ix.indkey)
80
+ AND t.relkind = 'r'
81
+ AND t.relname = '${table}';
82
+ `);
83
+ // Primary keys
84
+ const pkRes = await client.query(`
85
+ SELECT
86
+ kcu.column_name
87
+ FROM
88
+ information_schema.table_constraints tc
89
+ JOIN information_schema.key_column_usage kcu
90
+ ON tc.constraint_name = kcu.constraint_name
91
+ WHERE
92
+ tc.constraint_type = 'PRIMARY KEY'
93
+ AND tc.table_name = '${table}';
94
+ `);
95
+ const pkColumns = pkRes.rows.map(r => r.column_name);
96
+ for (const col of columnsRes.rows) {
97
+ const colName = col.name;
98
+ const isIndexed = indexesRes.rows.some(i => i.column_name === colName);
99
+ const isUnique = indexesRes.rows.some(i => i.column_name === colName && i.unique);
100
+ schema[table].push({
101
+ name: colName,
102
+ type: (_a = col.udt_name) !== null && _a !== void 0 ? _a : col.type,
103
+ notnull: col.is_nullable === "NO",
104
+ default_value: col.column_default,
105
+ pk: pkColumns.includes(colName),
106
+ index: isIndexed,
107
+ unique: isUnique
108
+ });
109
+ }
110
+ }
111
+ return schema;
112
+ };
113
+ return {
114
+ engine: 'postgres',
115
+ execute,
116
+ getSchema
117
+ };
118
+ };export{PostgresDialect as default};//# sourceMappingURL=PostgresDialect.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresDialect.mjs","sources":["../../src/dialect/PostgresDialect.ts"],"sourcesContent":["import { PoolConfig } from 'pg';\nimport { ExecuterResult } from '../core/type';\n\nlet postpres: typeof import('pg');\n\nconst PostgresDialect = (config: PoolConfig) => {\n let pool: import('pg').Pool;\n\n const getConnection = async () => {\n if (!postpres) postpres = await import('pg')\n if (!pool) pool = new postpres.Pool(config);\n return pool.connect()\n }\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n if (typeof window === 'undefined') {\n const client = await getConnection();\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 throw new Error(\"PostgresDialect can only be used in a Node.js environment.\");\n };\n\n\n\n const getSchema = async () => {\n // Get tables (only public schema)\n const client = await getConnection();\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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"}
@@ -0,0 +1,9 @@
1
+ import { ExecuterResult, XansqlDialectSchemaType } from '../core/type.js';
2
+
3
+ declare const SqliteDialect: (filePath?: string) => {
4
+ engine: "sqlite";
5
+ execute: (sql: string) => Promise<ExecuterResult>;
6
+ getSchema: () => Promise<XansqlDialectSchemaType | undefined>;
7
+ };
8
+
9
+ export { SqliteDialect as default };
@@ -0,0 +1,65 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});let sqlite;
2
+ const SqliteDialect = (filePath = ':memory:') => {
3
+ let instance;
4
+ const getDb = async () => {
5
+ if (!sqlite)
6
+ sqlite = (await import('better-sqlite3')).default;
7
+ if (!instance)
8
+ instance = new sqlite(filePath);
9
+ return instance;
10
+ };
11
+ const execute = async (sql) => {
12
+ if (typeof window === "undefined") {
13
+ const db = await getDb();
14
+ let results;
15
+ let insertId = 0;
16
+ let affectedRows = 0;
17
+ // Detect query type
18
+ if (sql.startsWith('SELECT')) {
19
+ results = db.prepare(sql).all();
20
+ }
21
+ else {
22
+ const stmt = db.prepare(sql);
23
+ const info = stmt.run();
24
+ results = info;
25
+ insertId = info.lastInsertRowid ? Number(info.lastInsertRowid) : 0;
26
+ affectedRows = info.changes || 0;
27
+ }
28
+ return { results, insertId, affectedRows };
29
+ }
30
+ throw new Error('SqliteDialect can only be used in a Node.js environment.');
31
+ };
32
+ const getSchema = async () => {
33
+ if (typeof window === "undefined") {
34
+ const db = await getDb();
35
+ const tablesRes = db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';`).all();
36
+ const tables = tablesRes.map((row) => row.name);
37
+ const schema = {};
38
+ for (const table of tables) {
39
+ const columnsRes = db.prepare(`PRAGMA table_info(${table});`).all();
40
+ const indexesRes = db.prepare(`PRAGMA index_list(${table});`).all();
41
+ schema[table] = columnsRes.map((col) => ({
42
+ name: col.name,
43
+ type: col.type,
44
+ notnull: col.notnull,
45
+ default_value: col.dflt_value,
46
+ pk: col.pk,
47
+ index: indexesRes.some((idx) => {
48
+ const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();
49
+ return idxInfo.some((info) => info.name === col.name);
50
+ }),
51
+ unique: indexesRes.some((idx) => idx.unique && (() => {
52
+ const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();
53
+ return idxInfo.some((info) => info.name === col.name);
54
+ })()),
55
+ }));
56
+ }
57
+ return schema;
58
+ }
59
+ };
60
+ return {
61
+ engine: 'sqlite',
62
+ execute,
63
+ getSchema
64
+ };
65
+ };exports.default=SqliteDialect;//# sourceMappingURL=SqliteDialect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqliteDialect.js","sources":["../../src/dialect/SqliteDialect.ts"],"sourcesContent":["import Database from 'better-sqlite3';\nimport { ExecuterResult, XansqlDialectSchemaType } from '../core/type';\n\nlet sqlite: typeof import('better-sqlite3');\n\nconst SqliteDialect = (filePath: string = ':memory:') => {\n let instance: Database.Database;\n const getDb = async () => {\n if (!sqlite) sqlite = (await import('better-sqlite3')).default;\n if (!instance) instance = new sqlite(filePath);\n return instance;\n }\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n if (typeof window === \"undefined\") {\n const db = await getDb()\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n // Detect query type\n if (sql.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 throw new Error('SqliteDialect can only be used in a Node.js environment.');\n };\n\n const getSchema = async () => {\n if (typeof window === \"undefined\") {\n const db = await getDb()\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\n return {\n engine: 'sqlite' as const,\n execute,\n getSchema\n };\n};\n\nexport default SqliteDialect;\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ let sqlite;
2
+ const SqliteDialect = (filePath = ':memory:') => {
3
+ let instance;
4
+ const getDb = async () => {
5
+ if (!sqlite)
6
+ sqlite = (await import('better-sqlite3')).default;
7
+ if (!instance)
8
+ instance = new sqlite(filePath);
9
+ return instance;
10
+ };
11
+ const execute = async (sql) => {
12
+ if (typeof window === "undefined") {
13
+ const db = await getDb();
14
+ let results;
15
+ let insertId = 0;
16
+ let affectedRows = 0;
17
+ // Detect query type
18
+ if (sql.startsWith('SELECT')) {
19
+ results = db.prepare(sql).all();
20
+ }
21
+ else {
22
+ const stmt = db.prepare(sql);
23
+ const info = stmt.run();
24
+ results = info;
25
+ insertId = info.lastInsertRowid ? Number(info.lastInsertRowid) : 0;
26
+ affectedRows = info.changes || 0;
27
+ }
28
+ return { results, insertId, affectedRows };
29
+ }
30
+ throw new Error('SqliteDialect can only be used in a Node.js environment.');
31
+ };
32
+ const getSchema = async () => {
33
+ if (typeof window === "undefined") {
34
+ const db = await getDb();
35
+ const tablesRes = db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';`).all();
36
+ const tables = tablesRes.map((row) => row.name);
37
+ const schema = {};
38
+ for (const table of tables) {
39
+ const columnsRes = db.prepare(`PRAGMA table_info(${table});`).all();
40
+ const indexesRes = db.prepare(`PRAGMA index_list(${table});`).all();
41
+ schema[table] = columnsRes.map((col) => ({
42
+ name: col.name,
43
+ type: col.type,
44
+ notnull: col.notnull,
45
+ default_value: col.dflt_value,
46
+ pk: col.pk,
47
+ index: indexesRes.some((idx) => {
48
+ const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();
49
+ return idxInfo.some((info) => info.name === col.name);
50
+ }),
51
+ unique: indexesRes.some((idx) => idx.unique && (() => {
52
+ const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();
53
+ return idxInfo.some((info) => info.name === col.name);
54
+ })()),
55
+ }));
56
+ }
57
+ return schema;
58
+ }
59
+ };
60
+ return {
61
+ engine: 'sqlite',
62
+ execute,
63
+ getSchema
64
+ };
65
+ };export{SqliteDialect as default};//# sourceMappingURL=SqliteDialect.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqliteDialect.mjs","sources":["../../src/dialect/SqliteDialect.ts"],"sourcesContent":["import Database from 'better-sqlite3';\nimport { ExecuterResult, XansqlDialectSchemaType } from '../core/type';\n\nlet sqlite: typeof import('better-sqlite3');\n\nconst SqliteDialect = (filePath: string = ':memory:') => {\n let instance: Database.Database;\n const getDb = async () => {\n if (!sqlite) sqlite = (await import('better-sqlite3')).default;\n if (!instance) instance = new sqlite(filePath);\n return instance;\n }\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n if (typeof window === \"undefined\") {\n const db = await getDb()\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n // Detect query type\n if (sql.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 throw new Error('SqliteDialect can only be used in a Node.js environment.');\n };\n\n const getSchema = async () => {\n if (typeof window === \"undefined\") {\n const db = await getDb()\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\n return {\n engine: 'sqlite' as const,\n execute,\n getSchema\n };\n};\n\nexport default SqliteDialect;\n"],"names":[],"mappings":"AAGA,IAAI,MAAuC;AAE3C,MAAM,aAAa,GAAG,CAAC,QAAA,GAAmB,UAAU,KAAI;AACrD,IAAA,IAAI,QAA2B;AAC/B,IAAA,MAAM,KAAK,GAAG,YAAW;AACtB,QAAA,IAAI,CAAC,MAAM;YAAE,MAAM,GAAG,CAAC,MAAM,OAAO,gBAAgB,CAAC,EAAE,OAAO;AAC9D,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;AAC9C,QAAA,OAAO,QAAQ;AAClB,IAAA,CAAC;AAED,IAAA,MAAM,OAAO,GAAG,OAAO,GAAW,KAA6B;AAC5D,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AAChC,YAAA,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE;AACxB,YAAA,IAAI,OAAY;YAChB,IAAI,QAAQ,GAAG,CAAC;YAChB,IAAI,YAAY,GAAG,CAAC;;AAGpB,YAAA,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBAC3B,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;YAClC;iBAAO;gBACJ,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5B,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;gBACvB,OAAO,GAAG,IAAI;AACd,gBAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AAClE,gBAAA,YAAY,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC;YACnC;AACA,YAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE;QAC7C;AAEA,QAAA,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC;AAC9E,IAAA,CAAC;AAED,IAAA,MAAM,SAAS,GAAG,YAAW;AAC1B,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AAChC,YAAA,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE;YACxB,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,CAAA,+EAAA,CAAiF,CAAC,CAAC,GAAG,EAAE;AACrH,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,IAAI,CAAC;YACpD,MAAM,MAAM,GAA4B,EAAE;AAE1C,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AACzB,gBAAA,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,CAAA,kBAAA,EAAqB,KAAK,CAAA,EAAA,CAAI,CAAC,CAAC,GAAG,EAAE;AACnE,gBAAA,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,CAAA,kBAAA,EAAqB,KAAK,CAAA,EAAA,CAAI,CAAC,CAAC,GAAG,EAAE;AAEnE,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAQ,MAAM;oBAC3C,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,aAAa,EAAE,GAAG,CAAC,UAAU;oBAC7B,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAI;AACjC,wBAAA,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAA,kBAAA,EAAqB,GAAG,CAAC,IAAI,CAAA,EAAA,CAAI,CAAC,CAAC,GAAG,EAAE;AACnE,wBAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC;AAC7D,oBAAA,CAAC,CAAC;AACF,oBAAA,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,MAAK;AACvD,wBAAA,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAA,kBAAA,EAAqB,GAAG,CAAC,IAAI,CAAA,EAAA,CAAI,CAAC,CAAC,GAAG,EAAE;AACnE,wBAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC;oBAC7D,CAAC,GAAG,CAAC;AACP,iBAAA,CAAC,CAAC;YACN;AACA,YAAA,OAAO,MAAM;QAChB;AACH,IAAA,CAAC;IAED,OAAO;AACJ,QAAA,MAAM,EAAE,QAAiB;QACzB,OAAO;QACP;KACF;AACJ"}
@@ -0,0 +1,12 @@
1
+ import { XansqlFileConfig } from '../core/type.js';
2
+
3
+ type FileInDirectoryOptions = {
4
+ dir?: string;
5
+ maxFilesize?: number;
6
+ checkFileType?: boolean;
7
+ chunkSize?: number;
8
+ };
9
+ declare const FileInDirectory: (options: FileInDirectoryOptions) => XansqlFileConfig;
10
+
11
+ export { FileInDirectory as default };
12
+ export type { FileInDirectoryOptions };
@@ -0,0 +1,27 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});let fs;
2
+ let path;
3
+ const FileInDirectory = (options) => {
4
+ let dir = options.dir || 'uploads';
5
+ return {
6
+ maxFilesize: options.maxFilesize,
7
+ checkFileType: options.checkFileType,
8
+ chunkSize: options.chunkSize,
9
+ upload: async (chunk, filemeta) => {
10
+ fs = fs || await import('fs');
11
+ path = path || await import('path');
12
+ const uploadDir = path.join(process.cwd(), dir);
13
+ if (!fs.existsSync(uploadDir))
14
+ fs.mkdirSync(uploadDir);
15
+ const filePath = path.join(uploadDir, filemeta.fileId);
16
+ fs.appendFileSync(filePath, Buffer.from(chunk));
17
+ },
18
+ delete: async (fileId) => {
19
+ const fs = await import('fs');
20
+ const path = await import('path');
21
+ const filePath = path.join(process.cwd(), dir, fileId);
22
+ if (fs.existsSync(filePath)) {
23
+ fs.unlinkSync(filePath);
24
+ }
25
+ }
26
+ };
27
+ };exports.default=FileInDirectory;//# sourceMappingURL=FileInDirectory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileInDirectory.js","sources":["../../src/file/FileInDirectory.ts"],"sourcesContent":["import { XansqlFileConfig, XansqlFileMeta } from '../core/type';\n\nexport type FileInDirectoryOptions = {\n dir?: string;\n maxFilesize?: number;\n checkFileType?: boolean;\n chunkSize?: number;\n};\n\nlet fs: typeof import('fs');\nlet path: typeof import('path');\n\nconst FileInDirectory = (options: FileInDirectoryOptions): XansqlFileConfig => {\n let dir = options.dir || 'uploads';\n return {\n maxFilesize: options.maxFilesize,\n checkFileType: options.checkFileType,\n chunkSize: options.chunkSize,\n upload: async (chunk: Uint8Array, filemeta: XansqlFileMeta) => {\n fs = fs || await import('fs');\n path = path || await import('path');\n\n const uploadDir = path.join(process.cwd(), dir);\n if (!fs.existsSync(uploadDir)) fs.mkdirSync(uploadDir);\n\n const filePath = path.join(uploadDir, filemeta.fileId);\n\n fs.appendFileSync(filePath, Buffer.from(chunk));\n\n },\n delete: async (fileId: string) => {\n const fs = await import('fs');\n const path = await import('path');\n const filePath = path.join(process.cwd(), dir, fileId);\n if (fs.existsSync(filePath)) {\n fs.unlinkSync(filePath);\n }\n }\n };\n};\n\n\nexport default FileInDirectory;"],"names":[],"mappings":"sEASA,IAAI,EAAuB;AAC3B,IAAI,IAA2B;AAE/B,MAAM,eAAe,GAAG,CAAC,OAA+B,KAAsB;AAC3E,IAAA,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,SAAS;IAClC,OAAO;QACJ,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,QAAA,MAAM,EAAE,OAAO,KAAiB,EAAE,QAAwB,KAAI;YAC3D,EAAE,GAAG,EAAE,IAAI,MAAM,OAAO,IAAI,CAAC;YAC7B,IAAI,GAAG,IAAI,IAAI,MAAM,OAAO,MAAM,CAAC;AAEnC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC;AAC/C,YAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;AAAE,gBAAA,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC;AAEtD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC;AAEtD,YAAA,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAElD,CAAC;AACD,QAAA,MAAM,EAAE,OAAO,MAAc,KAAI;AAC9B,YAAA,MAAM,EAAE,GAAG,MAAM,OAAO,IAAI,CAAC;AAC7B,YAAA,MAAM,IAAI,GAAG,MAAM,OAAO,MAAM,CAAC;AACjC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC;AACtD,YAAA,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC1B,gBAAA,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC1B;QACH;KACF;AACJ"}
@@ -0,0 +1,27 @@
1
+ let fs;
2
+ let path;
3
+ const FileInDirectory = (options) => {
4
+ let dir = options.dir || 'uploads';
5
+ return {
6
+ maxFilesize: options.maxFilesize,
7
+ checkFileType: options.checkFileType,
8
+ chunkSize: options.chunkSize,
9
+ upload: async (chunk, filemeta) => {
10
+ fs = fs || await import('fs');
11
+ path = path || await import('path');
12
+ const uploadDir = path.join(process.cwd(), dir);
13
+ if (!fs.existsSync(uploadDir))
14
+ fs.mkdirSync(uploadDir);
15
+ const filePath = path.join(uploadDir, filemeta.fileId);
16
+ fs.appendFileSync(filePath, Buffer.from(chunk));
17
+ },
18
+ delete: async (fileId) => {
19
+ const fs = await import('fs');
20
+ const path = await import('path');
21
+ const filePath = path.join(process.cwd(), dir, fileId);
22
+ if (fs.existsSync(filePath)) {
23
+ fs.unlinkSync(filePath);
24
+ }
25
+ }
26
+ };
27
+ };export{FileInDirectory as default};//# sourceMappingURL=FileInDirectory.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileInDirectory.mjs","sources":["../../src/file/FileInDirectory.ts"],"sourcesContent":["import { XansqlFileConfig, XansqlFileMeta } from '../core/type';\n\nexport type FileInDirectoryOptions = {\n dir?: string;\n maxFilesize?: number;\n checkFileType?: boolean;\n chunkSize?: number;\n};\n\nlet fs: typeof import('fs');\nlet path: typeof import('path');\n\nconst FileInDirectory = (options: FileInDirectoryOptions): XansqlFileConfig => {\n let dir = options.dir || 'uploads';\n return {\n maxFilesize: options.maxFilesize,\n checkFileType: options.checkFileType,\n chunkSize: options.chunkSize,\n upload: async (chunk: Uint8Array, filemeta: XansqlFileMeta) => {\n fs = fs || await import('fs');\n path = path || await import('path');\n\n const uploadDir = path.join(process.cwd(), dir);\n if (!fs.existsSync(uploadDir)) fs.mkdirSync(uploadDir);\n\n const filePath = path.join(uploadDir, filemeta.fileId);\n\n fs.appendFileSync(filePath, Buffer.from(chunk));\n\n },\n delete: async (fileId: string) => {\n const fs = await import('fs');\n const path = await import('path');\n const filePath = path.join(process.cwd(), dir, fileId);\n if (fs.existsSync(filePath)) {\n fs.unlinkSync(filePath);\n }\n }\n };\n};\n\n\nexport default FileInDirectory;"],"names":[],"mappings":"AASA,IAAI,EAAuB;AAC3B,IAAI,IAA2B;AAE/B,MAAM,eAAe,GAAG,CAAC,OAA+B,KAAsB;AAC3E,IAAA,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,SAAS;IAClC,OAAO;QACJ,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,QAAA,MAAM,EAAE,OAAO,KAAiB,EAAE,QAAwB,KAAI;YAC3D,EAAE,GAAG,EAAE,IAAI,MAAM,OAAO,IAAI,CAAC;YAC7B,IAAI,GAAG,IAAI,IAAI,MAAM,OAAO,MAAM,CAAC;AAEnC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC;AAC/C,YAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;AAAE,gBAAA,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC;AAEtD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC;AAEtD,YAAA,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAElD,CAAC;AACD,QAAA,MAAM,EAAE,OAAO,MAAc,KAAI;AAC9B,YAAA,MAAM,EAAE,GAAG,MAAM,OAAO,IAAI,CAAC;AAC7B,YAAA,MAAM,IAAI,GAAG,MAAM,OAAO,MAAM,CAAC;AACjC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC;AACtD,YAAA,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC1B,gBAAA,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC1B;QACH;KACF;AACJ"}
package/index.d.ts CHANGED
@@ -1,3 +1,10 @@
1
1
  export { default as Xansql } from './core/Xansql.js';
2
2
  export { default as Model } from './model/index.js';
3
3
  export { default as xt } from './Types/index.js';
4
+ export { ExecuterResult, ResultData, RowObject, XansqlCache, XansqlConfigType, XansqlConfigTypeRequired, XansqlConnectionOptions, XansqlDialect, XansqlDialectEngine, XansqlDialectSchemaColumn, XansqlDialectSchemaType, XansqlFetchConfig, XansqlFetchMethod, XansqlFetchPermissionInfo, XansqlFetchUrl, XansqlFileConfig, XansqlFileMeta, XansqlModelOptions, XansqlOnFetchInfo, XansqlOnFetchResponse, XansqlSocket } from './core/type.js';
5
+ export { AggregateArgsType, AggregateFunctions, AggregateSelectArgsColumnType, AggregateSelectArgsType, CreateArgsType, DataArgsType, DataValue, DeleteArgsType, DistinctArgsType, FindArgsAggregate, FindArgsType, LimitArgsType, OrderByArgsType, SelectArgsType, UpdateArgsType, UpdateDataArgsType, UpdateDataRelationArgs, WhereArgsType, WhereArgsTypeValue, WhereSubCondition } from './model/type.js';
6
+ export { XansqlSchemaObject, XqlFields } from './Types/types.js';
7
+ export { default as MysqlDialect } from './dialect/MysqlDialect.js';
8
+ export { default as SqliteDialect } from './dialect/SqliteDialect.js';
9
+ export { default as PostgresDialect } from './dialect/PostgresDialect.js';
10
+ export { default as FileInDirectory } from './file/FileInDirectory.js';
package/index.js CHANGED
@@ -1 +1 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var Xansql=require('./core/Xansql.js'),index=require('./model/index.js'),index$1=require('./Types/index.js');exports.Xansql=Xansql.default;exports.Model=index.default;exports.xt=index$1.xt;//# sourceMappingURL=index.js.map
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var Xansql=require('./core/Xansql.js'),index=require('./model/index.js'),index$1=require('./Types/index.js'),MysqlDialect=require('./dialect/MysqlDialect.js'),SqliteDialect=require('./dialect/SqliteDialect.js'),PostgresDialect=require('./dialect/PostgresDialect.js'),FileInDirectory=require('./file/FileInDirectory.js');exports.Xansql=Xansql.default;exports.Model=index.default;exports.xt=index$1.xt;exports.MysqlDialect=MysqlDialect.default;exports.SqliteDialect=SqliteDialect.default;exports.PostgresDialect=PostgresDialect.default;exports.FileInDirectory=FileInDirectory.default;//# sourceMappingURL=index.js.map
package/index.mjs CHANGED
@@ -1 +1 @@
1
- export{default as Xansql}from'./core/Xansql.mjs';export{default as Model}from'./model/index.mjs';export{xt}from'./Types/index.mjs';//# sourceMappingURL=index.mjs.map
1
+ export{default as Xansql}from'./core/Xansql.mjs';export{default as Model}from'./model/index.mjs';export{xt}from'./Types/index.mjs';export{default as MysqlDialect}from'./dialect/MysqlDialect.mjs';export{default as SqliteDialect}from'./dialect/SqliteDialect.mjs';export{default as PostgresDialect}from'./dialect/PostgresDialect.mjs';export{default as FileInDirectory}from'./file/FileInDirectory.mjs';//# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xansql",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "main": "./index.js",
5
5
  "module": "./index.js",
6
6
  "types": "./index.d.ts",