@davidahmann/mill 0.1.4

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 (184) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +335 -0
  3. package/dist/audit/repository.d.ts +8 -0
  4. package/dist/audit/repository.d.ts.map +1 -0
  5. package/dist/audit/repository.js +232 -0
  6. package/dist/audit/repository.js.map +1 -0
  7. package/dist/cli-program.d.ts +12 -0
  8. package/dist/cli-program.d.ts.map +1 -0
  9. package/dist/cli-program.js +1020 -0
  10. package/dist/cli-program.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +7 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config/lock.d.ts +12 -0
  16. package/dist/config/lock.d.ts.map +1 -0
  17. package/dist/config/lock.js +83 -0
  18. package/dist/config/lock.js.map +1 -0
  19. package/dist/contracts/canonical.d.ts +7 -0
  20. package/dist/contracts/canonical.d.ts.map +1 -0
  21. package/dist/contracts/canonical.js +30 -0
  22. package/dist/contracts/canonical.js.map +1 -0
  23. package/dist/contracts/schemas.d.ts +2705 -0
  24. package/dist/contracts/schemas.d.ts.map +1 -0
  25. package/dist/contracts/schemas.js +988 -0
  26. package/dist/contracts/schemas.js.map +1 -0
  27. package/dist/doctor.d.ts +21 -0
  28. package/dist/doctor.d.ts.map +1 -0
  29. package/dist/doctor.js +138 -0
  30. package/dist/doctor.js.map +1 -0
  31. package/dist/errors.d.ts +18 -0
  32. package/dist/errors.d.ts.map +1 -0
  33. package/dist/errors.js +31 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/index.d.ts +20 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +20 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/intake/prd.d.ts +14 -0
  40. package/dist/intake/prd.d.ts.map +1 -0
  41. package/dist/intake/prd.js +39 -0
  42. package/dist/intake/prd.js.map +1 -0
  43. package/dist/planning/impact.d.ts +59 -0
  44. package/dist/planning/impact.d.ts.map +1 -0
  45. package/dist/planning/impact.js +400 -0
  46. package/dist/planning/impact.js.map +1 -0
  47. package/dist/planning/specification.d.ts +42 -0
  48. package/dist/planning/specification.d.ts.map +1 -0
  49. package/dist/planning/specification.js +235 -0
  50. package/dist/planning/specification.js.map +1 -0
  51. package/dist/qualification/public-alpha.d.ts +16 -0
  52. package/dist/qualification/public-alpha.d.ts.map +1 -0
  53. package/dist/qualification/public-alpha.js +128 -0
  54. package/dist/qualification/public-alpha.js.map +1 -0
  55. package/dist/recipes/node-typescript-next-web.d.ts +19 -0
  56. package/dist/recipes/node-typescript-next-web.d.ts.map +1 -0
  57. package/dist/recipes/node-typescript-next-web.js +136 -0
  58. package/dist/recipes/node-typescript-next-web.js.map +1 -0
  59. package/dist/repository/integration.d.ts +58 -0
  60. package/dist/repository/integration.d.ts.map +1 -0
  61. package/dist/repository/integration.js +1385 -0
  62. package/dist/repository/integration.js.map +1 -0
  63. package/dist/repository/scan.d.ts +27 -0
  64. package/dist/repository/scan.d.ts.map +1 -0
  65. package/dist/repository/scan.js +388 -0
  66. package/dist/repository/scan.js.map +1 -0
  67. package/dist/result.d.ts +23 -0
  68. package/dist/result.d.ts.map +1 -0
  69. package/dist/result.js +24 -0
  70. package/dist/result.js.map +1 -0
  71. package/dist/runtime/codex.d.ts +28 -0
  72. package/dist/runtime/codex.d.ts.map +1 -0
  73. package/dist/runtime/codex.js +439 -0
  74. package/dist/runtime/codex.js.map +1 -0
  75. package/dist/runtime/context.d.ts +10 -0
  76. package/dist/runtime/context.d.ts.map +1 -0
  77. package/dist/runtime/context.js +151 -0
  78. package/dist/runtime/context.js.map +1 -0
  79. package/dist/runtime/delivery.d.ts +58 -0
  80. package/dist/runtime/delivery.d.ts.map +1 -0
  81. package/dist/runtime/delivery.js +1073 -0
  82. package/dist/runtime/delivery.js.map +1 -0
  83. package/dist/runtime/dependencies.d.ts +19 -0
  84. package/dist/runtime/dependencies.d.ts.map +1 -0
  85. package/dist/runtime/dependencies.js +495 -0
  86. package/dist/runtime/dependencies.js.map +1 -0
  87. package/dist/runtime/github.d.ts +112 -0
  88. package/dist/runtime/github.d.ts.map +1 -0
  89. package/dist/runtime/github.js +510 -0
  90. package/dist/runtime/github.js.map +1 -0
  91. package/dist/runtime/inputs.d.ts +24 -0
  92. package/dist/runtime/inputs.d.ts.map +1 -0
  93. package/dist/runtime/inputs.js +237 -0
  94. package/dist/runtime/inputs.js.map +1 -0
  95. package/dist/runtime/lease.d.ts +11 -0
  96. package/dist/runtime/lease.d.ts.map +1 -0
  97. package/dist/runtime/lease.js +52 -0
  98. package/dist/runtime/lease.js.map +1 -0
  99. package/dist/runtime/lifecycle.d.ts +87 -0
  100. package/dist/runtime/lifecycle.d.ts.map +1 -0
  101. package/dist/runtime/lifecycle.js +1024 -0
  102. package/dist/runtime/lifecycle.js.map +1 -0
  103. package/dist/runtime/process.d.ts +39 -0
  104. package/dist/runtime/process.d.ts.map +1 -0
  105. package/dist/runtime/process.js +304 -0
  106. package/dist/runtime/process.js.map +1 -0
  107. package/dist/runtime/repository.d.ts +36 -0
  108. package/dist/runtime/repository.d.ts.map +1 -0
  109. package/dist/runtime/repository.js +458 -0
  110. package/dist/runtime/repository.js.map +1 -0
  111. package/dist/runtime/state.d.ts +121 -0
  112. package/dist/runtime/state.d.ts.map +1 -0
  113. package/dist/runtime/state.js +1017 -0
  114. package/dist/runtime/state.js.map +1 -0
  115. package/dist/runtime/verifier.d.ts +31 -0
  116. package/dist/runtime/verifier.d.ts.map +1 -0
  117. package/dist/runtime/verifier.js +478 -0
  118. package/dist/runtime/verifier.js.map +1 -0
  119. package/dist/runtime/worker.d.ts +67 -0
  120. package/dist/runtime/worker.d.ts.map +1 -0
  121. package/dist/runtime/worker.js +34 -0
  122. package/dist/runtime/worker.js.map +1 -0
  123. package/dist/security/safe-path.d.ts +3 -0
  124. package/dist/security/safe-path.d.ts.map +1 -0
  125. package/dist/security/safe-path.js +102 -0
  126. package/dist/security/safe-path.js.map +1 -0
  127. package/dist/version.d.ts +4 -0
  128. package/dist/version.d.ts.map +1 -0
  129. package/dist/version.js +4 -0
  130. package/dist/version.js.map +1 -0
  131. package/dist/workflows/founder.d.ts +33 -0
  132. package/dist/workflows/founder.d.ts.map +1 -0
  133. package/dist/workflows/founder.js +422 -0
  134. package/dist/workflows/founder.js.map +1 -0
  135. package/package.json +79 -0
  136. package/recipes/node-typescript-next-web/.github/workflows/ci.yml +34 -0
  137. package/recipes/node-typescript-next-web/.node-version +1 -0
  138. package/recipes/node-typescript-next-web/.tool-versions +1 -0
  139. package/recipes/node-typescript-next-web/AGENTS.md +44 -0
  140. package/recipes/node-typescript-next-web/README.md +16 -0
  141. package/recipes/node-typescript-next-web/WORKFLOW.md +6 -0
  142. package/recipes/node-typescript-next-web/app/api/health/route.ts +5 -0
  143. package/recipes/node-typescript-next-web/app/layout.tsx +19 -0
  144. package/recipes/node-typescript-next-web/app/page.tsx +12 -0
  145. package/recipes/node-typescript-next-web/app/styles.css +21 -0
  146. package/recipes/node-typescript-next-web/docs/development.md +16 -0
  147. package/recipes/node-typescript-next-web/eslint.config.mjs +9 -0
  148. package/recipes/node-typescript-next-web/gitignore.template +5 -0
  149. package/recipes/node-typescript-next-web/next-env.d.ts +7 -0
  150. package/recipes/node-typescript-next-web/next.config.ts +11 -0
  151. package/recipes/node-typescript-next-web/package-lock.json +7540 -0
  152. package/recipes/node-typescript-next-web/package.json +39 -0
  153. package/recipes/node-typescript-next-web/playwright.config.ts +23 -0
  154. package/recipes/node-typescript-next-web/recipe.yaml +71 -0
  155. package/recipes/node-typescript-next-web/scripts/check-package.mjs +3 -0
  156. package/recipes/node-typescript-next-web/src/health.ts +3 -0
  157. package/recipes/node-typescript-next-web/test/browser/home.spec.ts +14 -0
  158. package/recipes/node-typescript-next-web/test/integration/health-route.test.ts +11 -0
  159. package/recipes/node-typescript-next-web/test/unit/health.test.ts +9 -0
  160. package/recipes/node-typescript-next-web/tsconfig.json +33 -0
  161. package/schemas/README.md +64 -0
  162. package/schemas/audit-report.schema.json +59 -0
  163. package/schemas/blueprint.schema.json +34 -0
  164. package/schemas/context-manifest.schema.json +88 -0
  165. package/schemas/delivery-record.schema.json +266 -0
  166. package/schemas/impact-manifest.schema.json +146 -0
  167. package/schemas/managed-repository.schema.json +36 -0
  168. package/schemas/mill-config.schema.json +212 -0
  169. package/schemas/mill-lock.schema.json +96 -0
  170. package/schemas/outcome-plan.schema.json +51 -0
  171. package/schemas/product-contract.schema.json +181 -0
  172. package/schemas/public-alpha-qualification.schema.json +391 -0
  173. package/schemas/recipe-manifest.schema.json +187 -0
  174. package/schemas/release-evidence.schema.json +170 -0
  175. package/schemas/repository-integration-plan.schema.json +156 -0
  176. package/schemas/review-result.schema.json +57 -0
  177. package/schemas/scenario-set.schema.json +84 -0
  178. package/schemas/source-manifest.schema.json +96 -0
  179. package/schemas/specification-proposal.schema.json +406 -0
  180. package/schemas/support-tuple.schema.json +107 -0
  181. package/schemas/task-packet.schema.json +395 -0
  182. package/schemas/validation-evidence.schema.json +125 -0
  183. package/schemas/worker-invocation.schema.json +119 -0
  184. package/schemas/worker-profile.schema.json +53 -0
@@ -0,0 +1,232 @@
1
+ import { parse as parseYaml } from "yaml";
2
+ import { auditReportSchema, productContractSchema, recipeManifestSchema, scenarioSetSchema, } from "../contracts/schemas.js";
3
+ import { canonicalDigest } from "../contracts/canonical.js";
4
+ import { scanRepository } from "../repository/scan.js";
5
+ import { assertRepositoryWorktreeClean, readCandidateIdentity, } from "../runtime/repository.js";
6
+ import { safeReadText } from "../security/safe-path.js";
7
+ function record(value) {
8
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
9
+ throw new Error("expected an object");
10
+ }
11
+ return value;
12
+ }
13
+ async function structuredFile(root, file) {
14
+ const source = await safeReadText(root, file, 8 * 1024 * 1024);
15
+ return file.endsWith(".json") ? JSON.parse(source) : parseYaml(source);
16
+ }
17
+ async function runCheck(input) {
18
+ try {
19
+ await input.evaluate();
20
+ return {
21
+ id: input.id,
22
+ category: input.category,
23
+ status: "passed",
24
+ summary: input.summary,
25
+ evidence: input.evidence,
26
+ };
27
+ }
28
+ catch (error) {
29
+ return {
30
+ id: input.id,
31
+ category: input.category,
32
+ status: "blocked",
33
+ summary: `${input.summary}: ${error instanceof Error ? error.message : String(error)}`,
34
+ evidence: input.evidence,
35
+ };
36
+ }
37
+ }
38
+ function requireText(source, values) {
39
+ for (const value of values) {
40
+ if (!source.includes(value))
41
+ throw new Error(`missing ${value}`);
42
+ }
43
+ }
44
+ export async function auditRepository(input) {
45
+ const candidate = await readCandidateIdentity(input.root);
46
+ const [scan, productRaw, scenariosRaw, recipeRaw, packageRaw, lockRaw] = await Promise.all([
47
+ scanRepository(input.root),
48
+ structuredFile(input.root, "product/contract.yaml"),
49
+ structuredFile(input.root, "quality/scenarios.yaml"),
50
+ structuredFile(input.root, "recipes/node-typescript-next-web/recipe.yaml"),
51
+ structuredFile(input.root, "package.json"),
52
+ structuredFile(input.root, "package-lock.json"),
53
+ ]);
54
+ const product = productContractSchema.parse(productRaw);
55
+ const scenarios = scenarioSetSchema.parse(scenariosRaw);
56
+ const recipe = recipeManifestSchema.parse(recipeRaw);
57
+ const packageJson = record(packageRaw);
58
+ const packageLock = record(lockRaw);
59
+ const [readme, agents, architecture, workflow, development, security, support, releaseGuide, releaseWorkflow,] = await Promise.all([
60
+ safeReadText(input.root, "README.md"),
61
+ safeReadText(input.root, "AGENTS.md"),
62
+ safeReadText(input.root, "architecture/ARCHITECTURE.md"),
63
+ safeReadText(input.root, "WORKFLOW.md"),
64
+ safeReadText(input.root, "docs/development.md"),
65
+ safeReadText(input.root, "SECURITY.md"),
66
+ safeReadText(input.root, "SUPPORT.md"),
67
+ safeReadText(input.root, "docs/release.md"),
68
+ safeReadText(input.root, ".github/workflows/release.yml"),
69
+ ]);
70
+ const checks = await Promise.all([
71
+ runCheck({
72
+ id: "product.authority",
73
+ category: "product",
74
+ summary: "Product truth and continuity contracts are valid and linked",
75
+ evidence: [
76
+ "product/PRD.md",
77
+ "product/contract.yaml",
78
+ "quality/scenarios.yaml",
79
+ ],
80
+ evaluate: () => {
81
+ if (product.outcomes.length === 0 || product.invariants.length === 0) {
82
+ throw new Error("product outcomes or invariants are empty");
83
+ }
84
+ if (scenarios.scenarios.length === 0)
85
+ throw new Error("scenario set is empty");
86
+ if (scenarios.productContractDigest !==
87
+ canonicalDigest(product)) {
88
+ throw new Error("scenario set is bound to another product contract");
89
+ }
90
+ },
91
+ }),
92
+ runCheck({
93
+ id: "code.exact-candidate",
94
+ category: "code",
95
+ summary: "The audit is bound to a clean exact Git candidate",
96
+ evidence: [candidate.commit, candidate.tree],
97
+ evaluate: () => assertRepositoryWorktreeClean(input.root),
98
+ }),
99
+ runCheck({
100
+ id: "ux.operator-path",
101
+ category: "ux",
102
+ summary: "The operator path is discoverable from the primary documentation",
103
+ evidence: ["README.md", "AGENTS.md"],
104
+ evaluate: () => {
105
+ requireText(readme, ["## Why Mill", "## Quick start", "millctl start"]);
106
+ requireText(agents, ["## Operating Mill", "## Authority hierarchy"]);
107
+ },
108
+ }),
109
+ runCheck({
110
+ id: "accessibility.delivered-surface",
111
+ category: "accessibility",
112
+ summary: "The recipe exposes browser and explicit accessibility validation hooks",
113
+ evidence: [
114
+ "recipes/node-typescript-next-web/recipe.yaml",
115
+ "docs/development.md",
116
+ ],
117
+ evaluate: () => {
118
+ if (!recipe.commands.native.includes("test:browser")) {
119
+ throw new Error("recipe has no browser validation command");
120
+ }
121
+ requireText(development, ["Accessibility", "test:browser"]);
122
+ },
123
+ }),
124
+ runCheck({
125
+ id: "security.boundaries",
126
+ category: "security",
127
+ summary: "Security policy, static scan, and credential exclusions are intact",
128
+ evidence: ["SECURITY.md", scan.digest],
129
+ evaluate: () => {
130
+ if (scan.gitConfigHazards.length > 0 ||
131
+ scan.symlinksSkipped.length > 0 ||
132
+ scan.secretReferences.length > 0 ||
133
+ scan.truncatedDirectories.length > 0) {
134
+ throw new Error("repository scan has unresolved hazards");
135
+ }
136
+ requireText(security, [
137
+ "private vulnerability reporting",
138
+ "credentials",
139
+ ]);
140
+ },
141
+ }),
142
+ runCheck({
143
+ id: "dependencies.exact-and-licensed",
144
+ category: "dependencies",
145
+ summary: "Runtime dependencies are exact and recipe licenses are reviewed",
146
+ evidence: [
147
+ "package.json",
148
+ "package-lock.json",
149
+ "recipes/node-typescript-next-web/recipe.yaml",
150
+ ],
151
+ evaluate: () => {
152
+ const dependencies = record(packageJson.dependencies ?? {});
153
+ for (const [name, version] of Object.entries(dependencies)) {
154
+ if (typeof version !== "string" ||
155
+ !/^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?$/u.test(version)) {
156
+ throw new Error(`dependency is not exactly pinned: ${name}`);
157
+ }
158
+ }
159
+ if (record(packageLock.packages ?? {})[""] === undefined) {
160
+ throw new Error("lockfile has no root package");
161
+ }
162
+ if (recipe.licensePolicy.reviewedPackages.length === 0) {
163
+ throw new Error("recipe dependency licenses are not reviewed");
164
+ }
165
+ },
166
+ }),
167
+ runCheck({
168
+ id: "architecture.bounded-monolith",
169
+ category: "architecture",
170
+ summary: "Architecture and workflow retain the bounded local-first design",
171
+ evidence: ["architecture/ARCHITECTURE.md", "WORKFLOW.md", "package.json"],
172
+ evaluate: () => {
173
+ requireText(architecture, [
174
+ "TypeScript modular monolith",
175
+ "there is no daemon",
176
+ ]);
177
+ requireText(workflow, ["five vertical waves", "Factory skills"]);
178
+ const dependencies = Object.keys(record(packageJson.dependencies ?? {}));
179
+ if (dependencies.some((name) => /factoryd?|opencode|pi-agent/iu.test(name))) {
180
+ throw new Error("an excluded orchestrator or harness became a runtime dependency");
181
+ }
182
+ },
183
+ }),
184
+ runCheck({
185
+ id: "operations.recovery",
186
+ category: "operations",
187
+ summary: "Development, support, recovery, and agent operating paths are documented",
188
+ evidence: ["docs/development.md", "SUPPORT.md", "AGENTS.md"],
189
+ evaluate: () => {
190
+ requireText(development, [
191
+ "## Testing matrix",
192
+ "## Review convergence",
193
+ ]);
194
+ requireText(support, ["GitHub Issues", "best-effort"]);
195
+ requireText(agents, ["## Recovery", "## Stop conditions"]);
196
+ },
197
+ }),
198
+ runCheck({
199
+ id: "release.exact-artifact",
200
+ category: "release",
201
+ summary: "Release policy publishes one preserved qualified public artifact",
202
+ evidence: [
203
+ "package.json",
204
+ ".github/workflows/release.yml",
205
+ "docs/release.md",
206
+ ],
207
+ evaluate: () => {
208
+ if (packageJson.name !== "@davidahmann/mill" ||
209
+ packageJson.version === "0.0.0-development" ||
210
+ record(packageJson.publishConfig ?? {}).access !== "public" ||
211
+ record(packageJson.publishConfig ?? {}).provenance !== true) {
212
+ throw new Error("package release identity is not public-alpha ready");
213
+ }
214
+ requireText(releaseWorkflow, [
215
+ "compare-release-artifacts.mjs",
216
+ 'npm publish "$artifact"',
217
+ ]);
218
+ requireText(releaseGuide, ["Genesis release", "Withdrawal"]);
219
+ },
220
+ }),
221
+ ]);
222
+ return auditReportSchema.parse({
223
+ schemaVersion: "1",
224
+ candidate,
225
+ generatedAt: (input.now ?? new Date()).toISOString(),
226
+ status: checks.every((check) => check.status === "passed")
227
+ ? "passed"
228
+ : "blocked",
229
+ checks,
230
+ });
231
+ }
232
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/audit/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAG1C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAkB,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAaxD,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,IAAY;IACtD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACzE,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,KAAsB;IAC5C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,QAAiB;YACzB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,SAAkB;YAC1B,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACtF,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAc,EAAE,MAAyB;IAC5D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAGrC;IACC,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,GACpE,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1B,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,uBAAuB,CAAC;QACnD,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC;QACpD,cAAc,CACZ,KAAK,CAAC,IAAI,EACV,8CAA8C,CAC/C;QACD,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC;QAC1C,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,mBAAmB,CAAC;KAChD,CAAC,CAAC;IACL,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,CACJ,MAAM,EACN,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,eAAe,EAChB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpB,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC;QACrC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC;QACrC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,8BAA8B,CAAC;QACxD,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC;QACvC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,qBAAqB,CAAC;QAC/C,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC;QACvC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC;QACtC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,CAAC;QAC3C,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,+BAA+B,CAAC;KAC1D,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/B,QAAQ,CAAC;YACP,EAAE,EAAE,mBAAmB;YACvB,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,6DAA6D;YACtE,QAAQ,EAAE;gBACR,gBAAgB;gBAChB,uBAAuB;gBACvB,wBAAwB;aACzB;YACD,QAAQ,EAAE,GAAG,EAAE;gBACb,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACrE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBAC9D,CAAC;gBACD,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;oBAClC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBAC3C,IACE,SAAS,CAAC,qBAAqB;oBAC/B,eAAe,CAAC,OAA+B,CAAC,EAChD,CAAC;oBACD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;SACF,CAAC;QACF,QAAQ,CAAC;YACP,EAAE,EAAE,sBAAsB;YAC1B,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,mDAAmD;YAC5D,QAAQ,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC;YAC5C,QAAQ,EAAE,GAAG,EAAE,CAAC,6BAA6B,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1D,CAAC;QACF,QAAQ,CAAC;YACP,EAAE,EAAE,kBAAkB;YACtB,QAAQ,EAAE,IAAI;YACd,OAAO,EACL,kEAAkE;YACpE,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;YACpC,QAAQ,EAAE,GAAG,EAAE;gBACb,WAAW,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC,CAAC;gBACxE,WAAW,CAAC,MAAM,EAAE,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC,CAAC;YACvE,CAAC;SACF,CAAC;QACF,QAAQ,CAAC;YACP,EAAE,EAAE,iCAAiC;YACrC,QAAQ,EAAE,eAAe;YACzB,OAAO,EACL,wEAAwE;YAC1E,QAAQ,EAAE;gBACR,8CAA8C;gBAC9C,qBAAqB;aACtB;YACD,QAAQ,EAAE,GAAG,EAAE;gBACb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;oBACrD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBAC9D,CAAC;gBACD,WAAW,CAAC,WAAW,EAAE,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC;YAC9D,CAAC;SACF,CAAC;QACF,QAAQ,CAAC;YACP,EAAE,EAAE,qBAAqB;YACzB,QAAQ,EAAE,UAAU;YACpB,OAAO,EACL,oEAAoE;YACtE,QAAQ,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;YACtC,QAAQ,EAAE,GAAG,EAAE;gBACb,IACE,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;oBAChC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;oBAC/B,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;oBAChC,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EACpC,CAAC;oBACD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC5D,CAAC;gBACD,WAAW,CAAC,QAAQ,EAAE;oBACpB,iCAAiC;oBACjC,aAAa;iBACd,CAAC,CAAC;YACL,CAAC;SACF,CAAC;QACF,QAAQ,CAAC;YACP,EAAE,EAAE,iCAAiC;YACrC,QAAQ,EAAE,cAAc;YACxB,OAAO,EACL,iEAAiE;YACnE,QAAQ,EAAE;gBACR,cAAc;gBACd,mBAAmB;gBACnB,8CAA8C;aAC/C;YACD,QAAQ,EAAE,GAAG,EAAE;gBACb,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;gBAC5D,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC3D,IACE,OAAO,OAAO,KAAK,QAAQ;wBAC3B,CAAC,uEAAuE,CAAC,IAAI,CAC3E,OAAO,CACR,EACD,CAAC;wBACD,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;oBAC/D,CAAC;gBACH,CAAC;gBACD,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;oBACzD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAClD,CAAC;gBACD,IAAI,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;SACF,CAAC;QACF,QAAQ,CAAC;YACP,EAAE,EAAE,+BAA+B;YACnC,QAAQ,EAAE,cAAc;YACxB,OAAO,EACL,iEAAiE;YACnE,QAAQ,EAAE,CAAC,8BAA8B,EAAE,aAAa,EAAE,cAAc,CAAC;YACzE,QAAQ,EAAE,GAAG,EAAE;gBACb,WAAW,CAAC,YAAY,EAAE;oBACxB,6BAA6B;oBAC7B,oBAAoB;iBACrB,CAAC,CAAC;gBACH,WAAW,CAAC,QAAQ,EAAE,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC,CAAC;gBACjE,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAC9B,MAAM,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CACvC,CAAC;gBACF,IACE,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACzB,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3C,EACD,CAAC;oBACD,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAC;gBACJ,CAAC;YACH,CAAC;SACF,CAAC;QACF,QAAQ,CAAC;YACP,EAAE,EAAE,qBAAqB;YACzB,QAAQ,EAAE,YAAY;YACtB,OAAO,EACL,0EAA0E;YAC5E,QAAQ,EAAE,CAAC,qBAAqB,EAAE,YAAY,EAAE,WAAW,CAAC;YAC5D,QAAQ,EAAE,GAAG,EAAE;gBACb,WAAW,CAAC,WAAW,EAAE;oBACvB,mBAAmB;oBACnB,uBAAuB;iBACxB,CAAC,CAAC;gBACH,WAAW,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;gBACvD,WAAW,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC,CAAC;YAC7D,CAAC;SACF,CAAC;QACF,QAAQ,CAAC;YACP,EAAE,EAAE,wBAAwB;YAC5B,QAAQ,EAAE,SAAS;YACnB,OAAO,EACL,kEAAkE;YACpE,QAAQ,EAAE;gBACR,cAAc;gBACd,+BAA+B;gBAC/B,iBAAiB;aAClB;YACD,QAAQ,EAAE,GAAG,EAAE;gBACb,IACE,WAAW,CAAC,IAAI,KAAK,mBAAmB;oBACxC,WAAW,CAAC,OAAO,KAAK,mBAAmB;oBAC3C,MAAM,CAAC,WAAW,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,QAAQ;oBAC3D,MAAM,CAAC,WAAW,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,UAAU,KAAK,IAAI,EAC3D,CAAC;oBACD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;gBACxE,CAAC;gBACD,WAAW,CAAC,eAAe,EAAE;oBAC3B,+BAA+B;oBAC/B,yBAAyB;iBAC1B,CAAC,CAAC;gBACH,WAAW,CAAC,YAAY,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC,CAAC;YAC/D,CAAC;SACF,CAAC;KACH,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC,KAAK,CAAC;QAC7B,aAAa,EAAE,GAAG;QAClB,SAAS;QACT,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;QACpD,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;YACxD,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,SAAS;QACb,MAAM;KACP,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Command } from "commander";
2
+ export interface CliIo {
3
+ stdout: {
4
+ write(value: string): unknown;
5
+ };
6
+ stderr: {
7
+ write(value: string): unknown;
8
+ };
9
+ }
10
+ export declare function createProgram(io: CliIo, jsonErrors?: boolean): Command;
11
+ export declare function runCli(argv: readonly string[], io: CliIo): Promise<number>;
12
+ //# sourceMappingURL=cli-program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-program.d.ts","sourceRoot":"","sources":["../src/cli-program.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAwC,MAAM,WAAW,CAAC;AA2D1E,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1C,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CAC3C;AA+ED,wBAAgB,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,UAAQ,GAAG,OAAO,CA0wCpE;AAED,wBAAsB,MAAM,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,KAAK,GACR,OAAO,CAAC,MAAM,CAAC,CAuFjB"}