forgeprint 0.1.1 → 0.2.1
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/CHANGELOG.md +71 -0
- package/dist/bin.js +1 -1
- package/dist/bin.js.map +1 -1
- package/dist/changed.d.ts +17 -0
- package/dist/changed.d.ts.map +1 -0
- package/dist/changed.js +62 -0
- package/dist/changed.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +209 -25
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/lint-setup.d.ts.map +1 -1
- package/dist/lint-setup.js +37 -2
- package/dist/lint-setup.js.map +1 -1
- package/dist/manifest.d.ts +2 -0
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +1 -1
- package/dist/manifest.js.map +1 -1
- package/dist/paths.d.ts +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +1 -0
- package/dist/paths.js.map +1 -1
- package/dist/recipe.d.ts +43 -0
- package/dist/recipe.d.ts.map +1 -0
- package/dist/recipe.js +131 -0
- package/dist/recipe.js.map +1 -0
- package/dist/requests.d.ts +54 -0
- package/dist/requests.d.ts.map +1 -0
- package/dist/requests.js +102 -0
- package/dist/requests.js.map +1 -0
- package/dist/skills.d.ts +23 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +162 -0
- package/dist/skills.js.map +1 -0
- package/dist/test-setup.d.ts +54 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/test-setup.js +219 -0
- package/dist/test-setup.js.map +1 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +6 -0
- package/dist/validate.js.map +1 -1
- package/package.json +2 -1
package/dist/lint-setup.js
CHANGED
|
@@ -13,6 +13,8 @@ const STEP_PATTERN = /^(\d+)\.\s+(\S.*)$/;
|
|
|
13
13
|
const IF_PATTERN = /^<!--\s*if\s+options\.([a-z0-9-]+)\s*==\s*([a-z0-9-]+)\s*-->$/;
|
|
14
14
|
const ENDIF_PATTERN = /^<!--\s*endif\s*-->$/;
|
|
15
15
|
const ANY_GUARD_PATTERN = /^<!--\s*(if|endif)\b/;
|
|
16
|
+
/** A heading ends the step above it; the prose after a recipe is not a step. */
|
|
17
|
+
const HEADING_PATTERN = /^\s{0,3}#{1,6}\s/;
|
|
16
18
|
/** Opening or closing line of a fenced code block. */
|
|
17
19
|
const FENCE_PATTERN = /^\s*(?:```|~~~)/;
|
|
18
20
|
/** Hosts a setup step may reach: package registries and the local machine. */
|
|
@@ -138,6 +140,10 @@ export function lintSetup(source, { options = {} } = {}) {
|
|
|
138
140
|
current.body.push(text);
|
|
139
141
|
return;
|
|
140
142
|
}
|
|
143
|
+
if (HEADING_PATTERN.test(text)) {
|
|
144
|
+
closeStep();
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
141
147
|
const guard = IF_PATTERN.exec(text.trim());
|
|
142
148
|
const isEndif = ENDIF_PATTERN.test(text.trim());
|
|
143
149
|
if (guard !== null) {
|
|
@@ -229,6 +235,24 @@ export function lintSetup(source, { options = {} } = {}) {
|
|
|
229
235
|
if (!step.body.some((text) => VERIFY_PATTERN.test(text))) {
|
|
230
236
|
add(step.line, 'step-needs-verification', `step ${step.number} has no "Verify: \`command\`" line`);
|
|
231
237
|
}
|
|
238
|
+
// A step that writes a file names the file in backticks and then opens a
|
|
239
|
+
// fenced block. Anything in backticks after that block is a second action,
|
|
240
|
+
// which makes the step unexecutable however clearly it reads.
|
|
241
|
+
const opening = step.body.findIndex((text) => FENCE_PATTERN.test(text));
|
|
242
|
+
if (opening !== -1) {
|
|
243
|
+
const closing = step.body.findIndex((text, at) => at > opening && FENCE_PATTERN.test(text));
|
|
244
|
+
const before = step.body.slice(0, opening).join('\n');
|
|
245
|
+
const after = step.body
|
|
246
|
+
.slice(closing === -1 ? step.body.length : closing + 1)
|
|
247
|
+
.filter((text) => !VERIFY_PATTERN.test(text))
|
|
248
|
+
.join('\n');
|
|
249
|
+
if (!/`[^`]+`/.test(before)) {
|
|
250
|
+
add(step.line, 'write-step-needs-path', `step ${step.number} writes a file but does not name it; put the path in backticks before the block`);
|
|
251
|
+
}
|
|
252
|
+
if (/`[^`]+`/.test(after)) {
|
|
253
|
+
add(step.line, 'one-action-per-step', `step ${step.number} states another action after the block; a step is one action, so give it its own step`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
232
256
|
}
|
|
233
257
|
// Only commands are linted. Prose that mentions `sudo` to warn against it is
|
|
234
258
|
// not a violation; a code span that runs it is.
|
|
@@ -270,8 +294,19 @@ function hostsIn(text) {
|
|
|
270
294
|
const authority = match[1];
|
|
271
295
|
if (authority === undefined)
|
|
272
296
|
continue;
|
|
273
|
-
|
|
274
|
-
|
|
297
|
+
// A host the shell computes at run time cannot be checked here. The rules
|
|
298
|
+
// that matter for those commands — no privilege, no pipe from a download —
|
|
299
|
+
// are checked on the command itself.
|
|
300
|
+
if (authority.includes('$'))
|
|
301
|
+
continue;
|
|
302
|
+
const authorityOnly = authority.split('@').pop() ?? authority;
|
|
303
|
+
// Backslashes come from regexes written inside a command; the port may be a
|
|
304
|
+
// pattern rather than a number, so everything after the colon goes.
|
|
305
|
+
const withoutEscapes = authorityOnly.replace(/\\/g, '');
|
|
306
|
+
const host = withoutEscapes.startsWith('[')
|
|
307
|
+
? withoutEscapes.slice(0, withoutEscapes.indexOf(']') + 1)
|
|
308
|
+
: (withoutEscapes.split(':')[0] ?? withoutEscapes);
|
|
309
|
+
hosts.push(host.toLowerCase());
|
|
275
310
|
}
|
|
276
311
|
return hosts;
|
|
277
312
|
}
|
package/dist/lint-setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint-setup.js","sourceRoot":"","sources":["../src/lint-setup.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"lint-setup.js","sourceRoot":"","sources":["../src/lint-setup.ts"],"names":[],"mappings":"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"}
|
package/dist/manifest.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { type Taxonomy } from './taxonomy.js';
|
|
3
|
+
/** GitHub login, as GitHub itself validates it. */
|
|
4
|
+
export declare const GITHUB_HANDLE_PATTERN: RegExp;
|
|
3
5
|
/** ADR 0001: variation is limited so the option matrix stays testable. */
|
|
4
6
|
export declare const MAX_OPTION_FIELDS = 3;
|
|
5
7
|
export declare const MAX_OPTION_VALUES = 3;
|
package/dist/manifest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMnE,mDAAmD;AACnD,eAAO,MAAM,qBAAqB,QAAqD,CAAC;AAMxF,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAiBnC;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAmCtD;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAkBhD;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC;AAExE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAIzD"}
|
package/dist/manifest.js
CHANGED
|
@@ -3,7 +3,7 @@ import { SLUG_PATTERN, terms } from './taxonomy.js';
|
|
|
3
3
|
/** https://semver.org — the official recommended pattern, anchored. */
|
|
4
4
|
const SEMVER_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
|
|
5
5
|
/** GitHub login, as GitHub itself validates it. */
|
|
6
|
-
const GITHUB_HANDLE_PATTERN = /^[a-zA-Z\d](?:[a-zA-Z\d]|-(?=[a-zA-Z\d])){0,38}$/;
|
|
6
|
+
export const GITHUB_HANDLE_PATTERN = /^[a-zA-Z\d](?:[a-zA-Z\d]|-(?=[a-zA-Z\d])){0,38}$/;
|
|
7
7
|
/** A tool with an optional version constraint, for example `dotnet>=9`. */
|
|
8
8
|
const REQUIRED_TOOL_PATTERN = /^[a-z0-9][a-z0-9.+-]*(?:\s*(?:>=|<=|==|>|<|~|\^)\s*[0-9][0-9a-zA-Z.-]*)?$/;
|
|
9
9
|
/** ADR 0001: variation is limited so the option matrix stays testable. */
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAiB,MAAM,eAAe,CAAC;AAEnE,uEAAuE;AACvE,MAAM,cAAc,GAClB,qLAAqL,CAAC;AAExL,mDAAmD;AACnD,MAAM,qBAAqB,GAAG,kDAAkD,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAiB,MAAM,eAAe,CAAC;AAEnE,uEAAuE;AACvE,MAAM,cAAc,GAClB,qLAAqL,CAAC;AAExL,mDAAmD;AACnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,kDAAkD,CAAC;AAExF,2EAA2E;AAC3E,MAAM,qBAAqB,GACzB,2EAA2E,CAAC;AAE9E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAExE,SAAS,UAAU,CAAC,QAAkB,EAAE,IAAiC;IACvE,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,YAAY,CAAC,CAAC;IACnF,OAAO,CAAC,CAAC,IAAI,CAAC,MAA+B,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,WAAW,CAAsB,IAAO,EAAE,GAAG,GAAG,CAAC;IACxD,OAAO,CAAC;SACL,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,GAAG,CAAC;SACR,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;AAC/F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAkB;IACrD,OAAO,CAAC;SACL,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACpB,IAAI;QACJ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,4BAA4B,CAAC;QACvE,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;QAClC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAC;QAC3F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACpC,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACzD,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACzD,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC/D,YAAY,EAAE,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC;QAClD,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACvD,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC/D,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnD,OAAO,EAAE,CAAC;aACP,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;aACzE,QAAQ,EAAE;QACb,QAAQ,EAAE,CAAC;aACR,MAAM,CAAC;YACN,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;YACjC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;SACrC,CAAC;aACD,MAAM,EAAE;aACR,QAAQ,EAAE;QACb,cAAc,EAAE,WAAW,CACzB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,8CAA8C,CAAC,CACxF,CAAC,QAAQ,EAAE;QACZ,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACtC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KAC1C,CAAC;SACD,MAAM,EAAE,CAAC;AACd,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,QAAkB;IAC/C,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;QAClE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YACtC,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,CAAC;gBACjB,OAAO,EAAE,WAAW,iBAAiB,qCAAqC,MAAM,CAAC,MAAM,aAAa;aACrG,CAAC,CAAC;QACL,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC1C,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,YAAY,CAAC;gBACpB,OAAO,EAAE,qCAAqC;aAC/C,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAID;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAkB;IAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAAC,YAAY,IAAI,YAAY,EAAE,CAAC;AAC7D,CAAC"}
|
package/dist/paths.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export declare const repoPaths: {
|
|
|
9
9
|
blueprintsDir: (root: string) => string;
|
|
10
10
|
blueprintDir: (root: string, slug: string) => string;
|
|
11
11
|
index: (root: string) => string;
|
|
12
|
+
requests: (root: string) => string;
|
|
12
13
|
codeowners: (root: string) => string;
|
|
13
14
|
};
|
|
14
15
|
/** Files every blueprint folder must contain. */
|
package/dist/paths.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,CAYrE;AAED,eAAO,MAAM,SAAS;qBACH,MAAM,KAAG,MAAM;2BACT,MAAM,KAAG,MAAM;0BAChB,MAAM,KAAG,MAAM;yBAChB,MAAM,QAAQ,MAAM,KAAG,MAAM;kBACpC,MAAM,KAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,CAYrE;AAED,eAAO,MAAM,SAAS;qBACH,MAAM,KAAG,MAAM;2BACT,MAAM,KAAG,MAAM;0BAChB,MAAM,KAAG,MAAM;yBAChB,MAAM,QAAQ,MAAM,KAAG,MAAM;kBACpC,MAAM,KAAG,MAAM;qBACZ,MAAM,KAAG,MAAM;uBACb,MAAM,KAAG,MAAM;CACnC,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,wBAAwB,oFAM3B,CAAC"}
|
package/dist/paths.js
CHANGED
|
@@ -24,6 +24,7 @@ export const repoPaths = {
|
|
|
24
24
|
blueprintsDir: (root) => join(root, 'blueprints'),
|
|
25
25
|
blueprintDir: (root, slug) => join(root, 'blueprints', slug),
|
|
26
26
|
index: (root) => join(root, 'docs', 'index.json'),
|
|
27
|
+
requests: (root) => join(root, 'docs', 'requests.json'),
|
|
27
28
|
codeowners: (root) => join(root, '.github', 'CODEOWNERS'),
|
|
28
29
|
};
|
|
29
30
|
/** Files every blueprint folder must contain. */
|
package/dist/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,2DAA2D;AAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AAEpD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAC3D,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,SAAS,CAAC;QACR,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,0CAA0C,WAAW,sBAAsB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAC/F,CAAC;QACJ,CAAC;QACD,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC;IACzE,cAAc,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,sBAAsB,CAAC;IACtF,aAAa,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;IACjE,YAAY,EAAE,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC;IACpF,KAAK,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC;IACjE,UAAU,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC;CAC1E,CAAC;AAEF,iDAAiD;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,eAAe;IACf,WAAW;IACX,aAAa;IACb,UAAU;IACV,cAAc;CACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,2DAA2D;AAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AAEpD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAC3D,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,SAAS,CAAC;QACR,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,0CAA0C,WAAW,sBAAsB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAC/F,CAAC;QACJ,CAAC;QACD,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC;IACzE,cAAc,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,sBAAsB,CAAC;IACtF,aAAa,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;IACjE,YAAY,EAAE,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC;IACpF,KAAK,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC;IACjE,QAAQ,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC;IACvE,UAAU,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC;CAC1E,CAAC;AAEF,iDAAiD;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,eAAe;IACf,WAAW;IACX,aAAa;IACb,UAAU;IACV,cAAc;CACN,CAAC"}
|
package/dist/recipe.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning a `setup.md` into something executable.
|
|
3
|
+
*
|
|
4
|
+
* The recipe is written for a reader, and it has to run. Both work because a
|
|
5
|
+
* step is exactly one action: either a command, or a file written from a fenced
|
|
6
|
+
* block. `lint-setup` enforces that shape, so this parser can be strict rather
|
|
7
|
+
* than clever — anything ambiguous is reported, never guessed.
|
|
8
|
+
*/
|
|
9
|
+
export type RecipeAction = {
|
|
10
|
+
readonly kind: 'run';
|
|
11
|
+
readonly command: string;
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: 'write';
|
|
14
|
+
readonly path: string;
|
|
15
|
+
readonly contents: string;
|
|
16
|
+
};
|
|
17
|
+
export interface RecipeStep {
|
|
18
|
+
readonly number: number;
|
|
19
|
+
/** Line in `setup.md`, for error messages. */
|
|
20
|
+
readonly line: number;
|
|
21
|
+
/** The step's own words, for progress output. */
|
|
22
|
+
readonly title: string;
|
|
23
|
+
readonly action: RecipeAction;
|
|
24
|
+
/** The command that proves the step worked. */
|
|
25
|
+
readonly verify: string;
|
|
26
|
+
}
|
|
27
|
+
export interface RecipeProblem {
|
|
28
|
+
readonly line: number;
|
|
29
|
+
readonly message: string;
|
|
30
|
+
}
|
|
31
|
+
export interface Recipe {
|
|
32
|
+
readonly steps: readonly RecipeStep[];
|
|
33
|
+
/** Reasons the recipe could not be read as a script. */
|
|
34
|
+
readonly problems: readonly RecipeProblem[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse an option-resolved `setup.md`.
|
|
38
|
+
*
|
|
39
|
+
* Guards must already be resolved; one left in place means the caller did not
|
|
40
|
+
* choose an option, and a recipe with branches in it is not a script.
|
|
41
|
+
*/
|
|
42
|
+
export declare function parseRecipe(markdown: string): Recipe;
|
|
43
|
+
//# sourceMappingURL=recipe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe.d.ts","sourceRoot":"","sources":["../src/recipe.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;CAC7C;AASD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoDpD"}
|
package/dist/recipe.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning a `setup.md` into something executable.
|
|
3
|
+
*
|
|
4
|
+
* The recipe is written for a reader, and it has to run. Both work because a
|
|
5
|
+
* step is exactly one action: either a command, or a file written from a fenced
|
|
6
|
+
* block. `lint-setup` enforces that shape, so this parser can be strict rather
|
|
7
|
+
* than clever — anything ambiguous is reported, never guessed.
|
|
8
|
+
*/
|
|
9
|
+
const STEP_PATTERN = /^(\d+)\.\s+(\S.*)$/;
|
|
10
|
+
const VERIFY_PATTERN = /^\s*(?:[-*]\s*)?Verify:\s*`([^`]+)`/;
|
|
11
|
+
const FENCE_PATTERN = /^(\s*)(?:```|~~~)(.*)$/;
|
|
12
|
+
const GUARD_PATTERN = /^\s*<!--\s*(?:if|endif)\b/;
|
|
13
|
+
/** A heading ends the step above it; the prose after a recipe is not a step. */
|
|
14
|
+
const HEADING_PATTERN = /^\s{0,3}#{1,6}\s/;
|
|
15
|
+
/**
|
|
16
|
+
* Parse an option-resolved `setup.md`.
|
|
17
|
+
*
|
|
18
|
+
* Guards must already be resolved; one left in place means the caller did not
|
|
19
|
+
* choose an option, and a recipe with branches in it is not a script.
|
|
20
|
+
*/
|
|
21
|
+
export function parseRecipe(markdown) {
|
|
22
|
+
const lines = markdown.split(/\r?\n/);
|
|
23
|
+
const steps = [];
|
|
24
|
+
const problems = [];
|
|
25
|
+
let current = null;
|
|
26
|
+
let inFence = false;
|
|
27
|
+
const finish = () => {
|
|
28
|
+
if (current === null)
|
|
29
|
+
return;
|
|
30
|
+
const step = readStep(current);
|
|
31
|
+
if ('message' in step)
|
|
32
|
+
problems.push({ line: current.line, message: step.message });
|
|
33
|
+
else
|
|
34
|
+
steps.push(step);
|
|
35
|
+
current = null;
|
|
36
|
+
};
|
|
37
|
+
lines.forEach((text, index) => {
|
|
38
|
+
if (FENCE_PATTERN.test(text)) {
|
|
39
|
+
inFence = !inFence;
|
|
40
|
+
current?.body.push(text);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (inFence) {
|
|
44
|
+
current?.body.push(text);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (GUARD_PATTERN.test(text)) {
|
|
48
|
+
finish();
|
|
49
|
+
problems.push({
|
|
50
|
+
line: index + 1,
|
|
51
|
+
message: 'an option guard is still in the recipe; resolve the options first',
|
|
52
|
+
});
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (HEADING_PATTERN.test(text)) {
|
|
56
|
+
finish();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const start = STEP_PATTERN.exec(text);
|
|
60
|
+
if (start !== null) {
|
|
61
|
+
finish();
|
|
62
|
+
current = { number: Number(start[1]), line: index + 1, body: [start[2] ?? ''] };
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
current?.body.push(text);
|
|
66
|
+
});
|
|
67
|
+
finish();
|
|
68
|
+
if (steps.length === 0 && problems.length === 0) {
|
|
69
|
+
problems.push({ line: 1, message: 'the recipe has no numbered steps' });
|
|
70
|
+
}
|
|
71
|
+
return { steps, problems };
|
|
72
|
+
}
|
|
73
|
+
function readStep(raw) {
|
|
74
|
+
const verifyLine = raw.body.find((text) => VERIFY_PATTERN.test(text));
|
|
75
|
+
const verify = verifyLine === undefined ? undefined : VERIFY_PATTERN.exec(verifyLine)?.[1];
|
|
76
|
+
if (verify === undefined) {
|
|
77
|
+
return { message: `step ${raw.number} has no "Verify: \`command\`" line` };
|
|
78
|
+
}
|
|
79
|
+
const body = raw.body.filter((text) => !VERIFY_PATTERN.test(text));
|
|
80
|
+
const fence = readFence(body);
|
|
81
|
+
if (fence === undefined) {
|
|
82
|
+
const command = lastCodeSpan(body.join('\n'));
|
|
83
|
+
if (command === undefined) {
|
|
84
|
+
return { message: `step ${raw.number} states no command` };
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
number: raw.number,
|
|
88
|
+
line: raw.line,
|
|
89
|
+
title: summarize(body),
|
|
90
|
+
action: { kind: 'run', command },
|
|
91
|
+
verify,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const path = lastCodeSpan(body.slice(0, fence.start).join('\n'));
|
|
95
|
+
if (path === undefined) {
|
|
96
|
+
return {
|
|
97
|
+
message: `step ${raw.number} writes a file but does not name it; put the path in backticks before the block`,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
number: raw.number,
|
|
102
|
+
line: raw.line,
|
|
103
|
+
title: summarize(body.slice(0, fence.start)),
|
|
104
|
+
action: { kind: 'write', path, contents: fence.contents },
|
|
105
|
+
verify,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/** The first fenced block in a step body, dedented to the fence's own indent. */
|
|
109
|
+
function readFence(body) {
|
|
110
|
+
const start = body.findIndex((text) => FENCE_PATTERN.test(text));
|
|
111
|
+
if (start === -1)
|
|
112
|
+
return undefined;
|
|
113
|
+
const indent = FENCE_PATTERN.exec(body[start] ?? '')?.[1]?.length ?? 0;
|
|
114
|
+
const end = body.findIndex((text, at) => at > start && FENCE_PATTERN.test(text));
|
|
115
|
+
const inner = body.slice(start + 1, end === -1 ? undefined : end);
|
|
116
|
+
const contents = inner
|
|
117
|
+
.map((text) => (text.slice(0, indent).trim().length === 0 ? text.slice(indent) : text))
|
|
118
|
+
.join('\n')
|
|
119
|
+
.replace(/\s+$/, '');
|
|
120
|
+
return { start, contents: `${contents}\n` };
|
|
121
|
+
}
|
|
122
|
+
/** Code spans are how a recipe names a command or a path. The last one wins. */
|
|
123
|
+
function lastCodeSpan(text) {
|
|
124
|
+
const spans = [...text.matchAll(/`([^`]+)`/g)];
|
|
125
|
+
return spans.length === 0 ? undefined : spans[spans.length - 1]?.[1];
|
|
126
|
+
}
|
|
127
|
+
function summarize(body) {
|
|
128
|
+
const first = body.join(' ').replace(/\s+/g, ' ').trim();
|
|
129
|
+
return first.length > 100 ? `${first.slice(0, 97)}...` : first;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=recipe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe.js","sourceRoot":"","sources":["../src/recipe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* The demand signal, as data.
|
|
4
|
+
*
|
|
5
|
+
* `request_blueprint` turns "nothing fits" into a public issue, and that list
|
|
6
|
+
* is what decides which blueprint gets written next — the catalog grows by
|
|
7
|
+
* demand, not by guesswork (CLAUDE.md §3.4). The site shows it, so it has to
|
|
8
|
+
* exist as a file: Pages serves a branch, and a browser fetching the GitHub
|
|
9
|
+
* API on every page load would be a different product.
|
|
10
|
+
*
|
|
11
|
+
* It is generated and committed like the other artifacts, with one difference
|
|
12
|
+
* that matters: it comes from outside the repository, so `validate` cannot
|
|
13
|
+
* regenerate it to check for drift. Nothing depends on it being current — a
|
|
14
|
+
* stale list is a list, and a missing one renders as "none yet".
|
|
15
|
+
*/
|
|
16
|
+
/** The label `.github/ISSUE_TEMPLATE/blueprint-request.yml` applies. */
|
|
17
|
+
export declare const REQUEST_LABEL = "blueprint-request";
|
|
18
|
+
declare const requestSchema: z.ZodObject<{
|
|
19
|
+
number: z.ZodNumber;
|
|
20
|
+
title: z.ZodString;
|
|
21
|
+
url: z.ZodString;
|
|
22
|
+
author: z.ZodString;
|
|
23
|
+
}, z.core.$strip>;
|
|
24
|
+
declare const fileSchema: z.ZodObject<{
|
|
25
|
+
repository: z.ZodString;
|
|
26
|
+
generated_on: z.ZodString;
|
|
27
|
+
requests: z.ZodArray<z.ZodObject<{
|
|
28
|
+
number: z.ZodNumber;
|
|
29
|
+
title: z.ZodString;
|
|
30
|
+
url: z.ZodString;
|
|
31
|
+
author: z.ZodString;
|
|
32
|
+
}, z.core.$strip>>;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
export type BlueprintRequest = z.infer<typeof requestSchema>;
|
|
35
|
+
export type RequestsFile = z.infer<typeof fileSchema>;
|
|
36
|
+
/**
|
|
37
|
+
* Open blueprint requests, straight from `gh`.
|
|
38
|
+
*
|
|
39
|
+
* `gh` rather than a fetch with a token: the maintainer is already
|
|
40
|
+
* authenticated, and nothing here should ask anybody for a secret.
|
|
41
|
+
*/
|
|
42
|
+
export declare function fetchRequests(repository: string): BlueprintRequest[];
|
|
43
|
+
/** True when `gh` is on this machine, which is the only thing this needs. */
|
|
44
|
+
export declare function hasGitHubCli(): boolean;
|
|
45
|
+
export declare function renderRequests(repository: string, requests: readonly BlueprintRequest[], generatedOn?: string): string;
|
|
46
|
+
/** The date, to the day: a rebuild an hour later is still the same snapshot. */
|
|
47
|
+
export declare function today(): string;
|
|
48
|
+
/**
|
|
49
|
+
* The committed list, or nothing at all. Every failure is the same answer —
|
|
50
|
+
* no requests — because a demand list is never worth failing a build over.
|
|
51
|
+
*/
|
|
52
|
+
export declare function readRequests(root: string): RequestsFile;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=requests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../src/requests.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;;;;;;;;;GAaG;AAEH,wEAAwE;AACxE,eAAO,MAAM,aAAa,sBAAsB,CAAC;AAEjD,QAAA,MAAM,aAAa;;;;;iBAKjB,CAAC;AAEH,QAAA,MAAM,UAAU;;;;;;;;;iBAKd,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAC7D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAwCpE;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,IAAI,OAAO,CAOtC;AAED,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EACrC,WAAW,GAAE,MAAgB,GAC5B,MAAM,CAER;AAED,gFAAgF;AAChF,wBAAgB,KAAK,IAAI,MAAM,CAE9B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAMvD"}
|
package/dist/requests.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { stableJson } from './json.js';
|
|
5
|
+
import { repoPaths } from './paths.js';
|
|
6
|
+
/**
|
|
7
|
+
* The demand signal, as data.
|
|
8
|
+
*
|
|
9
|
+
* `request_blueprint` turns "nothing fits" into a public issue, and that list
|
|
10
|
+
* is what decides which blueprint gets written next — the catalog grows by
|
|
11
|
+
* demand, not by guesswork (CLAUDE.md §3.4). The site shows it, so it has to
|
|
12
|
+
* exist as a file: Pages serves a branch, and a browser fetching the GitHub
|
|
13
|
+
* API on every page load would be a different product.
|
|
14
|
+
*
|
|
15
|
+
* It is generated and committed like the other artifacts, with one difference
|
|
16
|
+
* that matters: it comes from outside the repository, so `validate` cannot
|
|
17
|
+
* regenerate it to check for drift. Nothing depends on it being current — a
|
|
18
|
+
* stale list is a list, and a missing one renders as "none yet".
|
|
19
|
+
*/
|
|
20
|
+
/** The label `.github/ISSUE_TEMPLATE/blueprint-request.yml` applies. */
|
|
21
|
+
export const REQUEST_LABEL = 'blueprint-request';
|
|
22
|
+
const requestSchema = z.object({
|
|
23
|
+
number: z.number().int().positive(),
|
|
24
|
+
title: z.string().min(1),
|
|
25
|
+
url: z.string().min(1),
|
|
26
|
+
author: z.string(),
|
|
27
|
+
});
|
|
28
|
+
const fileSchema = z.object({
|
|
29
|
+
repository: z.string(),
|
|
30
|
+
/** The day the snapshot was taken, so the site can date what it shows. */
|
|
31
|
+
generated_on: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
|
|
32
|
+
requests: z.array(requestSchema),
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* Open blueprint requests, straight from `gh`.
|
|
36
|
+
*
|
|
37
|
+
* `gh` rather than a fetch with a token: the maintainer is already
|
|
38
|
+
* authenticated, and nothing here should ask anybody for a secret.
|
|
39
|
+
*/
|
|
40
|
+
export function fetchRequests(repository) {
|
|
41
|
+
const output = execFileSync('gh', [
|
|
42
|
+
'issue',
|
|
43
|
+
'list',
|
|
44
|
+
'--repo',
|
|
45
|
+
repository,
|
|
46
|
+
'--label',
|
|
47
|
+
REQUEST_LABEL,
|
|
48
|
+
'--state',
|
|
49
|
+
'open',
|
|
50
|
+
'--limit',
|
|
51
|
+
'50',
|
|
52
|
+
'--json',
|
|
53
|
+
'number,title,url,author',
|
|
54
|
+
], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
|
|
55
|
+
const raw = JSON.parse(output);
|
|
56
|
+
const issues = z
|
|
57
|
+
.array(z.object({
|
|
58
|
+
number: z.number(),
|
|
59
|
+
title: z.string(),
|
|
60
|
+
url: z.string(),
|
|
61
|
+
author: z.object({ login: z.string() }).nullish(),
|
|
62
|
+
}))
|
|
63
|
+
.parse(raw);
|
|
64
|
+
return issues
|
|
65
|
+
.map((issue) => ({
|
|
66
|
+
number: issue.number,
|
|
67
|
+
title: issue.title,
|
|
68
|
+
url: issue.url,
|
|
69
|
+
author: issue.author?.login ?? '',
|
|
70
|
+
}))
|
|
71
|
+
.sort((a, b) => a.number - b.number);
|
|
72
|
+
}
|
|
73
|
+
/** True when `gh` is on this machine, which is the only thing this needs. */
|
|
74
|
+
export function hasGitHubCli() {
|
|
75
|
+
try {
|
|
76
|
+
execFileSync('gh', ['--version'], { stdio: 'ignore' });
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export function renderRequests(repository, requests, generatedOn = today()) {
|
|
84
|
+
return stableJson({ repository, generated_on: generatedOn, requests });
|
|
85
|
+
}
|
|
86
|
+
/** The date, to the day: a rebuild an hour later is still the same snapshot. */
|
|
87
|
+
export function today() {
|
|
88
|
+
return new Date().toISOString().slice(0, 10);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The committed list, or nothing at all. Every failure is the same answer —
|
|
92
|
+
* no requests — because a demand list is never worth failing a build over.
|
|
93
|
+
*/
|
|
94
|
+
export function readRequests(root) {
|
|
95
|
+
try {
|
|
96
|
+
return fileSchema.parse(JSON.parse(readFileSync(repoPaths.requests(root), 'utf8')));
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return { repository: '', generated_on: '', requests: [] };
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=requests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requests.js","sourceRoot":"","sources":["../src/requests.ts"],"names":[],"mappings":"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"}
|
package/dist/skills.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface SkillProblem {
|
|
2
|
+
/** Repository-relative path of the SKILL.md, for the error message. */
|
|
3
|
+
readonly file: string;
|
|
4
|
+
readonly message: string;
|
|
5
|
+
}
|
|
6
|
+
export interface SkillFolder {
|
|
7
|
+
/** Repository-relative path of the folder, e.g. `skills/blueprint-author`. */
|
|
8
|
+
readonly path: string;
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly file: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Every skill in the repository: the catalog's own, and the ones a blueprint
|
|
14
|
+
* ships. Both live at `<something>/skills/<name>/SKILL.md`, which is the
|
|
15
|
+
* layout the tools discover.
|
|
16
|
+
*/
|
|
17
|
+
export declare function findSkills(root: string): SkillFolder[];
|
|
18
|
+
/**
|
|
19
|
+
* Check every skill, and the catalog-wide rule no single skill can check: a
|
|
20
|
+
* name is how both tools address a skill, so it has to be unique here.
|
|
21
|
+
*/
|
|
22
|
+
export declare function checkSkills(root: string): SkillProblem[];
|
|
23
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAUtD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAgBxD"}
|