sqlstack 1.0.11 → 1.0.13
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/dist/cjs/core/fileResolution.d.ts.map +1 -1
- package/dist/cjs/core/fileResolution.js +72 -9
- package/dist/cjs/core/fileResolution.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +4 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/registry.d.ts +1 -0
- package/dist/cjs/registry.d.ts.map +1 -1
- package/dist/cjs/registry.js +6 -1
- package/dist/cjs/registry.js.map +1 -1
- package/dist/cjs/runtimeTypes.d.ts +5 -0
- package/dist/cjs/runtimeTypes.d.ts.map +1 -0
- package/dist/cjs/runtimeTypes.js +12 -0
- package/dist/cjs/runtimeTypes.js.map +1 -0
- package/dist/esm/core/fileResolution.js +72 -9
- package/dist/esm/core/fileResolution.js.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/registry.js +6 -1
- package/dist/esm/registry.js.map +1 -1
- package/dist/esm/runtimeTypes.js +9 -0
- package/dist/esm/runtimeTypes.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileResolution.d.ts","sourceRoot":"","sources":["../../../src/core/fileResolution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fileResolution.d.ts","sourceRoot":"","sources":["../../../src/core/fileResolution.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAe3C,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAgCxH;AAED,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,CAO7F;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CA+BtD"}
|
|
@@ -8,6 +8,7 @@ exports.coerceRootPath = coerceRootPath;
|
|
|
8
8
|
exports.guessDecoratorDir = guessDecoratorDir;
|
|
9
9
|
const fs_1 = __importDefault(require("fs"));
|
|
10
10
|
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const url_1 = require("url");
|
|
11
12
|
const DIALECT_EXT = {
|
|
12
13
|
postgres: 'pg',
|
|
13
14
|
mysql: 'mysql',
|
|
@@ -38,7 +39,7 @@ function resolveSqlFromFs(rootDir, methodName, dialect) {
|
|
|
38
39
|
}
|
|
39
40
|
if (!chosen) {
|
|
40
41
|
tried.push(dialectPath, genericPath);
|
|
41
|
-
throw new Error(`sqlstack: SQL file not found for ${methodName}\ntried: ${tried.join(
|
|
42
|
+
throw new Error(`sqlstack: SQL file not found for ${methodName}\ntried: ${tried.join("\n")}`);
|
|
42
43
|
}
|
|
43
44
|
// Cached content
|
|
44
45
|
let sql = contentCache.get(chosen);
|
|
@@ -62,21 +63,83 @@ function coerceRootPath(input) {
|
|
|
62
63
|
function guessDecoratorDir() {
|
|
63
64
|
const err = new Error();
|
|
64
65
|
const stack = (err.stack || '').split('\n').slice(2);
|
|
66
|
+
const cwd = safeNormalize(process.cwd());
|
|
67
|
+
const cwdWithSep = cwd ? ensureTrailingSep(cwd) : undefined;
|
|
68
|
+
const packageRoot = PACKAGE_ROOT_NORMALIZED;
|
|
69
|
+
const skipPackageRoot = packageRoot && (!cwdWithSep || packageRoot !== cwdWithSep);
|
|
70
|
+
let fallback;
|
|
65
71
|
for (const line of stack) {
|
|
66
72
|
const m = line.match(/\((.*?):\d+:\d+\)/) || line.match(/at (.*?):\d+:\d+/);
|
|
67
|
-
|
|
73
|
+
let file = m?.[1];
|
|
68
74
|
if (!file)
|
|
69
75
|
continue;
|
|
70
|
-
|
|
76
|
+
const resolved = toAbsolutePath(file);
|
|
77
|
+
if (!resolved)
|
|
71
78
|
continue;
|
|
72
|
-
if (
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
79
|
+
if (resolved.includes('node_modules'))
|
|
80
|
+
continue;
|
|
81
|
+
const normalized = safeNormalize(resolved);
|
|
82
|
+
if (!normalized)
|
|
83
|
+
continue;
|
|
84
|
+
if (skipPackageRoot && normalized.startsWith(packageRoot)) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const dir = path_1.default.dirname(resolved);
|
|
88
|
+
if (!fallback)
|
|
89
|
+
fallback = dir;
|
|
90
|
+
if (cwdWithSep && normalized.startsWith(cwdWithSep)) {
|
|
91
|
+
return dir;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return fallback;
|
|
95
|
+
}
|
|
96
|
+
function toAbsolutePath(file) {
|
|
97
|
+
try {
|
|
98
|
+
if (file.startsWith('file://')) {
|
|
99
|
+
return (0, url_1.fileURLToPath)(file);
|
|
100
|
+
}
|
|
101
|
+
if (file.startsWith('webpack://')) {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
if (!path_1.default.isAbsolute(file)) {
|
|
105
|
+
return path_1.default.resolve(file);
|
|
106
|
+
}
|
|
107
|
+
return file;
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function ensureTrailingSep(p) {
|
|
114
|
+
return p.endsWith(path_1.default.sep) ? p : p + path_1.default.sep;
|
|
115
|
+
}
|
|
116
|
+
function safeNormalize(p) {
|
|
117
|
+
if (!p)
|
|
118
|
+
return undefined;
|
|
119
|
+
const normalized = path_1.default.normalize(p);
|
|
120
|
+
return process.platform === 'win32' ? normalized.toLowerCase() : normalized;
|
|
121
|
+
}
|
|
122
|
+
const PACKAGE_ROOT_NORMALIZED = (() => {
|
|
123
|
+
const dirs = [];
|
|
124
|
+
if (typeof __dirname === 'string')
|
|
125
|
+
dirs.push(__dirname);
|
|
126
|
+
if (typeof __filename === 'string')
|
|
127
|
+
dirs.push(path_1.default.dirname(__filename));
|
|
128
|
+
for (const base of dirs) {
|
|
129
|
+
let current = base;
|
|
130
|
+
for (let i = 0; i < 6; i++) {
|
|
131
|
+
const candidate = path_1.default.join(current, 'package.json');
|
|
132
|
+
if (fs_1.default.existsSync(candidate)) {
|
|
133
|
+
const root = path_1.default.dirname(candidate);
|
|
134
|
+
const normalizedRoot = safeNormalize(root);
|
|
135
|
+
return normalizedRoot ? ensureTrailingSep(normalizedRoot) : ensureTrailingSep(root);
|
|
76
136
|
}
|
|
77
|
-
|
|
137
|
+
const parent = path_1.default.dirname(current);
|
|
138
|
+
if (parent === current)
|
|
139
|
+
break;
|
|
140
|
+
current = parent;
|
|
78
141
|
}
|
|
79
142
|
}
|
|
80
143
|
return undefined;
|
|
81
|
-
}
|
|
144
|
+
})();
|
|
82
145
|
//# sourceMappingURL=fileResolution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileResolution.js","sourceRoot":"","sources":["../../../src/core/fileResolution.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"fileResolution.js","sourceRoot":"","sources":["../../../src/core/fileResolution.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport type { Dialect } from '../registry';\n\nconst DIALECT_EXT: Record<Dialect, string> = {\n postgres: 'pg',\n mysql: 'mysql',\n sqlite: 'sqlite',\n};\n\nconst contentCache = new Map<string, string>();\nconst pathCache = new Map<string, string>();\n\nfunction key(root: string, method: string, dialect: Dialect): string {\n return `${root}::${method}::${dialect}`;\n}\n\nexport function resolveSqlFromFs(rootDir: string, methodName: string, dialect: Dialect): { sql: string; tried: string[] } {\n const k = key(rootDir, methodName, dialect);\n const tried: string[] = [];\n const ext = DIALECT_EXT[dialect];\n const dialectPath = path.join(rootDir, `${methodName}.${ext}.sql`);\n const genericPath = path.join(rootDir, `${methodName}.sql`);\n\n // Cached path\n let chosen = pathCache.get(k);\n if (!chosen) {\n if (fs.existsSync(dialectPath)) {\n chosen = dialectPath;\n } else if (fs.existsSync(genericPath)) {\n chosen = genericPath;\n }\n if (chosen) pathCache.set(k, chosen);\n }\n\n if (!chosen) {\n tried.push(dialectPath, genericPath);\n throw new Error(\n `sqlstack: SQL file not found for ${methodName}\\ntried: ${tried.join(\"\\n\")}`\n );\n }\n\n // Cached content\n let sql = contentCache.get(chosen);\n if (!sql) {\n sql = fs.readFileSync(chosen, 'utf8');\n contentCache.set(chosen, sql);\n }\n return { sql, tried: [chosen] };\n}\n\nexport function coerceRootPath(input?: string): { rootDir?: string; from?: 'file' | 'folder' } {\n if (!input) return {};\n const stat = fs.existsSync(input) ? fs.statSync(input) : undefined;\n if (stat?.isDirectory()) return { rootDir: input, from: 'folder' };\n if (stat?.isFile()) return { rootDir: path.dirname(input), from: 'file' };\n // If not found, treat as folder hint anyway\n return { rootDir: input, from: 'folder' };\n}\n\nexport function guessDecoratorDir(): string | undefined {\n const err = new Error();\n const stack = (err.stack || '').split('\\n').slice(2);\n const cwd = safeNormalize(process.cwd());\n const cwdWithSep = cwd ? ensureTrailingSep(cwd) : undefined;\n const packageRoot = PACKAGE_ROOT_NORMALIZED;\n const skipPackageRoot = packageRoot && (!cwdWithSep || packageRoot !== cwdWithSep);\n\n let fallback: string | undefined;\n for (const line of stack) {\n const m = line.match(/\\((.*?):\\d+:\\d+\\)/) || line.match(/at (.*?):\\d+:\\d+/);\n let file = m?.[1];\n if (!file) continue;\n const resolved = toAbsolutePath(file);\n if (!resolved) continue;\n if (resolved.includes('node_modules')) continue;\n\n const normalized = safeNormalize(resolved);\n if (!normalized) continue;\n if (skipPackageRoot && normalized.startsWith(packageRoot!)) {\n continue;\n }\n\n const dir = path.dirname(resolved);\n if (!fallback) fallback = dir;\n\n if (cwdWithSep && normalized.startsWith(cwdWithSep)) {\n return dir;\n }\n }\n return fallback;\n}\n\nfunction toAbsolutePath(file: string): string | undefined {\n try {\n if (file.startsWith('file://')) {\n return fileURLToPath(file);\n }\n if (file.startsWith('webpack://')) {\n return undefined;\n }\n if (!path.isAbsolute(file)) {\n return path.resolve(file);\n }\n return file;\n } catch {\n return undefined;\n }\n}\n\nfunction ensureTrailingSep(p: string): string {\n return p.endsWith(path.sep) ? p : p + path.sep;\n}\n\nfunction safeNormalize(p?: string): string | undefined {\n if (!p) return undefined;\n const normalized = path.normalize(p);\n return process.platform === 'win32' ? normalized.toLowerCase() : normalized;\n}\n\nconst PACKAGE_ROOT_NORMALIZED = (() => {\n const dirs: string[] = [];\n if (typeof __dirname === 'string') dirs.push(__dirname);\n if (typeof __filename === 'string') dirs.push(path.dirname(__filename));\n\n for (const base of dirs) {\n let current = base;\n for (let i = 0; i < 6; i++) {\n const candidate = path.join(current, 'package.json');\n if (fs.existsSync(candidate)) {\n const root = path.dirname(candidate);\n const normalizedRoot = safeNormalize(root);\n return normalizedRoot ? ensureTrailingSep(normalizedRoot) : ensureTrailingSep(root);\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n }\n return undefined;\n})();\n"]}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export * from './binders/sqlBinder';
|
|
2
2
|
export * from './core/errors';
|
|
3
3
|
export * from './core/validator';
|
|
4
|
-
export * from './registry';
|
|
5
4
|
export * from './adapters';
|
|
6
5
|
export * from './decorators/queryBinder';
|
|
7
6
|
export * from './decorators/query';
|
|
@@ -11,4 +10,6 @@ export * from './decorators/validateResult';
|
|
|
11
10
|
export * from './decorators/transform';
|
|
12
11
|
export * from './decorators/page';
|
|
13
12
|
export * from './utils/dto';
|
|
13
|
+
export type { Dialect, WriteResult, PostgresWriteResult, QueryResult, Database } from './registry';
|
|
14
|
+
export { SqlStackDB, IStackDB } from './registry';
|
|
14
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EAAE,UAAU,EAAC,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -14,10 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.SqlStackDB = void 0;
|
|
17
18
|
__exportStar(require("./binders/sqlBinder"), exports);
|
|
18
19
|
__exportStar(require("./core/errors"), exports);
|
|
19
20
|
__exportStar(require("./core/validator"), exports);
|
|
20
|
-
__exportStar(require("./registry"), exports);
|
|
21
21
|
__exportStar(require("./adapters"), exports);
|
|
22
22
|
__exportStar(require("./decorators/queryBinder"), exports);
|
|
23
23
|
__exportStar(require("./decorators/query"), exports);
|
|
@@ -27,4 +27,7 @@ __exportStar(require("./decorators/validateResult"), exports);
|
|
|
27
27
|
__exportStar(require("./decorators/transform"), exports);
|
|
28
28
|
__exportStar(require("./decorators/page"), exports);
|
|
29
29
|
__exportStar(require("./utils/dto"), exports);
|
|
30
|
+
var registry_1 = require("./registry");
|
|
31
|
+
Object.defineProperty(exports, "SqlStackDB", { enumerable: true, get: function () { return registry_1.SqlStackDB; } });
|
|
32
|
+
// export { WriteResult, PostgresWriteResult, QueryResult } from './runtimeTypes';
|
|
30
33
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,gDAA8B;AAC9B,mDAAiC;AACjC,6CAA2B;AAC3B,2DAAyC;AACzC,qDAAmC;AACnC,wDAAsC;AACtC,2DAAyC;AACzC,8DAA4C;AAC5C,yDAAuC;AACvC,oDAAkC;AAClC,8CAA4B;AAE5B,uCAAiD;AAAxC,sGAAA,UAAU,OAAA;AACnB,kFAAkF","sourcesContent":["export * from './binders/sqlBinder';\nexport * from './core/errors';\nexport * from './core/validator';\nexport * from './adapters';\nexport * from './decorators/queryBinder';\nexport * from './decorators/query';\nexport * from './decorators/defaults';\nexport * from './decorators/resultShape';\nexport * from './decorators/validateResult';\nexport * from './decorators/transform';\nexport * from './decorators/page';\nexport * from './utils/dto';\nexport type { Dialect, WriteResult, PostgresWriteResult, QueryResult, Database } from './registry';\nexport { SqlStackDB,IStackDB } from './registry';\n// export { WriteResult, PostgresWriteResult, QueryResult } from './runtimeTypes';\n"]}
|
package/dist/cjs/registry.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAGtD,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IAEtD,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GAAG,GAAG,EAAE,GAAG,WAAW,GAAG,mBAAmB,CAAC;AAEpE,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE5D,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACnC;AAED,cAAM,QAAQ;IACZ,OAAO,CAAC,GAAG,CAA+B;IAC1C,OAAO,CAAC,WAAW,CAAC,CAAS;IAE7B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ;IAKnC,UAAU,CAAC,IAAI,EAAE,MAAM;IAMvB,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ;CAO7B;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAGtD,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IAEtD,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GAAG,GAAG,EAAE,GAAG,WAAW,GAAG,mBAAmB,CAAC;AAEpE,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE5D,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACnC;AAED,cAAM,QAAQ;IACZ,OAAO,CAAC,GAAG,CAA+B;IAC1C,OAAO,CAAC,WAAW,CAAC,CAAS;IAE7B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ;IAKnC,UAAU,CAAC,IAAI,EAAE,MAAM;IAMvB,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ;CAO7B;AAQD,eAAO,MAAM,UAAU,EAAE,QAAmC,CAAC;AAE7D,MAAM,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC"}
|
package/dist/cjs/registry.js
CHANGED
|
@@ -25,5 +25,10 @@ class Registry {
|
|
|
25
25
|
return db;
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
-
|
|
28
|
+
// Ensure a single shared instance across module copies/usages
|
|
29
|
+
const g = globalThis;
|
|
30
|
+
if (!g.__SQLSTACK_SINGLETON__) {
|
|
31
|
+
g.__SQLSTACK_SINGLETON__ = new Registry();
|
|
32
|
+
}
|
|
33
|
+
exports.SqlStackDB = g.__SQLSTACK_SINGLETON__;
|
|
29
34
|
//# sourceMappingURL=registry.js.map
|
package/dist/cjs/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry.ts"],"names":[],"mappings":";;;AAwBA,MAAM,QAAQ;IAAd;QACU,QAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;IAqB5C,CAAC;IAlBC,QAAQ,CAAC,IAAY,EAAE,EAAY;QACjC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,IAAa;QACf,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;QAChE,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry.ts"],"names":[],"mappings":";;;AAwBA,MAAM,QAAQ;IAAd;QACU,QAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;IAqB5C,CAAC;IAlBC,QAAQ,CAAC,IAAY,EAAE,EAAY;QACjC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,IAAa;QACf,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;QAChE,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAED,8DAA8D;AAC9D,MAAM,CAAC,GAAG,UAAiB,CAAC;AAC5B,IAAI,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC;IAC9B,CAAC,CAAC,sBAAsB,GAAG,IAAI,QAAQ,EAAE,CAAC;AAC5C,CAAC;AAEY,QAAA,UAAU,GAAa,CAAC,CAAC,sBAAsB,CAAC","sourcesContent":["export type Dialect = 'sqlite' | 'mysql' | 'postgres';\n\n// Result for non-SELECT statements across adapters\nexport interface WriteResult {\n rowsAffected: number;\n lastInsertId?: unknown;\n}\n\n// Postgres-specific extension when using RETURNING on write statements\nexport interface PostgresWriteResult extends WriteResult {\n // Only present when the SQL includes RETURNING and rows are returned\n returning?: any[];\n}\n\nexport type QueryResult = any[] | WriteResult | PostgresWriteResult;\n\nexport interface Database {\n dialect: Dialect;\n query(sql: string, params: unknown[]): Promise<QueryResult>;\n // Underlying driver connection or pool (driver-specific)\n conn: unknown;\n close: () => Promise<void> | void;\n}\n\nclass Registry {\n private map = new Map<string, Database>();\n private defaultName?: string;\n\n register(name: string, db: Database) {\n this.map.set(name, db);\n return this;\n }\n\n setDefault(name: string) {\n if (!this.map.has(name)) throw new Error(`No database registered under ${name}`);\n this.defaultName = name;\n return this;\n }\n\n get(name?: string): Database {\n const key = name ?? this.defaultName;\n if (!key) throw new Error('No default database set');\n const db = this.map.get(key);\n if (!db) throw new Error(`No database registered under ${key}`);\n return db;\n }\n}\n\n// Ensure a single shared instance across module copies/usages\nconst g = globalThis as any;\nif (!g.__SQLSTACK_SINGLETON__) {\n g.__SQLSTACK_SINGLETON__ = new Registry();\n}\n\nexport const SqlStackDB: Registry = g.__SQLSTACK_SINGLETON__;\n\nexport type IStackDB = typeof SqlStackDB;\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { PostgresWriteResult as PostgresWriteResultType, QueryResult as QueryResultType, WriteResult as WriteResultType } from './registry';
|
|
2
|
+
export declare const WriteResult: WriteResultType;
|
|
3
|
+
export declare const PostgresWriteResult: PostgresWriteResultType;
|
|
4
|
+
export declare const QueryResult: QueryResultType;
|
|
5
|
+
//# sourceMappingURL=runtimeTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeTypes.d.ts","sourceRoot":"","sources":["../../src/runtimeTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,IAAI,uBAAuB,EAC9C,WAAW,IAAI,eAAe,EAC9B,WAAW,IAAI,eAAe,EAC/B,MAAM,YAAY,CAAC;AAKpB,eAAO,MAAM,WAAW,EAA2B,eAAe,CAAC;AAEnE,eAAO,MAAM,mBAAmB,EAA2B,uBAAuB,CAAC;AAEnF,eAAO,MAAM,WAAW,EAA2B,eAAe,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QueryResult = exports.PostgresWriteResult = exports.WriteResult = void 0;
|
|
4
|
+
// Provide runtime stubs for type-only exports so ESM consumers that
|
|
5
|
+
// accidentally perform value imports do not encounter missing export errors.
|
|
6
|
+
// @ts-ignore runtime-only stub
|
|
7
|
+
exports.WriteResult = undefined;
|
|
8
|
+
// @ts-ignore runtime-only stub
|
|
9
|
+
exports.PostgresWriteResult = undefined;
|
|
10
|
+
// @ts-ignore runtime-only stub
|
|
11
|
+
exports.QueryResult = undefined;
|
|
12
|
+
//# sourceMappingURL=runtimeTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeTypes.js","sourceRoot":"","sources":["../../src/runtimeTypes.ts"],"names":[],"mappings":";;;AAMA,oEAAoE;AACpE,6EAA6E;AAC7E,+BAA+B;AAClB,QAAA,WAAW,GAAG,SAAuC,CAAC;AACnE,+BAA+B;AAClB,QAAA,mBAAmB,GAAG,SAA+C,CAAC;AACnF,+BAA+B;AAClB,QAAA,WAAW,GAAG,SAAuC,CAAC","sourcesContent":["import type {\n PostgresWriteResult as PostgresWriteResultType,\n QueryResult as QueryResultType,\n WriteResult as WriteResultType,\n} from './registry';\n\n// Provide runtime stubs for type-only exports so ESM consumers that\n// accidentally perform value imports do not encounter missing export errors.\n// @ts-ignore runtime-only stub\nexport const WriteResult = undefined as unknown as WriteResultType;\n// @ts-ignore runtime-only stub\nexport const PostgresWriteResult = undefined as unknown as PostgresWriteResultType;\n// @ts-ignore runtime-only stub\nexport const QueryResult = undefined as unknown as QueryResultType;\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
3
4
|
const DIALECT_EXT = {
|
|
4
5
|
postgres: 'pg',
|
|
5
6
|
mysql: 'mysql',
|
|
@@ -30,7 +31,7 @@ export function resolveSqlFromFs(rootDir, methodName, dialect) {
|
|
|
30
31
|
}
|
|
31
32
|
if (!chosen) {
|
|
32
33
|
tried.push(dialectPath, genericPath);
|
|
33
|
-
throw new Error(`sqlstack: SQL file not found for ${methodName}\ntried: ${tried.join(
|
|
34
|
+
throw new Error(`sqlstack: SQL file not found for ${methodName}\ntried: ${tried.join("\n")}`);
|
|
34
35
|
}
|
|
35
36
|
// Cached content
|
|
36
37
|
let sql = contentCache.get(chosen);
|
|
@@ -54,21 +55,83 @@ export function coerceRootPath(input) {
|
|
|
54
55
|
export function guessDecoratorDir() {
|
|
55
56
|
const err = new Error();
|
|
56
57
|
const stack = (err.stack || '').split('\n').slice(2);
|
|
58
|
+
const cwd = safeNormalize(process.cwd());
|
|
59
|
+
const cwdWithSep = cwd ? ensureTrailingSep(cwd) : undefined;
|
|
60
|
+
const packageRoot = PACKAGE_ROOT_NORMALIZED;
|
|
61
|
+
const skipPackageRoot = packageRoot && (!cwdWithSep || packageRoot !== cwdWithSep);
|
|
62
|
+
let fallback;
|
|
57
63
|
for (const line of stack) {
|
|
58
64
|
const m = line.match(/\((.*?):\d+:\d+\)/) || line.match(/at (.*?):\d+:\d+/);
|
|
59
|
-
|
|
65
|
+
let file = m?.[1];
|
|
60
66
|
if (!file)
|
|
61
67
|
continue;
|
|
62
|
-
|
|
68
|
+
const resolved = toAbsolutePath(file);
|
|
69
|
+
if (!resolved)
|
|
63
70
|
continue;
|
|
64
|
-
if (
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
71
|
+
if (resolved.includes('node_modules'))
|
|
72
|
+
continue;
|
|
73
|
+
const normalized = safeNormalize(resolved);
|
|
74
|
+
if (!normalized)
|
|
75
|
+
continue;
|
|
76
|
+
if (skipPackageRoot && normalized.startsWith(packageRoot)) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const dir = path.dirname(resolved);
|
|
80
|
+
if (!fallback)
|
|
81
|
+
fallback = dir;
|
|
82
|
+
if (cwdWithSep && normalized.startsWith(cwdWithSep)) {
|
|
83
|
+
return dir;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return fallback;
|
|
87
|
+
}
|
|
88
|
+
function toAbsolutePath(file) {
|
|
89
|
+
try {
|
|
90
|
+
if (file.startsWith('file://')) {
|
|
91
|
+
return fileURLToPath(file);
|
|
92
|
+
}
|
|
93
|
+
if (file.startsWith('webpack://')) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
if (!path.isAbsolute(file)) {
|
|
97
|
+
return path.resolve(file);
|
|
98
|
+
}
|
|
99
|
+
return file;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function ensureTrailingSep(p) {
|
|
106
|
+
return p.endsWith(path.sep) ? p : p + path.sep;
|
|
107
|
+
}
|
|
108
|
+
function safeNormalize(p) {
|
|
109
|
+
if (!p)
|
|
110
|
+
return undefined;
|
|
111
|
+
const normalized = path.normalize(p);
|
|
112
|
+
return process.platform === 'win32' ? normalized.toLowerCase() : normalized;
|
|
113
|
+
}
|
|
114
|
+
const PACKAGE_ROOT_NORMALIZED = (() => {
|
|
115
|
+
const dirs = [];
|
|
116
|
+
if (typeof __dirname === 'string')
|
|
117
|
+
dirs.push(__dirname);
|
|
118
|
+
if (typeof __filename === 'string')
|
|
119
|
+
dirs.push(path.dirname(__filename));
|
|
120
|
+
for (const base of dirs) {
|
|
121
|
+
let current = base;
|
|
122
|
+
for (let i = 0; i < 6; i++) {
|
|
123
|
+
const candidate = path.join(current, 'package.json');
|
|
124
|
+
if (fs.existsSync(candidate)) {
|
|
125
|
+
const root = path.dirname(candidate);
|
|
126
|
+
const normalizedRoot = safeNormalize(root);
|
|
127
|
+
return normalizedRoot ? ensureTrailingSep(normalizedRoot) : ensureTrailingSep(root);
|
|
68
128
|
}
|
|
69
|
-
|
|
129
|
+
const parent = path.dirname(current);
|
|
130
|
+
if (parent === current)
|
|
131
|
+
break;
|
|
132
|
+
current = parent;
|
|
70
133
|
}
|
|
71
134
|
}
|
|
72
135
|
return undefined;
|
|
73
|
-
}
|
|
136
|
+
})();
|
|
74
137
|
//# sourceMappingURL=fileResolution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileResolution.js","sourceRoot":"","sources":["../../../src/core/fileResolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"fileResolution.js","sourceRoot":"","sources":["../../../src/core/fileResolution.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport type { Dialect } from '../registry';\n\nconst DIALECT_EXT: Record<Dialect, string> = {\n postgres: 'pg',\n mysql: 'mysql',\n sqlite: 'sqlite',\n};\n\nconst contentCache = new Map<string, string>();\nconst pathCache = new Map<string, string>();\n\nfunction key(root: string, method: string, dialect: Dialect): string {\n return `${root}::${method}::${dialect}`;\n}\n\nexport function resolveSqlFromFs(rootDir: string, methodName: string, dialect: Dialect): { sql: string; tried: string[] } {\n const k = key(rootDir, methodName, dialect);\n const tried: string[] = [];\n const ext = DIALECT_EXT[dialect];\n const dialectPath = path.join(rootDir, `${methodName}.${ext}.sql`);\n const genericPath = path.join(rootDir, `${methodName}.sql`);\n\n // Cached path\n let chosen = pathCache.get(k);\n if (!chosen) {\n if (fs.existsSync(dialectPath)) {\n chosen = dialectPath;\n } else if (fs.existsSync(genericPath)) {\n chosen = genericPath;\n }\n if (chosen) pathCache.set(k, chosen);\n }\n\n if (!chosen) {\n tried.push(dialectPath, genericPath);\n throw new Error(\n `sqlstack: SQL file not found for ${methodName}\\ntried: ${tried.join(\"\\n\")}`\n );\n }\n\n // Cached content\n let sql = contentCache.get(chosen);\n if (!sql) {\n sql = fs.readFileSync(chosen, 'utf8');\n contentCache.set(chosen, sql);\n }\n return { sql, tried: [chosen] };\n}\n\nexport function coerceRootPath(input?: string): { rootDir?: string; from?: 'file' | 'folder' } {\n if (!input) return {};\n const stat = fs.existsSync(input) ? fs.statSync(input) : undefined;\n if (stat?.isDirectory()) return { rootDir: input, from: 'folder' };\n if (stat?.isFile()) return { rootDir: path.dirname(input), from: 'file' };\n // If not found, treat as folder hint anyway\n return { rootDir: input, from: 'folder' };\n}\n\nexport function guessDecoratorDir(): string | undefined {\n const err = new Error();\n const stack = (err.stack || '').split('\\n').slice(2);\n const cwd = safeNormalize(process.cwd());\n const cwdWithSep = cwd ? ensureTrailingSep(cwd) : undefined;\n const packageRoot = PACKAGE_ROOT_NORMALIZED;\n const skipPackageRoot = packageRoot && (!cwdWithSep || packageRoot !== cwdWithSep);\n\n let fallback: string | undefined;\n for (const line of stack) {\n const m = line.match(/\\((.*?):\\d+:\\d+\\)/) || line.match(/at (.*?):\\d+:\\d+/);\n let file = m?.[1];\n if (!file) continue;\n const resolved = toAbsolutePath(file);\n if (!resolved) continue;\n if (resolved.includes('node_modules')) continue;\n\n const normalized = safeNormalize(resolved);\n if (!normalized) continue;\n if (skipPackageRoot && normalized.startsWith(packageRoot!)) {\n continue;\n }\n\n const dir = path.dirname(resolved);\n if (!fallback) fallback = dir;\n\n if (cwdWithSep && normalized.startsWith(cwdWithSep)) {\n return dir;\n }\n }\n return fallback;\n}\n\nfunction toAbsolutePath(file: string): string | undefined {\n try {\n if (file.startsWith('file://')) {\n return fileURLToPath(file);\n }\n if (file.startsWith('webpack://')) {\n return undefined;\n }\n if (!path.isAbsolute(file)) {\n return path.resolve(file);\n }\n return file;\n } catch {\n return undefined;\n }\n}\n\nfunction ensureTrailingSep(p: string): string {\n return p.endsWith(path.sep) ? p : p + path.sep;\n}\n\nfunction safeNormalize(p?: string): string | undefined {\n if (!p) return undefined;\n const normalized = path.normalize(p);\n return process.platform === 'win32' ? normalized.toLowerCase() : normalized;\n}\n\nconst PACKAGE_ROOT_NORMALIZED = (() => {\n const dirs: string[] = [];\n if (typeof __dirname === 'string') dirs.push(__dirname);\n if (typeof __filename === 'string') dirs.push(path.dirname(__filename));\n\n for (const base of dirs) {\n let current = base;\n for (let i = 0; i < 6; i++) {\n const candidate = path.join(current, 'package.json');\n if (fs.existsSync(candidate)) {\n const root = path.dirname(candidate);\n const normalizedRoot = safeNormalize(root);\n return normalizedRoot ? ensureTrailingSep(normalizedRoot) : ensureTrailingSep(root);\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n }\n return undefined;\n})();\n"]}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export * from './binders/sqlBinder';
|
|
2
2
|
export * from './core/errors';
|
|
3
3
|
export * from './core/validator';
|
|
4
|
-
export * from './registry';
|
|
5
4
|
export * from './adapters';
|
|
6
5
|
export * from './decorators/queryBinder';
|
|
7
6
|
export * from './decorators/query';
|
|
@@ -11,4 +10,6 @@ export * from './decorators/validateResult';
|
|
|
11
10
|
export * from './decorators/transform';
|
|
12
11
|
export * from './decorators/page';
|
|
13
12
|
export * from './utils/dto';
|
|
13
|
+
export { SqlStackDB } from './registry';
|
|
14
|
+
// export { WriteResult, PostgresWriteResult, QueryResult } from './runtimeTypes';
|
|
14
15
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAW,MAAM,YAAY,CAAC;AACjD,kFAAkF","sourcesContent":["export * from './binders/sqlBinder';\nexport * from './core/errors';\nexport * from './core/validator';\nexport * from './adapters';\nexport * from './decorators/queryBinder';\nexport * from './decorators/query';\nexport * from './decorators/defaults';\nexport * from './decorators/resultShape';\nexport * from './decorators/validateResult';\nexport * from './decorators/transform';\nexport * from './decorators/page';\nexport * from './utils/dto';\nexport type { Dialect, WriteResult, PostgresWriteResult, QueryResult, Database } from './registry';\nexport { SqlStackDB,IStackDB } from './registry';\n// export { WriteResult, PostgresWriteResult, QueryResult } from './runtimeTypes';\n"]}
|
package/dist/esm/registry.js
CHANGED
|
@@ -22,5 +22,10 @@ class Registry {
|
|
|
22
22
|
return db;
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
// Ensure a single shared instance across module copies/usages
|
|
26
|
+
const g = globalThis;
|
|
27
|
+
if (!g.__SQLSTACK_SINGLETON__) {
|
|
28
|
+
g.__SQLSTACK_SINGLETON__ = new Registry();
|
|
29
|
+
}
|
|
30
|
+
export const SqlStackDB = g.__SQLSTACK_SINGLETON__;
|
|
26
31
|
//# sourceMappingURL=registry.js.map
|
package/dist/esm/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry.ts"],"names":[],"mappings":"AAwBA,MAAM,QAAQ;IAAd;QACU,QAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;IAqB5C,CAAC;IAlBC,QAAQ,CAAC,IAAY,EAAE,EAAY;QACjC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,IAAa;QACf,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;QAChE,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAED,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry.ts"],"names":[],"mappings":"AAwBA,MAAM,QAAQ;IAAd;QACU,QAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;IAqB5C,CAAC;IAlBC,QAAQ,CAAC,IAAY,EAAE,EAAY;QACjC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,IAAa;QACf,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;QAChE,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAED,8DAA8D;AAC9D,MAAM,CAAC,GAAG,UAAiB,CAAC;AAC5B,IAAI,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC;IAC9B,CAAC,CAAC,sBAAsB,GAAG,IAAI,QAAQ,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAa,CAAC,CAAC,sBAAsB,CAAC","sourcesContent":["export type Dialect = 'sqlite' | 'mysql' | 'postgres';\n\n// Result for non-SELECT statements across adapters\nexport interface WriteResult {\n rowsAffected: number;\n lastInsertId?: unknown;\n}\n\n// Postgres-specific extension when using RETURNING on write statements\nexport interface PostgresWriteResult extends WriteResult {\n // Only present when the SQL includes RETURNING and rows are returned\n returning?: any[];\n}\n\nexport type QueryResult = any[] | WriteResult | PostgresWriteResult;\n\nexport interface Database {\n dialect: Dialect;\n query(sql: string, params: unknown[]): Promise<QueryResult>;\n // Underlying driver connection or pool (driver-specific)\n conn: unknown;\n close: () => Promise<void> | void;\n}\n\nclass Registry {\n private map = new Map<string, Database>();\n private defaultName?: string;\n\n register(name: string, db: Database) {\n this.map.set(name, db);\n return this;\n }\n\n setDefault(name: string) {\n if (!this.map.has(name)) throw new Error(`No database registered under ${name}`);\n this.defaultName = name;\n return this;\n }\n\n get(name?: string): Database {\n const key = name ?? this.defaultName;\n if (!key) throw new Error('No default database set');\n const db = this.map.get(key);\n if (!db) throw new Error(`No database registered under ${key}`);\n return db;\n }\n}\n\n// Ensure a single shared instance across module copies/usages\nconst g = globalThis as any;\nif (!g.__SQLSTACK_SINGLETON__) {\n g.__SQLSTACK_SINGLETON__ = new Registry();\n}\n\nexport const SqlStackDB: Registry = g.__SQLSTACK_SINGLETON__;\n\nexport type IStackDB = typeof SqlStackDB;\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Provide runtime stubs for type-only exports so ESM consumers that
|
|
2
|
+
// accidentally perform value imports do not encounter missing export errors.
|
|
3
|
+
// @ts-ignore runtime-only stub
|
|
4
|
+
export const WriteResult = undefined;
|
|
5
|
+
// @ts-ignore runtime-only stub
|
|
6
|
+
export const PostgresWriteResult = undefined;
|
|
7
|
+
// @ts-ignore runtime-only stub
|
|
8
|
+
export const QueryResult = undefined;
|
|
9
|
+
//# sourceMappingURL=runtimeTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeTypes.js","sourceRoot":"","sources":["../../src/runtimeTypes.ts"],"names":[],"mappings":"AAMA,oEAAoE;AACpE,6EAA6E;AAC7E,+BAA+B;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,SAAuC,CAAC;AACnE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAA+C,CAAC;AACnF,+BAA+B;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,SAAuC,CAAC","sourcesContent":["import type {\n PostgresWriteResult as PostgresWriteResultType,\n QueryResult as QueryResultType,\n WriteResult as WriteResultType,\n} from './registry';\n\n// Provide runtime stubs for type-only exports so ESM consumers that\n// accidentally perform value imports do not encounter missing export errors.\n// @ts-ignore runtime-only stub\nexport const WriteResult = undefined as unknown as WriteResultType;\n// @ts-ignore runtime-only stub\nexport const PostgresWriteResult = undefined as unknown as PostgresWriteResultType;\n// @ts-ignore runtime-only stub\nexport const QueryResult = undefined as unknown as QueryResultType;\n"]}
|