@devbro/neko-sql 0.1.31 → 0.1.34

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 (52) hide show
  1. package/README.md +65 -5
  2. package/dist/{Blueprint-D3WHeqRS.d.mts → Blueprint-g4SmS1bH.d.mts} +6 -0
  3. package/dist/Blueprint.d.mts +1 -1
  4. package/dist/Connection.d.mts +1 -1
  5. package/dist/Expression.d.mts +1 -1
  6. package/dist/Migration.d.mts +1 -1
  7. package/dist/Query.d.mts +1 -1
  8. package/dist/Query.mjs +3 -1
  9. package/dist/Query.mjs.map +1 -1
  10. package/dist/QueryGrammar.d.mts +1 -1
  11. package/dist/QueryGrammar.mjs +8 -0
  12. package/dist/QueryGrammar.mjs.map +1 -1
  13. package/dist/Schema.d.mts +1 -1
  14. package/dist/SchemaGrammar.d.mts +1 -1
  15. package/dist/databases/index.d.mts +9 -1
  16. package/dist/databases/index.mjs +2 -0
  17. package/dist/databases/index.mjs.map +1 -1
  18. package/dist/databases/mysql/MysqlConnection.d.mts +41 -0
  19. package/dist/databases/mysql/MysqlConnection.mjs +208 -0
  20. package/dist/databases/mysql/MysqlConnection.mjs.map +1 -0
  21. package/dist/databases/mysql/MysqlQueryGrammar.d.mts +13 -0
  22. package/dist/databases/mysql/MysqlQueryGrammar.mjs +18 -0
  23. package/dist/databases/mysql/MysqlQueryGrammar.mjs.map +1 -0
  24. package/dist/databases/mysql/MysqlSchemaGrammar.d.mts +8 -0
  25. package/dist/databases/mysql/MysqlSchemaGrammar.mjs +58 -0
  26. package/dist/databases/mysql/MysqlSchemaGrammar.mjs.map +1 -0
  27. package/dist/databases/mysql/index.d.mts +6 -0
  28. package/dist/databases/mysql/index.mjs +4 -0
  29. package/dist/databases/mysql/index.mjs.map +1 -0
  30. package/dist/databases/postgresql/PostgresqlConnection.d.mts +2 -2
  31. package/dist/databases/postgresql/PostgresqlConnection.mjs +27 -11
  32. package/dist/databases/postgresql/PostgresqlConnection.mjs.map +1 -1
  33. package/dist/databases/postgresql/PostgresqlQueryGrammar.d.mts +1 -1
  34. package/dist/databases/postgresql/PostgresqlSchemaGrammar.d.mts +1 -1
  35. package/dist/databases/postgresql/index.d.mts +1 -1
  36. package/dist/databases/sqlite/SqliteConnection.d.mts +132 -0
  37. package/dist/databases/sqlite/SqliteConnection.mjs +242 -0
  38. package/dist/databases/sqlite/SqliteConnection.mjs.map +1 -0
  39. package/dist/databases/sqlite/SqliteQueryGrammar.d.mts +17 -0
  40. package/dist/databases/sqlite/SqliteQueryGrammar.mjs +40 -0
  41. package/dist/databases/sqlite/SqliteQueryGrammar.mjs.map +1 -0
  42. package/dist/databases/sqlite/SqliteSchemaGrammar.d.mts +8 -0
  43. package/dist/databases/sqlite/SqliteSchemaGrammar.mjs +58 -0
  44. package/dist/databases/sqlite/SqliteSchemaGrammar.mjs.map +1 -0
  45. package/dist/databases/sqlite/index.d.mts +6 -0
  46. package/dist/databases/sqlite/index.mjs +4 -0
  47. package/dist/databases/sqlite/index.mjs.map +1 -0
  48. package/dist/index.d.mts +9 -1
  49. package/dist/index.js +642 -14
  50. package/dist/index.js.map +1 -1
  51. package/dist/types.d.mts +1 -1
  52. package/package.json +4 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/databases/sqlite/SqliteConnection.mts"],"sourcesContent":["import { connection_events, Connection as ConnectionAbs } from '../../Connection.mjs';\nimport Database from 'better-sqlite3';\nimport { CompiledSql } from '../../types.mjs';\nimport { Query } from '../../Query.mjs';\nimport { SqliteQueryGrammar } from './SqliteQueryGrammar.mjs';\nimport { Schema } from '../../Schema.mjs';\nimport { SqliteSchemaGrammar } from './SqliteSchemaGrammar.mjs';\nimport { EventManager } from '@devbro/neko-helper';\nimport * as fs from 'fs';\n\n/**\n * Configuration options for SQLite database connection\n */\nexport interface SqliteConfig {\n /** Path to the SQLite database file */\n filename: string;\n /** Open the database in read-only mode (default: false) */\n readonly?: boolean;\n /** Throw an error if the database file doesn't exist (default: false) */\n fileMustExist?: boolean;\n /** Timeout in milliseconds for database operations (default: 5000) */\n timeout?: number;\n /** Optional verbose logging function for debugging SQL statements */\n verbose?: (message?: unknown, ...additionalArgs: unknown[]) => void;\n}\n\n/**\n * SQLite database connection implementation\n *\n * Provides a connection to SQLite databases using better-sqlite3.\n * Supports transactions, queries, schema operations, and database management.\n */\nexport class SqliteConnection extends ConnectionAbs {\n private eventManager = new EventManager();\n\n on(event: connection_events, listener: (...args: any[]) => void): this {\n this.eventManager.on(event, listener);\n return this;\n }\n off(event: connection_events, listener: (...args: any[]) => void): this {\n this.eventManager.off(event, listener);\n return this;\n }\n emit(event: connection_events, ...args: any[]): Promise<boolean> {\n return this.eventManager.emit(event, ...args);\n }\n\n connection: Database.Database | undefined;\n private config: SqliteConfig;\n\n /** Default configuration values for SQLite connections */\n static defaults: Partial<SqliteConfig> = {\n readonly: false,\n fileMustExist: false,\n timeout: 5000,\n };\n\n constructor(params: SqliteConfig) {\n super();\n this.config = { ...SqliteConnection.defaults, ...params } as SqliteConfig;\n }\n\n /**\n * Establishes a connection to the SQLite database\n * Creates or opens the database file specified in the configuration\n */\n async connect(): Promise<boolean> {\n this.eventManager.emit('connect').catch(() => {});\n this.connection = new Database(this.config.filename, {\n readonly: this.config.readonly,\n fileMustExist: this.config.fileMustExist,\n timeout: this.config.timeout,\n verbose: this.config.verbose,\n });\n return true;\n }\n\n /**\n * Executes a SQL query against the database\n * Automatically detects SELECT queries and queries with RETURNING clauses\n *\n * @param sql - Compiled SQL or raw SQL string to execute\n * @returns Query results (rows for SELECT, run info for INSERT/UPDATE/DELETE)\n */\n async runQuery(sql: CompiledSql | string): Promise<any> {\n if (typeof sql === 'string') {\n sql = { sql: sql, bindings: [], parts: [sql] };\n }\n\n this.eventManager.emit('query', { sql: sql.sql, bindings: sql.bindings }).catch(() => {});\n\n if (!this.isConnected()) {\n await this.connect();\n }\n\n try {\n const stmt = this.connection!.prepare(sql.sql);\n\n // Check if the query is a SELECT or contains RETURNING clause\n const sqlUpper = sql.sql.trim().toUpperCase();\n if (sqlUpper.startsWith('SELECT') || sqlUpper.includes('RETURNING')) {\n return stmt.all(...sql.bindings);\n } else {\n const result = stmt.run(...sql.bindings);\n return result;\n }\n } catch (error) {\n this.eventManager.emit('error', error).catch(() => {});\n throw error;\n }\n }\n\n /**\n * Executes a query and returns an iterator for streaming results\n * Useful for large result sets to avoid loading all rows into memory\n *\n * @param sql - Compiled SQL to execute\n * @returns Iterator over query results\n */\n async runCursor(sql: CompiledSql): Promise<any> {\n // SQLite doesn't have native cursor support, return iterator\n if (!this.isConnected()) {\n await this.connect();\n }\n const stmt = this.connection!.prepare(sql.sql);\n return stmt.iterate(...sql.bindings);\n }\n\n /**\n * Closes the database connection\n */\n async disconnect(): Promise<boolean> {\n if (this.connection === undefined) {\n return true;\n }\n this.connection.close();\n this.connection = undefined;\n this.eventManager.emit('disconnect').catch(() => {});\n return true;\n }\n\n /**\n * Creates a new query builder instance for this connection\n */\n getQuery(): Query {\n return new Query(this, new SqliteQueryGrammar());\n }\n\n /**\n * Creates a new schema builder instance for this connection\n */\n getSchema(): Schema {\n return new Schema(this, new SqliteSchemaGrammar());\n }\n\n /**\n * Gets the query grammar for building SQL statements\n */\n getQueryGrammar(): SqliteQueryGrammar {\n return new SqliteQueryGrammar();\n }\n\n /**\n * Gets the schema grammar for building DDL statements\n */\n getSchemaGrammar(): SqliteSchemaGrammar {\n return new SqliteSchemaGrammar();\n }\n\n /**\n * Starts a new database transaction\n */\n async beginTransaction(): Promise<void> {\n await this.runQuery({\n sql: 'BEGIN TRANSACTION',\n bindings: [],\n parts: ['BEGIN', 'TRANSACTION'],\n });\n }\n\n /**\n * Commits the current transaction\n */\n async commit(): Promise<void> {\n await this.runQuery({ sql: 'COMMIT', bindings: [], parts: ['COMMIT'] });\n }\n\n /**\n * Rolls back the current transaction\n */\n async rollback(): Promise<void> {\n await this.runQuery({ sql: 'ROLLBACK', bindings: [], parts: ['ROLLBACK'] });\n }\n\n /**\n * Checks if the database connection is active\n */\n isConnected(): boolean {\n return this.connection !== undefined && this.connection.open;\n }\n\n /**\n * Validates and escapes a SQLite identifier (database name, table name, etc.)\n * Uses a whitelist approach to ensure only safe characters are allowed\n *\n * @param name - The identifier to validate and escape\n * @returns The escaped identifier, quoted if it's a reserved keyword\n * @throws Error if the identifier contains invalid characters\n */\n private validateAndEscapeIdentifier(name: string): string {\n // SQLite identifiers can contain: letters, digits, underscores\n // They must start with a letter or underscore\n const validIdentifierPattern = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n\n if (!validIdentifierPattern.test(name)) {\n throw new Error(\n `Invalid identifier: \"${name}\". Identifiers must start with a letter or underscore and contain only letters, digits, and underscores.`\n );\n }\n\n // SQLite reserved keywords that should be quoted\n const reservedKeywords = new Set([\n 'table',\n 'database',\n 'order',\n 'group',\n 'select',\n 'insert',\n 'update',\n 'delete',\n 'index',\n 'from',\n 'where',\n ]);\n\n // Quote the identifier if it's a reserved keyword\n if (reservedKeywords.has(name.toLowerCase())) {\n // Escape any double quotes in the name\n const escapedName = name.replace(/\"/g, '\"\"');\n return `\"${escapedName}\"`;\n }\n\n return name;\n }\n\n /**\n * Creates a new SQLite database file\n *\n * @param name - Name or path of the database file to create\n */\n async createDatabase(name: string): Promise<void> {\n // SQLite databases are files, creating a database means creating a new connection\n const dbPath = name.endsWith('.db') ? name : `${name}.db`;\n const tempDb = new Database(dbPath);\n tempDb.close();\n }\n\n /**\n * Deletes a SQLite database file\n *\n * @param name - Name or path of the database file to delete\n */\n async dropDatabase(name: string): Promise<void> {\n // SQLite databases are files, dropping means deleting the file\n const dbPath = name.endsWith('.db') ? name : `${name}.db`;\n if (fs.existsSync(dbPath)) {\n fs.unlinkSync(dbPath);\n }\n }\n\n /**\n * Lists available databases\n * For SQLite, this returns the current database filename\n *\n * @returns Array containing the current database filename\n */\n async listDatabases(): Promise<string[]> {\n // SQLite doesn't have a concept of multiple databases in the same connection\n // This would require listing files in a directory\n return [this.config.filename];\n }\n\n /**\n * Checks if a database file exists\n *\n * @param name - Name or path of the database file to check\n * @returns True if the database file exists, false otherwise\n */\n async existsDatabase(name: string): Promise<boolean> {\n const dbPath = name.endsWith('.db') ? name : `${name}.db`;\n return fs.existsSync(dbPath);\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,17 @@
1
+ import { e as QueryGrammar, d as Query, m as CompiledSql, P as Parameter } from '../../Blueprint-g4SmS1bH.mjs';
2
+ import '@devbro/neko-helper';
3
+
4
+ declare class SqliteQueryGrammar extends QueryGrammar {
5
+ constructor();
6
+ toSql(query: Query): CompiledSql;
7
+ compileInsert(query: Query, data: Record<string, any>): CompiledSql;
8
+ compileInsertGetId(query: Query, data: Record<string, any>, options?: {
9
+ primaryKey: string[];
10
+ }): CompiledSql;
11
+ compileUpdate(query: Query, data: Record<string, any>): CompiledSql;
12
+ compileDelete(query: Query): CompiledSql;
13
+ compileUpsert(query: Query, data: Record<string, Parameter>, conflictFields: string[], updateFields: string[]): CompiledSql;
14
+ compileCount(query: Query): CompiledSql;
15
+ }
16
+
17
+ export { SqliteQueryGrammar };
@@ -0,0 +1,40 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { QueryGrammar } from "../../QueryGrammar.mjs";
4
+ import { Arr } from "@devbro/neko-helper";
5
+ class SqliteQueryGrammar extends QueryGrammar {
6
+ static {
7
+ __name(this, "SqliteQueryGrammar");
8
+ }
9
+ constructor() {
10
+ super();
11
+ }
12
+ toSql(query) {
13
+ return super.toSql(query);
14
+ }
15
+ compileInsert(query, data) {
16
+ return super.compileInsert(query, data);
17
+ }
18
+ compileInsertGetId(query, data, options = { primaryKey: ["id"] }) {
19
+ const rc = super.compileInsert(query, data);
20
+ rc.sql += ` RETURNING ${options.primaryKey.join(", ")}`;
21
+ rc.parts = rc.parts.concat(["RETURNING", ...Arr.intersperse(options.primaryKey, ",")]);
22
+ return rc;
23
+ }
24
+ compileUpdate(query, data) {
25
+ return super.compileUpdate(query, data);
26
+ }
27
+ compileDelete(query) {
28
+ return super.compileDelete(query);
29
+ }
30
+ compileUpsert(query, data, conflictFields, updateFields) {
31
+ return super.compileUpsert(query, data, conflictFields, updateFields);
32
+ }
33
+ compileCount(query) {
34
+ return super.compileCount(query);
35
+ }
36
+ }
37
+ export {
38
+ SqliteQueryGrammar
39
+ };
40
+ //# sourceMappingURL=SqliteQueryGrammar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/databases/sqlite/SqliteQueryGrammar.mts"],"sourcesContent":["import { Query } from '../../Query.mjs';\nimport { QueryGrammar } from '../../QueryGrammar.mjs';\nimport { CompiledSql, Parameter } from '../../types.mjs';\nimport { Arr } from '@devbro/neko-helper';\n\nexport class SqliteQueryGrammar extends QueryGrammar {\n constructor() {\n super();\n }\n\n toSql(query: Query): CompiledSql {\n return super.toSql(query);\n }\n\n compileInsert(query: Query, data: Record<string, any>): CompiledSql {\n return super.compileInsert(query, data);\n }\n\n compileInsertGetId(\n query: Query,\n data: Record<string, any>,\n options: { primaryKey: string[] } = { primaryKey: ['id'] }\n ): CompiledSql {\n const rc = super.compileInsert(query, data);\n rc.sql += ` RETURNING ${options.primaryKey.join(', ')}`;\n rc.parts = rc.parts.concat(['RETURNING', ...Arr.intersperse(options.primaryKey, ',')]);\n return rc;\n }\n\n compileUpdate(query: Query, data: Record<string, any>): CompiledSql {\n return super.compileUpdate(query, data);\n }\n\n compileDelete(query: Query): CompiledSql {\n return super.compileDelete(query);\n }\n\n compileUpsert(\n query: Query,\n data: Record<string, Parameter>,\n conflictFields: string[],\n updateFields: string[]\n ): CompiledSql {\n return super.compileUpsert(query, data, conflictFields, updateFields);\n }\n\n compileCount(query: Query): CompiledSql {\n return super.compileCount(query);\n }\n}\n"],"mappings":";;AACA,SAAS,oBAAoB;AAE7B,SAAS,WAAW;AAEb,MAAM,2BAA2B,aAAa;AAAA,EALrD,OAKqD;AAAA;AAAA;AAAA,EACnD,cAAc;AACZ,UAAM;AAAA,EACR;AAAA,EAEA,MAAM,OAA2B;AAC/B,WAAO,MAAM,MAAM,KAAK;AAAA,EAC1B;AAAA,EAEA,cAAc,OAAc,MAAwC;AAClE,WAAO,MAAM,cAAc,OAAO,IAAI;AAAA,EACxC;AAAA,EAEA,mBACE,OACA,MACA,UAAoC,EAAE,YAAY,CAAC,IAAI,EAAE,GAC5C;AACb,UAAM,KAAK,MAAM,cAAc,OAAO,IAAI;AAC1C,OAAG,OAAO,cAAc,QAAQ,WAAW,KAAK,IAAI,CAAC;AACrD,OAAG,QAAQ,GAAG,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,YAAY,QAAQ,YAAY,GAAG,CAAC,CAAC;AACrF,WAAO;AAAA,EACT;AAAA,EAEA,cAAc,OAAc,MAAwC;AAClE,WAAO,MAAM,cAAc,OAAO,IAAI;AAAA,EACxC;AAAA,EAEA,cAAc,OAA2B;AACvC,WAAO,MAAM,cAAc,KAAK;AAAA,EAClC;AAAA,EAEA,cACE,OACA,MACA,gBACA,cACa;AACb,WAAO,MAAM,cAAc,OAAO,MAAM,gBAAgB,YAAY;AAAA,EACtE;AAAA,EAEA,aAAa,OAA2B;AACtC,WAAO,MAAM,aAAa,KAAK;AAAA,EACjC;AACF;","names":[]}
@@ -0,0 +1,8 @@
1
+ import { f as SchemaGrammar, a as Column } from '../../Blueprint-g4SmS1bH.mjs';
2
+ import '@devbro/neko-helper';
3
+
4
+ declare class SqliteSchemaGrammar extends SchemaGrammar {
5
+ compileColumn(column: Column): string;
6
+ }
7
+
8
+ export { SqliteSchemaGrammar };
@@ -0,0 +1,58 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { SchemaGrammar } from "../../SchemaGrammar.mjs";
4
+ class SqliteSchemaGrammar extends SchemaGrammar {
5
+ static {
6
+ __name(this, "SqliteSchemaGrammar");
7
+ }
8
+ compileColumn(column) {
9
+ const rc = [`${column.columnName}`];
10
+ if (column.properties.type === "string") {
11
+ rc.push("varchar(" + column.properties.length + ")");
12
+ } else if (column.properties.type === "char") {
13
+ rc.push("char");
14
+ } else if (column.properties.type === "boolean") {
15
+ rc.push("boolean");
16
+ } else if (column.properties.type === "integer") {
17
+ rc.push("integer");
18
+ } else if (column.properties.type === "text") {
19
+ rc.push("text");
20
+ } else if (column.properties.type === "timestamp") {
21
+ rc.push("timestamp");
22
+ } else if (column.properties.type === "timestampz") {
23
+ rc.push("timestamp with time zone");
24
+ } else if (column.properties.type === "serial") {
25
+ rc.push("INTEGER");
26
+ } else if (column.properties.type === "float") {
27
+ rc.push("float");
28
+ } else if (column.properties.type === "double") {
29
+ rc.push("double precision");
30
+ } else if (column.properties.type === "date") {
31
+ rc.push("date");
32
+ } else if (column.properties.type === "json") {
33
+ rc.push("json");
34
+ } else if (column.properties.type === "jsonb") {
35
+ rc.push("jsonb");
36
+ } else if (column.properties.type === "raw") {
37
+ return column.columnName;
38
+ } else {
39
+ throw new Error("Unknown column type: " + column.properties.type);
40
+ }
41
+ if (column.properties.nullable) {
42
+ rc.push("null");
43
+ } else {
44
+ rc.push("not null");
45
+ }
46
+ if (column.properties.unique) {
47
+ rc.push("unique");
48
+ }
49
+ if (column.properties.default !== null) {
50
+ rc.push("default " + this.escape(column.properties.default));
51
+ }
52
+ return rc.join(" ");
53
+ }
54
+ }
55
+ export {
56
+ SqliteSchemaGrammar
57
+ };
58
+ //# sourceMappingURL=SqliteSchemaGrammar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/databases/sqlite/SqliteSchemaGrammar.mts"],"sourcesContent":["import { Column } from '../../Blueprint.mjs';\nimport { SchemaGrammar } from '../../SchemaGrammar.mjs';\n\nexport class SqliteSchemaGrammar extends SchemaGrammar {\n\n compileColumn(column: Column): string {\n const rc = [`${column.columnName}`];\n \n if (column.properties.type === 'string') {\n rc.push('varchar(' + column.properties.length + ')');\n } else if (column.properties.type === 'char') {\n rc.push('char');\n } else if (column.properties.type === 'boolean') {\n rc.push('boolean');\n } else if (column.properties.type === 'integer') {\n rc.push('integer');\n } else if (column.properties.type === 'text') {\n rc.push('text');\n } else if (column.properties.type === 'timestamp') {\n rc.push('timestamp');\n } else if (column.properties.type === 'timestampz') {\n rc.push('timestamp with time zone');\n } else if (column.properties.type === 'serial') {\n rc.push('INTEGER');\n } else if (column.properties.type === 'float') {\n rc.push('float');\n } else if (column.properties.type === 'double') {\n rc.push('double precision');\n } else if (column.properties.type === 'date') {\n rc.push('date');\n } else if (column.properties.type === 'json') {\n rc.push('json');\n } else if (column.properties.type === 'jsonb') {\n rc.push('jsonb');\n } else if (column.properties.type === 'raw') {\n return column.columnName;\n } else {\n throw new Error('Unknown column type: ' + column.properties.type);\n }\n\n if (column.properties.nullable) {\n rc.push('null');\n } else {\n rc.push('not null');\n }\n \n if (column.properties.unique) {\n rc.push('unique');\n }\n \n if (column.properties.default !== null) {\n rc.push('default ' + this.escape(column.properties.default));\n }\n \n return rc.join(' ');\n }\n}\n"],"mappings":";;AACA,SAAS,qBAAqB;AAEvB,MAAM,4BAA4B,cAAc;AAAA,EAHvD,OAGuD;AAAA;AAAA;AAAA,EAEnD,cAAc,QAAwB;AAClC,UAAM,KAAK,CAAC,GAAG,OAAO,UAAU,EAAE;AAElC,QAAI,OAAO,WAAW,SAAS,UAAU;AACvC,SAAG,KAAK,aAAa,OAAO,WAAW,SAAS,GAAG;AAAA,IACrD,WAAW,OAAO,WAAW,SAAS,QAAQ;AAC5C,SAAG,KAAK,MAAM;AAAA,IAChB,WAAW,OAAO,WAAW,SAAS,WAAW;AAC/C,SAAG,KAAK,SAAS;AAAA,IACnB,WAAW,OAAO,WAAW,SAAS,WAAW;AAC/C,SAAG,KAAK,SAAS;AAAA,IACnB,WAAW,OAAO,WAAW,SAAS,QAAQ;AAC5C,SAAG,KAAK,MAAM;AAAA,IAChB,WAAW,OAAO,WAAW,SAAS,aAAa;AACjD,SAAG,KAAK,WAAW;AAAA,IACrB,WAAW,OAAO,WAAW,SAAS,cAAc;AAClD,SAAG,KAAK,0BAA0B;AAAA,IACpC,WAAW,OAAO,WAAW,SAAS,UAAU;AAC9C,SAAG,KAAK,SAAS;AAAA,IACnB,WAAW,OAAO,WAAW,SAAS,SAAS;AAC7C,SAAG,KAAK,OAAO;AAAA,IACjB,WAAW,OAAO,WAAW,SAAS,UAAU;AAC9C,SAAG,KAAK,kBAAkB;AAAA,IAC5B,WAAW,OAAO,WAAW,SAAS,QAAQ;AAC5C,SAAG,KAAK,MAAM;AAAA,IAChB,WAAW,OAAO,WAAW,SAAS,QAAQ;AAC5C,SAAG,KAAK,MAAM;AAAA,IAChB,WAAW,OAAO,WAAW,SAAS,SAAS;AAC7C,SAAG,KAAK,OAAO;AAAA,IACjB,WAAW,OAAO,WAAW,SAAS,OAAO;AAC3C,aAAO,OAAO;AAAA,IAChB,OAAO;AACL,YAAM,IAAI,MAAM,0BAA0B,OAAO,WAAW,IAAI;AAAA,IAClE;AAEA,QAAI,OAAO,WAAW,UAAU;AAC9B,SAAG,KAAK,MAAM;AAAA,IAChB,OAAO;AACL,SAAG,KAAK,UAAU;AAAA,IACpB;AAEA,QAAI,OAAO,WAAW,QAAQ;AAC5B,SAAG,KAAK,QAAQ;AAAA,IAClB;AAEA,QAAI,OAAO,WAAW,YAAY,MAAM;AACtC,SAAG,KAAK,aAAa,KAAK,OAAO,OAAO,WAAW,OAAO,CAAC;AAAA,IAC7D;AAEA,WAAO,GAAG,KAAK,GAAG;AAAA,EACpB;AACN;","names":[]}
@@ -0,0 +1,6 @@
1
+ export { SqliteConfig, SqliteConnection } from './SqliteConnection.mjs';
2
+ export { SqliteQueryGrammar } from './SqliteQueryGrammar.mjs';
3
+ export { SqliteSchemaGrammar } from './SqliteSchemaGrammar.mjs';
4
+ import '../../Blueprint-g4SmS1bH.mjs';
5
+ import '@devbro/neko-helper';
6
+ import 'better-sqlite3';
@@ -0,0 +1,4 @@
1
+ export * from "./SqliteConnection.mjs";
2
+ export * from "./SqliteQueryGrammar.mjs";
3
+ export * from "./SqliteSchemaGrammar.mjs";
4
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/databases/sqlite/index.mts"],"sourcesContent":["export * from './SqliteConnection.mjs';\nexport * from './SqliteQueryGrammar.mjs';\nexport * from './SqliteSchemaGrammar.mjs';\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
package/dist/index.d.mts CHANGED
@@ -1,7 +1,15 @@
1
1
  export { PostgresqlConnection } from './databases/postgresql/PostgresqlConnection.mjs';
2
2
  export { PostgresqlQueryGrammar } from './databases/postgresql/PostgresqlQueryGrammar.mjs';
3
3
  export { PostgresqlSchemaGrammar } from './databases/postgresql/PostgresqlSchemaGrammar.mjs';
4
- export { B as Blueprint, a as Column, C as ColumnPropertiesType, m as CompiledSql, b as Connection, F as ForeignKeyConstraint, I as IndexConstraint, J as JoinCondition, P as Parameter, d as Query, e as QueryGrammar, Q as QueryParts, S as Schema, f as SchemaGrammar, c as connection_events, n as havingType, o as joinType, s as selectType, w as whereBasic, i as whereNested, k as whereNull, g as whereOp, h as whereOpColumn, j as whereRaw, l as whereType } from './Blueprint-D3WHeqRS.mjs';
4
+ export { SqliteConfig, SqliteConnection } from './databases/sqlite/SqliteConnection.mjs';
5
+ export { SqliteQueryGrammar } from './databases/sqlite/SqliteQueryGrammar.mjs';
6
+ export { SqliteSchemaGrammar } from './databases/sqlite/SqliteSchemaGrammar.mjs';
7
+ export { MysqlConnection } from './databases/mysql/MysqlConnection.mjs';
8
+ export { MysqlQueryGrammar } from './databases/mysql/MysqlQueryGrammar.mjs';
9
+ export { MysqlSchemaGrammar } from './databases/mysql/MysqlSchemaGrammar.mjs';
10
+ export { B as Blueprint, a as Column, C as ColumnPropertiesType, m as CompiledSql, b as Connection, F as ForeignKeyConstraint, I as IndexConstraint, J as JoinCondition, P as Parameter, d as Query, e as QueryGrammar, Q as QueryParts, S as Schema, f as SchemaGrammar, c as connection_events, n as havingType, o as joinType, s as selectType, w as whereBasic, i as whereNested, k as whereNull, g as whereOp, h as whereOpColumn, j as whereRaw, l as whereType } from './Blueprint-g4SmS1bH.mjs';
5
11
  export { Migration } from './Migration.mjs';
6
12
  import 'pg';
13
+ import 'better-sqlite3';
14
+ import 'mysql2/promise';
7
15
  import '@devbro/neko-helper';