@ploaness/cli 1.12.0 → 1.14.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/dist/bin.js +38 -15
- package/dist/bin.js.map +1 -1
- package/dist/change-scope.d.ts +24 -0
- package/dist/change-scope.d.ts.map +1 -0
- package/dist/change-scope.js +132 -0
- package/dist/change-scope.js.map +1 -0
- package/dist/checks/assets.d.ts +7 -0
- package/dist/checks/assets.d.ts.map +1 -1
- package/dist/checks/assets.js +15 -1
- package/dist/checks/assets.js.map +1 -1
- package/dist/checks/history.js +1 -1
- package/dist/checks/history.js.map +1 -1
- package/dist/checks/infra.d.ts.map +1 -1
- package/dist/checks/infra.js +16 -5
- package/dist/checks/infra.js.map +1 -1
- package/dist/checks/tests.d.ts +6 -3
- package/dist/checks/tests.d.ts.map +1 -1
- package/dist/checks/tests.js +55 -19
- package/dist/checks/tests.js.map +1 -1
- package/dist/checks/toolchain.d.ts +7 -0
- package/dist/checks/toolchain.d.ts.map +1 -1
- package/dist/checks/toolchain.js +19 -6
- package/dist/checks/toolchain.js.map +1 -1
- package/dist/checks/wiring.d.ts.map +1 -1
- package/dist/checks/wiring.js +4 -7
- package/dist/checks/wiring.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +7 -27
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/scope.d.ts +9 -0
- package/dist/commands/scope.d.ts.map +1 -0
- package/dist/commands/scope.js +32 -0
- package/dist/commands/scope.js.map +1 -0
- package/dist/commands/sync.d.ts +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +29 -2
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/verify.d.ts +7 -4
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +33 -23
- package/dist/commands/verify.js.map +1 -1
- package/dist/context.d.ts +10 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +5 -3
- package/dist/context.js.map +1 -1
- package/dist/gates.d.ts +11 -10
- package/dist/gates.d.ts.map +1 -1
- package/dist/gates.js +68 -67
- package/dist/gates.js.map +1 -1
- package/dist/pinned-browsers.d.ts +25 -0
- package/dist/pinned-browsers.d.ts.map +1 -0
- package/dist/pinned-browsers.js +138 -0
- package/dist/pinned-browsers.js.map +1 -0
- package/dist/report.d.ts +4 -3
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +7 -7
- package/dist/report.js.map +1 -1
- package/dist/test-invocation.d.ts.map +1 -1
- package/dist/test-invocation.js +4 -1
- package/dist/test-invocation.js.map +1 -1
- package/dist/working-tree.d.ts +2 -0
- package/dist/working-tree.d.ts.map +1 -1
- package/dist/working-tree.js +9 -0
- package/dist/working-tree.js.map +1 -1
- package/package.json +4 -4
package/dist/checks/tests.js
CHANGED
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
// module registry and fail to match its own matchers.
|
|
4
4
|
import { existsSync } from 'node:fs';
|
|
5
5
|
import path from 'node:path';
|
|
6
|
-
import { CODE_EXTENSIONS, carriesSourceCode, coverageBoundaries, coverageOwnedFiles, diagnoseBuildFailure, hasExtension, VERIFICATION_ENVIRONMENT_VARIABLE, VITEST_CONFIG_FILE, } from '@ploaness/governance';
|
|
6
|
+
import { BROWSER_ENDPOINT_ENVIRONMENT_VARIABLE, BROWSER_TUNNEL_ENVIRONMENT_VARIABLE, CODE_EXTENSIONS, carriesSourceCode, coverageBoundaries, coverageOwnedFiles, diagnoseBuildFailure, hasExtension, SWEEP_SCOPE_ENVIRONMENT_VARIABLE, scopeHeadline, scopeLines, VERIFICATION_ENVIRONMENT_VARIABLE, VITEST_CONFIG_FILE, } from '@ploaness/governance';
|
|
7
7
|
import { browserServerProblems } from '../browser-servers.js';
|
|
8
|
-
import {
|
|
8
|
+
import { isScopeFailure, sweepScopeFor, withScopeFile } from '../change-scope.js';
|
|
9
|
+
import { hasOwnRuntime, resolveProjectTool, workingTreeFiles, } from '../context.js';
|
|
9
10
|
import { failed, fromRun, passed, run } from '../exec.js';
|
|
11
|
+
import { clockedEnvironment, isStartFailure, startPinnedBrowsers } from '../pinned-browsers.js';
|
|
10
12
|
import { withPretest, wrapped } from '../test-invocation.js';
|
|
11
13
|
// Resolution failure is an answer, not an exception to catch three times over.
|
|
12
14
|
const resolveProjectToolOrUndefined = (context, tool, binary) => {
|
|
@@ -58,8 +60,49 @@ export const browserReadiness = async (context) => {
|
|
|
58
60
|
]);
|
|
59
61
|
return problems.length > 0 ? failed('the end-to-end suite requires fresh browser servers', problems) : undefined;
|
|
60
62
|
};
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
// The suite itself, with the sweep scoped when a scope file is named. The scope is stated on a pass as
|
|
64
|
+
// well as a failure, so a scoped verdict is never read as complete coverage.
|
|
65
|
+
const runSuite = async (context, scope, scopeFile) => {
|
|
66
|
+
const playwright = resolveProjectToolOrUndefined(context, '@playwright/test', 'playwright');
|
|
67
|
+
if (playwright === undefined) {
|
|
68
|
+
return failed('@playwright/test could not be resolved from the project', [
|
|
69
|
+
'the project must declare @playwright/test itself, because its specs import it directly',
|
|
70
|
+
]);
|
|
71
|
+
}
|
|
72
|
+
const browsers = await startPinnedBrowsers(context);
|
|
73
|
+
if (isStartFailure(browsers)) {
|
|
74
|
+
return browsers;
|
|
75
|
+
}
|
|
76
|
+
const invocation = wrapped(context, [playwright, 'test', '--config=playwright.config.ts']);
|
|
77
|
+
try {
|
|
78
|
+
const outcome = fromRun(run(invocation.command, invocation.commandArguments, {
|
|
79
|
+
cwd: context.root,
|
|
80
|
+
env: {
|
|
81
|
+
...clockedEnvironment(context, '--no-deprecation --import=tsx/esm'),
|
|
82
|
+
NODE_ENV: 'production',
|
|
83
|
+
[VERIFICATION_ENVIRONMENT_VARIABLE]: '1',
|
|
84
|
+
[BROWSER_ENDPOINT_ENVIRONMENT_VARIABLE]: browsers.endpoint,
|
|
85
|
+
...(browsers.isTunnelled && { [BROWSER_TUNNEL_ENVIRONMENT_VARIABLE]: '1' }),
|
|
86
|
+
...(scopeFile !== undefined && { [SWEEP_SCOPE_ENVIRONMENT_VARIABLE]: scopeFile }),
|
|
87
|
+
},
|
|
88
|
+
}), 'the end-to-end suite passes', 'the end-to-end suite failed');
|
|
89
|
+
return scope === undefined
|
|
90
|
+
? outcome
|
|
91
|
+
: {
|
|
92
|
+
...outcome,
|
|
93
|
+
summary: `${outcome.summary}; the sweep covered ${scopeHeadline(scope)}`,
|
|
94
|
+
findings: outcome.ok ? scopeLines(scope) : outcome.findings,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
browsers.stop();
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Run the Playwright end-to-end suite. At `delta` the browser sweep covers the routes and stories the
|
|
103
|
+
* change reaches, in Chromium; at `full` it covers everything, in every engine.
|
|
104
|
+
*/
|
|
105
|
+
export const endToEnd = async (context, gateRun) => {
|
|
63
106
|
// A library has no browser to drive, and `assets` already withholds the managed specs from one on the
|
|
64
107
|
// same test. Without this the two gates contradicted each other: the catalogue correctly gave a
|
|
65
108
|
// library no `playwright.config.ts`, and this gate then failed it for the file's absence.
|
|
@@ -79,21 +122,14 @@ export const endToEnd = async (context) => {
|
|
|
79
122
|
if (readiness !== undefined) {
|
|
80
123
|
return readiness;
|
|
81
124
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return failed('@playwright/test could not be resolved from the project', [
|
|
85
|
-
'the project must declare @playwright/test itself, because its specs import it directly',
|
|
86
|
-
]);
|
|
125
|
+
if (gateRun.level === 'full') {
|
|
126
|
+
return await runSuite(context, undefined);
|
|
87
127
|
}
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
NODE_ENV: 'production',
|
|
94
|
-
[VERIFICATION_ENVIRONMENT_VARIABLE]: '1',
|
|
95
|
-
},
|
|
96
|
-
}), 'the end-to-end suite passes', 'the end-to-end suite failed');
|
|
128
|
+
const scope = sweepScopeFor(gateRun.repository, context);
|
|
129
|
+
if (isScopeFailure(scope)) {
|
|
130
|
+
return scope;
|
|
131
|
+
}
|
|
132
|
+
return await withScopeFile(scope, async (file) => await runSuite(context, scope, file));
|
|
97
133
|
});
|
|
98
134
|
};
|
|
99
135
|
/** Produce the production build, which the bundle gate then measures. */
|
|
@@ -114,7 +150,7 @@ export const build = (context) => {
|
|
|
114
150
|
env: {
|
|
115
151
|
NEXT_TELEMETRY_DISABLED: '1',
|
|
116
152
|
NODE_ENV: 'production',
|
|
117
|
-
|
|
153
|
+
...clockedEnvironment(context, '--no-deprecation --max-old-space-size=8000'),
|
|
118
154
|
},
|
|
119
155
|
});
|
|
120
156
|
const outcome = fromRun(result, 'the production build succeeds', 'the production build failed');
|
package/dist/checks/tests.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tests.js","sourceRoot":"","sources":["../../src/checks/tests.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,qGAAqG;AACrG,sDAAsD;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,iCAAiC,EACjC,kBAAkB,GACnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"tests.js","sourceRoot":"","sources":["../../src/checks/tests.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,13 @@ export declare const eslint: (context: Member) => GateResult;
|
|
|
18
18
|
export declare const eslintWrite: (context: Member) => RunResult;
|
|
19
19
|
export { css } from './stylesheets.js';
|
|
20
20
|
export declare const architecture: (context: Member) => GateResult;
|
|
21
|
+
/**
|
|
22
|
+
* The member's import graph, as the architecture gate's analyzer resolves it from the same roots under
|
|
23
|
+
* the same configuration: path aliases, type-only imports and stylesheet modules included.
|
|
24
|
+
* @param context the member.
|
|
25
|
+
* @returns each module, relative to the member root, and the modules it imports; or the failure.
|
|
26
|
+
*/
|
|
27
|
+
export declare const importGraph: (context: Member) => Readonly<Record<string, readonly string[]>> | GateResult;
|
|
21
28
|
/** Full type coverage on hand-written logic: no implicit or explicit `any` survives. */
|
|
22
29
|
export declare const typeCoverage: (context: Context) => GateResult;
|
|
23
30
|
export declare const knip: (context: Member) => GateResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolchain.d.ts","sourceRoot":"","sources":["../../src/checks/toolchain.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"toolchain.d.ts","sourceRoot":"","sources":["../../src/checks/toolchain.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,MAAM,EAKZ,MAAM,eAAe,CAAA;AACtB,OAAO,EAA+B,KAAK,UAAU,EAAU,KAAK,SAAS,EAAW,MAAM,YAAY,CAAA;AAI1G,2FAA2F;AAC3F,eAAO,MAAM,KAAK,GAAI,SAAS,OAAO,KAAG,UAOtC,CAAA;AAkBH,oFAAoF;AACpF,eAAO,MAAM,KAAK,GAAI,SAAS,MAAM,KAAG,UAKrC,CAAA;AAEH,sDAAsD;AACtD,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,KAAG,SAAyC,CAAA;AAStF,eAAO,MAAM,WAAW,QAAO,UAe9B,CAAA;AAOD,iFAAiF;AACjF,eAAO,MAAM,MAAM,GAAI,SAAS,MAAM,KAAG,UAOtC,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG,SAG1C,CAAA;AAEJ,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAuCtC,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,UAM9C,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,GAAG,UAQ3F,CAAA;AA+BD,wFAAwF;AACxF,eAAO,MAAM,YAAY,GAAI,SAAS,OAAO,KAAG,UAsB7C,CAAA;AAqCH,eAAO,MAAM,IAAI,GAAI,SAAS,MAAM,KAAG,UAUpC,CAAA"}
|
package/dist/checks/toolchain.js
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
import { existsSync, mkdtempSync, readFileSync, writeFileSync } from 'node:fs';
|
|
5
5
|
import { tmpdir } from 'node:os';
|
|
6
6
|
import path from 'node:path';
|
|
7
|
-
import { allowedJavaScriptFiles, analysisBoundaries, asRecord, biomeSelection, eslintArguments, isArray, memberKindOf, pureLogicRule, requiredBiomeFiles, } from '@ploaness/governance';
|
|
7
|
+
import { allowedJavaScriptFiles, analysisBoundaries, asRecord, biomeSelection, eslintArguments, importGraphOf, isArray, memberKindOf, parseJsonc, pureLogicRule, requiredBiomeFiles, } from '@ploaness/governance';
|
|
8
8
|
import { presentWorkingTreeFiles, readJson, resolveTool, shippedDirectory, } from '../context.js';
|
|
9
|
-
import { failed, fromRun, passed, runNode } from '../exec.js';
|
|
9
|
+
import { asFindings, failed, fromRun, passed, runNode } from '../exec.js';
|
|
10
10
|
const configFile = (name) => path.join(shippedDirectory('@ploaness/config'), name);
|
|
11
11
|
/** Strict type checking against the project's tsconfig, which extends the ploaness one. */
|
|
12
12
|
export const types = (context) => fromRun(runNode(resolveTool('typescript', 'tsc'), ['--noEmit', '-p', 'tsconfig.json'], {
|
|
@@ -85,15 +85,28 @@ const architectureConfig = (context, kind) => {
|
|
|
85
85
|
// EXIST, though - the analyzer refuses a directory it cannot open, so a package holding shared scripts
|
|
86
86
|
// and no `src` failed on the shape of its own layout rather than on anything about its architecture.
|
|
87
87
|
const presentSourceRoots = (context) => context.settings.sourceRoots.filter((root) => existsSync(path.join(context.root, root)));
|
|
88
|
+
const cruise = (context, roots, options = []) => runNode(resolveTool('dependency-cruiser', 'depcruise'), [...roots, '--config', architectureConfig(context, memberKindOf(context.packageJson)), ...options], { cwd: context.root });
|
|
88
89
|
export const architecture = (context) => {
|
|
89
90
|
const roots = presentSourceRoots(context);
|
|
90
91
|
if (roots.length === 0) {
|
|
91
92
|
return passed('this package holds no source directory to cruise');
|
|
92
93
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
94
|
+
return fromRun(cruise(context, roots), 'module architecture holds', 'the module architecture contract is broken');
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* The member's import graph, as the architecture gate's analyzer resolves it from the same roots under
|
|
98
|
+
* the same configuration: path aliases, type-only imports and stylesheet modules included.
|
|
99
|
+
* @param context the member.
|
|
100
|
+
* @returns each module, relative to the member root, and the modules it imports; or the failure.
|
|
101
|
+
*/
|
|
102
|
+
export const importGraph = (context) => {
|
|
103
|
+
const roots = presentSourceRoots(context);
|
|
104
|
+
if (roots.length === 0) {
|
|
105
|
+
return {};
|
|
106
|
+
}
|
|
107
|
+
const result = cruise(context, roots, ['--output-type', 'json']);
|
|
108
|
+
const graph = importGraphOf(parseJsonc(result.stdout).value);
|
|
109
|
+
return graph ?? failed('the import graph could not be read', asFindings(result.output));
|
|
97
110
|
};
|
|
98
111
|
// Roles with no hand-written type surface to measure: framework glue, generated files, views, and
|
|
99
112
|
// configuration. Measuring them would dilute the score rather than sharpen it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolchain.js","sourceRoot":"","sources":["../../src/checks/toolchain.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,kGAAkG;AAClG,qCAAqC;AACrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,eAAe,EACf,OAAO,EAEP,YAAY,EACZ,aAAa,EACb,kBAAkB,GACnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAGL,uBAAuB,EACvB,QAAQ,EACR,WAAW,EACX,gBAAgB,GACjB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAmB,MAAM,EAAkB,OAAO,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"toolchain.js","sourceRoot":"","sources":["../../src/checks/toolchain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiring.d.ts","sourceRoot":"","sources":["../../src/checks/wiring.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAe,KAAK,UAAU,EAAkD,MAAM,eAAe,CAAA;AAC5G,OAAO,EAAU,KAAK,UAAU,EAAU,MAAM,YAAY,CAAA;AA4G5D;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,QAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcxE,CAAA;
|
|
1
|
+
{"version":3,"file":"wiring.d.ts","sourceRoot":"","sources":["../../src/checks/wiring.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAe,KAAK,UAAU,EAAkD,MAAM,eAAe,CAAA;AAC5G,OAAO,EAAU,KAAK,UAAU,EAAU,MAAM,YAAY,CAAA;AA4G5D;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,QAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcxE,CAAA;AA0FD,0GAA0G;AAC1G,eAAO,MAAM,MAAM,GAAI,YAAY,UAAU,KAAG,UAoB/C,CAAA"}
|
package/dist/checks/wiring.js
CHANGED
|
@@ -124,13 +124,10 @@ export const harnessDecidedVersions = () => {
|
|
|
124
124
|
const HARNESS_RUNTIME = '@ploaness/runtime';
|
|
125
125
|
// A member's own required set. Only a member that serves an application needs the browser packages: a
|
|
126
126
|
// library has no page to sweep, and requiring them would manufacture dependencies the dead-code gate
|
|
127
|
-
// then rightly reports as unused.
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
'tsx',
|
|
132
|
-
HARNESS_RUNTIME,
|
|
133
|
-
]);
|
|
127
|
+
// then rightly reports as unused. axe is not among them: the managed sweep reaches it through
|
|
128
|
+
// `ploaness/sweep`, so a project declares it only when its own specs import it, and its version is then
|
|
129
|
+
// pinned like any other test library's.
|
|
130
|
+
const BROWSER_LIBRARIES = new Set(['@playwright/test', 'tsx', HARNESS_RUNTIME]);
|
|
134
131
|
// The specs of every governed package import these, so pnpm's strict layout means every package must
|
|
135
132
|
// declare them. The browser three are added only where there is an application to drive.
|
|
136
133
|
const SUITE_LIBRARIES = new Set(['vitest', '@vitest/coverage-v8', 'typescript']);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiring.js","sourceRoot":"","sources":["../../src/checks/wiring.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"wiring.js","sourceRoot":"","sources":["../../src/checks/wiring.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,eAAe,CAAA;AAiEvD,2EAA2E;AAC3E,eAAO,MAAM,IAAI,GAAI,YAAY,UAAU,KAAG,MAuB7C,CAAA"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
// Scaffold missing member configurations,
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import { asRecord, memberKindOf, parseJsonc, REQUIRED_SCRIPTS, ROOT_MEMBER_PATH, requiredBiomeFiles, tsconfigPathsFor, VITEST_CONFIG_FILE, wiringTargetsFor, } from '@ploaness/governance';
|
|
5
|
-
import { hasSeededFile } from '../checks/assets.js';
|
|
1
|
+
// Scaffold missing member configurations and scaffold files, then synchronize scripts and managed content.
|
|
2
|
+
import { memberKindOf, ROOT_MEMBER_PATH, requiredBiomeFiles, tsconfigPathsFor, VITEST_CONFIG_FILE, wiringTargetsFor, } from '@ploaness/governance';
|
|
3
|
+
import { hasSeededFile, writeScaffolds } from '../checks/assets.js';
|
|
6
4
|
import { sync } from './sync.js';
|
|
7
5
|
// Every stub is rendered from the same table the wiring rule reads. Writing either side's literal by
|
|
8
6
|
// hand is what once scaffolded a project the gate then failed.
|
|
@@ -40,26 +38,6 @@ const stubs = (member) => {
|
|
|
40
38
|
}),
|
|
41
39
|
};
|
|
42
40
|
};
|
|
43
|
-
const patchPackageJson = (repository) => {
|
|
44
|
-
const file = path.join(repository.root, 'package.json');
|
|
45
|
-
if (!existsSync(file)) {
|
|
46
|
-
return ['package.json is missing, so the scripts were not written'];
|
|
47
|
-
}
|
|
48
|
-
const read = parseJsonc(readFileSync(file, 'utf8'));
|
|
49
|
-
if (read.problem !== undefined) {
|
|
50
|
-
return [`package.json is not valid JSON (${read.problem}), so the scripts were not written`];
|
|
51
|
-
}
|
|
52
|
-
const parsed = asRecord(read.value);
|
|
53
|
-
const scripts = {
|
|
54
|
-
...asRecord(parsed['scripts']),
|
|
55
|
-
...REQUIRED_SCRIPTS,
|
|
56
|
-
};
|
|
57
|
-
const updated = { ...parsed, scripts };
|
|
58
|
-
writeFileSync(file, `${JSON.stringify(updated, null, JSON_INDENT)}\n`);
|
|
59
|
-
return ['package.json: wrote the ploaness scripts'];
|
|
60
|
-
};
|
|
61
|
-
// The scripts are written once, at the repository root: `pnpm run verify` is invoked there and fans out
|
|
62
|
-
// from there, so a copy inside every member would be several entry points to one run.
|
|
63
41
|
const memberNotes = (member, isSolo) => {
|
|
64
42
|
const label = isSolo || member.path === ROOT_MEMBER_PATH ? '' : `${member.path}/`;
|
|
65
43
|
return Object.entries(stubs(member)).map(([file, body]) => hasSeededFile(member.root, file, body)
|
|
@@ -70,13 +48,15 @@ const memberNotes = (member, isSolo) => {
|
|
|
70
48
|
export const init = (repository) => {
|
|
71
49
|
const isSolo = repository.members.length <= 1;
|
|
72
50
|
const notes = [
|
|
73
|
-
...patchPackageJson(repository),
|
|
74
51
|
...repository.members.flatMap((member) => memberNotes(member, isSolo)),
|
|
52
|
+
...writeScaffolds(repository).map(([file, isWritten]) => isWritten ? `${file}: written` : `${file}: left alone because it already exists`),
|
|
75
53
|
];
|
|
76
54
|
for (const note of notes) {
|
|
77
55
|
console.info(` ${note}`);
|
|
78
56
|
}
|
|
79
|
-
// `sync` writes the managed files and merges the write denial into the runtime
|
|
57
|
+
// `sync` writes the root scripts and the managed files, and merges the write denial into the runtime
|
|
58
|
+
// settings. The scripts sit at the repository root only: `pnpm run verify` is invoked there and fans
|
|
59
|
+
// out from there, so a copy inside every member would be several entry points to one run.
|
|
80
60
|
const syncExit = sync(repository);
|
|
81
61
|
if (syncExit !== 0) {
|
|
82
62
|
return syncExit;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Repository } from '../context.js';
|
|
2
|
+
/**
|
|
3
|
+
* Print the change scope of the application at the working directory.
|
|
4
|
+
* @param repository the repository.
|
|
5
|
+
* @param isJson whether to print the scope document rather than its report.
|
|
6
|
+
* @returns the process exit code.
|
|
7
|
+
*/
|
|
8
|
+
export declare const scope: (repository: Repository, isJson: boolean) => number;
|
|
9
|
+
//# sourceMappingURL=scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/commands/scope.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwC,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AAWrF;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,YAAY,UAAU,EAAE,QAAQ,OAAO,KAAG,MAgB/D,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// `ploaness scope`: what a `delta` run's browser sweep covers in the application the command runs in,
|
|
2
|
+
// and why, without running anything. `--json` prints the document the `e2e` gate hands the sweep.
|
|
3
|
+
import { scopeLines } from '@ploaness/governance';
|
|
4
|
+
import { isScopeFailure, sweepScopeFor } from '../change-scope.js';
|
|
5
|
+
import { hasOwnRuntime, memberAt } from '../context.js';
|
|
6
|
+
const JSON_INDENT = 2;
|
|
7
|
+
const runtimeMembers = (repository) => repository.members
|
|
8
|
+
.filter((member) => hasOwnRuntime(member))
|
|
9
|
+
.map((member) => member.path)
|
|
10
|
+
.join(', ');
|
|
11
|
+
/**
|
|
12
|
+
* Print the change scope of the application at the working directory.
|
|
13
|
+
* @param repository the repository.
|
|
14
|
+
* @param isJson whether to print the scope document rather than its report.
|
|
15
|
+
* @returns the process exit code.
|
|
16
|
+
*/
|
|
17
|
+
export const scope = (repository, isJson) => {
|
|
18
|
+
const member = memberAt(repository, process.cwd());
|
|
19
|
+
if (member === undefined || !hasOwnRuntime(member)) {
|
|
20
|
+
console.error(`this package has no runtime of its own, so it has no browser sweep to scope; run \`ploaness scope\` ` +
|
|
21
|
+
`in an application: ${runtimeMembers(repository) || 'none'}`);
|
|
22
|
+
return 1;
|
|
23
|
+
}
|
|
24
|
+
const found = sweepScopeFor(repository, member);
|
|
25
|
+
if (isScopeFailure(found)) {
|
|
26
|
+
console.error([found.summary, ...found.findings].join('\n'));
|
|
27
|
+
return 1;
|
|
28
|
+
}
|
|
29
|
+
console.info(isJson ? JSON.stringify(found, null, JSON_INDENT) : scopeLines(found).join('\n'));
|
|
30
|
+
return 0;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/commands/scope.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,kGAAkG;AAClG,OAAO,EAAmB,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,EAAE,aAAa,EAAe,QAAQ,EAAmB,MAAM,eAAe,CAAA;AAGrF,MAAM,WAAW,GAAW,CAAC,CAAA;AAE7B,MAAM,cAAc,GAAG,CAAC,UAAsB,EAAU,EAAE,CACxD,UAAU,CAAC,OAAO;KACf,MAAM,CAAC,CAAC,MAAc,EAAW,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;KAC1D,GAAG,CAAC,CAAC,MAAc,EAAU,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;KAC5C,IAAI,CAAC,IAAI,CAAC,CAAA;AAEf;;;;;GAKG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,UAAsB,EAAE,MAAe,EAAU,EAAE;IACvE,MAAM,MAAM,GAAuB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IACtE,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,KAAK,CACX,sGAAsG;YACpG,sBAAsB,cAAc,CAAC,UAAU,CAAC,IAAI,MAAM,EAAE,CAC/D,CAAA;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IACD,MAAM,KAAK,GAA4B,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IACxE,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC5D,OAAO,CAAC,CAAA;IACV,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9F,OAAO,CAAC,CAAA;AACV,CAAC,CAAA"}
|
package/dist/commands/sync.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Repository } from '../context.js';
|
|
2
|
-
/** Materialise the managed files, then report exactly what changed. */
|
|
2
|
+
/** Materialise the managed files and the scripts ploaness owns, then report exactly what changed. */
|
|
3
3
|
export declare const sync: (repository: Repository) => number;
|
|
4
4
|
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AA+B/C,qGAAqG;AACrG,eAAO,MAAM,IAAI,GAAI,YAAY,UAAU,KAAG,MA0B7C,CAAA"}
|
package/dist/commands/sync.js
CHANGED
|
@@ -1,7 +1,34 @@
|
|
|
1
1
|
// `ploaness sync`: the only command that writes managed files. Everything else reads them.
|
|
2
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { asRecord, parseJsonc, REQUIRED_SCRIPTS } from '@ploaness/governance';
|
|
2
5
|
import { syncAssets } from '../checks/assets.js';
|
|
3
6
|
import { hasWrittenDenyRules } from '../checks/generated.js';
|
|
4
|
-
|
|
7
|
+
// The indent every JSON file ploaness writes uses, matching the shipped formatter setting.
|
|
8
|
+
const JSON_INDENT = 2;
|
|
9
|
+
const MANIFEST = 'package.json';
|
|
10
|
+
// The scripts ploaness owns, written at the repository root where `pnpm run verify` is invoked. Only
|
|
11
|
+
// those keys change, so the project's own scripts keep their order and their text. A manifest that does
|
|
12
|
+
// not parse is left for the wiring gate to report.
|
|
13
|
+
const syncScripts = (repository) => {
|
|
14
|
+
const file = path.join(repository.root, MANIFEST);
|
|
15
|
+
if (!existsSync(file)) {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
const read = parseJsonc(readFileSync(file, 'utf8'));
|
|
19
|
+
if (read.problem !== undefined) {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
const parsed = asRecord(read.value);
|
|
23
|
+
const scripts = asRecord(parsed['scripts']);
|
|
24
|
+
if (Object.entries(REQUIRED_SCRIPTS).every(([name, body]) => scripts[name] === body)) {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
const updated = { ...parsed, scripts: { ...scripts, ...REQUIRED_SCRIPTS } };
|
|
28
|
+
writeFileSync(file, `${JSON.stringify(updated, null, JSON_INDENT)}\n`);
|
|
29
|
+
return [{ path: `${MANIFEST} scripts`, action: 'wrote' }];
|
|
30
|
+
};
|
|
31
|
+
/** Materialise the managed files and the scripts ploaness owns, then report exactly what changed. */
|
|
5
32
|
export const sync = (repository) => {
|
|
6
33
|
// The write denial is repaired here rather than in `init` alone, because the gate that requires it
|
|
7
34
|
// tells the project to run `ploaness sync`. A repair the advice cannot perform sends the project
|
|
@@ -9,7 +36,7 @@ export const sync = (repository) => {
|
|
|
9
36
|
const denialChange = hasWrittenDenyRules(repository)
|
|
10
37
|
? [{ action: 'wrote', path: '.claude/settings.json' }]
|
|
11
38
|
: [];
|
|
12
|
-
const changes = [...syncAssets(repository), ...denialChange];
|
|
39
|
+
const changes = [...syncScripts(repository), ...syncAssets(repository), ...denialChange];
|
|
13
40
|
if (changes.length === 0) {
|
|
14
41
|
console.info('ploaness sync: every managed path already matches the catalogue.');
|
|
15
42
|
return 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,OAAO,EAAmB,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAG5D,
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
|
+
import { type VerificationLevel } from '@ploaness/governance';
|
|
1
2
|
import { type Repository } from '../context.js';
|
|
2
3
|
import { type PlannedGate } from '../gates.js';
|
|
3
4
|
/**
|
|
4
|
-
* Run
|
|
5
|
+
* Run verification at one level.
|
|
5
6
|
* @param repository the resolved repository environment.
|
|
6
|
-
* @param
|
|
7
|
+
* @param level `quick` for the static gates, `delta` to add history, build, bundle and the browser suite
|
|
8
|
+
* scoped to the change, `full` for the complete browser sweep in every engine.
|
|
7
9
|
* @returns the process exit code.
|
|
8
10
|
*/
|
|
9
|
-
export declare const verify: (repository: Repository,
|
|
11
|
+
export declare const verify: (repository: Repository, level: VerificationLevel) => Promise<number>;
|
|
10
12
|
/**
|
|
11
|
-
* Run one gate by identifier. A single gate is a debugging aid, never a verdict.
|
|
13
|
+
* Run one gate by identifier. A single gate is a debugging aid, never a verdict. It runs at the `delta`
|
|
14
|
+
* level, the one a change is finished at, so `e2e` sweeps what the change reaches.
|
|
12
15
|
* @param repository the resolved repository environment.
|
|
13
16
|
* @param planned the gate to run, with the member it is about.
|
|
14
17
|
* @param isVerbose whether to print what the gate's tool wrote, not only the verdict it produced.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAA4C,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AAEzF,OAAO,EAAuB,KAAK,WAAW,EAAW,MAAM,aAAa,CAAA;AAsG5E;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GAAU,YAAY,UAAU,EAAE,OAAO,iBAAiB,KAAG,OAAO,CAAC,MAAM,CAU7F,CAAA;AAsBD;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GACpB,YAAY,UAAU,EACtB,SAAS,WAAW,EACpB,YAAW,OAAe,KACzB,OAAO,CAAC,MAAM,CAWhB,CAAA"}
|