prolog-trace-viz 2.6.3 → 2.6.6
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/LICENSE +21 -0
- package/README.md +3 -0
- package/dist/build-info.d.ts +3 -3
- package/dist/build-info.js +3 -3
- package/dist/cli.d.ts +3 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/executor.d.ts +4 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +4 -3
- package/dist/executor.js.map +1 -1
- package/dist/index.js +22 -1
- package/dist/index.js.map +1 -1
- package/dist/prompt.d.ts +23 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +43 -0
- package/dist/prompt.js.map +1 -0
- package/dist/spinner.d.ts +38 -0
- package/dist/spinner.d.ts.map +1 -0
- package/dist/spinner.js +98 -0
- package/dist/spinner.js.map +1 -0
- package/dist/update-notifier.d.ts +39 -0
- package/dist/update-notifier.d.ts.map +1 -0
- package/dist/update-notifier.js +139 -0
- package/dist/update-notifier.js.map +1 -0
- package/dist/updater.d.ts +26 -0
- package/dist/updater.d.ts.map +1 -0
- package/dist/updater.js +93 -0
- package/dist/updater.js.map +1 -0
- package/dist/wrapper.d.ts +5 -1
- package/dist/wrapper.d.ts.map +1 -1
- package/dist/wrapper.js +8 -4
- package/dist/wrapper.js.map +1 -1
- package/package.json +1 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Textology Labs
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -58,6 +58,9 @@ prolog-trace-viz <prolog-file> <query> [options]
|
|
|
58
58
|
| `-h, --help` | Show help message |
|
|
59
59
|
| `-v, --version` | Show version number |
|
|
60
60
|
|
|
61
|
+
ptv automatically checks npm for a newer release (at most once per day) and
|
|
62
|
+
offers to install it. Use `--quiet` to skip that check.
|
|
63
|
+
|
|
61
64
|
### Debug Flags
|
|
62
65
|
|
|
63
66
|
| Flag | Description |
|
package/dist/build-info.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export declare const BUILD_INFO: {
|
|
2
|
-
readonly version: "2.6.
|
|
2
|
+
readonly version: "2.6.6";
|
|
3
3
|
readonly name: "prolog-trace-viz";
|
|
4
4
|
readonly description: "Generate enhanced visual trace diagrams for Prolog query execution";
|
|
5
5
|
readonly author: "Johnny Jarecsni <johnny.jarecsni@icloud.com>";
|
|
6
6
|
readonly license: "MIT";
|
|
7
|
-
readonly buildTimestamp: "2026-05-
|
|
8
|
-
readonly gitCommit: "
|
|
7
|
+
readonly buildTimestamp: "2026-05-25T12:21:44.192Z";
|
|
8
|
+
readonly gitCommit: "265f415";
|
|
9
9
|
readonly gitBranch: "main";
|
|
10
10
|
readonly nodeVersion: "v22.17.0";
|
|
11
11
|
readonly platform: "darwin";
|
package/dist/build-info.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// This file is auto-generated during build
|
|
2
2
|
// Do not edit manually - regenerated on each build
|
|
3
3
|
export const BUILD_INFO = {
|
|
4
|
-
"version": "2.6.
|
|
4
|
+
"version": "2.6.6",
|
|
5
5
|
"name": "prolog-trace-viz",
|
|
6
6
|
"description": "Generate enhanced visual trace diagrams for Prolog query execution",
|
|
7
7
|
"author": "Johnny Jarecsni <johnny.jarecsni@icloud.com>",
|
|
8
8
|
"license": "MIT",
|
|
9
|
-
"buildTimestamp": "2026-05-
|
|
10
|
-
"gitCommit": "
|
|
9
|
+
"buildTimestamp": "2026-05-25T12:21:44.192Z",
|
|
10
|
+
"gitCommit": "265f415",
|
|
11
11
|
"gitBranch": "main",
|
|
12
12
|
"nodeVersion": "v22.17.0",
|
|
13
13
|
"platform": "darwin",
|
package/dist/cli.d.ts
CHANGED
|
@@ -27,13 +27,13 @@ export declare function getHelpText(): string;
|
|
|
27
27
|
export declare function getVersion(): string;
|
|
28
28
|
export declare function getCopyright(): string;
|
|
29
29
|
export declare function getBuildInfo(): {
|
|
30
|
-
readonly version: "2.6.
|
|
30
|
+
readonly version: "2.6.6";
|
|
31
31
|
readonly name: "prolog-trace-viz";
|
|
32
32
|
readonly description: "Generate enhanced visual trace diagrams for Prolog query execution";
|
|
33
33
|
readonly author: "Johnny Jarecsni <johnny.jarecsni@icloud.com>";
|
|
34
34
|
readonly license: "MIT";
|
|
35
|
-
readonly buildTimestamp: "2026-05-
|
|
36
|
-
readonly gitCommit: "
|
|
35
|
+
readonly buildTimestamp: "2026-05-25T12:21:44.192Z";
|
|
36
|
+
readonly gitCommit: "265f415";
|
|
37
37
|
readonly gitBranch: "main";
|
|
38
38
|
readonly nodeVersion: "v22.17.0";
|
|
39
39
|
readonly platform: "darwin";
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,SAAS,EAAE,MAAM,aAAa,CAAC;AAGhE;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,eAAe,CAAC;AAExC;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,EAAsB,CAAC;AAE9D,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IAC7D,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,SAAS,EAAE,MAAM,aAAa,CAAC;AAGhE;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,eAAe,CAAC;AAExC;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,EAAsB,CAAC;AAE9D,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IAC7D,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAwCD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAoJnD;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,YAAY;;;;;;;;;;;;EAE3B"}
|
package/dist/cli.js
CHANGED
|
@@ -27,6 +27,9 @@ OPTIONS:
|
|
|
27
27
|
-v, --version Show version number
|
|
28
28
|
--copyright Show copyright and build information
|
|
29
29
|
|
|
30
|
+
ptv checks for a newer version automatically (at most once per day) and
|
|
31
|
+
offers to update; pass --quiet to suppress that check.
|
|
32
|
+
|
|
30
33
|
DEBUG FLAGS:
|
|
31
34
|
internal-vars Show Prolog's internal variable names alongside
|
|
32
35
|
clause variable names (e.g., "Z (_2008) = value")
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAa,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAO/D;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgB,CAAC,eAAe,CAAC,CAAC;AAmB9D,MAAM,SAAS,GAAG;EAChB,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,MAAM,UAAU,CAAC,WAAW
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/executor.d.ts
CHANGED
|
@@ -16,7 +16,10 @@ export declare function checkDependencies(): Promise<DependencyStatus>;
|
|
|
16
16
|
/**
|
|
17
17
|
* Executes the custom tracer with the given wrapper file and captures the JSON output.
|
|
18
18
|
*/
|
|
19
|
-
export declare function executeTracer(wrapperPath: string
|
|
19
|
+
export declare function executeTracer(wrapperPath: string, opts?: {
|
|
20
|
+
cwd?: string;
|
|
21
|
+
jsonPath?: string;
|
|
22
|
+
}): Promise<ExecutionResult>;
|
|
20
23
|
/**
|
|
21
24
|
* Legacy function for backward compatibility.
|
|
22
25
|
* @deprecated Use executeTracer instead.
|
package/dist/executor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,SAAS,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAwCD;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAyBnE;AAED;;GAEG;AACH,wBAAsB,aAAa,
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,SAAS,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAwCD;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAyBnE;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7C,OAAO,CAAC,eAAe,CAAC,CAgD1B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAEpF"}
|
package/dist/executor.js
CHANGED
|
@@ -62,12 +62,13 @@ export async function checkDependencies() {
|
|
|
62
62
|
/**
|
|
63
63
|
* Executes the custom tracer with the given wrapper file and captures the JSON output.
|
|
64
64
|
*/
|
|
65
|
-
export async function executeTracer(wrapperPath) {
|
|
65
|
+
export async function executeTracer(wrapperPath, opts = {}) {
|
|
66
66
|
const wrapperDir = path.dirname(wrapperPath);
|
|
67
|
-
const jsonPath = path.join(wrapperDir, 'trace.json');
|
|
67
|
+
const jsonPath = opts.jsonPath || path.join(wrapperDir, 'trace.json');
|
|
68
|
+
const cwd = opts.cwd || wrapperDir;
|
|
68
69
|
return new Promise((resolve, reject) => {
|
|
69
70
|
const proc = spawn('swipl', [wrapperPath], {
|
|
70
|
-
cwd
|
|
71
|
+
cwd,
|
|
71
72
|
});
|
|
72
73
|
let stderr = '';
|
|
73
74
|
proc.stderr.on('data', (data) => {
|
package/dist/executor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAa,MAAM,aAAa,CAAC;AAchE;;GAEG;AACH,KAAK,UAAU,UAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAEtD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,8DAA8D;gBAC9D,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAChE,OAAO,CAAC;oBACN,SAAS,EAAE,IAAI;oBACf,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;iBACpD,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,KAAK,IAAI,CAAC,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;IAElD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,cAAc,EAAE,KAAK;YACrB,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,oBAAoB,CAAC;SACnD,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,OAAO;YACL,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,OAAO;YACrB,KAAK,EAAE,WAAW,CAChB,SAAS,CAAC,sBAAsB,EAChC,sBAAsB,OAAO,0EAA0E,CACxG;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,OAAO;KACtB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import * as fs from 'node:fs/promises';
|
|
3
|
+
import * as os from 'node:os';
|
|
3
4
|
import { parseArgs, getHelpText, getVersion, getCopyright } from './cli.js';
|
|
4
5
|
import { formatError } from './errors.js';
|
|
5
6
|
import { createTempWrapper } from './wrapper.js';
|
|
@@ -64,6 +65,12 @@ async function main() {
|
|
|
64
65
|
process.exit(1);
|
|
65
66
|
}
|
|
66
67
|
const options = result.options;
|
|
68
|
+
// Nudge for updates *before* the command. If the user accepts, the notifier
|
|
69
|
+
// installs the new version and re-execs ptv with the same arguments, so
|
|
70
|
+
// the user's command runs transparently on the freshly installed binary.
|
|
71
|
+
// Throttled (once/day) and silent on non-TTY, so the delay is typically zero.
|
|
72
|
+
const { notifyAndMaybeUpdate } = await import('./update-notifier.js');
|
|
73
|
+
await notifyAndMaybeUpdate({ quiet: options.quiet });
|
|
67
74
|
try {
|
|
68
75
|
await run(options);
|
|
69
76
|
}
|
|
@@ -99,6 +106,15 @@ async function run(options) {
|
|
|
99
106
|
const sourceClauseMap = buildSourceClauseMap(prologContent);
|
|
100
107
|
// Get absolute path to tracer.pl from package installation
|
|
101
108
|
const tracerPath = path.resolve(path.dirname(new URL(import.meta.url).pathname), '..', 'tracer.pl');
|
|
109
|
+
// Resolve the source file's directory so relative consult() paths in the
|
|
110
|
+
// user's code work the same as if they ran swipl directly on the file.
|
|
111
|
+
const sourceAbsPath = path.resolve(options.prologFile);
|
|
112
|
+
const sourceDir = path.dirname(sourceAbsPath);
|
|
113
|
+
// Pre-create the temp dir so we can compute an absolute trace.json path
|
|
114
|
+
// and bake it into the wrapper. cwd will be the source dir (so relative
|
|
115
|
+
// consult() paths resolve), so trace.json needs an absolute path.
|
|
116
|
+
const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'prolog-trace-viz-'));
|
|
117
|
+
const absTraceJson = path.join(tempDir, 'trace.json');
|
|
102
118
|
// Create wrapper (no instrumentation needed)
|
|
103
119
|
logVerbose('Creating tracer wrapper...', options);
|
|
104
120
|
const tempFile = await createTempWrapper({
|
|
@@ -106,11 +122,16 @@ async function run(options) {
|
|
|
106
122
|
query: options.query,
|
|
107
123
|
depth: options.depth,
|
|
108
124
|
tracerPath,
|
|
125
|
+
tracePath: absTraceJson,
|
|
126
|
+
tempDir,
|
|
109
127
|
});
|
|
110
128
|
try {
|
|
111
129
|
// Execute custom tracer
|
|
112
130
|
logVerbose('Executing custom tracer...', options);
|
|
113
|
-
const execResult = await executeTracer(tempFile.path
|
|
131
|
+
const execResult = await executeTracer(tempFile.path, {
|
|
132
|
+
cwd: sourceDir,
|
|
133
|
+
jsonPath: absTraceJson,
|
|
134
|
+
});
|
|
114
135
|
logVerbose(`Tracer exit code: ${execResult.exitCode}`, options);
|
|
115
136
|
logVerbose(`JSON length: ${execResult.json?.length || 0}`, options);
|
|
116
137
|
logVerbose(`Stderr: ${execResult.stderr}`, options);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/prompt.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt - a minimal interactive yes/no confirmation.
|
|
3
|
+
*
|
|
4
|
+
* On a non-interactive stdin (no TTY - e.g. piped input or CI) the prompt
|
|
5
|
+
* cannot be answered, so the configured default is used instead.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Interpret a raw yes/no answer string.
|
|
9
|
+
* An empty answer takes the default; otherwise "y"/"yes" mean yes.
|
|
10
|
+
*/
|
|
11
|
+
export declare function interpretYesNo(answer: string, defaultYes: boolean): boolean;
|
|
12
|
+
export interface PromptOptions {
|
|
13
|
+
/** Answer used for an empty response and for non-interactive stdin. */
|
|
14
|
+
defaultYes?: boolean;
|
|
15
|
+
input?: NodeJS.ReadStream;
|
|
16
|
+
output?: NodeJS.WriteStream;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Ask a yes/no question and resolve to the user's choice.
|
|
20
|
+
* The prompt suffix reflects the default: "(Y/n)" or "(y/N)".
|
|
21
|
+
*/
|
|
22
|
+
export declare function promptYesNo(question: string, options?: PromptOptions): Promise<boolean>;
|
|
23
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAM3E;AAED,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBjG"}
|
package/dist/prompt.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt - a minimal interactive yes/no confirmation.
|
|
3
|
+
*
|
|
4
|
+
* On a non-interactive stdin (no TTY - e.g. piped input or CI) the prompt
|
|
5
|
+
* cannot be answered, so the configured default is used instead.
|
|
6
|
+
*/
|
|
7
|
+
import * as readline from 'node:readline';
|
|
8
|
+
/**
|
|
9
|
+
* Interpret a raw yes/no answer string.
|
|
10
|
+
* An empty answer takes the default; otherwise "y"/"yes" mean yes.
|
|
11
|
+
*/
|
|
12
|
+
export function interpretYesNo(answer, defaultYes) {
|
|
13
|
+
const normalized = answer.trim().toLowerCase();
|
|
14
|
+
if (normalized === '') {
|
|
15
|
+
return defaultYes;
|
|
16
|
+
}
|
|
17
|
+
return normalized === 'y' || normalized === 'yes';
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Ask a yes/no question and resolve to the user's choice.
|
|
21
|
+
* The prompt suffix reflects the default: "(Y/n)" or "(y/N)".
|
|
22
|
+
*/
|
|
23
|
+
export async function promptYesNo(question, options = {}) {
|
|
24
|
+
const defaultYes = options.defaultYes ?? true;
|
|
25
|
+
const input = options.input ?? process.stdin;
|
|
26
|
+
const output = options.output ?? process.stderr;
|
|
27
|
+
// Without an interactive terminal there is no way to ask - use the default.
|
|
28
|
+
if (!input.isTTY) {
|
|
29
|
+
return defaultYes;
|
|
30
|
+
}
|
|
31
|
+
const rl = readline.createInterface({ input, output });
|
|
32
|
+
try {
|
|
33
|
+
const suffix = defaultYes ? '(Y/n)' : '(y/N)';
|
|
34
|
+
const answer = await new Promise(resolve => {
|
|
35
|
+
rl.question(`${question} ${suffix} `, resolve);
|
|
36
|
+
});
|
|
37
|
+
return interpretYesNo(answer, defaultYes);
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
rl.close();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,UAAmB;IAChE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,KAAK,CAAC;AACpD,CAAC;AASD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,UAAyB,EAAE;IAC7E,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAEhD,4EAA4E;IAC5E,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,OAAO,CAAC,EAAE;YACjD,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,IAAI,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,OAAO,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spinner - a minimal terminal progress animation (the "turning thing").
|
|
3
|
+
*
|
|
4
|
+
* On an interactive terminal (TTY) it renders an animated spinner that updates
|
|
5
|
+
* in place. On a non-TTY stream (pipe, file, CI logs) it degrades gracefully:
|
|
6
|
+
* the animation is skipped and only the final status line is emitted, so piped
|
|
7
|
+
* output stays clean.
|
|
8
|
+
*/
|
|
9
|
+
/** Animation frames, cycled in order. A classic rotating braille spinner. */
|
|
10
|
+
export declare const SPINNER_FRAMES: string[];
|
|
11
|
+
/** Delay between frames, in milliseconds. */
|
|
12
|
+
export declare const SPINNER_INTERVAL_MS = 80;
|
|
13
|
+
export declare class Spinner {
|
|
14
|
+
private frameIndex;
|
|
15
|
+
private timer;
|
|
16
|
+
private text;
|
|
17
|
+
private readonly stream;
|
|
18
|
+
private readonly isTTY;
|
|
19
|
+
constructor(stream?: NodeJS.WriteStream);
|
|
20
|
+
/** The glyph for the current animation frame. */
|
|
21
|
+
get frame(): string;
|
|
22
|
+
/** Whether the spinner is currently animating. */
|
|
23
|
+
get isSpinning(): boolean;
|
|
24
|
+
/** Start the animation with the given label. */
|
|
25
|
+
start(text: string): this;
|
|
26
|
+
/** Update the spinner label without interrupting the animation. */
|
|
27
|
+
setText(text: string): this;
|
|
28
|
+
/** Stop the animation, leaving the line cleared. */
|
|
29
|
+
stop(): this;
|
|
30
|
+
/** Stop the animation with a success mark and final message. */
|
|
31
|
+
succeed(text?: string): this;
|
|
32
|
+
/** Stop the animation with a failure mark and final message. */
|
|
33
|
+
fail(text?: string): this;
|
|
34
|
+
private finish;
|
|
35
|
+
private render;
|
|
36
|
+
private stopTimer;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../src/spinner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,6EAA6E;AAC7E,eAAO,MAAM,cAAc,UAAqD,CAAC;AAEjF,6CAA6C;AAC7C,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAMtC,qBAAa,OAAO;IAClB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;gBAEpB,MAAM,GAAE,MAAM,CAAC,WAA4B;IAKvD,iDAAiD;IACjD,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,kDAAkD;IAClD,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,gDAAgD;IAChD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAkBzB,mEAAmE;IACnE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ3B,oDAAoD;IACpD,IAAI,IAAI,IAAI;IAQZ,gEAAgE;IAChE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAI5B,gEAAgE;IAChE,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAIzB,OAAO,CAAC,MAAM;IAad,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,SAAS;CAMlB"}
|
package/dist/spinner.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spinner - a minimal terminal progress animation (the "turning thing").
|
|
3
|
+
*
|
|
4
|
+
* On an interactive terminal (TTY) it renders an animated spinner that updates
|
|
5
|
+
* in place. On a non-TTY stream (pipe, file, CI logs) it degrades gracefully:
|
|
6
|
+
* the animation is skipped and only the final status line is emitted, so piped
|
|
7
|
+
* output stays clean.
|
|
8
|
+
*/
|
|
9
|
+
/** Animation frames, cycled in order. A classic rotating braille spinner. */
|
|
10
|
+
export const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
11
|
+
/** Delay between frames, in milliseconds. */
|
|
12
|
+
export const SPINNER_INTERVAL_MS = 80;
|
|
13
|
+
const HIDE_CURSOR = '\x1b[?25l';
|
|
14
|
+
const SHOW_CURSOR = '\x1b[?25h';
|
|
15
|
+
const CLEAR_LINE = '\r\x1b[2K';
|
|
16
|
+
export class Spinner {
|
|
17
|
+
frameIndex = 0;
|
|
18
|
+
timer = null;
|
|
19
|
+
text = '';
|
|
20
|
+
stream;
|
|
21
|
+
isTTY;
|
|
22
|
+
constructor(stream = process.stderr) {
|
|
23
|
+
this.stream = stream;
|
|
24
|
+
this.isTTY = Boolean(stream.isTTY);
|
|
25
|
+
}
|
|
26
|
+
/** The glyph for the current animation frame. */
|
|
27
|
+
get frame() {
|
|
28
|
+
return SPINNER_FRAMES[this.frameIndex % SPINNER_FRAMES.length];
|
|
29
|
+
}
|
|
30
|
+
/** Whether the spinner is currently animating. */
|
|
31
|
+
get isSpinning() {
|
|
32
|
+
return this.timer !== null;
|
|
33
|
+
}
|
|
34
|
+
/** Start the animation with the given label. */
|
|
35
|
+
start(text) {
|
|
36
|
+
this.text = text;
|
|
37
|
+
if (!this.isTTY) {
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
this.stream.write(HIDE_CURSOR);
|
|
41
|
+
this.render();
|
|
42
|
+
this.timer = setInterval(() => {
|
|
43
|
+
this.frameIndex = (this.frameIndex + 1) % SPINNER_FRAMES.length;
|
|
44
|
+
this.render();
|
|
45
|
+
}, SPINNER_INTERVAL_MS);
|
|
46
|
+
// Don't let the spinner timer keep the process alive on its own.
|
|
47
|
+
if (typeof this.timer.unref === 'function') {
|
|
48
|
+
this.timer.unref();
|
|
49
|
+
}
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
/** Update the spinner label without interrupting the animation. */
|
|
53
|
+
setText(text) {
|
|
54
|
+
this.text = text;
|
|
55
|
+
if (this.isTTY && this.timer) {
|
|
56
|
+
this.render();
|
|
57
|
+
}
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
/** Stop the animation, leaving the line cleared. */
|
|
61
|
+
stop() {
|
|
62
|
+
this.stopTimer();
|
|
63
|
+
if (this.isTTY) {
|
|
64
|
+
this.stream.write(CLEAR_LINE + SHOW_CURSOR);
|
|
65
|
+
}
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
/** Stop the animation with a success mark and final message. */
|
|
69
|
+
succeed(text) {
|
|
70
|
+
return this.finish('✔', text);
|
|
71
|
+
}
|
|
72
|
+
/** Stop the animation with a failure mark and final message. */
|
|
73
|
+
fail(text) {
|
|
74
|
+
return this.finish('✖', text);
|
|
75
|
+
}
|
|
76
|
+
finish(symbol, text) {
|
|
77
|
+
this.stopTimer();
|
|
78
|
+
const message = text ?? this.text;
|
|
79
|
+
if (this.isTTY) {
|
|
80
|
+
this.stream.write(CLEAR_LINE);
|
|
81
|
+
}
|
|
82
|
+
this.stream.write(`${symbol} ${message}\n`);
|
|
83
|
+
if (this.isTTY) {
|
|
84
|
+
this.stream.write(SHOW_CURSOR);
|
|
85
|
+
}
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
render() {
|
|
89
|
+
this.stream.write(`${CLEAR_LINE}${this.frame} ${this.text}`);
|
|
90
|
+
}
|
|
91
|
+
stopTimer() {
|
|
92
|
+
if (this.timer) {
|
|
93
|
+
clearInterval(this.timer);
|
|
94
|
+
this.timer = null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../src/spinner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update notifier - the automatic, throttled "is a newer ptv available?"
|
|
3
|
+
* check that runs after a normal command and nudges the user to update.
|
|
4
|
+
*
|
|
5
|
+
* Design goals:
|
|
6
|
+
* - Never disrupt the actual command: every failure here is swallowed.
|
|
7
|
+
* - Don't hammer the npm registry: a real network check runs at most once
|
|
8
|
+
* per day; in between, a cached result is reused.
|
|
9
|
+
* - Stay quiet when there is no human to nudge (non-TTY) or when asked
|
|
10
|
+
* to be quiet.
|
|
11
|
+
*/
|
|
12
|
+
/** How long a registry check result stays fresh: once per day. */
|
|
13
|
+
export declare const CHECK_INTERVAL_MS: number;
|
|
14
|
+
/** Where the throttling cache lives. */
|
|
15
|
+
export declare const CACHE_FILE: string;
|
|
16
|
+
export interface UpdateCache {
|
|
17
|
+
/** Epoch milliseconds of the last successful registry check. */
|
|
18
|
+
checkedAt: number;
|
|
19
|
+
/** Latest version string seen at that check. */
|
|
20
|
+
latest: string;
|
|
21
|
+
}
|
|
22
|
+
/** Read the throttling cache. Returns null if missing or unreadable. */
|
|
23
|
+
export declare function readCache(file?: string): UpdateCache | null;
|
|
24
|
+
/** Write the throttling cache. Best-effort: failures are ignored. */
|
|
25
|
+
export declare function writeCache(cache: UpdateCache, file?: string): void;
|
|
26
|
+
/** Whether a fresh network check is due, given the cache and current time. */
|
|
27
|
+
export declare function isCheckDue(cache: UpdateCache | null, now: number, intervalMs?: number): boolean;
|
|
28
|
+
export interface NotifyOptions {
|
|
29
|
+
/** Suppress the nudge entirely (mirrors the CLI --quiet flag). */
|
|
30
|
+
quiet: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Automatic update nudge. Runs *before* the main command so the user can
|
|
34
|
+
* update first; on a "yes" answer we install, then re-exec ptv with the
|
|
35
|
+
* same arguments so the trace runs on the new version transparently.
|
|
36
|
+
* Silent and non-fatal on any error.
|
|
37
|
+
*/
|
|
38
|
+
export declare function notifyAndMaybeUpdate(options: NotifyOptions): Promise<void>;
|
|
39
|
+
//# sourceMappingURL=update-notifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-notifier.d.ts","sourceRoot":"","sources":["../src/update-notifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAiBH,kEAAkE;AAClE,eAAO,MAAM,iBAAiB,QAAsB,CAAC;AAErD,wCAAwC;AACxC,eAAO,MAAM,UAAU,QAAkD,CAAC;AAE1E,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,IAAI,GAAE,MAAmB,GAAG,WAAW,GAAG,IAAI,CAUvE;AAED,qEAAqE;AACrE,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,GAAE,MAAmB,GAAG,IAAI,CAM9E;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CACxB,KAAK,EAAE,WAAW,GAAG,IAAI,EACzB,GAAG,EAAE,MAAM,EACX,UAAU,GAAE,MAA0B,GACrC,OAAO,CAGT;AAuBD,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,KAAK,EAAE,OAAO,CAAC;CAChB;AA2BD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiChF"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update notifier - the automatic, throttled "is a newer ptv available?"
|
|
3
|
+
* check that runs after a normal command and nudges the user to update.
|
|
4
|
+
*
|
|
5
|
+
* Design goals:
|
|
6
|
+
* - Never disrupt the actual command: every failure here is swallowed.
|
|
7
|
+
* - Don't hammer the npm registry: a real network check runs at most once
|
|
8
|
+
* per day; in between, a cached result is reused.
|
|
9
|
+
* - Stay quiet when there is no human to nudge (non-TTY) or when asked
|
|
10
|
+
* to be quiet.
|
|
11
|
+
*/
|
|
12
|
+
import * as fs from 'node:fs';
|
|
13
|
+
import * as os from 'node:os';
|
|
14
|
+
import * as path from 'node:path';
|
|
15
|
+
import { spawn } from 'node:child_process';
|
|
16
|
+
import { BUILD_INFO } from './build-info.js';
|
|
17
|
+
import { compareVersions, fetchLatestVersion, installUpdate } from './updater.js';
|
|
18
|
+
import { promptYesNo } from './prompt.js';
|
|
19
|
+
/**
|
|
20
|
+
* Env var set on the re-run child after a successful update. Prevents the
|
|
21
|
+
* newly installed process from running the update check again (which could
|
|
22
|
+
* otherwise loop if anything ever went sideways).
|
|
23
|
+
*/
|
|
24
|
+
const SKIP_CHECK_ENV = 'PTV_SKIP_UPDATE_CHECK';
|
|
25
|
+
/** How long a registry check result stays fresh: once per day. */
|
|
26
|
+
export const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
27
|
+
/** Where the throttling cache lives. */
|
|
28
|
+
export const CACHE_FILE = path.join(os.tmpdir(), 'ptv-update-check.json');
|
|
29
|
+
/** Read the throttling cache. Returns null if missing or unreadable. */
|
|
30
|
+
export function readCache(file = CACHE_FILE) {
|
|
31
|
+
try {
|
|
32
|
+
const data = JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
33
|
+
if (typeof data?.checkedAt === 'number' && typeof data?.latest === 'string') {
|
|
34
|
+
return { checkedAt: data.checkedAt, latest: data.latest };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Missing or corrupt cache - treated as "no cache".
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
/** Write the throttling cache. Best-effort: failures are ignored. */
|
|
43
|
+
export function writeCache(cache, file = CACHE_FILE) {
|
|
44
|
+
try {
|
|
45
|
+
fs.writeFileSync(file, JSON.stringify(cache), 'utf-8');
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// A non-writable temp dir must not break anything.
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Whether a fresh network check is due, given the cache and current time. */
|
|
52
|
+
export function isCheckDue(cache, now, intervalMs = CHECK_INTERVAL_MS) {
|
|
53
|
+
if (!cache)
|
|
54
|
+
return true;
|
|
55
|
+
return now - cache.checkedAt >= intervalMs;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Resolve the latest known version: reuse the cache when a check isn't due,
|
|
59
|
+
* otherwise query npm and refresh the cache. Returns null if undetermined.
|
|
60
|
+
*/
|
|
61
|
+
async function resolveLatestVersion(now) {
|
|
62
|
+
const cache = readCache();
|
|
63
|
+
// TEMP (v2.6.5): once-per-day throttle disabled so every run exercises
|
|
64
|
+
// the npm registry check. Re-enable by uncommenting the block below.
|
|
65
|
+
// if (!isCheckDue(cache, now)) {
|
|
66
|
+
// return cache!.latest;
|
|
67
|
+
// }
|
|
68
|
+
try {
|
|
69
|
+
const latest = await fetchLatestVersion();
|
|
70
|
+
writeCache({ checkedAt: now, latest });
|
|
71
|
+
return latest;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Offline or registry trouble: fall back to whatever we last saw.
|
|
75
|
+
return cache?.latest ?? null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Re-exec ptv with the user's original arguments, inheriting stdio so the
|
|
80
|
+
* command runs as if the user had invoked it directly on the freshly
|
|
81
|
+
* installed version. This function never returns - it exits the current
|
|
82
|
+
* process with the child's exit code (or 1 on spawn failure).
|
|
83
|
+
*/
|
|
84
|
+
async function rerunWithNewBinary() {
|
|
85
|
+
process.stderr.write('Re-running on the new version...\n\n');
|
|
86
|
+
return new Promise(() => {
|
|
87
|
+
const child = spawn(process.execPath, [process.argv[1], ...process.argv.slice(2)], {
|
|
88
|
+
stdio: 'inherit',
|
|
89
|
+
env: { ...process.env, [SKIP_CHECK_ENV]: '1' },
|
|
90
|
+
});
|
|
91
|
+
child.on('close', code => process.exit(code ?? 0));
|
|
92
|
+
child.on('error', err => {
|
|
93
|
+
process.stderr.write(`Re-run failed: ${err.message}\n`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Automatic update nudge. Runs *before* the main command so the user can
|
|
100
|
+
* update first; on a "yes" answer we install, then re-exec ptv with the
|
|
101
|
+
* same arguments so the trace runs on the new version transparently.
|
|
102
|
+
* Silent and non-fatal on any error.
|
|
103
|
+
*/
|
|
104
|
+
export async function notifyAndMaybeUpdate(options) {
|
|
105
|
+
try {
|
|
106
|
+
// Skip the check on the child we spawned after a successful update -
|
|
107
|
+
// it would just see the version it already is, but guard explicitly to
|
|
108
|
+
// be safe against any "always nudges" misconfiguration.
|
|
109
|
+
if (process.env[SKIP_CHECK_ENV] === '1')
|
|
110
|
+
return;
|
|
111
|
+
if (options.quiet)
|
|
112
|
+
return;
|
|
113
|
+
// Only nudge a real interactive session - we need stdout to show the
|
|
114
|
+
// message and stdin to read the answer.
|
|
115
|
+
if (!process.stdout.isTTY || !process.stdin.isTTY)
|
|
116
|
+
return;
|
|
117
|
+
const latest = await resolveLatestVersion(Date.now());
|
|
118
|
+
if (!latest)
|
|
119
|
+
return;
|
|
120
|
+
if (compareVersions(latest, BUILD_INFO.version) <= 0)
|
|
121
|
+
return;
|
|
122
|
+
process.stderr.write(`A new version of ptv is available: v${BUILD_INFO.version} → v${latest}\n`);
|
|
123
|
+
const proceed = await promptYesNo('Update now?', { defaultYes: true });
|
|
124
|
+
if (!proceed) {
|
|
125
|
+
process.stderr.write('Skipped - you will be reminded again later.\n\n');
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const installCode = await installUpdate(latest);
|
|
129
|
+
if (installCode === 0) {
|
|
130
|
+
await rerunWithNewBinary(); // never returns
|
|
131
|
+
}
|
|
132
|
+
// Install failed - fall through and run the command on the old binary
|
|
133
|
+
// rather than punish the user with an error after they tried to help.
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// An update nudge must never disrupt or fail the actual command.
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=update-notifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-notifier.js","sourceRoot":"","sources":["../src/update-notifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Updater - npm registry primitives for the automatic update check.
|
|
3
|
+
*
|
|
4
|
+
* The orchestration (throttling, cache, the user-facing nudge) lives in
|
|
5
|
+
* update-notifier.ts; this module just provides the building blocks.
|
|
6
|
+
*/
|
|
7
|
+
/** npm registry endpoint for the package's latest published version. */
|
|
8
|
+
export declare const REGISTRY_URL: string;
|
|
9
|
+
/** Default timeout for the registry request, in milliseconds. */
|
|
10
|
+
export declare const FETCH_TIMEOUT_MS = 3000;
|
|
11
|
+
/**
|
|
12
|
+
* Compare two dotted version strings.
|
|
13
|
+
* Returns 1 if a > b, -1 if a < b, 0 if equal. Non-numeric parts count as 0.
|
|
14
|
+
*/
|
|
15
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
16
|
+
/**
|
|
17
|
+
* Fetch the latest published version string from the npm registry.
|
|
18
|
+
* Aborts after `timeoutMs` so a slow network never stalls the CLI.
|
|
19
|
+
*/
|
|
20
|
+
export declare function fetchLatestVersion(url?: string, timeoutMs?: number): Promise<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Install the given version globally, showing a progress spinner.
|
|
23
|
+
* Returns the process exit code (0 on success, 1 on failure).
|
|
24
|
+
*/
|
|
25
|
+
export declare function installUpdate(latest: string): Promise<number>;
|
|
26
|
+
//# sourceMappingURL=updater.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,wEAAwE;AACxE,eAAO,MAAM,YAAY,QAAyD,CAAC;AAEnF,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAW5D;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,GAAE,MAAqB,EAC1B,SAAS,GAAE,MAAyB,GACnC,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAkBD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBnE"}
|
package/dist/updater.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Updater - npm registry primitives for the automatic update check.
|
|
3
|
+
*
|
|
4
|
+
* The orchestration (throttling, cache, the user-facing nudge) lives in
|
|
5
|
+
* update-notifier.ts; this module just provides the building blocks.
|
|
6
|
+
*/
|
|
7
|
+
import { spawn } from 'node:child_process';
|
|
8
|
+
import { BUILD_INFO } from './build-info.js';
|
|
9
|
+
import { Spinner } from './spinner.js';
|
|
10
|
+
/** npm registry endpoint for the package's latest published version. */
|
|
11
|
+
export const REGISTRY_URL = `https://registry.npmjs.org/${BUILD_INFO.name}/latest`;
|
|
12
|
+
/** Default timeout for the registry request, in milliseconds. */
|
|
13
|
+
export const FETCH_TIMEOUT_MS = 3000;
|
|
14
|
+
/**
|
|
15
|
+
* Compare two dotted version strings.
|
|
16
|
+
* Returns 1 if a > b, -1 if a < b, 0 if equal. Non-numeric parts count as 0.
|
|
17
|
+
*/
|
|
18
|
+
export function compareVersions(a, b) {
|
|
19
|
+
const pa = a.split('.').map(n => parseInt(n, 10) || 0);
|
|
20
|
+
const pb = b.split('.').map(n => parseInt(n, 10) || 0);
|
|
21
|
+
const length = Math.max(pa.length, pb.length);
|
|
22
|
+
for (let i = 0; i < length; i++) {
|
|
23
|
+
const da = pa[i] ?? 0;
|
|
24
|
+
const db = pb[i] ?? 0;
|
|
25
|
+
if (da > db)
|
|
26
|
+
return 1;
|
|
27
|
+
if (da < db)
|
|
28
|
+
return -1;
|
|
29
|
+
}
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Fetch the latest published version string from the npm registry.
|
|
34
|
+
* Aborts after `timeoutMs` so a slow network never stalls the CLI.
|
|
35
|
+
*/
|
|
36
|
+
export async function fetchLatestVersion(url = REGISTRY_URL, timeoutMs = FETCH_TIMEOUT_MS) {
|
|
37
|
+
const controller = new AbortController();
|
|
38
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
39
|
+
try {
|
|
40
|
+
const response = await fetch(url, {
|
|
41
|
+
headers: { accept: 'application/json' },
|
|
42
|
+
signal: controller.signal,
|
|
43
|
+
});
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
throw new Error(`npm registry returned HTTP ${response.status}`);
|
|
46
|
+
}
|
|
47
|
+
const data = (await response.json());
|
|
48
|
+
if (!data.version) {
|
|
49
|
+
throw new Error('npm registry response did not include a version');
|
|
50
|
+
}
|
|
51
|
+
return data.version;
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
clearTimeout(timer);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** Run `npm install --global <packageSpec>`. Resolves on success. */
|
|
58
|
+
function runNpmInstall(packageSpec) {
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
61
|
+
const child = spawn(npm, ['install', '--global', packageSpec], { stdio: 'ignore' });
|
|
62
|
+
child.on('error', reject);
|
|
63
|
+
child.on('close', code => {
|
|
64
|
+
if (code === 0) {
|
|
65
|
+
resolve();
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
reject(new Error(`npm exited with code ${code}`));
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Install the given version globally, showing a progress spinner.
|
|
75
|
+
* Returns the process exit code (0 on success, 1 on failure).
|
|
76
|
+
*/
|
|
77
|
+
export async function installUpdate(latest) {
|
|
78
|
+
const { name } = BUILD_INFO;
|
|
79
|
+
const spinner = new Spinner();
|
|
80
|
+
spinner.start(`Updating ptv to v${latest}...`);
|
|
81
|
+
try {
|
|
82
|
+
await runNpmInstall(`${name}@${latest}`);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
86
|
+
spinner.fail(`Update failed: ${reason}`);
|
|
87
|
+
console.error(` Try updating manually: npm install --global ${name}@latest`);
|
|
88
|
+
return 1;
|
|
89
|
+
}
|
|
90
|
+
spinner.succeed(`Updated ptv to v${latest}.`);
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=updater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updater.js","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"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"}
|
package/dist/wrapper.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export interface WrapperConfig {
|
|
|
3
3
|
query: string;
|
|
4
4
|
depth?: number;
|
|
5
5
|
tracerPath: string;
|
|
6
|
+
/** Absolute path for the trace.json output. Defaults to 'trace.json' (cwd-relative). */
|
|
7
|
+
tracePath?: string;
|
|
6
8
|
}
|
|
7
9
|
export interface TempFile {
|
|
8
10
|
path: string;
|
|
@@ -28,7 +30,9 @@ export declare function calculateLineOffset(prologContent: string): number;
|
|
|
28
30
|
* Maps a line number from the wrapper file back to the original source file.
|
|
29
31
|
*/
|
|
30
32
|
export declare function mapWrapperLineToSource(wrapperLine: number, prologContent: string): number;
|
|
31
|
-
export declare function createTempWrapper(config: WrapperConfig
|
|
33
|
+
export declare function createTempWrapper(config: WrapperConfig & {
|
|
34
|
+
tempDir?: string;
|
|
35
|
+
}): Promise<TempFile>;
|
|
32
36
|
/**
|
|
33
37
|
* Serializes a wrapper back to its component parts (for testing round-trips).
|
|
34
38
|
* Returns null if the content doesn't match expected wrapper format.
|
package/dist/wrapper.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../src/wrapper.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../src/wrapper.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAoC7D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAcjE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAMzF;AACD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,QAAQ,CAAC,CAiBnB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CA2BlE"}
|
package/dist/wrapper.js
CHANGED
|
@@ -11,8 +11,12 @@ import * as os from 'node:os';
|
|
|
11
11
|
* - Tracer cleanup
|
|
12
12
|
*/
|
|
13
13
|
export function generateWrapper(config) {
|
|
14
|
-
const { prologContent, query, depth, tracerPath } = config;
|
|
14
|
+
const { prologContent, query, depth, tracerPath, tracePath } = config;
|
|
15
15
|
const maxDepth = depth || 100; // Default to 100 if not specified
|
|
16
|
+
// Strip trailing '.' from the query - it's a clause terminator that breaks
|
|
17
|
+
// when the query is inlined as a sub-goal of run_trace.
|
|
18
|
+
const cleanQuery = query.trim().replace(/\.\s*$/, '');
|
|
19
|
+
const traceOutPath = (tracePath || 'trace.json').replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
16
20
|
const lines = [
|
|
17
21
|
`% Load custom tracer`,
|
|
18
22
|
`:- ['${tracerPath}'].`,
|
|
@@ -28,9 +32,9 @@ export function generateWrapper(config) {
|
|
|
28
32
|
lines.push('run_trace :-');
|
|
29
33
|
lines.push(` install_tracer(${maxDepth}),`);
|
|
30
34
|
lines.push(' catch(');
|
|
31
|
-
lines.push(` (${
|
|
35
|
+
lines.push(` (${cleanQuery}, export_trace_json('${traceOutPath}')),`);
|
|
32
36
|
lines.push(' Error,');
|
|
33
|
-
lines.push(` (format('Error: ~w~n', [Error]), export_trace_json('
|
|
37
|
+
lines.push(` (format('Error: ~w~n', [Error]), export_trace_json('${traceOutPath}'))`);
|
|
34
38
|
lines.push(' ),');
|
|
35
39
|
lines.push(' remove_tracer.');
|
|
36
40
|
lines.push('');
|
|
@@ -68,7 +72,7 @@ export function mapWrapperLineToSource(wrapperLine, prologContent) {
|
|
|
68
72
|
}
|
|
69
73
|
export async function createTempWrapper(config) {
|
|
70
74
|
const content = generateWrapper(config);
|
|
71
|
-
const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'prolog-trace-viz-'));
|
|
75
|
+
const tempDir = config.tempDir ?? await fs.mkdtemp(path.join(os.tmpdir(), 'prolog-trace-viz-'));
|
|
72
76
|
const wrapperPath = path.join(tempDir, 'wrapper.pl');
|
|
73
77
|
await fs.writeFile(wrapperPath, content, 'utf-8');
|
|
74
78
|
return {
|
package/dist/wrapper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../src/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../src/wrapper.ts"],"names":[],"mappings":"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"}
|