ts-reviewer 1.2.0 → 2.0.0
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/README.md +70 -28
- package/dist/cli.js +10 -12
- package/dist/cli.js.map +1 -1
- package/dist/hash.js +3 -9
- package/dist/hash.js.map +1 -1
- package/dist/incoming.js +9 -15
- package/dist/incoming.js.map +1 -1
- package/dist/index.js +24 -30
- package/dist/index.js.map +1 -1
- package/dist/io.js +12 -20
- package/dist/io.js.map +1 -1
- package/dist/meta.js +5 -12
- package/dist/meta.js.map +1 -1
- package/dist/paths.js +17 -24
- package/dist/paths.js.map +1 -1
- package/dist/prompt.js +17 -23
- package/dist/prompt.js.map +1 -1
- package/dist/updatePolicy.js +1 -4
- package/dist/updatePolicy.js.map +1 -1
- package/package.json +6 -5
- package/ts-reviewer/SKILL.md +177 -318
- package/ts-reviewer/references/architecture.md +84 -140
- package/ts-reviewer/references/async-patterns.md +46 -106
- package/ts-reviewer/references/boundary-validation.md +29 -56
- package/ts-reviewer/references/code-quality.md +63 -112
- package/ts-reviewer/references/dependency-hygiene.md +31 -47
- package/ts-reviewer/references/error-handling.md +27 -49
- package/ts-reviewer/references/fix-workflow.md +92 -295
- package/ts-reviewer/references/modernization.md +58 -138
- package/ts-reviewer/references/security.md +56 -118
- package/ts-reviewer/references/tsconfig.md +42 -92
- package/ts-reviewer/references/type-safety.md +66 -148
package/dist/prompt.js
CHANGED
|
@@ -1,30 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.multiSelect = multiSelect;
|
|
7
|
-
const node_readline_1 = __importDefault(require("node:readline"));
|
|
8
|
-
const node_process_1 = __importDefault(require("node:process"));
|
|
1
|
+
import readline from "node:readline";
|
|
2
|
+
import process from "node:process";
|
|
9
3
|
function render(message, choices, cursor, selected, isFirst) {
|
|
10
4
|
if (!isFirst) {
|
|
11
|
-
|
|
5
|
+
process.stdout.write(`\x1b[${choices.length + 1}A`);
|
|
12
6
|
}
|
|
13
|
-
|
|
7
|
+
process.stdout.write(`\x1b[2K${message}\n`);
|
|
14
8
|
for (let i = 0; i < choices.length; i++) {
|
|
15
9
|
const mark = selected.has(i) ? "[x]" : "[ ]";
|
|
16
10
|
const arrow = i === cursor ? ">" : " ";
|
|
17
|
-
|
|
11
|
+
process.stdout.write(`\x1b[2K${arrow} ${mark} ${choices[i].label}\n`);
|
|
18
12
|
}
|
|
19
13
|
}
|
|
20
|
-
async function multiSelect(message, choices) {
|
|
21
|
-
if (!
|
|
14
|
+
export async function multiSelect(message, choices) {
|
|
15
|
+
if (!process.stdin.isTTY) {
|
|
22
16
|
return choices.map((c) => c.value);
|
|
23
17
|
}
|
|
24
18
|
const selected = new Set();
|
|
25
19
|
let cursor = 0;
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
readline.emitKeypressEvents(process.stdin);
|
|
21
|
+
process.stdin.setRawMode(true);
|
|
28
22
|
render(message, choices, cursor, selected, true);
|
|
29
23
|
return new Promise((resolve) => {
|
|
30
24
|
const onKey = (_str, key) => {
|
|
@@ -46,19 +40,19 @@ async function multiSelect(message, choices) {
|
|
|
46
40
|
render(message, choices, cursor, selected, false);
|
|
47
41
|
}
|
|
48
42
|
else if (key.name === "return") {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
43
|
+
process.stdin.removeListener("keypress", onKey);
|
|
44
|
+
process.stdin.setRawMode(false);
|
|
45
|
+
process.stdin.pause();
|
|
52
46
|
resolve(choices.filter((_, i) => selected.has(i)).map((c) => c.value));
|
|
53
47
|
}
|
|
54
48
|
else if (key.ctrl && key.name === "c") {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
49
|
+
process.stdin.removeListener("keypress", onKey);
|
|
50
|
+
process.stdin.setRawMode(false);
|
|
51
|
+
process.stdin.pause();
|
|
52
|
+
process.exit(0);
|
|
59
53
|
}
|
|
60
54
|
};
|
|
61
|
-
|
|
55
|
+
process.stdin.on("keypress", onKey);
|
|
62
56
|
});
|
|
63
57
|
}
|
|
64
58
|
//# sourceMappingURL=prompt.js.map
|
package/dist/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
|
package/dist/updatePolicy.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.decideUpdate = decideUpdate;
|
|
4
1
|
// Inputs are hashes (sha256 hex) or null if missing.
|
|
5
|
-
function decideUpdate(opts) {
|
|
2
|
+
export function decideUpdate(opts) {
|
|
6
3
|
const { existingHash, lastWrittenHash } = opts;
|
|
7
4
|
// missing file
|
|
8
5
|
if (existingHash === null)
|
package/dist/updatePolicy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updatePolicy.js","sourceRoot":"","sources":["../src/updatePolicy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"updatePolicy.js","sourceRoot":"","sources":["../src/updatePolicy.ts"],"names":[],"mappings":"AAMA,qDAAqD;AACrD,MAAM,UAAU,YAAY,CAAC,IAG5B;IACC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAE/C,eAAe;IACf,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAEpD,8DAA8D;IAC9D,IAAI,eAAe,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAE1D,kEAAkE;IAClE,IAAI,YAAY,KAAK,eAAe;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAEnE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC9B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-reviewer",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Install the TypeScript Code Reviewer skill for Claude Code, Codex, or Antigravity",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
6
7
|
"repository": {
|
|
7
8
|
"type": "git",
|
|
8
9
|
"url": "https://github.com/VirtualMaestro/ts-reviewer"
|
|
@@ -15,12 +16,12 @@
|
|
|
15
16
|
"ts-reviewer/**"
|
|
16
17
|
],
|
|
17
18
|
"engines": {
|
|
18
|
-
"node": "
|
|
19
|
+
"node": "^24.0.0"
|
|
19
20
|
},
|
|
20
21
|
"scripts": {
|
|
21
22
|
"build": "tsc -p tsconfig.json",
|
|
22
23
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
23
|
-
"test": "npm run typecheck",
|
|
24
|
+
"test": "npm run typecheck && node --test cnlp/skill-format.test.js",
|
|
24
25
|
"dev": "npm run build && node --enable-source-maps dist/cli.js"
|
|
25
26
|
},
|
|
26
27
|
"keywords": [
|
|
@@ -33,7 +34,7 @@
|
|
|
33
34
|
"ts-reviewer"
|
|
34
35
|
],
|
|
35
36
|
"devDependencies": {
|
|
36
|
-
"@types/node": "^
|
|
37
|
-
"typescript": "
|
|
37
|
+
"@types/node": "^24.13.3",
|
|
38
|
+
"typescript": "~5.9.0"
|
|
38
39
|
}
|
|
39
40
|
}
|