@waniwani/kit 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +91 -27
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.js +242 -214
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/peers.js +69 -4
- package/dist/cli/peers.js.map +1 -1
- package/dist/cli/prompt.js +113 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/cli/registry.js +107 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/cli/template-pin.js +25 -0
- package/dist/cli/template-pin.js.map +1 -0
- package/dist/cli/template.js +14 -18
- package/dist/cli/template.js.map +1 -1
- package/dist/cli/validate.js +41 -5
- package/dist/cli/validate.js.map +1 -1
- package/package.json +8 -8
- package/templates/starter/env.example +4 -0
- package/templates/starter/gitignore +4 -0
- package/templates/starter/tools/search-products.ts +57 -0
- package/templates/starter/waniwani.config.ts +12 -0
- package/templates/starter/widgets/product-list/ui.tsx +51 -0
- package/templates/starter/widgets/product-list/widget.ts +35 -0
package/dist/cli/peers.js
CHANGED
|
@@ -36,10 +36,11 @@ export function peerRange(name) {
|
|
|
36
36
|
* installs the next major on the day it lands. Cap it. Anything already ranged,
|
|
37
37
|
* `^4`, passes through as it is.
|
|
38
38
|
*
|
|
39
|
-
* The prerelease tail is part of the pattern because a floor can carry one,
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
39
|
+
* The prerelease tail is part of the pattern because a floor can carry one,
|
|
40
|
+
* which is what waiting on somebody else's release looks like here. A
|
|
41
|
+
* `>=0.20.0-beta.0` falling through uncapped would put the very floor this
|
|
42
|
+
* exists to cap into a new app's manifest; `^0.20.0-beta.0` keeps the
|
|
43
|
+
* prerelease reachable and still stops at `0.21.0`.
|
|
43
44
|
*/
|
|
44
45
|
export function installable(name) {
|
|
45
46
|
const range = peerRange(name);
|
|
@@ -156,4 +157,68 @@ export function compareVersions(a, b) {
|
|
|
156
157
|
return null;
|
|
157
158
|
return order(left, right);
|
|
158
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Whether a dependency spec allows a given version.
|
|
162
|
+
*
|
|
163
|
+
* The mirror of `compare`, asked the other way round: that one measures a spec
|
|
164
|
+
* against this package's floor, this one measures a published version against
|
|
165
|
+
* a spec an app already wrote. An expression this module cannot parse answers
|
|
166
|
+
* `true`, because the caller is deciding whether to nag someone and a range it
|
|
167
|
+
* cannot read is not grounds for it.
|
|
168
|
+
*
|
|
169
|
+
* The prerelease rule is npm's: a range naming no prerelease of its own
|
|
170
|
+
* excludes every prerelease, even one numerically inside it.
|
|
171
|
+
*/
|
|
172
|
+
export function allows(spec, version) {
|
|
173
|
+
const allowed = spec == null ? null : window(spec);
|
|
174
|
+
const wanted = parseVersion(version);
|
|
175
|
+
if (!allowed || !wanted)
|
|
176
|
+
return true;
|
|
177
|
+
if (wanted.prerelease && !allowed.low.prerelease)
|
|
178
|
+
return false;
|
|
179
|
+
if (order(wanted, allowed.low) < 0)
|
|
180
|
+
return false;
|
|
181
|
+
if (allowed.exact)
|
|
182
|
+
return order(wanted, allowed.low) === 0;
|
|
183
|
+
return allowed.high === null || order(wanted, allowed.high) < 0;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* The range a freshly scaffolded app should carry for a peer.
|
|
187
|
+
*
|
|
188
|
+
* `installable` alone answers this from the floor, and a floor is frozen at
|
|
189
|
+
* release: a kit published against SDK 0.19 scaffolds 0.19 for as long as it is
|
|
190
|
+
* on npm, months after 0.21 shipped. Passing what the registry says `latest` is
|
|
191
|
+
* (see `./registry.ts`) lets a new app start on the newest SDK without this
|
|
192
|
+
* package cutting a release for every SDK bump, which is the whole point of the
|
|
193
|
+
* dependency being a floor rather than a pin.
|
|
194
|
+
*
|
|
195
|
+
* Two things it refuses to follow:
|
|
196
|
+
*
|
|
197
|
+
* A different major. Crossing one is a migration, and a scaffold picking that
|
|
198
|
+
* up on the day it publishes would hand someone a template that no longer
|
|
199
|
+
* compiles against the SDK it imports. Raising the floor is how a major
|
|
200
|
+
* arrives, deliberately and with a template bump next to it.
|
|
201
|
+
*
|
|
202
|
+
* Anything the floor does not already accept — a `latest` that sits below it,
|
|
203
|
+
* which is what a floor pinned to an unreleased prerelease looks like from
|
|
204
|
+
* here. Writing that range would produce an app failing the kit's own check on
|
|
205
|
+
* the first `waniwani check`.
|
|
206
|
+
*
|
|
207
|
+
* Inside a major it does follow the minor, and under semver's 0.x rule that is
|
|
208
|
+
* a breaking boundary: an SDK minor that changes what the distribution template
|
|
209
|
+
* imports reaches a newly scaffolded app immediately. That is the trade for not
|
|
210
|
+
* shipping a kit release per SDK bump, and `scripts/bump-deps.ts` plus the
|
|
211
|
+
* template contract are what catch the template half of it.
|
|
212
|
+
*/
|
|
213
|
+
export function preferred(name, latest) {
|
|
214
|
+
const base = installable(name);
|
|
215
|
+
if (!latest)
|
|
216
|
+
return base;
|
|
217
|
+
const floor = parseVersion(peerRange(name).replace(/^>=\s*/, ""));
|
|
218
|
+
const published = parseVersion(latest);
|
|
219
|
+
if (!floor || !published || floor.parts[0] !== published.parts[0])
|
|
220
|
+
return base;
|
|
221
|
+
const candidate = `^${latest}`;
|
|
222
|
+
return compare(candidate, name) === "ok" ? candidate : base;
|
|
223
|
+
}
|
|
159
224
|
//# sourceMappingURL=peers.js.map
|
package/dist/cli/peers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peers.js","sourceRoot":"","sources":["../../cli/peers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAkBzC;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACd,8CAA8C,IAAI,2CAA2C;YAC5F,2EAA2E,CAC5E,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"peers.js","sourceRoot":"","sources":["../../cli/peers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The questions `waniwani init` asks, and the shape it asks them in.
|
|
3
|
+
*
|
|
4
|
+
* Arrow-driven, on top of @clack/prompts: raw mode, the redraw on every
|
|
5
|
+
* keystroke, the cursor restore and the ctrl-c path are one dependency's
|
|
6
|
+
* problem rather than four hand-rolled ones. It is the same library `eve init`
|
|
7
|
+
* and `skills add` render their flows with, so the first `waniwani init`
|
|
8
|
+
* somebody runs needs no reading.
|
|
9
|
+
*
|
|
10
|
+
* A question is skipped rather than degraded when there is nothing to ask:
|
|
11
|
+
* `--yes`, a flag that already carries the answer, a pipe, or a CI runner.
|
|
12
|
+
* `canAsk()` is that one test and `init` takes it once, because a scripted run
|
|
13
|
+
* blocking on a cursor in a build log is the failure mode worth designing out.
|
|
14
|
+
* Everything a skipped run prints goes through `close()` and `fail()`, so the
|
|
15
|
+
* two paths say the same thing with and without the rail.
|
|
16
|
+
*/
|
|
17
|
+
import { cancel, intro, isCancel, isCI, outro, S_BAR, select, text, } from "@clack/prompts";
|
|
18
|
+
import { dim, green, red } from "./log.js";
|
|
19
|
+
/**
|
|
20
|
+
* Whether this run can ask anything at all.
|
|
21
|
+
*
|
|
22
|
+
* Both ends have to be a terminal — a prompt needs stdin in raw mode and stdout
|
|
23
|
+
* to draw on — and a CI runner is a terminal often enough to be worth ruling out
|
|
24
|
+
* by name. `--yes` is the caller's own answer and is checked at the call site.
|
|
25
|
+
*/
|
|
26
|
+
export function canAsk() {
|
|
27
|
+
return Boolean(process.stdin.isTTY && process.stdout.isTTY) && !isCI();
|
|
28
|
+
}
|
|
29
|
+
/** A title `open()` took, drawn by the first question that actually gets asked. */
|
|
30
|
+
let pending = null;
|
|
31
|
+
/** Whether the rail is drawn and waiting for an end cap. */
|
|
32
|
+
let asking = false;
|
|
33
|
+
/**
|
|
34
|
+
* Open the question block, if there turns out to be a question.
|
|
35
|
+
*
|
|
36
|
+
* The heading is held rather than printed, because a run whose flags happen to
|
|
37
|
+
* answer everything asks nothing, and a rail around nothing is a header with no
|
|
38
|
+
* body under it. The first prompt draws it; a run without one never does.
|
|
39
|
+
*/
|
|
40
|
+
export function open(title) {
|
|
41
|
+
pending = title;
|
|
42
|
+
}
|
|
43
|
+
/** Draw the held heading. Called by every prompt, does its work once. */
|
|
44
|
+
function rail() {
|
|
45
|
+
if (pending === null)
|
|
46
|
+
return;
|
|
47
|
+
intro(pending);
|
|
48
|
+
pending = null;
|
|
49
|
+
asking = true;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Close the question block with the one line that says what happened.
|
|
53
|
+
*
|
|
54
|
+
* The end cap carries information rather than a farewell, so the line reads the
|
|
55
|
+
* same whether it arrived under a rail or on its own after a `--yes` run.
|
|
56
|
+
*/
|
|
57
|
+
export function close(line) {
|
|
58
|
+
pending = null;
|
|
59
|
+
if (asking) {
|
|
60
|
+
asking = false;
|
|
61
|
+
outro(line);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
console.log(`\n${green("✓")} ${line}\n`);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Close the question block on a refusal, and hand the caller stderr to keep
|
|
68
|
+
* explaining on. Red end cap, and no prompt after it.
|
|
69
|
+
*/
|
|
70
|
+
export function fail(line) {
|
|
71
|
+
pending = null;
|
|
72
|
+
if (asking) {
|
|
73
|
+
asking = false;
|
|
74
|
+
// `cancel` draws the end cap without the rail segment above it that `outro`
|
|
75
|
+
// draws, so the answer it lands under would touch it. One bar of our own.
|
|
76
|
+
process.stderr.write(`${dim(S_BAR)}\n`);
|
|
77
|
+
cancel(line, { output: process.stderr });
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
console.error(`\n${red("✗")} ${line}\n`);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Ctrl-c out of a question ends the command at 130 — the shell's own code for an
|
|
84
|
+
* interrupted program, so a wrapper can tell it apart from a scaffold that
|
|
85
|
+
* failed. Nothing has been written at this point, so there is nothing to undo
|
|
86
|
+
* and nothing to report beyond the word.
|
|
87
|
+
*/
|
|
88
|
+
function answered(value) {
|
|
89
|
+
if (isCancel(value)) {
|
|
90
|
+
cancel("cancelled", { output: process.stderr });
|
|
91
|
+
process.exit(130);
|
|
92
|
+
}
|
|
93
|
+
return value;
|
|
94
|
+
}
|
|
95
|
+
/** One line of text, with `fallback` shown as the placeholder and taken on Enter. */
|
|
96
|
+
export async function askText(message, fallback, validate) {
|
|
97
|
+
rail();
|
|
98
|
+
const answer = answered(await text({ message, placeholder: fallback, defaultValue: fallback, validate }));
|
|
99
|
+
return answer.trim() || fallback;
|
|
100
|
+
}
|
|
101
|
+
/** One choice out of a list, arrow keys to move, Enter to take the highlighted row. */
|
|
102
|
+
export async function askOne(message, choices, initial) {
|
|
103
|
+
rail();
|
|
104
|
+
return answered(await select({
|
|
105
|
+
message,
|
|
106
|
+
// `Option` resolves through a conditional on its value type, which stays
|
|
107
|
+
// deferred while T is a parameter. Every field of Choice satisfies either
|
|
108
|
+
// branch, so the cast asserts what the constraint cannot.
|
|
109
|
+
options: choices,
|
|
110
|
+
initialValue: initial ?? choices[0].value,
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../cli/prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The published version of the one dependency this kit does not pin.
|
|
3
|
+
*
|
|
4
|
+
* `@waniwani/sdk` reaches an app as a peer floor rather than as a pin (see
|
|
5
|
+
* `./peers.ts`), which keeps an app free to choose its own version and keeps
|
|
6
|
+
* this package out of the way. The cost is staleness: the floor is written when
|
|
7
|
+
* the kit is released and does not move afterwards, so a new app scaffolded
|
|
8
|
+
* months later still starts on whatever was current the day the floor was set,
|
|
9
|
+
* and an app that never touches its manifest never hears that a newer SDK
|
|
10
|
+
* exists. Both are answered by asking the registry rather than by cutting a kit
|
|
11
|
+
* release for every SDK bump.
|
|
12
|
+
*
|
|
13
|
+
* Everything here fails soft. A lookup that times out, a machine with no
|
|
14
|
+
* network, a registry returning nonsense: all of them return the cached answer
|
|
15
|
+
* if there is one and `null` otherwise, and every caller treats `null` as "say
|
|
16
|
+
* nothing". No command in this CLI fails because npm was slow.
|
|
17
|
+
*
|
|
18
|
+
* Set `WANIWANI_OFFLINE=1` to skip the network entirely. The disk cache is
|
|
19
|
+
* still read, so a machine that has looked once keeps the answer.
|
|
20
|
+
*/
|
|
21
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
22
|
+
import { homedir } from "node:os";
|
|
23
|
+
import { join } from "node:path";
|
|
24
|
+
const CACHE_ROOT = join(homedir(), ".cache", "waniwani", "registry");
|
|
25
|
+
/**
|
|
26
|
+
* How long an answer stands before it is looked up again.
|
|
27
|
+
*
|
|
28
|
+
* `validateApp` runs on `check`, `dev`, `build` and `start`, and the dev loop
|
|
29
|
+
* re-runs it on every file change. Without a cache that is a registry round
|
|
30
|
+
* trip per keystroke-ish, which is both rude and slow enough to notice. Six
|
|
31
|
+
* hours means at most a handful of requests a day from a machine someone is
|
|
32
|
+
* working on, and a released SDK that lands mid-afternoon is heard about the
|
|
33
|
+
* same day.
|
|
34
|
+
*/
|
|
35
|
+
const TTL_MS = 6 * 60 * 60 * 1000;
|
|
36
|
+
/**
|
|
37
|
+
* Short on purpose. This is a nicety on top of a check that already has its
|
|
38
|
+
* answer, so waiting on a hanging socket costs more than the information is
|
|
39
|
+
* worth.
|
|
40
|
+
*/
|
|
41
|
+
const TIMEOUT_MS = 2500;
|
|
42
|
+
/** `@waniwani/sdk` -> a filename with no directory separator left in it. */
|
|
43
|
+
function cacheFile(name) {
|
|
44
|
+
return join(CACHE_ROOT, `${name.replace(/[@/]/g, "_")}.json`);
|
|
45
|
+
}
|
|
46
|
+
function readCache(name) {
|
|
47
|
+
const file = cacheFile(name);
|
|
48
|
+
if (!existsSync(file))
|
|
49
|
+
return null;
|
|
50
|
+
try {
|
|
51
|
+
const parsed = JSON.parse(readFileSync(file, "utf-8"));
|
|
52
|
+
return typeof parsed.version === "string" && typeof parsed.at === "number" ? parsed : null;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// A truncated or hand-edited cache file is not worth an error message on
|
|
56
|
+
// a command that was doing something else.
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function writeCache(name, version) {
|
|
61
|
+
try {
|
|
62
|
+
mkdirSync(CACHE_ROOT, { recursive: true });
|
|
63
|
+
writeFileSync(cacheFile(name), JSON.stringify({ version, at: Date.now() }));
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// A read-only HOME, a full disk. The lookup still worked; only the next
|
|
67
|
+
// one pays for it.
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The version behind a package's `latest` dist-tag, or null.
|
|
72
|
+
*
|
|
73
|
+
* `latest` and not `beta`: a prerelease is something a maintainer opts into by
|
|
74
|
+
* hand, and both npm and bun exclude one from a range that names none. A kit
|
|
75
|
+
* floor carrying a prerelease is exactly that opt-in, and an answer read from
|
|
76
|
+
* here must not quietly undo it.
|
|
77
|
+
*
|
|
78
|
+
* The scoped path is written unencoded because that is the form the registry's
|
|
79
|
+
* `/<name>/latest` endpoint serves; `%40scope%2Fname` answers the packument
|
|
80
|
+
* endpoint but not this one.
|
|
81
|
+
*/
|
|
82
|
+
export async function latestVersion(name) {
|
|
83
|
+
const cached = readCache(name);
|
|
84
|
+
if (cached && Date.now() - cached.at < TTL_MS)
|
|
85
|
+
return cached.version;
|
|
86
|
+
if (process.env.WANIWANI_OFFLINE)
|
|
87
|
+
return cached?.version ?? null;
|
|
88
|
+
try {
|
|
89
|
+
const response = await fetch(`https://registry.npmjs.org/${name}/latest`, {
|
|
90
|
+
headers: { Accept: "application/json" },
|
|
91
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
92
|
+
});
|
|
93
|
+
if (!response.ok)
|
|
94
|
+
return cached?.version ?? null;
|
|
95
|
+
const { version } = (await response.json());
|
|
96
|
+
if (typeof version !== "string" || !/^\d+\.\d+\.\d+/.test(version)) {
|
|
97
|
+
return cached?.version ?? null;
|
|
98
|
+
}
|
|
99
|
+
writeCache(name, version);
|
|
100
|
+
return version;
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Offline, DNS, a proxy, the timeout above. A stale answer beats none.
|
|
104
|
+
return cached?.version ?? null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../cli/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The distribution template this kit builds from, as data.
|
|
3
|
+
*
|
|
4
|
+
* Its own module, with no prose wrapped around the value, because
|
|
5
|
+
* `scripts/bump-deps.ts` rewrites `commit` in place every time the tracked
|
|
6
|
+
* branch moves. A file a bot edits is a file where the only line it can damage
|
|
7
|
+
* is the one it means to write.
|
|
8
|
+
*
|
|
9
|
+
* Everything that names the template derives from this record: the `github:`
|
|
10
|
+
* specifier in `./template.js`, the branch `bump-deps.ts` polls for a newer
|
|
11
|
+
* commit, and the raw.githubusercontent URL it reads the template's manifest
|
|
12
|
+
* from. Renaming the repo or moving the tracked branch is one line here.
|
|
13
|
+
*/
|
|
14
|
+
export const TEMPLATE_PIN = {
|
|
15
|
+
owner: "WaniWani-AI",
|
|
16
|
+
repo: "mcp-distribution-template",
|
|
17
|
+
/**
|
|
18
|
+
* The branch `commit` is taken from, and the only branch a bump is proposed
|
|
19
|
+
* off. `bump-deps.ts` asserts the pin is an ancestor of this branch's head,
|
|
20
|
+
* so a commit from anywhere else fails rather than sitting here unnoticed.
|
|
21
|
+
*/
|
|
22
|
+
branch: "main",
|
|
23
|
+
commit: "c0d00e72a3733a5f42389731fe6bbaf7e0e07863",
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=template-pin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-pin.js","sourceRoot":"","sources":["../../cli/template-pin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,KAAK,EAAE,aAAa;IACpB,IAAI,EAAE,2BAA2B;IACjC;;;;OAIG;IACH,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,0CAA0C;CAClD,CAAC"}
|
package/dist/cli/template.js
CHANGED
|
@@ -16,35 +16,31 @@ import { spawnSync } from "node:child_process";
|
|
|
16
16
|
import { existsSync, mkdirSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
17
17
|
import { homedir, tmpdir } from "node:os";
|
|
18
18
|
import { join, resolve } from "node:path";
|
|
19
|
+
import { TEMPLATE_PIN } from "./template-pin.js";
|
|
19
20
|
/**
|
|
20
21
|
* A commit, not a branch.
|
|
21
22
|
*
|
|
22
23
|
* A published version of this package is frozen, and what it generates has to
|
|
23
|
-
* be frozen with it.
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
24
|
+
* be frozen with it. A branch ref is re-resolved on the customer's machine at
|
|
25
|
+
* every command, so a push to the template would change the output of every
|
|
26
|
+
* installed copy, and the assertions that catch a layout move (`REQUIRED` and
|
|
27
|
+
* `assertSeam` in `./codegen.js`) would fire in a customer's terminal. Pinning
|
|
28
|
+
* a commit moves that failure into this repo's CI, where
|
|
28
29
|
* `scripts/template-contract.ts` builds a real app against the pin before a
|
|
29
30
|
* release goes out.
|
|
30
31
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* that
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* This commit is `beta`'s head, and it reads `search` and `tracking` off
|
|
39
|
-
* `src/waniwani.ts` — the two fields `generateServerApp` emits from the app's
|
|
40
|
-
* `defineApp({ ... })`. That pairing is the reason to bump the two together:
|
|
41
|
-
* moving the pin here without the generator emitting those fields compiles to
|
|
42
|
-
* TS2339, and the contract is what catches it.
|
|
32
|
+
* The commit and the branch it comes from are `./template-pin.js`, which
|
|
33
|
+
* `scripts/bump-deps.ts` owns: it proposes the head of `TEMPLATE_PIN.branch`
|
|
34
|
+
* and refuses a pin that is not an ancestor of it. A bump reaches customers
|
|
35
|
+
* only through a release of this package, and the pin and the generator that
|
|
36
|
+
* reads the template move in one diff with a contract run behind it. An
|
|
37
|
+
* annotated tag can replace the SHA whenever the template grows one, with no
|
|
38
|
+
* change to the resolver.
|
|
43
39
|
*
|
|
44
40
|
* Working on the template itself does not need a release: pass `--template` or
|
|
45
41
|
* set `WANIWANI_TEMPLATE` to a branch ref or a local checkout.
|
|
46
42
|
*/
|
|
47
|
-
export const DEFAULT_TEMPLATE =
|
|
43
|
+
export const DEFAULT_TEMPLATE = `github:${TEMPLATE_PIN.owner}/${TEMPLATE_PIN.repo}#${TEMPLATE_PIN.commit}`;
|
|
48
44
|
const CACHE_ROOT = join(homedir(), ".cache", "waniwani", "templates");
|
|
49
45
|
/** `github:owner/repo#ref` -> its parts. */
|
|
50
46
|
function parseGithub(source) {
|
package/dist/cli/template.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../cli/template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../cli/template.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/validate.js
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
import { existsSync, readFileSync } from "node:fs";
|
|
9
9
|
import { join, relative } from "node:path";
|
|
10
10
|
import { loadAppEnv } from "./env.js";
|
|
11
|
-
import { compare, floorOf, installable } from "./peers.js";
|
|
11
|
+
import { allows, compare, compareVersions, floorOf, floorVersion, installable, preferred, } from "./peers.js";
|
|
12
|
+
import { latestVersion } from "./registry.js";
|
|
12
13
|
const NAME_RE = /^[a-z0-9](?:[a-z0-9_-]*[a-z0-9])?$/;
|
|
13
14
|
/**
|
|
14
15
|
* What may appear in an endpoint path segment. Deliberately narrower than what
|
|
@@ -237,7 +238,7 @@ async function load(file, where, report) {
|
|
|
237
238
|
* `codegen.ts` writes one into the generated project, so an app that never
|
|
238
239
|
* mentions the SDK still gets a working copy.
|
|
239
240
|
*/
|
|
240
|
-
function checkPeers(app, report) {
|
|
241
|
+
async function checkPeers(app, report) {
|
|
241
242
|
let manifest;
|
|
242
243
|
try {
|
|
243
244
|
manifest = JSON.parse(readFileSync(join(app.root, "package.json"), "utf-8"));
|
|
@@ -270,6 +271,41 @@ function checkPeers(app, report) {
|
|
|
270
271
|
// string and guessing at it would be a false alarm either way.
|
|
271
272
|
break;
|
|
272
273
|
}
|
|
274
|
+
await checkSdkFreshness(spec, report);
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* An app whose SDK range stopped below what npm publishes.
|
|
278
|
+
*
|
|
279
|
+
* The check above measures a range against this package's floor, and a floor
|
|
280
|
+
* is the wrong instrument for this question: an app pinned to `^0.19.9` clears
|
|
281
|
+
* a `>=0.19.9` floor forever, including on the day 0.21 ships. Under semver's
|
|
282
|
+
* 0.x rule a caret stops at the next minor, so an SDK minor never reaches an
|
|
283
|
+
* app on its own and nobody upstream can push it there. Somebody has to say so,
|
|
284
|
+
* and this is the only place that runs in front of the person who can act.
|
|
285
|
+
*
|
|
286
|
+
* A warning rather than an error, and silent whenever the answer is not certain:
|
|
287
|
+
* no registry answer, a range this module cannot read, a `latest` the kit's own
|
|
288
|
+
* floor would not accept, or an app already sitting above what npm serves. See
|
|
289
|
+
* `latestVersion` in `./registry.js` for what it costs, which after the first
|
|
290
|
+
* lookup of the day is a file read.
|
|
291
|
+
*/
|
|
292
|
+
async function checkSdkFreshness(spec, report) {
|
|
293
|
+
const name = "@waniwani/sdk";
|
|
294
|
+
const latest = await latestVersion(name);
|
|
295
|
+
if (!latest || allows(spec, latest))
|
|
296
|
+
return;
|
|
297
|
+
// Ahead of the registry rather than behind it: a prerelease, or a version
|
|
298
|
+
// published and then unpublished. Nothing to say.
|
|
299
|
+
const current = floorVersion(spec);
|
|
300
|
+
if (!current || compareVersions(latest, current) !== 1)
|
|
301
|
+
return;
|
|
302
|
+
// `preferred` refuses a `latest` this kit cannot endorse — a different major,
|
|
303
|
+
// or one below the declared floor — and hands back the floor instead. That is
|
|
304
|
+
// not a suggestion worth printing.
|
|
305
|
+
const suggestion = preferred(name, latest);
|
|
306
|
+
if (suggestion === installable(name))
|
|
307
|
+
return;
|
|
308
|
+
report.warn("package.json", `${name} ${spec} is behind ${latest}`, `npm serves ${latest} as latest and this range stops below it. The SDK is 0.x, so a minor is a breaking change and no install will cross one on its own — set ${name} to ${suggestion} when you want it.`);
|
|
273
309
|
}
|
|
274
310
|
/**
|
|
275
311
|
* A `vercel.json` at the app root, when the kit's build output needs none.
|
|
@@ -299,11 +335,11 @@ function checkDeployConfig(app, report) {
|
|
|
299
335
|
}
|
|
300
336
|
const command = typeof config.buildCommand === "string" ? config.buildCommand : "";
|
|
301
337
|
if (command.includes(".waniwani/.vercel/output")) {
|
|
302
|
-
report.warn("vercel.json", "stages the build output itself, and the build already does", "`waniwani build` leaves the tree at `.vercel/output`, so this command's `rm -rf` deletes it and its `cp` fails on a source that no longer exists.
|
|
338
|
+
report.warn("vercel.json", "stages the build output itself, and the build already does", "`waniwani build` leaves the tree at `.vercel/output`, so this command's `rm -rf` deletes it and its `cp` fails on a source that no longer exists. Drop the field: `framework: null` is the only key this file needs.");
|
|
303
339
|
return;
|
|
304
340
|
}
|
|
305
341
|
if (command) {
|
|
306
|
-
report.warn("vercel.json", `overrides the build command with ${JSON.stringify(command)}`, "Vercel runs this instead of the `build` script in package.json
|
|
342
|
+
report.warn("vercel.json", `overrides the build command with ${JSON.stringify(command)}`, "Vercel runs this instead of the `build` script in package.json, which is what runs `waniwani build`. Drop the field unless the app genuinely builds differently.");
|
|
307
343
|
}
|
|
308
344
|
if (Array.isArray(config.routes)) {
|
|
309
345
|
report.warn("vercel.json", "carries a `routes` table", "the build's own routing config already sends `/api/*` at the server, and a top-level `routes` entry replaces Vercel's whole routing phase rather than adding to it.");
|
|
@@ -317,7 +353,7 @@ export async function validateApp(app) {
|
|
|
317
353
|
loadAppEnv(app.root);
|
|
318
354
|
const report = new Report(app.root);
|
|
319
355
|
checkStructure(app, report);
|
|
320
|
-
checkPeers(app, report);
|
|
356
|
+
await checkPeers(app, report);
|
|
321
357
|
checkDeployConfig(app, report);
|
|
322
358
|
// Importing broken modules produces noise on top of structural errors.
|
|
323
359
|
if (report.ok) {
|
package/dist/cli/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../cli/validate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../cli/validate.ts"],"names":[],"mappings":"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"}
|