@hapergg/harness-comet-cli 0.1.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.
Files changed (38) hide show
  1. package/bin/harness-comet.js +7 -0
  2. package/dist/commands/comet.d.ts +8 -0
  3. package/dist/commands/comet.d.ts.map +1 -0
  4. package/dist/commands/comet.js +500 -0
  5. package/dist/commands/comet.js.map +1 -0
  6. package/dist/commands/create.d.ts +16 -0
  7. package/dist/commands/create.d.ts.map +1 -0
  8. package/dist/commands/create.js +69 -0
  9. package/dist/commands/create.js.map +1 -0
  10. package/dist/commands/impact.d.ts +8 -0
  11. package/dist/commands/impact.d.ts.map +1 -0
  12. package/dist/commands/impact.js +108 -0
  13. package/dist/commands/impact.js.map +1 -0
  14. package/dist/commands/init.d.ts +19 -0
  15. package/dist/commands/init.d.ts.map +1 -0
  16. package/dist/commands/init.js +249 -0
  17. package/dist/commands/init.js.map +1 -0
  18. package/dist/dev-bin.d.ts +2 -0
  19. package/dist/dev-bin.d.ts.map +1 -0
  20. package/dist/dev-bin.js +6 -0
  21. package/dist/dev-bin.js.map +1 -0
  22. package/dist/index.d.ts +6 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +393 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/package-info.d.ts +6 -0
  27. package/dist/package-info.d.ts.map +1 -0
  28. package/dist/package-info.js +6 -0
  29. package/dist/package-info.js.map +1 -0
  30. package/dist/templates/incident.d.ts +3 -0
  31. package/dist/templates/incident.d.ts.map +1 -0
  32. package/dist/templates/incident.js +26 -0
  33. package/dist/templates/incident.js.map +1 -0
  34. package/dist/templates/playwright-mode.d.ts +12 -0
  35. package/dist/templates/playwright-mode.d.ts.map +1 -0
  36. package/dist/templates/playwright-mode.js +225 -0
  37. package/dist/templates/playwright-mode.js.map +1 -0
  38. package/package.json +58 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact.d.ts","sourceRoot":"","sources":["../../src/commands/impact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,EAC5F,UAAU,EAAE,MAAM,aAAa,GAC9B,IAAI,CAoDN"}
@@ -0,0 +1,108 @@
1
+ export function registerImpactCommands(program, withErrors, getOptions) {
2
+ const impact = program.command("impact").description("Harness impact mode helpers for Comet changes");
3
+ impact
4
+ .command("set")
5
+ .requiredOption("--change <change>", "change id")
6
+ .requiredOption("--reason <text>", "impact reason")
7
+ .option("--mode <full|maintain|off>", "impact mode for runtime projects")
8
+ .option("--action <none|verify-existing|update-or-create>", "impact action for playwright projects")
9
+ .option("--confirmed-by <user|agent>", "playwright impact confirmation source")
10
+ .action(withErrors(async (commandOptions) => {
11
+ const options = getOptions();
12
+ const adapter = await loadCometAdapter();
13
+ const root = options.root ?? process.cwd();
14
+ const mode = await adapter.resolveHarnessCometProjectMode(root);
15
+ const report = mode === "playwright"
16
+ ? await writePlaywrightImpact(adapter, root, commandOptions)
17
+ : await writeRuntimeImpact(adapter, root, commandOptions);
18
+ const payload = { change: commandOptions.change, path: report.path, impact: report.impact };
19
+ if (options.json) {
20
+ process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
21
+ return;
22
+ }
23
+ process.stdout.write(formatImpactReport(commandOptions.change, report.path, report.impact));
24
+ }));
25
+ impact
26
+ .command("show")
27
+ .requiredOption("--change <change>", "change id")
28
+ .action(withErrors(async (commandOptions) => {
29
+ const options = getOptions();
30
+ const adapter = await loadCometAdapter();
31
+ const root = options.root ?? process.cwd();
32
+ const mode = await adapter.resolveHarnessCometProjectMode(root);
33
+ const report = mode === "playwright"
34
+ ? await adapter.readPlaywrightHarnessImpact(root, commandOptions.change)
35
+ : await adapter.readHarnessImpact(root, commandOptions.change);
36
+ const payload = { change: commandOptions.change, path: report.path, impact: report.impact };
37
+ if (options.json) {
38
+ process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
39
+ return;
40
+ }
41
+ process.stdout.write(formatImpactReport(commandOptions.change, report.path, report.impact));
42
+ }));
43
+ }
44
+ function formatImpactReport(change, filePath, impact) {
45
+ if ("reviewedTests" in impact) {
46
+ const lines = [
47
+ `CHANGE ${change}`,
48
+ `FILE ${filePath}`,
49
+ `ACTION ${impact.action}`,
50
+ `REASON ${impact.reason}`,
51
+ `CONFIRMED_BY ${impact.confirmedBy}`,
52
+ `CONFIRMED_AT ${impact.confirmedAt ?? "-"}`,
53
+ "REVIEWED_TESTS",
54
+ ...(impact.reviewedTests.length > 0 ? impact.reviewedTests.map((test) => `- ${test}`) : ["- -"])
55
+ ];
56
+ return `${lines.join("\n")}\n`;
57
+ }
58
+ const lines = [
59
+ `CHANGE ${change}`,
60
+ `FILE ${filePath}`,
61
+ `MODE ${impact.mode}`,
62
+ `REASON ${impact.reason}`,
63
+ `AFFECTED ${impact.affectedCapabilities.join(",") || "-"}`,
64
+ `CANDIDATES ${impact.existingAssetCandidates.join(",") || "-"}`,
65
+ `DECISIONS ${impact.assetDecisions.join(",") || "-"}`
66
+ ];
67
+ return `${lines.join("\n")}\n`;
68
+ }
69
+ async function loadCometAdapter() {
70
+ try {
71
+ const adapter = await import("@hapergg/harness-comet-comet-adapter");
72
+ if ("readHarnessImpact" in adapter &&
73
+ "writeHarnessImpact" in adapter &&
74
+ "readPlaywrightHarnessImpact" in adapter &&
75
+ "writePlaywrightHarnessImpact" in adapter &&
76
+ "resolveHarnessCometProjectMode" in adapter &&
77
+ "seedHarnessImpact" in adapter &&
78
+ "seedHarnessDesign" in adapter) {
79
+ return adapter;
80
+ }
81
+ }
82
+ catch {
83
+ // Fall back to local source in workspace dev/test flows.
84
+ }
85
+ const sourceModuleUrl = new URL("../../../comet-adapter/src/index.ts", import.meta.url);
86
+ return await import(sourceModuleUrl.href);
87
+ }
88
+ async function writeRuntimeImpact(adapter, root, commandOptions) {
89
+ if (!commandOptions.mode) {
90
+ throw new Error("Runtime projects require --mode <full|maintain|off>");
91
+ }
92
+ return adapter.writeHarnessImpact(root, commandOptions.change, {
93
+ mode: commandOptions.mode,
94
+ reason: commandOptions.reason
95
+ });
96
+ }
97
+ async function writePlaywrightImpact(adapter, root, commandOptions) {
98
+ if (!commandOptions.action) {
99
+ throw new Error("Playwright projects require --action <none|verify-existing|update-or-create>");
100
+ }
101
+ return adapter.writePlaywrightHarnessImpact(root, commandOptions.change, {
102
+ action: commandOptions.action,
103
+ reason: commandOptions.reason,
104
+ confirmedBy: commandOptions.confirmedBy === "agent" ? "agent" : "user",
105
+ confirmedAt: new Date().toISOString()
106
+ });
107
+ }
108
+ //# sourceMappingURL=impact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact.js","sourceRoot":"","sources":["../../src/commands/impact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface InitHarnessOptions {
2
+ root: string;
3
+ mode: "runtime" | "playwright";
4
+ adapter: string;
5
+ testDir?: string;
6
+ install?: boolean;
7
+ installBrowsers?: boolean;
8
+ overwriteConfig?: boolean;
9
+ }
10
+ export interface InitHarnessResult {
11
+ ok: true;
12
+ created: string[];
13
+ skipped: string[];
14
+ installedDependencies?: boolean;
15
+ installedBrowsers?: boolean;
16
+ }
17
+ export declare function initHarnessProject(options: InitHarnessOptions): Promise<InitHarnessResult>;
18
+ export declare function scenarioTemplate(adapter: string): string;
19
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,YAAY,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAKhG;AAwMD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkDxD"}
@@ -0,0 +1,249 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { HarnessError } from "@hapergg/harness-comet-core";
4
+ import { playwrightAcceptanceCriteriaTemplate, playwrightAttachmentsTemplate, playwrightAuthoringGuideTemplate, playwrightConfigTemplate, playwrightExampleSpecTemplate, playwrightFixturesTemplate, playwrightHarnessCometConfigTemplate, playwrightIncidentGuideTemplate, playwrightIncidentReadmeTemplate, playwrightMockApiTemplate, testingReadmeTemplate } from "../templates/playwright-mode.js";
5
+ import { HARNESS_COMET_ADAPTER_MEMORY_PACKAGE, HARNESS_COMET_ADAPTER_PLAYWRIGHT_PACKAGE, HARNESS_COMET_PLAYWRIGHT_DEPENDENCY, HARNESS_COMET_PLAYWRIGHT_PACKAGE } from "../package-info.js";
6
+ export async function initHarnessProject(options) {
7
+ if (options.mode === "playwright") {
8
+ return initPlaywrightModeProject(options);
9
+ }
10
+ return initRuntimeModeProject(options);
11
+ }
12
+ async function initRuntimeModeProject(options) {
13
+ const root = path.resolve(options.root);
14
+ const created = [];
15
+ const skipped = [];
16
+ await fs.mkdir(path.join(root, "harness", "scenarios"), { recursive: true });
17
+ await fs.mkdir(path.join(root, "harness", "fixtures", "example-empty"), { recursive: true });
18
+ await fs.mkdir(path.join(root, "harness", "adapters"), { recursive: true });
19
+ await fs.mkdir(path.join(root, "harness", "oracles"), { recursive: true });
20
+ await writeFileSafe(path.join(root, "harness-comet.config.ts"), runtimeConfigTemplate(options.adapter), Boolean(options.overwriteConfig), "harness-comet.config.ts", created, skipped);
21
+ await writeFileSafe(path.join(root, "harness", "fixtures", "example-empty", "fixture.yaml"), "schemaVersion: 1\nid: example-empty\ninline: {}\nsource: synthetic\ncontainsSensitiveData: false\nbusiness:\n purpose: example-empty-state\n scope: shared\n consumers:\n - example-smoke\n", false, "harness/fixtures/example-empty/fixture.yaml", created, skipped);
22
+ await writeFileSafe(path.join(root, "harness", "scenarios", "example-smoke.scenario.yaml"), scenarioTemplate(options.adapter), false, "harness/scenarios/example-smoke.scenario.yaml", created, skipped);
23
+ return { ok: true, created, skipped };
24
+ }
25
+ async function initPlaywrightModeProject(options) {
26
+ const root = path.resolve(options.root);
27
+ const created = [];
28
+ const skipped = [];
29
+ const testDir = options.testDir ?? "tests";
30
+ await fs.mkdir(path.join(root, testDir, "journeys"), { recursive: true });
31
+ await fs.mkdir(path.join(root, testDir, "incidents"), { recursive: true });
32
+ await fs.mkdir(path.join(root, testDir, "data"), { recursive: true });
33
+ await fs.mkdir(path.join(root, testDir, "support"), { recursive: true });
34
+ await fs.mkdir(path.join(root, "docs", "testing"), { recursive: true });
35
+ await writeFileSafe(path.join(root, "harness-comet.config.ts"), playwrightHarnessCometConfigTemplate(testDir), Boolean(options.overwriteConfig), "harness-comet.config.ts", created, skipped);
36
+ await writeFileSafe(path.join(root, "playwright.config.ts"), playwrightConfigTemplate(testDir), false, "playwright.config.ts", created, skipped);
37
+ await writeFileSafe(path.join(root, testDir, "journeys", "example-save-flow.spec.ts"), playwrightExampleSpecTemplate(), false, `${normalizePath(testDir)}/journeys/example-save-flow.spec.ts`, created, skipped);
38
+ await writeFileSafe(path.join(root, testDir, "incidents", "README.md"), playwrightIncidentReadmeTemplate(), false, `${normalizePath(testDir)}/incidents/README.md`, created, skipped);
39
+ await writeFileSafe(path.join(root, testDir, "data", "example-input.json"), `${JSON.stringify({ id: "annotation-1", label: "Lot A", comment: "Saved by harness" }, null, 2)}\n`, false, `${normalizePath(testDir)}/data/example-input.json`, created, skipped);
40
+ await writeFileSafe(path.join(root, testDir, "data", "example-expected-payload.json"), `${JSON.stringify({ id: "annotation-1", label: "Lot A", comment: "Saved by harness" }, null, 2)}\n`, false, `${normalizePath(testDir)}/data/example-expected-payload.json`, created, skipped);
41
+ await writeFileSafe(path.join(root, testDir, "support", "mock-api.ts"), playwrightMockApiTemplate(), false, `${normalizePath(testDir)}/support/mock-api.ts`, created, skipped);
42
+ await writeFileSafe(path.join(root, testDir, "support", "attachments.ts"), playwrightAttachmentsTemplate(), false, `${normalizePath(testDir)}/support/attachments.ts`, created, skipped);
43
+ await writeFileSafe(path.join(root, testDir, "fixtures.ts"), playwrightFixturesTemplate(), false, `${normalizePath(testDir)}/fixtures.ts`, created, skipped);
44
+ await writeFileSafe(path.join(root, "docs", "testing", "README.md"), testingReadmeTemplate(), false, "docs/testing/README.md", created, skipped);
45
+ await writeFileSafe(path.join(root, "docs", "testing", "authoring-guide.md"), playwrightAuthoringGuideTemplate(), false, "docs/testing/authoring-guide.md", created, skipped);
46
+ await writeFileSafe(path.join(root, "docs", "testing", "incident-guide.md"), playwrightIncidentGuideTemplate(), false, "docs/testing/incident-guide.md", created, skipped);
47
+ await writeFileSafe(path.join(root, "docs", "testing", "acceptance-criteria.md"), playwrightAcceptanceCriteriaTemplate(), false, "docs/testing/acceptance-criteria.md", created, skipped);
48
+ await ensurePlaywrightPackageJson(root);
49
+ const install = options.install ?? true;
50
+ const installBrowsers = options.installBrowsers ?? true;
51
+ const installedDependencies = install ? await installProjectDependencies(root) : false;
52
+ const installedBrowsers = install && installBrowsers ? await installPlaywrightBrowsers(root) : false;
53
+ return { ok: true, created, skipped, installedDependencies, installedBrowsers };
54
+ }
55
+ function runtimeConfigTemplate(adapter) {
56
+ const defaultAdapter = adapter === "playwright" ? "playwright" : "memory";
57
+ const entry = defaultAdapter === "playwright"
58
+ ? HARNESS_COMET_ADAPTER_PLAYWRIGHT_PACKAGE
59
+ : HARNESS_COMET_ADAPTER_MEMORY_PACKAGE;
60
+ return `export default {
61
+ schemaVersion: 1,
62
+ mode: "runtime",
63
+ paths: {
64
+ scenarios: "harness/scenarios",
65
+ fixtures: "harness/fixtures",
66
+ adapters: "harness/adapters",
67
+ oracles: "harness/oracles"
68
+ },
69
+ adapter: {
70
+ default: "${defaultAdapter}",
71
+ entries: {
72
+ ${defaultAdapter}: "${entry}"
73
+ }
74
+ },
75
+ runtime: {
76
+ scenarioTimeoutMs: 60000,
77
+ stepTimeoutMs: 15000,
78
+ assertionTimeoutMs: 10000,
79
+ workers: 1,
80
+ failFast: false
81
+ }
82
+ };
83
+ `;
84
+ }
85
+ export function scenarioTemplate(adapter) {
86
+ if (adapter === "playwright") {
87
+ return `schemaVersion: 1
88
+ id: example-smoke
89
+ title: Example smoke
90
+ adapter: playwright
91
+ tags: [smoke]
92
+ business:
93
+ component: example-page
94
+ capability: render-static-message
95
+ behavior: show-hello-harness
96
+ contract: example-page-static-message
97
+ status: active
98
+ fixtureRefs: [example-empty]
99
+ steps:
100
+ - action: page.goto
101
+ input:
102
+ url: "data:text/html,<title>Harness</title><main data-testid='message'>Hello Harness</main>"
103
+ assertions:
104
+ - inspect: page.text
105
+ input:
106
+ selector: "[data-testid=message]"
107
+ oracle: value.contains
108
+ expected: "Hello Harness"
109
+ `;
110
+ }
111
+ return `schemaVersion: 1
112
+ id: example-smoke
113
+ title: Example smoke
114
+ adapter: memory
115
+ tags: [smoke]
116
+ business:
117
+ component: example-memory
118
+ capability: store-message
119
+ behavior: write-and-read-message
120
+ contract: example-memory-message-roundtrip
121
+ status: active
122
+ fixtureRefs: [example-empty]
123
+ steps:
124
+ - action: memory.set
125
+ input:
126
+ key: message
127
+ value: Hello Harness
128
+ assertions:
129
+ - inspect: memory.get
130
+ input:
131
+ key: message
132
+ oracle: value.equals
133
+ expected: Hello Harness
134
+ `;
135
+ }
136
+ async function ensurePlaywrightPackageJson(root) {
137
+ const packagePath = path.join(root, "package.json");
138
+ let pkg;
139
+ try {
140
+ pkg = JSON.parse(await fs.readFile(packagePath, "utf8"));
141
+ }
142
+ catch {
143
+ pkg = { private: true };
144
+ }
145
+ const devDependencies = (pkg.devDependencies ?? {}) || {};
146
+ if (!devDependencies["@playwright/test"]) {
147
+ devDependencies["@playwright/test"] = "^1.60.0";
148
+ }
149
+ if (!devDependencies[HARNESS_COMET_PLAYWRIGHT_PACKAGE]) {
150
+ devDependencies[HARNESS_COMET_PLAYWRIGHT_PACKAGE] = HARNESS_COMET_PLAYWRIGHT_DEPENDENCY;
151
+ }
152
+ pkg.private ??= true;
153
+ pkg.devDependencies = sortObject(devDependencies);
154
+ delete pkg.peerDependencies;
155
+ await fs.writeFile(packagePath, `${JSON.stringify(pkg, null, 2)}\n`, "utf8");
156
+ }
157
+ async function installProjectDependencies(root) {
158
+ const manager = await detectPackageManager(root);
159
+ const { execa } = await import("execa");
160
+ const command = manager === "yarn" ? "yarn" : manager === "npm" ? "npm" : "pnpm";
161
+ const args = ["install"];
162
+ try {
163
+ await execa(command, args, { cwd: root, stdio: "inherit" });
164
+ return true;
165
+ }
166
+ catch (error) {
167
+ throw new HarnessError({
168
+ code: "PLAYWRIGHT_DEPENDENCY_INSTALL_FAILED",
169
+ category: "environment",
170
+ message: "Initialized harness assets, but dependency installation failed",
171
+ hint: `Run: ${formatCommand(command, args)}`,
172
+ context: {
173
+ root,
174
+ command: formatCommand(command, args),
175
+ cause: error instanceof Error ? error.message : String(error)
176
+ }
177
+ });
178
+ }
179
+ }
180
+ async function installPlaywrightBrowsers(root) {
181
+ const manager = await detectPackageManager(root);
182
+ const { execa } = await import("execa");
183
+ const command = manager === "yarn" ? "yarn" : manager === "npm" ? "npm" : "pnpm";
184
+ const args = manager === "yarn"
185
+ ? ["playwright", "install", "chromium"]
186
+ : ["exec", "playwright", "install", "chromium"];
187
+ try {
188
+ await execa(command, args, { cwd: root, stdio: "inherit" });
189
+ return true;
190
+ }
191
+ catch (error) {
192
+ throw new HarnessError({
193
+ code: "PLAYWRIGHT_BROWSER_INSTALL_FAILED",
194
+ category: "environment",
195
+ message: "Initialized harness assets and dependencies, but Chromium installation failed",
196
+ hint: "Run: pnpm exec playwright install chromium",
197
+ context: {
198
+ root,
199
+ command: formatCommand(command, args),
200
+ cause: error instanceof Error ? error.message : String(error)
201
+ }
202
+ });
203
+ }
204
+ }
205
+ async function detectPackageManager(root) {
206
+ const resolve = await loadDetectPackageManager();
207
+ return resolve(root);
208
+ }
209
+ async function loadDetectPackageManager() {
210
+ try {
211
+ const core = await import("@hapergg/harness-comet-core");
212
+ if ("detectPackageManager" in core) {
213
+ return core.detectPackageManager;
214
+ }
215
+ }
216
+ catch {
217
+ // Fall back to local source during workspace development.
218
+ }
219
+ const sourceModuleUrl = new URL("../../../core/src/package-manager.ts", import.meta.url);
220
+ const source = await import(sourceModuleUrl.href);
221
+ return source.detectPackageManager;
222
+ }
223
+ function sortObject(input) {
224
+ return Object.fromEntries(Object.entries(input).sort(([left], [right]) => left.localeCompare(right)));
225
+ }
226
+ function formatCommand(command, args) {
227
+ return [command, ...args].join(" ");
228
+ }
229
+ function normalizePath(value) {
230
+ return value.split(path.sep).join("/");
231
+ }
232
+ async function writeFileSafe(file, content, overwrite, relativePath, created, skipped) {
233
+ try {
234
+ if (!overwrite)
235
+ await fs.access(file);
236
+ }
237
+ catch {
238
+ await fs.writeFile(file, content, "utf8");
239
+ created.push(relativePath);
240
+ return;
241
+ }
242
+ if (overwrite) {
243
+ await fs.writeFile(file, content, "utf8");
244
+ created.push(relativePath);
245
+ return;
246
+ }
247
+ skipped.push(relativePath);
248
+ }
249
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dev-bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-bin.d.ts","sourceRoot":"","sources":["../src/dev-bin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { main } from "./index.js";
2
+ main(process.argv).catch((error) => {
3
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
4
+ process.exitCode = 10;
5
+ });
6
+ //# sourceMappingURL=dev-bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-bin.js","sourceRoot":"","sources":["../src/dev-bin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpF,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Command } from "commander";
2
+ export declare function main(argv?: string[]): Promise<void>;
3
+ export declare function buildProgram(options?: {
4
+ playwrightPassthroughArgs?: string[];
5
+ }): Command;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,wBAAsB,IAAI,CAAC,IAAI,WAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7D;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE;IAAE,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAAG,OAAO,CA4G5F"}