dirsql 0.3.51 → 0.3.53
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/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +6 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/resolve-config-extensions.d.ts +8 -0
- package/dist/cli/resolve-config-extensions.d.ts.map +1 -0
- package/dist/cli/resolve-config-extensions.js +81 -0
- package/dist/cli/resolve-config-extensions.js.map +1 -0
- package/dist/dirsql.d.ts.map +1 -1
- package/dist/dirsql.js +14 -2
- package/dist/dirsql.js.map +1 -1
- package/dist/resolve-extension.d.ts +22 -0
- package/dist/resolve-extension.d.ts.map +1 -0
- package/dist/resolve-extension.js +108 -0
- package/dist/resolve-extension.js.map +1 -0
- package/package.json +14 -11
package/dist/cli/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAUA,wBAAsB,IAAI,CACxB,IAAI,GAAE,MAAM,EAA0B,GACrC,OAAO,CAAC,IAAI,CAAC,CAcf"}
|
package/dist/cli/main.js
CHANGED
|
@@ -5,9 +5,14 @@
|
|
|
5
5
|
import { spawnSync } from "node:child_process";
|
|
6
6
|
import { die } from "./die.js";
|
|
7
7
|
import { resolveBinary } from "./resolve-binary.js";
|
|
8
|
+
import { withResolvedExtensions } from "./resolve-config-extensions.js";
|
|
8
9
|
export async function main(argv = process.argv.slice(2)) {
|
|
9
10
|
const binary = resolveBinary();
|
|
10
|
-
|
|
11
|
+
// Resolve any package-name extensions in a TOML config here (the binary
|
|
12
|
+
// can't) and pass them as `--extension` flags; a no-op otherwise (#227).
|
|
13
|
+
const result = spawnSync(binary, withResolvedExtensions(argv), {
|
|
14
|
+
stdio: "inherit",
|
|
15
|
+
});
|
|
11
16
|
if (result.error) {
|
|
12
17
|
die(result.error.message, 1);
|
|
13
18
|
}
|
package/dist/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,0EAA0E;AAC1E,0EAA0E;AAC1E,gEAAgE;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,0EAA0E;AAC1E,0EAA0E;AAC1E,gEAAgE;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,wEAAwE;IACxE,yEAAyE;IACzE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,sBAAsB,CAAC,IAAI,CAAC,EAAE;QAC7D,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return `argv` augmented with `--extension <path>[::entrypoint]` flags when the
|
|
3
|
+
* TOML config names an extension by package name; otherwise return `argv`
|
|
4
|
+
* unchanged. Throws if a package name cannot be resolved (surfaced by the
|
|
5
|
+
* launcher as a clean error).
|
|
6
|
+
*/
|
|
7
|
+
export declare function withResolvedExtensions(argv: string[]): string[];
|
|
8
|
+
//# sourceMappingURL=resolve-config-extensions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-config-extensions.d.ts","sourceRoot":"","sources":["../../src/cli/resolve-config-extensions.ts"],"names":[],"mappings":"AAwCA;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CA2C/D"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// Launcher-side resolution of a TOML config's `[[dirsql.extension]]` entries.
|
|
2
|
+
//
|
|
3
|
+
// The compiled `dirsql` binary reads a `.dirsql.toml` itself and loads its
|
|
4
|
+
// extensions literally — it has no `require.resolve`, so it cannot resolve a
|
|
5
|
+
// bare **package name** (#227). This launcher can. When a TOML config names an
|
|
6
|
+
// extension by package name, we resolve every one of its extensions here and
|
|
7
|
+
// pass the resolved literal paths to the binary via repeatable `--extension`
|
|
8
|
+
// flags; the binary then loads those and ignores the config's own extension
|
|
9
|
+
// entries (see the Rust `--extension` flag / `suppress_config_extensions`).
|
|
10
|
+
//
|
|
11
|
+
// Native-language configs (`.py`/`.js`/`.mjs`/`.cjs`) are untouched: the binary
|
|
12
|
+
// dispatches those to `dirsql interpret`, whose handshake already carries
|
|
13
|
+
// resolved paths (`toJSON()` runs the same resolver).
|
|
14
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
15
|
+
import { dirname, resolve as resolvePath } from "node:path";
|
|
16
|
+
import { parse as parseToml } from "smol-toml";
|
|
17
|
+
import { isBareName, resolveExtensionPath } from "../resolve-extension.js";
|
|
18
|
+
// Config extensions the binary dispatches to `dirsql interpret`; never
|
|
19
|
+
// pre-resolved here (that path resolves via the handshake).
|
|
20
|
+
const NATIVE_CONFIG_SUFFIXES = [".py", ".js", ".mjs", ".cjs"];
|
|
21
|
+
/** The `--config` value from argv (`--config X` or `--config=X`), or the default. */
|
|
22
|
+
function configPathFromArgv(argv) {
|
|
23
|
+
for (let i = 0; i < argv.length; i++) {
|
|
24
|
+
const a = argv[i];
|
|
25
|
+
if (a === "--config") {
|
|
26
|
+
return argv[i + 1] ?? "";
|
|
27
|
+
}
|
|
28
|
+
if (a?.startsWith("--config=")) {
|
|
29
|
+
return a.slice("--config=".length);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return "./.dirsql.toml";
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Return `argv` augmented with `--extension <path>[::entrypoint]` flags when the
|
|
36
|
+
* TOML config names an extension by package name; otherwise return `argv`
|
|
37
|
+
* unchanged. Throws if a package name cannot be resolved (surfaced by the
|
|
38
|
+
* launcher as a clean error).
|
|
39
|
+
*/
|
|
40
|
+
export function withResolvedExtensions(argv) {
|
|
41
|
+
if (argv[0] === "init") {
|
|
42
|
+
return argv;
|
|
43
|
+
}
|
|
44
|
+
const configPath = configPathFromArgv(argv);
|
|
45
|
+
if (NATIVE_CONFIG_SUFFIXES.some((s) => configPath.endsWith(s))) {
|
|
46
|
+
return argv;
|
|
47
|
+
}
|
|
48
|
+
if (!existsSync(configPath)) {
|
|
49
|
+
return argv;
|
|
50
|
+
}
|
|
51
|
+
let doc;
|
|
52
|
+
try {
|
|
53
|
+
doc = parseToml(readFileSync(configPath, "utf8"));
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// Leave a malformed config for the binary to report.
|
|
57
|
+
return argv;
|
|
58
|
+
}
|
|
59
|
+
const dirsql = (doc.dirsql ?? {});
|
|
60
|
+
const entries = Array.isArray(dirsql.extension)
|
|
61
|
+
? dirsql.extension
|
|
62
|
+
: [];
|
|
63
|
+
if (entries.length === 0) {
|
|
64
|
+
return argv;
|
|
65
|
+
}
|
|
66
|
+
// Only intervene when at least one path is a bare package name; a config with
|
|
67
|
+
// only literal paths keeps the binary's existing behavior untouched.
|
|
68
|
+
const hasPackageName = entries.some((e) => typeof e.path === "string" && isBareName(e.path));
|
|
69
|
+
if (!hasPackageName) {
|
|
70
|
+
return argv;
|
|
71
|
+
}
|
|
72
|
+
const base = dirname(resolvePath(configPath));
|
|
73
|
+
const flags = [];
|
|
74
|
+
for (const e of entries) {
|
|
75
|
+
const path = resolveExtensionPath(e.path, base, true);
|
|
76
|
+
const entrypoint = typeof e.entrypoint === "string" ? e.entrypoint : null;
|
|
77
|
+
flags.push("--extension", entrypoint ? `${path}::${entrypoint}` : path);
|
|
78
|
+
}
|
|
79
|
+
return [...argv, ...flags];
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=resolve-config-extensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-config-extensions.js","sourceRoot":"","sources":["../../src/cli/resolve-config-extensions.ts"],"names":[],"mappings":"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"}
|
package/dist/dirsql.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dirsql.d.ts","sourceRoot":"","sources":["../src/dirsql.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dirsql.d.ts","sourceRoot":"","sources":["../src/dirsql.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,qDAAqD;AACrD,MAAM,WAAW,QAAQ;IACvB;;;;OAIG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,MAAM;IACjB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAG9B,OAAO,CAAC,MAAM,CAAgB;IAG9B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IAEjC,wDAAwD;gBAC5C,UAAU,EAAE,MAAM;IAC9B,yCAAyC;gBAC7B,OAAO,EAAE,aAAa;IAgClC;;;;;;OAMG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAK5D;;;;;;;OAOG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC;;;;;;;OAOG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKxD;;;;;;;;;;OAUG;IACI,KAAK,IAAI,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC;CAaxD"}
|
package/dist/dirsql.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// unit test instead of an exemption (#239). The native binding is reached
|
|
5
5
|
// through `getCore()` (see `core.ts`), which tests fake.
|
|
6
6
|
import { getCore } from "./core.js";
|
|
7
|
+
import { resolveExtensionPath } from "./resolve-extension.js";
|
|
7
8
|
/**
|
|
8
9
|
* Ephemeral SQL index over a local directory.
|
|
9
10
|
*
|
|
@@ -51,8 +52,19 @@ export class DirSQL {
|
|
|
51
52
|
const options = typeof arg === "string" ? { config: arg } : arg;
|
|
52
53
|
this._options = options;
|
|
53
54
|
const Ctor = getCore().DirSQL;
|
|
54
|
-
|
|
55
|
-
|
|
55
|
+
// Resolve programmatic extension paths (a bare package name -> the loadable
|
|
56
|
+
// installed under `node_modules`, #299) before handing them to the
|
|
57
|
+
// file-path-only core. Done inside the promise chain so a resolution error
|
|
58
|
+
// rejects `ready` rather than throwing from the constructor.
|
|
59
|
+
this.ready = Promise.resolve()
|
|
60
|
+
.then(() => {
|
|
61
|
+
const extensions = options.extensions?.map((e) => ({
|
|
62
|
+
path: resolveExtensionPath(e.path, process.cwd(), false),
|
|
63
|
+
entrypoint: e.entrypoint,
|
|
64
|
+
})) ?? null;
|
|
65
|
+
return Ctor.openAsync(options.root ?? null, options.tables ?? null, options.ignore ?? null, options.config ?? null, options.persist ?? null, options.persistPath ?? null, extensions);
|
|
66
|
+
})
|
|
67
|
+
.then((inner) => {
|
|
56
68
|
this._inner = inner;
|
|
57
69
|
});
|
|
58
70
|
}
|
package/dist/dirsql.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dirsql.js","sourceRoot":"","sources":["../src/dirsql.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,yDAAyD;AAGzD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"dirsql.js","sourceRoot":"","sources":["../src/dirsql.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,yDAAyD;AAGzD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAiF9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,OAAO,MAAM;IACjB;;;;;;OAMG;IACM,KAAK,CAAgB;IAE9B,gEAAgE;IACxD,MAAM,CAAgB;IAC9B,2EAA2E;IAC3E,6BAA6B;IACpB,QAAQ,CAAgB;IAMjC,YAAY,GAA2B;QACrC,MAAM,OAAO,GACX,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC,MAAM,CAAC;QAC9B,4EAA4E;QAC5E,mEAAmE;QACnE,2EAA2E;QAC3E,6DAA6D;QAC7D,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE;aAC3B,IAAI,CAAC,GAAG,EAAE;YACT,MAAM,UAAU,GACd,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9B,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC;gBACxD,UAAU,EAAE,CAAC,CAAC,UAAU;aACzB,CAAC,CAAC,IAAI,IAAI,CAAC;YACd,OAAO,IAAI,CAAC,SAAS,CACnB,OAAO,CAAC,IAAI,IAAI,IAAI,EACpB,OAAO,CAAC,MAAM,IAAI,IAAI,EACtB,OAAO,CAAC,MAAM,IAAI,IAAI,EACtB,OAAO,CAAC,MAAM,IAAI,IAAI,EACtB,OAAO,CAAC,OAAO,IAAI,IAAI,EACvB,OAAO,CAAC,WAAW,IAAI,IAAI,EAC3B,UAAU,CACX,CAAC;QACJ,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,GAAW;QACrB,MAAM,IAAI,CAAC,KAAK,CAAC;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,KAAK,CAAC;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,MAAM,IAAI,CAAC,KAAK,CAAC;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,CAAC,KAAK;QACV,MAAM,IAAI,CAAC,KAAK,CAAC;QACjB,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACjC,OAAO,IAAI,EAAE,CAAC;YACZ,qEAAqE;YACrE,gEAAgE;YAChE,sEAAsE;YACtE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACjD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `require.resolve`-shaped seam. Injectable so unit tests can fake module
|
|
3
|
+
* resolution without a real `node_modules` layout (mirrors `load-native-core`'s
|
|
4
|
+
* `Requirer`).
|
|
5
|
+
*/
|
|
6
|
+
export interface PackageResolver {
|
|
7
|
+
/** Resolve a specifier to an on-disk path (`require.resolve`). */
|
|
8
|
+
resolve(specifier: string): string;
|
|
9
|
+
/** Candidate `node_modules` dirs for a specifier (`require.resolve.paths`). */
|
|
10
|
+
paths(specifier: string): string[] | null;
|
|
11
|
+
}
|
|
12
|
+
/** True when `path` is a bare package name rather than a file path. */
|
|
13
|
+
export declare function isBareName(path: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Resolve an extension `path` to a concrete file. `base` is the directory a
|
|
16
|
+
* relative path and the bare-name shadow probe resolve against (a config file's
|
|
17
|
+
* parent dir, or the cwd for programmatic entries). `resolveRelative` makes a
|
|
18
|
+
* relative path-looking value absolute against `base` (config-file semantics);
|
|
19
|
+
* when false it is returned verbatim (programmatic semantics).
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveExtensionPath(path: string, base: string, resolveRelative: boolean, resolver?: PackageResolver): string;
|
|
22
|
+
//# sourceMappingURL=resolve-extension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-extension.d.ts","sourceRoot":"","sources":["../src/resolve-extension.ts"],"names":[],"mappings":"AA6BA;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,+EAA+E;IAC/E,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;CAC3C;AAqBD,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKhD;AA+CD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,OAAO,EACxB,QAAQ,GAAE,eAAmC,GAC5C,MAAM,CAYR"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// Resolve an extension entry's `path` to a concrete loadable file.
|
|
2
|
+
//
|
|
3
|
+
// #225 / #230 support only literal file paths. #299 adds resolving a bare
|
|
4
|
+
// **package name**: when `path` carries no path separator and no loadable-file
|
|
5
|
+
// suffix, it names a package installed under `node_modules`, and dirsql
|
|
6
|
+
// discovers the loadable file *inside* that package.
|
|
7
|
+
//
|
|
8
|
+
// Resolution is an ordered probe (file-first, then package), so every literal
|
|
9
|
+
// path keeps its old behavior and only a bare name reaches the package
|
|
10
|
+
// machinery:
|
|
11
|
+
//
|
|
12
|
+
// 1. Path-looking (contains a separator, or ends in `.so` / `.dylib` /
|
|
13
|
+
// `.dll` / `.node`) -> returned as a file path: made absolute against
|
|
14
|
+
// `base` when `resolveRelative` is set (config-file entries), else
|
|
15
|
+
// verbatim (programmatic entries, mirroring the Rust builder).
|
|
16
|
+
// 2. Bare name -> a same-named local file under `base` *shadows* the package
|
|
17
|
+
// (parity with the file-first probe); otherwise the package dir is located
|
|
18
|
+
// via `require.resolve` and the current platform's loadable is globbed
|
|
19
|
+
// from inside it. Zero matches and multiple matches are both hard errors --
|
|
20
|
+
// the caller must disambiguate with a literal path.
|
|
21
|
+
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
22
|
+
import { createRequire } from "node:module";
|
|
23
|
+
import { isAbsolute, join, resolve as resolvePath } from "node:path";
|
|
24
|
+
// Suffixes that mark a value as "already a file path" (so package resolution is
|
|
25
|
+
// never attempted).
|
|
26
|
+
const LOADABLE_SUFFIXES = [".so", ".dylib", ".dll", ".node"];
|
|
27
|
+
function defaultResolver() {
|
|
28
|
+
const req = createRequire(import.meta.url);
|
|
29
|
+
return {
|
|
30
|
+
resolve: (s) => req.resolve(s),
|
|
31
|
+
paths: (s) => req.resolve.paths(s),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/** Loadable-file glob suffix(es) for the current platform. */
|
|
35
|
+
function platformSuffixes() {
|
|
36
|
+
if (process.platform === "darwin") {
|
|
37
|
+
return [".dylib", ".node"];
|
|
38
|
+
}
|
|
39
|
+
if (process.platform === "win32") {
|
|
40
|
+
return [".dll", ".node"];
|
|
41
|
+
}
|
|
42
|
+
return [".so", ".node"];
|
|
43
|
+
}
|
|
44
|
+
/** True when `path` is a bare package name rather than a file path. */
|
|
45
|
+
export function isBareName(path) {
|
|
46
|
+
if (path.includes("/") || path.includes("\\")) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return !LOADABLE_SUFFIXES.some((s) => path.endsWith(s));
|
|
50
|
+
}
|
|
51
|
+
/** Locate the on-disk package directory for a bare name. */
|
|
52
|
+
function packageDir(name, resolver) {
|
|
53
|
+
// The package.json's directory is the package root. Preferred because it is
|
|
54
|
+
// unaffected by an `exports` map that hides the main entry.
|
|
55
|
+
try {
|
|
56
|
+
const pkgJson = resolver.resolve(`${name}/package.json`);
|
|
57
|
+
return pkgJson.slice(0, pkgJson.length - "/package.json".length);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// `exports` may forbid resolving package.json; fall back to scanning the
|
|
61
|
+
// candidate node_modules dirs for `<dir>/<name>`.
|
|
62
|
+
}
|
|
63
|
+
for (const dir of resolver.paths(name) ?? []) {
|
|
64
|
+
const candidate = join(dir, name);
|
|
65
|
+
if (existsSync(candidate) && statSync(candidate).isDirectory()) {
|
|
66
|
+
return candidate;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
throw new Error(`could not resolve extension package '${name}': not installed`);
|
|
70
|
+
}
|
|
71
|
+
/** Glob the platform loadable inside a bare name's package dir. */
|
|
72
|
+
function resolvePackage(name, resolver) {
|
|
73
|
+
const dir = packageDir(name, resolver);
|
|
74
|
+
const suffixes = platformSuffixes();
|
|
75
|
+
const matches = readdirSync(dir, { recursive: true })
|
|
76
|
+
.filter((entry) => suffixes.some((s) => entry.endsWith(s)))
|
|
77
|
+
.map((entry) => join(dir, entry))
|
|
78
|
+
.sort();
|
|
79
|
+
const desc = suffixes.join(" / ");
|
|
80
|
+
if (matches.length === 0) {
|
|
81
|
+
throw new Error(`no loadable extension file (${desc}) found in package '${name}' (searched ${dir})`);
|
|
82
|
+
}
|
|
83
|
+
if (matches.length > 1) {
|
|
84
|
+
throw new Error(`multiple loadable extension files found in package '${name}': ${matches.join(", ")}; disambiguate with a literal path`);
|
|
85
|
+
}
|
|
86
|
+
return matches[0];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Resolve an extension `path` to a concrete file. `base` is the directory a
|
|
90
|
+
* relative path and the bare-name shadow probe resolve against (a config file's
|
|
91
|
+
* parent dir, or the cwd for programmatic entries). `resolveRelative` makes a
|
|
92
|
+
* relative path-looking value absolute against `base` (config-file semantics);
|
|
93
|
+
* when false it is returned verbatim (programmatic semantics).
|
|
94
|
+
*/
|
|
95
|
+
export function resolveExtensionPath(path, base, resolveRelative, resolver = defaultResolver()) {
|
|
96
|
+
if (!isBareName(path)) {
|
|
97
|
+
if (resolveRelative && !isAbsolute(path)) {
|
|
98
|
+
return resolvePath(base, path);
|
|
99
|
+
}
|
|
100
|
+
return path;
|
|
101
|
+
}
|
|
102
|
+
const local = resolvePath(base, path);
|
|
103
|
+
if (existsSync(local) && statSync(local).isFile()) {
|
|
104
|
+
return local;
|
|
105
|
+
}
|
|
106
|
+
return resolvePackage(path, resolver);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=resolve-extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-extension.js","sourceRoot":"","sources":["../src/resolve-extension.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dirsql",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.53",
|
|
4
4
|
"description": "Ephemeral SQL index over a local directory",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "https://github.com/thekevinscott/dirsql",
|
|
@@ -196,6 +196,9 @@
|
|
|
196
196
|
]
|
|
197
197
|
}
|
|
198
198
|
},
|
|
199
|
+
"dependencies": {
|
|
200
|
+
"smol-toml": "^1.6.1"
|
|
201
|
+
},
|
|
199
202
|
"devDependencies": {
|
|
200
203
|
"@biomejs/biome": "^1.9.0",
|
|
201
204
|
"@napi-rs/cli": "^3.0.0",
|
|
@@ -216,15 +219,15 @@
|
|
|
216
219
|
]
|
|
217
220
|
},
|
|
218
221
|
"optionalDependencies": {
|
|
219
|
-
"@dirsql/lib-linux-x64-gnu": "0.3.
|
|
220
|
-
"@dirsql/lib-linux-arm64-gnu": "0.3.
|
|
221
|
-
"@dirsql/lib-darwin-x64": "0.3.
|
|
222
|
-
"@dirsql/lib-darwin-arm64": "0.3.
|
|
223
|
-
"@dirsql/lib-win32-x64-msvc": "0.3.
|
|
224
|
-
"@dirsql/cli-linux-x64-gnu": "0.3.
|
|
225
|
-
"@dirsql/cli-linux-arm64-gnu": "0.3.
|
|
226
|
-
"@dirsql/cli-darwin-x64": "0.3.
|
|
227
|
-
"@dirsql/cli-darwin-arm64": "0.3.
|
|
228
|
-
"@dirsql/cli-win32-x64-msvc": "0.3.
|
|
222
|
+
"@dirsql/lib-linux-x64-gnu": "0.3.53",
|
|
223
|
+
"@dirsql/lib-linux-arm64-gnu": "0.3.53",
|
|
224
|
+
"@dirsql/lib-darwin-x64": "0.3.53",
|
|
225
|
+
"@dirsql/lib-darwin-arm64": "0.3.53",
|
|
226
|
+
"@dirsql/lib-win32-x64-msvc": "0.3.53",
|
|
227
|
+
"@dirsql/cli-linux-x64-gnu": "0.3.53",
|
|
228
|
+
"@dirsql/cli-linux-arm64-gnu": "0.3.53",
|
|
229
|
+
"@dirsql/cli-darwin-x64": "0.3.53",
|
|
230
|
+
"@dirsql/cli-darwin-arm64": "0.3.53",
|
|
231
|
+
"@dirsql/cli-win32-x64-msvc": "0.3.53"
|
|
229
232
|
}
|
|
230
233
|
}
|