@wrongstack/plugins 0.293.0 → 0.295.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 +7 -71
- package/dist/accessibility-auditor/index.d.ts +1 -1
- package/dist/accessibility-auditor/index.d.ts.map +1 -1
- package/dist/accessibility-auditor.js +31 -31
- package/dist/agent-handoff/index.d.ts +1 -1
- package/dist/agent-handoff/index.d.ts.map +1 -1
- package/dist/api-compatibility-gate/index.d.ts +1 -1
- package/dist/api-compatibility-gate/index.d.ts.map +1 -1
- package/dist/api-compatibility-gate.js +21 -16
- package/dist/audit/index.d.ts +386 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit.d.ts +1 -0
- package/dist/audit.js +454 -0
- package/dist/auto-doc/index.d.ts +1 -1
- package/dist/auto-doc/index.d.ts.map +1 -1
- package/dist/auto-escalate/index.d.ts +1 -1
- package/dist/auto-escalate/index.d.ts.map +1 -1
- package/dist/auto-i18n-extractor/index.d.ts +1 -1
- package/dist/auto-i18n-extractor/index.d.ts.map +1 -1
- package/dist/auto-i18n-extractor.js +2 -1
- package/dist/branch-guard/index.d.ts +1 -1
- package/dist/branch-guard/index.d.ts.map +1 -1
- package/dist/branch-guard.js +9 -1
- package/dist/catalog.d.ts +5 -30
- package/dist/catalog.d.ts.map +1 -1
- package/dist/changelog-writer/index.d.ts +1 -1
- package/dist/changelog-writer/index.d.ts.map +1 -1
- package/dist/checkpoint/index.d.ts +1 -1
- package/dist/checkpoint/index.d.ts.map +1 -1
- package/dist/checkpoint.js +7 -8
- package/dist/code-metrics/index.d.ts +1 -1
- package/dist/code-metrics/index.d.ts.map +1 -1
- package/dist/code-metrics.js +29 -29
- package/dist/commit-validator/index.d.ts +1 -1
- package/dist/commit-validator/index.d.ts.map +1 -1
- package/dist/config-validator/index.d.ts +1 -1
- package/dist/config-validator/index.d.ts.map +1 -1
- package/dist/context-pins/index.d.ts +1 -1
- package/dist/context-pins/index.d.ts.map +1 -1
- package/dist/cost-tracker/index.d.ts +1 -1
- package/dist/cost-tracker/index.d.ts.map +1 -1
- package/dist/cost-tracker.js +9 -2
- package/dist/cron/index.d.ts +1 -1
- package/dist/cron/index.d.ts.map +1 -1
- package/dist/dead-code-detector/index.d.ts +1 -1
- package/dist/dead-code-detector/index.d.ts.map +1 -1
- package/dist/dead-code-detector.js +26 -18
- package/dist/dep-guard/index.d.ts +1 -1
- package/dist/dep-guard/index.d.ts.map +1 -1
- package/dist/dependency-vulnerability-gate/index.d.ts +1 -1
- package/dist/dependency-vulnerability-gate/index.d.ts.map +1 -1
- package/dist/dependency-vulnerability-gate.js +34 -22
- package/dist/diff-summary/index.d.ts +1 -1
- package/dist/diff-summary/index.d.ts.map +1 -1
- package/dist/diff-summary.js +28 -29
- package/dist/doc-sync-guard/index.d.ts +1 -1
- package/dist/doc-sync-guard/index.d.ts.map +1 -1
- package/dist/doc-sync-guard.js +2 -1
- package/dist/duplicate-code-detector/index.d.ts +26 -1
- package/dist/duplicate-code-detector/index.d.ts.map +1 -1
- package/dist/duplicate-code-detector.js +178 -67
- package/dist/error-lens/index.d.ts +1 -1
- package/dist/error-lens/index.d.ts.map +1 -1
- package/dist/factories/index.d.ts +4 -0
- package/dist/factories/index.d.ts.map +1 -0
- package/dist/factories.d.ts +1 -0
- package/dist/factories.js +74 -0
- package/dist/feature-flag-tracker/index.d.ts +1 -1
- package/dist/feature-flag-tracker/index.d.ts.map +1 -1
- package/dist/feature-flag-tracker.js +29 -29
- package/dist/file-watcher/index.d.ts +1 -1
- package/dist/file-watcher/index.d.ts.map +1 -1
- package/dist/format-on-save/index.d.ts +1 -1
- package/dist/format-on-save/index.d.ts.map +1 -1
- package/dist/format-on-save.js +2 -1
- package/dist/generated-plugin-exports.d.ts +65 -0
- package/dist/generated-plugin-exports.d.ts.map +1 -0
- package/dist/git-autocommit/index.d.ts +1 -1
- package/dist/git-autocommit/index.d.ts.map +1 -1
- package/dist/import-organizer/index.d.ts +1 -1
- package/dist/import-organizer/index.d.ts.map +1 -1
- package/dist/import-organizer.js +2 -1
- package/dist/index.d.ts +4 -183
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17675 -17377
- package/dist/injection-shield/index.d.ts +1 -1
- package/dist/injection-shield/index.d.ts.map +1 -1
- package/dist/interface-contract-guard/index.d.ts +1 -1
- package/dist/interface-contract-guard/index.d.ts.map +1 -1
- package/dist/interface-contract-guard.js +29 -29
- package/dist/knowledge-graph/index.d.ts +1 -1
- package/dist/knowledge-graph/index.d.ts.map +1 -1
- package/dist/license-audit-gate/index.d.ts +1 -1
- package/dist/license-audit-gate/index.d.ts.map +1 -1
- package/dist/lint-gate/index.d.ts +1 -1
- package/dist/lint-gate/index.d.ts.map +1 -1
- package/dist/lint-gate.js +10 -1
- package/dist/llm-cache/index.d.ts +5 -1
- package/dist/llm-cache/index.d.ts.map +1 -1
- package/dist/llm-cache.js +16 -8
- package/dist/loop-breaker/index.d.ts +1 -1
- package/dist/loop-breaker/index.d.ts.map +1 -1
- package/dist/loop-breaker.js +10 -4
- package/dist/manifest/index.d.ts +16 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest.d.ts +1 -0
- package/dist/manifest.js +152 -0
- package/dist/migration-planner/index.d.ts +1 -1
- package/dist/migration-planner/index.d.ts.map +1 -1
- package/dist/migration-planner.js +2 -1
- package/dist/model-router/index.d.ts +1 -1
- package/dist/model-router/index.d.ts.map +1 -1
- package/dist/notify-hub/index.d.ts +1 -1
- package/dist/notify-hub/index.d.ts.map +1 -1
- package/dist/notify-hub/webhook-channel.d.ts +1 -1
- package/dist/notify-hub/webhook-channel.d.ts.map +1 -1
- package/dist/path-guard/index.d.ts +1 -1
- package/dist/path-guard/index.d.ts.map +1 -1
- package/dist/performance-regression-gate/index.d.ts +1 -1
- package/dist/performance-regression-gate/index.d.ts.map +1 -1
- package/dist/plugin-stack-observer/index.d.ts +1 -1
- package/dist/plugin-stack-observer/index.d.ts.map +1 -1
- package/dist/pr-drafter/index.d.ts +1 -1
- package/dist/pr-drafter/index.d.ts.map +1 -1
- package/dist/pr-drafter.js +28 -29
- package/dist/process-guard/index.d.ts +1 -1
- package/dist/process-guard/index.d.ts.map +1 -1
- package/dist/prompt-firewall/index.d.ts +1 -1
- package/dist/prompt-firewall/index.d.ts.map +1 -1
- package/dist/refactor-suggester/index.d.ts +1 -1
- package/dist/refactor-suggester/index.d.ts.map +1 -1
- package/dist/refactor-suggester.js +29 -29
- package/dist/release-notes-generator/index.d.ts +1 -1
- package/dist/release-notes-generator/index.d.ts.map +1 -1
- package/dist/release-notes-generator.js +29 -22
- package/dist/runtime/index.d.ts +15 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/llm.d.ts +1 -1
- package/dist/runtime/llm.d.ts.map +1 -1
- package/dist/runtime.js +43 -2
- package/dist/schema-evolution-guard/index.d.ts +1 -1
- package/dist/schema-evolution-guard/index.d.ts.map +1 -1
- package/dist/schema-evolution-guard.js +2 -1
- package/dist/secret-scanner/index.d.ts +1 -1
- package/dist/secret-scanner/index.d.ts.map +1 -1
- package/dist/secret-scanner.js +7 -1
- package/dist/security-hotspot-scanner/index.d.ts +1 -1
- package/dist/security-hotspot-scanner/index.d.ts.map +1 -1
- package/dist/security-hotspot-scanner.js +26 -19
- package/dist/semantic-search-indexer/index.d.ts +1 -1
- package/dist/semantic-search-indexer/index.d.ts.map +1 -1
- package/dist/semver-bump/index.d.ts +1 -1
- package/dist/semver-bump/index.d.ts.map +1 -1
- package/dist/semver-bump.js +78 -43
- package/dist/session-recap/index.d.ts +1 -1
- package/dist/session-recap/index.d.ts.map +1 -1
- package/dist/shell-check/index.d.ts +1 -1
- package/dist/shell-check/index.d.ts.map +1 -1
- package/dist/smart-rename/index.d.ts +1 -1
- package/dist/smart-rename/index.d.ts.map +1 -1
- package/dist/spec-linker/index.d.ts +1 -1
- package/dist/spec-linker/index.d.ts.map +1 -1
- package/dist/spec-linker.js +222 -20772
- package/dist/template-engine/index.d.ts +1 -1
- package/dist/template-engine/index.d.ts.map +1 -1
- package/dist/template-engine.js +4 -6
- package/dist/test-coverage-gate/index.d.ts +1 -1
- package/dist/test-coverage-gate/index.d.ts.map +1 -1
- package/dist/test-coverage-gate.js +29 -14
- package/dist/test-flake-detector/index.d.ts +1 -1
- package/dist/test-flake-detector/index.d.ts.map +1 -1
- package/dist/test-flake-detector.js +31 -20
- package/dist/test-generator/index.d.ts +1 -1
- package/dist/test-generator/index.d.ts.map +1 -1
- package/dist/test-runner-gate/index.d.ts +1 -1
- package/dist/test-runner-gate/index.d.ts.map +1 -1
- package/dist/test-runner-gate.js +2 -1
- package/dist/todo-listener/index.d.ts +1 -32
- package/dist/todo-listener/index.d.ts.map +1 -1
- package/dist/todo-tracker/index.d.ts +1 -1
- package/dist/todo-tracker/index.d.ts.map +1 -1
- package/dist/token-budget/index.d.ts +1 -1
- package/dist/token-budget/index.d.ts.map +1 -1
- package/dist/token-throttle/index.d.ts +1 -1
- package/dist/token-throttle/index.d.ts.map +1 -1
- package/dist/type-gate/index.d.ts +1 -1
- package/dist/type-gate/index.d.ts.map +1 -1
- package/dist/type-gate.js +11 -4
- package/package.json +80 -68
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/security-hotspot-scanner/index.ts
|
|
2
|
-
import {
|
|
2
|
+
import { readdir, readFile, stat } from "node:fs/promises";
|
|
3
3
|
import { isAbsolute as isAbsolute2, relative as relative2, resolve as resolve2 } from "node:path";
|
|
4
4
|
|
|
5
5
|
// src/runtime/index.ts
|
|
@@ -16,7 +16,8 @@ function withinProjectPath(projectRoot, candidate) {
|
|
|
16
16
|
return rel === "" || !rel.startsWith("..") && !isAbsolute(rel);
|
|
17
17
|
}
|
|
18
18
|
function withinProject(p) {
|
|
19
|
-
|
|
19
|
+
const cwd = process.cwd();
|
|
20
|
+
return withinProjectPath(cwd, p) || relative(cwd, p) === ".";
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
// src/security-hotspot-scanner/index.ts
|
|
@@ -38,14 +39,20 @@ var DEFAULTS = {
|
|
|
38
39
|
maxFindings: 10,
|
|
39
40
|
scanOnChange: [".js", ".jsx", ".ts", ".tsx", ".mjs", ".cjs", ".py", ".java", ".go", ".rb", ".php"]
|
|
40
41
|
};
|
|
42
|
+
var scanOnChangeSet = new Set(DEFAULTS.scanOnChange);
|
|
41
43
|
function readConfig(raw) {
|
|
42
|
-
if (!raw || typeof raw !== "object")
|
|
44
|
+
if (!raw || typeof raw !== "object") {
|
|
45
|
+
scanOnChangeSet = new Set(DEFAULTS.scanOnChange);
|
|
46
|
+
return { ...DEFAULTS };
|
|
47
|
+
}
|
|
43
48
|
const r = raw;
|
|
49
|
+
const scanOnChange = Array.isArray(r["scanOnChange"]) ? r["scanOnChange"].filter((x) => typeof x === "string") : DEFAULTS.scanOnChange;
|
|
50
|
+
scanOnChangeSet = new Set(scanOnChange);
|
|
44
51
|
return {
|
|
45
52
|
enabled: r["enabled"] === true,
|
|
46
53
|
severity: r["severity"] === "block" ? "block" : DEFAULTS.severity,
|
|
47
54
|
maxFindings: typeof r["maxFindings"] === "number" && r["maxFindings"] >= 1 && r["maxFindings"] <= 100 ? r["maxFindings"] : DEFAULTS.maxFindings,
|
|
48
|
-
scanOnChange
|
|
55
|
+
scanOnChange
|
|
49
56
|
};
|
|
50
57
|
}
|
|
51
58
|
var PATTERNS = [
|
|
@@ -101,7 +108,7 @@ function isSourceFile(filePath, extensions) {
|
|
|
101
108
|
const lower = filePath.toLowerCase();
|
|
102
109
|
return extensions.some((ext) => lower.endsWith(ext));
|
|
103
110
|
}
|
|
104
|
-
function scanPath(inputPath, cfg) {
|
|
111
|
+
async function scanPath(inputPath, cfg) {
|
|
105
112
|
const start = Date.now();
|
|
106
113
|
const root = process.cwd();
|
|
107
114
|
const resolved = isAbsolute2(inputPath) ? resolve2(inputPath) : resolve2(root, inputPath);
|
|
@@ -118,10 +125,10 @@ function scanPath(inputPath, cfg) {
|
|
|
118
125
|
let filesScanned = 0;
|
|
119
126
|
const allFindings = [];
|
|
120
127
|
const maxPerFile = Math.max(1, Math.floor(cfg.maxFindings / 2));
|
|
121
|
-
const scanFile = (filePath) => {
|
|
128
|
+
const scanFile = async (filePath) => {
|
|
122
129
|
if (!isSourceFile(filePath, cfg.scanOnChange)) return;
|
|
123
130
|
try {
|
|
124
|
-
const content =
|
|
131
|
+
const content = await readFile(filePath, "utf-8");
|
|
125
132
|
filesScanned += 1;
|
|
126
133
|
const findings = scanSource(content, maxPerFile);
|
|
127
134
|
for (const f of findings) {
|
|
@@ -131,10 +138,10 @@ function scanPath(inputPath, cfg) {
|
|
|
131
138
|
} catch {
|
|
132
139
|
}
|
|
133
140
|
};
|
|
134
|
-
const walk = (dir) => {
|
|
141
|
+
const walk = async (dir) => {
|
|
135
142
|
let entries;
|
|
136
143
|
try {
|
|
137
|
-
entries =
|
|
144
|
+
entries = await readdir(dir);
|
|
138
145
|
} catch {
|
|
139
146
|
return;
|
|
140
147
|
}
|
|
@@ -142,25 +149,25 @@ function scanPath(inputPath, cfg) {
|
|
|
142
149
|
if (allFindings.length >= cfg.maxFindings) return;
|
|
143
150
|
const full = resolve2(dir, entry);
|
|
144
151
|
try {
|
|
145
|
-
const st =
|
|
152
|
+
const st = await stat(full);
|
|
146
153
|
if (st.isDirectory()) {
|
|
147
154
|
if (entry.startsWith(".") || entry === "node_modules" || entry === "dist" || entry === "coverage") {
|
|
148
155
|
continue;
|
|
149
156
|
}
|
|
150
|
-
walk(full);
|
|
157
|
+
await walk(full);
|
|
151
158
|
} else if (st.isFile()) {
|
|
152
|
-
scanFile(full);
|
|
159
|
+
await scanFile(full);
|
|
153
160
|
}
|
|
154
161
|
} catch {
|
|
155
162
|
}
|
|
156
163
|
}
|
|
157
164
|
};
|
|
158
165
|
try {
|
|
159
|
-
const st =
|
|
166
|
+
const st = await stat(resolved);
|
|
160
167
|
if (st.isDirectory()) {
|
|
161
|
-
walk(resolved);
|
|
168
|
+
await walk(resolved);
|
|
162
169
|
} else if (st.isFile()) {
|
|
163
|
-
scanFile(resolved);
|
|
170
|
+
await scanFile(resolved);
|
|
164
171
|
} else {
|
|
165
172
|
return {
|
|
166
173
|
path: inputPath,
|
|
@@ -238,7 +245,7 @@ var plugin = {
|
|
|
238
245
|
state.hookUnregister = null;
|
|
239
246
|
}
|
|
240
247
|
const cfg = readConfig(api.config.extensions?.["security-hotspot-scanner"]);
|
|
241
|
-
const hook = (input) => {
|
|
248
|
+
const hook = async (input) => {
|
|
242
249
|
if (!cfg.enabled) return;
|
|
243
250
|
if (input.toolResult?.isError) return;
|
|
244
251
|
const inp = input.toolInput ?? {};
|
|
@@ -246,12 +253,12 @@ var plugin = {
|
|
|
246
253
|
if (!sourcePath || typeof sourcePath !== "string") return;
|
|
247
254
|
if (!withinProject(sourcePath)) return;
|
|
248
255
|
const ext = sourcePath.includes(".") ? sourcePath.slice(sourcePath.lastIndexOf(".")).toLowerCase() : "";
|
|
249
|
-
if (!
|
|
256
|
+
if (!scanOnChangeSet.has(ext)) {
|
|
250
257
|
state.skippedCount += 1;
|
|
251
258
|
return;
|
|
252
259
|
}
|
|
253
260
|
state.hookInvocationCount += 1;
|
|
254
|
-
const result = scanPath(sourcePath, cfg);
|
|
261
|
+
const result = await scanPath(sourcePath, cfg);
|
|
255
262
|
state.scanCount += 1;
|
|
256
263
|
state.fileScanCount += result.filesScanned;
|
|
257
264
|
if (!result.scanned) {
|
|
@@ -307,7 +314,7 @@ Review or remove the risky pattern(s).`;
|
|
|
307
314
|
mutating: false,
|
|
308
315
|
async execute(input) {
|
|
309
316
|
if (!cfg.enabled) return { ok: false, error: "security-hotspot-scanner is disabled" };
|
|
310
|
-
const result = scanPath(input.path, cfg);
|
|
317
|
+
const result = await scanPath(input.path, cfg);
|
|
311
318
|
state.scanCount += 1;
|
|
312
319
|
state.fileScanCount += result.filesScanned;
|
|
313
320
|
state.findingCount += result.findings.length;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/semantic-search-indexer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/semantic-search-indexer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AA6brD,QAAA,MAAM,MAAM,EAAE,MA6Nb,CAAC;eAEa,MAAM"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - semver_current: Show the current version from package.json
|
|
7
7
|
* - semver_changelog: Generate a changelog between two versions
|
|
8
8
|
*/
|
|
9
|
-
import type { Plugin } from '@wrongstack/core';
|
|
9
|
+
import type { Plugin } from '@wrongstack/core/types';
|
|
10
10
|
type BumpType = 'major' | 'minor' | 'patch' | 'auto';
|
|
11
11
|
interface ConventionalCommit {
|
|
12
12
|
hash: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/semver-bump/index.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/semver-bump/index.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAuCrD,KAAK,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAErD,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAqGD;+DAC+D;AAC/D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAQnF;AAmBD,wBAAgB,aAAa,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,QAAQ,CAIrE;AAmED,QAAA,MAAM,MAAM,EAAE,MAgcb,CAAC;eAEa,MAAM"}
|
package/dist/semver-bump.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// src/semver-bump/index.ts
|
|
2
|
-
import { expectDefined } from "@wrongstack/core";
|
|
2
|
+
import { expectDefined } from "@wrongstack/core/utils";
|
|
3
3
|
import { toErrorMessage } from "@wrongstack/core/utils";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { execFile } from "node:child_process";
|
|
5
|
+
import { access, readFile, readdir, writeFile } from "node:fs/promises";
|
|
6
6
|
import { isAbsolute, join, relative, resolve } from "node:path";
|
|
7
7
|
var API_VERSION = "^0.1.10";
|
|
8
8
|
function resolveProjectRoot(rawCwd, root = process.cwd()) {
|
|
@@ -21,41 +21,65 @@ var state = {
|
|
|
21
21
|
/** Most recent bump result, surfaced by health() (null until first call). */
|
|
22
22
|
lastBump: null
|
|
23
23
|
};
|
|
24
|
-
function
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
function runCommand(command, args, cwd) {
|
|
25
|
+
return new Promise((resolve2, reject) => {
|
|
26
|
+
execFile(command, args, {
|
|
27
27
|
encoding: "utf-8",
|
|
28
28
|
cwd,
|
|
29
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
30
29
|
timeout: 3e4,
|
|
31
30
|
windowsHide: true
|
|
32
|
-
}
|
|
31
|
+
}, (err, stdout, stderr) => {
|
|
32
|
+
if (!err) {
|
|
33
|
+
resolve2(stdout.trim());
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const failure = err;
|
|
37
|
+
reject(Object.assign(failure, { stderr: stderr || void 0 }));
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
async function runGit(args, cwd) {
|
|
42
|
+
try {
|
|
43
|
+
return await runCommand("git", args, cwd);
|
|
33
44
|
} catch (err) {
|
|
34
45
|
const e = err;
|
|
35
|
-
if (e.status === 128) throw new Error("Not a git repository");
|
|
46
|
+
if (e.status === 128 || e.code === 128) throw new Error("Not a git repository");
|
|
36
47
|
throw new Error(`git failed: ${e.message ?? e.stderr ?? String(err)}`);
|
|
37
48
|
}
|
|
38
49
|
}
|
|
39
|
-
function getPackageJson(cwd) {
|
|
50
|
+
async function getPackageJson(cwd) {
|
|
40
51
|
const path = cwd ? `${cwd}/package.json` : "package.json";
|
|
41
|
-
if (!existsSync(path)) return null;
|
|
42
52
|
try {
|
|
43
|
-
|
|
53
|
+
await access(path);
|
|
54
|
+
return JSON.parse(await readFile(path, "utf-8"));
|
|
44
55
|
} catch {
|
|
45
56
|
return null;
|
|
46
57
|
}
|
|
47
58
|
}
|
|
48
|
-
function collectManifests(root) {
|
|
59
|
+
async function collectManifests(root) {
|
|
49
60
|
const paths = [];
|
|
50
61
|
const rootPkg = join(root, "package.json");
|
|
51
|
-
|
|
62
|
+
try {
|
|
63
|
+
await access(rootPkg);
|
|
64
|
+
paths.push(rootPkg);
|
|
65
|
+
} catch {
|
|
66
|
+
}
|
|
52
67
|
for (const group of ["packages", "apps"]) {
|
|
53
68
|
const groupDir = join(root, group);
|
|
54
|
-
|
|
55
|
-
|
|
69
|
+
let entries;
|
|
70
|
+
try {
|
|
71
|
+
entries = await readdir(groupDir, { withFileTypes: true });
|
|
72
|
+
} catch {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
for (const entry of entries) {
|
|
56
76
|
if (!entry.isDirectory()) continue;
|
|
57
77
|
const candidate = join(groupDir, entry.name, "package.json");
|
|
58
|
-
|
|
78
|
+
try {
|
|
79
|
+
await access(candidate);
|
|
80
|
+
paths.push(candidate);
|
|
81
|
+
} catch {
|
|
82
|
+
}
|
|
59
83
|
}
|
|
60
84
|
}
|
|
61
85
|
return paths;
|
|
@@ -94,9 +118,9 @@ function parseConventional(subject) {
|
|
|
94
118
|
message: m?.[5] ?? subject
|
|
95
119
|
};
|
|
96
120
|
}
|
|
97
|
-
function getRecentCommits(sinceTag, cwd) {
|
|
121
|
+
async function getRecentCommits(sinceTag, cwd) {
|
|
98
122
|
const range = sinceTag ? `${sinceTag}..HEAD` : "-30";
|
|
99
|
-
const output = runGit(["log", range, "--format=%H %s"], cwd);
|
|
123
|
+
const output = await runGit(["log", range, "--format=%H %s"], cwd);
|
|
100
124
|
if (!output) return [];
|
|
101
125
|
return output.split("\n").filter(Boolean).map((line) => {
|
|
102
126
|
const spaceIdx = line.indexOf(" ");
|
|
@@ -208,7 +232,7 @@ var plugin = {
|
|
|
208
232
|
return { ok: false, error: "cwd must stay within the current project directory" };
|
|
209
233
|
}
|
|
210
234
|
cwd = safeCwd;
|
|
211
|
-
const pkg = getPackageJson(cwd);
|
|
235
|
+
const pkg = await getPackageJson(cwd);
|
|
212
236
|
if (!pkg) {
|
|
213
237
|
return { ok: false, error: "No package.json found" };
|
|
214
238
|
}
|
|
@@ -218,12 +242,12 @@ var plugin = {
|
|
|
218
242
|
if (part === "auto") {
|
|
219
243
|
let lastTag;
|
|
220
244
|
try {
|
|
221
|
-
const tagsOutput = runGit(["describe", "--tags", "--abbrev=0"], cwd);
|
|
245
|
+
const tagsOutput = await runGit(["describe", "--tags", "--abbrev=0"], cwd);
|
|
222
246
|
lastTag = tagsOutput || void 0;
|
|
223
247
|
} catch {
|
|
224
248
|
}
|
|
225
249
|
try {
|
|
226
|
-
commits = getRecentCommits(lastTag, cwd);
|
|
250
|
+
commits = await getRecentCommits(lastTag, cwd);
|
|
227
251
|
} catch (err) {
|
|
228
252
|
const msg = toErrorMessage(err);
|
|
229
253
|
return { ok: false, error: `Git error: ${msg}`, bumpPart: "patch" };
|
|
@@ -246,38 +270,43 @@ var plugin = {
|
|
|
246
270
|
}
|
|
247
271
|
const root = cwd ?? process.cwd();
|
|
248
272
|
const bumpScript = join(root, "scripts", "bump-version.mjs");
|
|
249
|
-
const changed = collectManifests(root);
|
|
250
|
-
|
|
273
|
+
const changed = await collectManifests(root);
|
|
274
|
+
let hasBumpScript = true;
|
|
275
|
+
try {
|
|
276
|
+
await access(bumpScript);
|
|
277
|
+
} catch {
|
|
278
|
+
hasBumpScript = false;
|
|
279
|
+
}
|
|
280
|
+
if (hasBumpScript) {
|
|
251
281
|
try {
|
|
252
|
-
|
|
253
|
-
cwd: root,
|
|
254
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
255
|
-
timeout: 3e4,
|
|
256
|
-
windowsHide: true
|
|
257
|
-
});
|
|
282
|
+
await runCommand(process.execPath, [bumpScript, "set", newVersion], root);
|
|
258
283
|
} catch (err) {
|
|
259
284
|
const msg = toErrorMessage(err);
|
|
260
285
|
return { ok: false, error: `bump script failed: ${msg}` };
|
|
261
286
|
}
|
|
262
287
|
for (const rel of ["package.json", "package-lock.json", "src/lib/utils.ts", "index.html"]) {
|
|
263
288
|
const p = join(root, "website", rel);
|
|
264
|
-
|
|
289
|
+
try {
|
|
290
|
+
await access(p);
|
|
291
|
+
changed.push(p);
|
|
292
|
+
} catch {
|
|
293
|
+
}
|
|
265
294
|
}
|
|
266
295
|
} else {
|
|
267
296
|
for (const manifest of changed) {
|
|
268
|
-
const pkgData = JSON.parse(
|
|
297
|
+
const pkgData = JSON.parse(await readFile(manifest, "utf-8"));
|
|
269
298
|
pkgData.version = newVersion;
|
|
270
|
-
|
|
299
|
+
await writeFile(manifest, JSON.stringify(pkgData, null, 2) + "\n", "utf-8");
|
|
271
300
|
}
|
|
272
301
|
}
|
|
273
302
|
try {
|
|
274
|
-
runGit(["add", "--", ...changed], cwd);
|
|
275
|
-
runGit(["commit", "-m", `chore: bump version to ${newVersion}`], cwd);
|
|
303
|
+
await runGit(["add", "--", ...changed], cwd);
|
|
304
|
+
await runGit(["commit", "-m", `chore: bump version to ${newVersion}`], cwd);
|
|
276
305
|
} catch {
|
|
277
306
|
}
|
|
278
307
|
if (autoTag) {
|
|
279
308
|
try {
|
|
280
|
-
runGit(["tag", "-a", `${tagPrefix}${newVersion}`, "-m", `Release ${newVersion}`], cwd);
|
|
309
|
+
await runGit(["tag", "-a", `${tagPrefix}${newVersion}`, "-m", `Release ${newVersion}`], cwd);
|
|
281
310
|
} catch {
|
|
282
311
|
}
|
|
283
312
|
}
|
|
@@ -354,17 +383,17 @@ var plugin = {
|
|
|
354
383
|
const mode = tokens.find((t) => !t.startsWith("--")) ?? "status";
|
|
355
384
|
const cwd = ctx?.cwd;
|
|
356
385
|
if (mode === "status") {
|
|
357
|
-
const pkg = getPackageJson(cwd);
|
|
386
|
+
const pkg = await getPackageJson(cwd);
|
|
358
387
|
if (!pkg) return { message: "No package.json found" };
|
|
359
388
|
let lastTag;
|
|
360
389
|
try {
|
|
361
|
-
lastTag = runGit(["describe", "--tags", "--abbrev=0"], cwd) || void 0;
|
|
390
|
+
lastTag = await runGit(["describe", "--tags", "--abbrev=0"], cwd) || void 0;
|
|
362
391
|
} catch {
|
|
363
392
|
}
|
|
364
393
|
let suggestion = "patch";
|
|
365
394
|
let commitCount = 0;
|
|
366
395
|
try {
|
|
367
|
-
const commits = getRecentCommits(lastTag, cwd);
|
|
396
|
+
const commits = await getRecentCommits(lastTag, cwd);
|
|
368
397
|
commitCount = commits.length;
|
|
369
398
|
suggestion = determineBump(commits);
|
|
370
399
|
} catch {
|
|
@@ -411,15 +440,18 @@ var plugin = {
|
|
|
411
440
|
if (!safeCwd) {
|
|
412
441
|
return { ok: false, error: "cwd must stay within the current project directory" };
|
|
413
442
|
}
|
|
414
|
-
const pkg = getPackageJson(safeCwd);
|
|
443
|
+
const pkg = await getPackageJson(safeCwd);
|
|
415
444
|
const currentVersion = pkg?.version ?? "unknown";
|
|
416
445
|
let latestTag = null;
|
|
417
446
|
let commitsSinceTag = 0;
|
|
418
447
|
try {
|
|
419
|
-
const tagsOutput = runGit(["describe", "--tags", "--abbrev=0"], safeCwd);
|
|
448
|
+
const tagsOutput = await runGit(["describe", "--tags", "--abbrev=0"], safeCwd);
|
|
420
449
|
latestTag = tagsOutput || null;
|
|
421
450
|
if (latestTag) {
|
|
422
|
-
const countOutput = runGit(
|
|
451
|
+
const countOutput = await runGit(
|
|
452
|
+
["rev-list", "--count", `${latestTag}..HEAD`],
|
|
453
|
+
safeCwd
|
|
454
|
+
);
|
|
423
455
|
commitsSinceTag = Number.parseInt(countOutput, 10) || 0;
|
|
424
456
|
}
|
|
425
457
|
} catch {
|
|
@@ -462,7 +494,10 @@ var plugin = {
|
|
|
462
494
|
const range = from ? `${from}..${to}` : to;
|
|
463
495
|
let commits;
|
|
464
496
|
try {
|
|
465
|
-
const output = runGit(
|
|
497
|
+
const output = await runGit(
|
|
498
|
+
["log", range === to ? "-30" : range, "--format=%H %s"],
|
|
499
|
+
safeCwd
|
|
500
|
+
);
|
|
466
501
|
commits = output.split("\n").filter(Boolean).map((line) => {
|
|
467
502
|
const spaceIdx = line.indexOf(" ");
|
|
468
503
|
const hash = line.slice(0, spaceIdx);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session-recap/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session-recap/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AA4MrD,QAAA,MAAM,MAAM,EAAE,MA4Yb,CAAC;eAEa,MAAM"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* via the `directory` + `pattern` parameters. Pass `files` for specific
|
|
9
9
|
* files, or `directory` (optionally with `pattern`) for recursive scanning.
|
|
10
10
|
*/
|
|
11
|
-
import type { Plugin } from '@wrongstack/core';
|
|
11
|
+
import type { Plugin } from '@wrongstack/core/types';
|
|
12
12
|
declare const plugin: Plugin;
|
|
13
13
|
export default plugin;
|
|
14
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shell-check/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shell-check/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AA0MrD,QAAA,MAAM,MAAM,EAAE,MAgPb,CAAC;eAEa,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/smart-rename/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/smart-rename/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AA0FrD,QAAA,MAAM,MAAM,EAAE,MAqIb,CAAC;eAEa,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/spec-linker/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/spec-linker/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAwPrD,QAAA,MAAM,MAAM,EAAE,MAuOb,CAAC;eAEa,MAAM"}
|