@nifrajs/cli 2.14.1 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/dist/assure-hydration.d.ts.map +1 -1
- package/dist/assure-hydration.js +6 -1
- package/dist/assure-hydration.js.map +1 -1
- package/dist/assure.d.ts.map +1 -1
- package/dist/assure.js +3 -2
- package/dist/assure.js.map +1 -1
- package/dist/check-diagnostics.d.ts +165 -0
- package/dist/check-diagnostics.d.ts.map +1 -0
- package/dist/check-diagnostics.js +1009 -0
- package/dist/check-diagnostics.js.map +1 -0
- package/dist/check-scan.d.ts +245 -0
- package/dist/check-scan.d.ts.map +1 -0
- package/dist/check-scan.js +1599 -0
- package/dist/check-scan.js.map +1 -0
- package/dist/check.d.ts +4 -324
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +8 -2346
- package/dist/check.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +285 -10
- package/dist/cli.js.map +1 -1
- package/dist/command-catalog.d.ts +27 -1
- package/dist/command-catalog.d.ts.map +1 -1
- package/dist/command-catalog.js +142 -2
- package/dist/command-catalog.js.map +1 -1
- package/dist/doctor.d.ts +42 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +64 -7
- package/dist/doctor.js.map +1 -1
- package/dist/env-file.d.ts +17 -0
- package/dist/env-file.d.ts.map +1 -0
- package/dist/env-file.js +113 -0
- package/dist/env-file.js.map +1 -0
- package/dist/fix-recipes.d.ts.map +1 -1
- package/dist/fix-recipes.js +91 -15
- package/dist/fix-recipes.js.map +1 -1
- package/dist/frontend-guidance.d.ts +57 -0
- package/dist/frontend-guidance.d.ts.map +1 -0
- package/dist/frontend-guidance.js +195 -0
- package/dist/frontend-guidance.js.map +1 -0
- package/dist/internal/reserved-segment-codemod.d.ts +36 -0
- package/dist/internal/reserved-segment-codemod.d.ts.map +1 -0
- package/dist/internal/reserved-segment-codemod.js +134 -0
- package/dist/internal/reserved-segment-codemod.js.map +1 -0
- package/dist/internal/typescript-import.d.ts +1 -1
- package/dist/internal/typescript-import.d.ts.map +1 -1
- package/dist/internal/typescript-import.js +62 -11
- package/dist/internal/typescript-import.js.map +1 -1
- package/dist/introspect.d.ts +26 -1
- package/dist/introspect.d.ts.map +1 -1
- package/dist/introspect.js +74 -24
- package/dist/introspect.js.map +1 -1
- package/dist/levels-tool.d.ts.map +1 -1
- package/dist/levels-tool.js +6 -0
- package/dist/levels-tool.js.map +1 -1
- package/dist/load.d.ts.map +1 -1
- package/dist/load.js +4 -1
- package/dist/load.js.map +1 -1
- package/dist/mcp-context.d.ts +48 -0
- package/dist/mcp-context.d.ts.map +1 -0
- package/dist/mcp-context.js +215 -0
- package/dist/mcp-context.js.map +1 -0
- package/dist/mcp-docs-tools.d.ts.map +1 -1
- package/dist/mcp-docs-tools.js +31 -0
- package/dist/mcp-docs-tools.js.map +1 -1
- package/dist/mcp-exec.d.ts +74 -0
- package/dist/mcp-exec.d.ts.map +1 -0
- package/dist/mcp-exec.js +844 -0
- package/dist/mcp-exec.js.map +1 -0
- package/dist/mcp-http.js +1 -1
- package/dist/mcp-http.js.map +1 -1
- package/dist/mcp-io.d.ts +26 -0
- package/dist/mcp-io.d.ts.map +1 -0
- package/dist/mcp-io.js +100 -0
- package/dist/mcp-io.js.map +1 -0
- package/dist/mcp-reflect.d.ts +16 -0
- package/dist/mcp-reflect.d.ts.map +1 -0
- package/dist/mcp-reflect.js +101 -0
- package/dist/mcp-reflect.js.map +1 -0
- package/dist/mcp-root.d.ts +7 -0
- package/dist/mcp-root.d.ts.map +1 -1
- package/dist/mcp-root.js +51 -3
- package/dist/mcp-root.js.map +1 -1
- package/dist/mcp.d.ts +10 -84
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +13 -1170
- package/dist/mcp.js.map +1 -1
- package/dist/openapi-tool.d.ts +5 -10
- package/dist/openapi-tool.d.ts.map +1 -1
- package/dist/openapi-tool.js +21 -2
- package/dist/openapi-tool.js.map +1 -1
- package/dist/openapi-types.d.ts +21 -0
- package/dist/openapi-types.d.ts.map +1 -0
- package/dist/openapi-types.js +214 -0
- package/dist/openapi-types.js.map +1 -0
- package/dist/port.d.ts.map +1 -1
- package/dist/port.js +2 -1
- package/dist/port.js.map +1 -1
- package/dist/project-facts.d.ts +2 -1
- package/dist/project-facts.d.ts.map +1 -1
- package/dist/project-facts.js.map +1 -1
- package/dist/recipes/3.0.0.d.ts +10 -0
- package/dist/recipes/3.0.0.d.ts.map +1 -0
- package/dist/recipes/3.0.0.js +23 -0
- package/dist/recipes/3.0.0.js.map +1 -0
- package/dist/recipes/index.d.ts.map +1 -1
- package/dist/recipes/index.js +2 -0
- package/dist/recipes/index.js.map +1 -1
- package/dist/release-verification.d.ts +4 -1
- package/dist/release-verification.d.ts.map +1 -1
- package/dist/release-verification.js +6 -123
- package/dist/release-verification.js.map +1 -1
- package/dist/rules/codes.d.ts +4 -0
- package/dist/rules/codes.d.ts.map +1 -1
- package/dist/rules/codes.js +4 -0
- package/dist/rules/codes.js.map +1 -1
- package/dist/rules/islands.d.ts +4 -0
- package/dist/rules/islands.d.ts.map +1 -0
- package/dist/rules/islands.js +155 -0
- package/dist/rules/islands.js.map +1 -0
- package/dist/rules/nano.d.ts +6 -0
- package/dist/rules/nano.d.ts.map +1 -0
- package/dist/rules/nano.js +264 -0
- package/dist/rules/nano.js.map +1 -0
- package/dist/rules/routes.d.ts.map +1 -1
- package/dist/rules/routes.js +17 -30
- package/dist/rules/routes.js.map +1 -1
- package/dist/rules/security.d.ts.map +1 -1
- package/dist/rules/security.js +38 -4
- package/dist/rules/security.js.map +1 -1
- package/dist/scaffold.d.ts +12 -6
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +149 -10
- package/dist/scaffold.js.map +1 -1
- package/dist/search-terms.d.ts.map +1 -1
- package/dist/search-terms.js +5 -3
- package/dist/search-terms.js.map +1 -1
- package/dist/stylex-migrate.d.ts +38 -0
- package/dist/stylex-migrate.d.ts.map +1 -0
- package/dist/stylex-migrate.js +1052 -0
- package/dist/stylex-migrate.js.map +1 -0
- package/dist/sync-manifest.d.ts.map +1 -1
- package/dist/sync-manifest.js +2 -1
- package/dist/sync-manifest.js.map +1 -1
- package/dist/verification-plan.d.ts +24 -0
- package/dist/verification-plan.d.ts.map +1 -0
- package/dist/verification-plan.js +116 -0
- package/dist/verification-plan.js.map +1 -0
- package/dist/work-graph.d.ts.map +1 -1
- package/dist/work-graph.js +6 -3
- package/dist/work-graph.js.map +1 -1
- package/dist/workspace-link.d.ts +37 -0
- package/dist/workspace-link.d.ts.map +1 -0
- package/dist/workspace-link.js +72 -0
- package/dist/workspace-link.js.map +1 -0
- package/docs/examples.json +37 -1
- package/docs/llms-full.txt +1598 -44
- package/docs/types.json +5157 -172
- package/package.json +9 -9
- package/src/assure-hydration.ts +6 -1
- package/src/assure.ts +4 -2
- package/src/check-diagnostics.ts +1219 -0
- package/src/check-scan.ts +1825 -0
- package/src/check.ts +47 -2731
- package/src/cli.ts +291 -10
- package/src/command-catalog.ts +177 -2
- package/src/doctor.ts +99 -8
- package/src/env-file.ts +121 -0
- package/src/fix-recipes.ts +101 -15
- package/src/frontend-guidance.ts +259 -0
- package/src/internal/reserved-segment-codemod.ts +150 -0
- package/src/internal/typescript-import.ts +61 -11
- package/src/introspect.ts +82 -21
- package/src/levels-tool.ts +6 -0
- package/src/load.ts +4 -1
- package/src/mcp-context.ts +266 -0
- package/src/mcp-docs-tools.ts +37 -0
- package/src/mcp-exec.ts +1040 -0
- package/src/mcp-http.ts +1 -1
- package/src/mcp-io.ts +118 -0
- package/src/mcp-reflect.ts +140 -0
- package/src/mcp-root.ts +62 -4
- package/src/mcp.ts +61 -1436
- package/src/openapi-tool.ts +32 -2
- package/src/openapi-types.ts +261 -0
- package/src/port.ts +2 -1
- package/src/project-facts.ts +2 -4
- package/src/recipes/3.0.0.ts +24 -0
- package/src/recipes/index.ts +2 -0
- package/src/release-verification.ts +22 -147
- package/src/rules/codes.ts +4 -0
- package/src/rules/islands.ts +171 -0
- package/src/rules/nano.ts +295 -0
- package/src/rules/routes.ts +17 -30
- package/src/rules/security.ts +40 -4
- package/src/scaffold.ts +169 -9
- package/src/search-terms.ts +7 -3
- package/src/stylex-migrate.ts +1139 -0
- package/src/sync-manifest.ts +2 -1
- package/src/verification-plan.ts +242 -0
- package/src/work-graph.ts +6 -3
- package/src/workspace-link.ts +80 -0
package/dist/scaffold.js
CHANGED
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
* `filePathToPatterns`: `:id`/`[id]` → `[id]`, `*rest`/`[...rest]` → `[...rest]`, `[[lang]]` optional,
|
|
5
5
|
* `/` → `index`. The framework (→ file extension) comes from the project's `clientModule`.
|
|
6
6
|
*
|
|
7
|
-
* Page stubs are emitted
|
|
8
|
-
* for
|
|
9
|
-
*
|
|
7
|
+
* Page stubs are emitted for the JSX family (react/preact/solid - one shared, verified shape) and
|
|
8
|
+
* for vanilla (a zero-runtime `html` page carrying the golden island pattern); for vue/svelte we
|
|
9
|
+
* return the correct PATH + the route-module contract and point at `nifra_example` for the body,
|
|
10
|
+
* rather than hand-writing an SFC we can't typecheck here.
|
|
10
11
|
*/
|
|
11
12
|
import { lstat, mkdir, realpath, writeFile } from "node:fs/promises";
|
|
12
13
|
import { dirname, resolve, sep } from "node:path";
|
|
@@ -67,6 +68,128 @@ export default function Page() {
|
|
|
67
68
|
}
|
|
68
69
|
`;
|
|
69
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* The @nifrajs/web-vanilla golden stub: a zero-runtime `html` page (`hydrate = false`), plus the
|
|
73
|
+
* copy-paste island path as guidance. The uncommented body is a valid, typecheckable static page;
|
|
74
|
+
* the commented block is the AI-safe interactivity pattern - an imperative enhancer that ALWAYS
|
|
75
|
+
* returns its cleanup (the one thing NF-C020 checks), wired through `mountIslands`. Interactivity is
|
|
76
|
+
* added by uncommenting and writing the companion `<name>.client.ts`, never by turning on hydration.
|
|
77
|
+
*/
|
|
78
|
+
function vanillaStub(file, params) {
|
|
79
|
+
const paramsNote = params.length > 0 ? `params.${params.join(", params.")}` : "no path params on this route";
|
|
80
|
+
const loaderLine = params.length > 0
|
|
81
|
+
? `// export async function loader({ params, api }: LoaderArgs<typeof backend>) { return { /* fetch by ${params[0]} */ } }`
|
|
82
|
+
: `// export async function loader({ api }: LoaderArgs<typeof backend>) { return {} }`;
|
|
83
|
+
return `// ${file} - @nifrajs/web-vanilla route. Server-rendered HTML, ZERO framework runtime.
|
|
84
|
+
// Available here: ${paramsNote}. Fetch data in a loader via the typed \`api\`; see nifra_example("loader").
|
|
85
|
+
import { html } from "@nifrajs/web-vanilla"
|
|
86
|
+
|
|
87
|
+
// No client framework to hydrate with - vanilla routes are documents, not hydrated apps.
|
|
88
|
+
export const hydrate = false
|
|
89
|
+
|
|
90
|
+
${loaderLine}
|
|
91
|
+
|
|
92
|
+
export default function Page() {
|
|
93
|
+
return html\`<main><h1>TODO: ${file}</h1></main>\`
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// --- Add interactivity the AI-safe way (islands), NOT hydration ---------------------------------
|
|
97
|
+
// 1. Render a marker in the page above: html\`<nifra-island data-id="counter" data-props=\${JSON.stringify({ start: 0 })}></nifra-island>\`
|
|
98
|
+
// 2. Wire the route to its enhancer bundle: export const islandScripts = [/* built URL of ./counter.client.ts */]
|
|
99
|
+
// 3. Write ./counter.client.ts as an imperative enhancer that ALWAYS returns its cleanup:
|
|
100
|
+
//
|
|
101
|
+
// import { defineIsland, mountIslands } from "@nifrajs/web/islands"
|
|
102
|
+
// const counter = defineIsland<{ start: number }>((el, props) => {
|
|
103
|
+
// let n = props.start
|
|
104
|
+
// const out = el.querySelector("output")!
|
|
105
|
+
// const onClick = () => { out.textContent = String(++n) }
|
|
106
|
+
// el.querySelector("button")?.addEventListener("click", onClick)
|
|
107
|
+
// return () => el.querySelector("button")?.removeEventListener("click", onClick) // cleanup - NF-C020
|
|
108
|
+
// })
|
|
109
|
+
// mountIslands({ counter })
|
|
110
|
+
//
|
|
111
|
+
// Cross-island coordination: create ONE createIslandBus() and close over it in each enhancer.
|
|
112
|
+
`;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The nano golden stub (`nifra scaffold --variant stateful`, vanilla only): a zero-runtime `html`
|
|
116
|
+
* page that renders a `<nifra-island>` marker, plus the companion `<name>.client.ts` shown as the
|
|
117
|
+
* copy-paste block. The client is the AI-safe small-app lane - explicit reactivity, no VDOM, no
|
|
118
|
+
* auto-tracking - and every reactive edge is a visible call, which is what makes the three nano
|
|
119
|
+
* mistakes STATICALLY catchable:
|
|
120
|
+
* - a `bind`/`bindList` whose disposer is discarded -> NF-C021 (the block collects every disposer)
|
|
121
|
+
* - a `bindList` keyed by array index -> NF-C022 (the block keys by `item.id`)
|
|
122
|
+
* - a `computed` reading a signal its `[deps]` omits -> NF-C023 (the block declares `[todos]`)
|
|
123
|
+
* The page body is a valid, typecheckable static document; interactivity is added by writing the
|
|
124
|
+
* companion client shown, never by turning on hydration.
|
|
125
|
+
*/
|
|
126
|
+
function nanoStub(file, params) {
|
|
127
|
+
const paramsNote = params.length > 0 ? `params.${params.join(", params.")}` : "no path params on this route";
|
|
128
|
+
const loaderLine = params.length > 0
|
|
129
|
+
? `// export async function loader({ params, api }: LoaderArgs<typeof backend>) { return { /* seed by ${params[0]} */ } }`
|
|
130
|
+
: `// export async function loader({ api }: LoaderArgs<typeof backend>) { return {} }`;
|
|
131
|
+
return `// ${file} - @nifrajs/web-vanilla route + a nano island (explicit reactivity, zero VDOM).
|
|
132
|
+
// Available here: ${paramsNote}. Seed data in a loader via the typed \`api\`; see nifra_example("loader").
|
|
133
|
+
import { html } from "@nifrajs/web-vanilla"
|
|
134
|
+
|
|
135
|
+
// The document is static; the nano client below owns all interactivity. No hydration.
|
|
136
|
+
export const hydrate = false
|
|
137
|
+
|
|
138
|
+
${loaderLine}
|
|
139
|
+
|
|
140
|
+
export default function Page() {
|
|
141
|
+
// The island marker: data-props is the initial state the client reads on mount.
|
|
142
|
+
return html\`<main>
|
|
143
|
+
<h1>Todos</h1>
|
|
144
|
+
<nifra-island data-id="todos" data-props=\${JSON.stringify({ items: [] })}></nifra-island>
|
|
145
|
+
</main>\`
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Wire the route to the built URL of ./todos.client.ts (the nano enhancer below).
|
|
149
|
+
// export const islandScripts = [/* built URL of ./todos.client.ts */]
|
|
150
|
+
|
|
151
|
+
// --- ./todos.client.ts - the golden nano pattern (write this as a companion file) -----------------
|
|
152
|
+
//
|
|
153
|
+
// import { defineIsland, mountIslands } from "@nifrajs/web/islands"
|
|
154
|
+
// import { signal, computed, bind, bindList } from "@nifrajs/web/nano"
|
|
155
|
+
//
|
|
156
|
+
// interface Todo { id: string; text: string; done: boolean }
|
|
157
|
+
//
|
|
158
|
+
// const todos = defineIsland<{ items: Todo[] }>((el, props) => {
|
|
159
|
+
// // 1. State is a signal. Reads are \`.get()\`, writes are \`.set(...)\` - every edge is visible.
|
|
160
|
+
// const items = signal<Todo[]>(props.items)
|
|
161
|
+
//
|
|
162
|
+
// // 2. Derived state declares its deps EXPLICITLY. Omitting \`todos\`/\`items\` here is NF-C023.
|
|
163
|
+
// const remaining = computed(() => items.get().filter((t) => !t.done).length, [items])
|
|
164
|
+
//
|
|
165
|
+
// // 3. Collect EVERY disposer. A bare \`bind(...)\`/\`bindList(...)\` that drops it is NF-C021.
|
|
166
|
+
// const cleanups: Array<() => void> = []
|
|
167
|
+
// const count = el.querySelector("[data-count]")!
|
|
168
|
+
// cleanups.push(bind(count, remaining, (node, n) => { node.textContent = String(n) + " left" }))
|
|
169
|
+
//
|
|
170
|
+
// // 4. Keyed list. Key by a STABLE id on the item, never the array index (NF-C022) - or
|
|
171
|
+
// // add/remove/reorder reuses the wrong DOM node.
|
|
172
|
+
// const list = el.querySelector("[data-list]")!
|
|
173
|
+
// cleanups.push(bindList(items, list, {
|
|
174
|
+
// key: (t) => t.id,
|
|
175
|
+
// create: (t) => { const li = document.createElement("li"); li.dataset.id = t.id; return li },
|
|
176
|
+
// update: (li, t) => { li.textContent = t.text; li.classList.toggle("done", t.done) },
|
|
177
|
+
// }))
|
|
178
|
+
//
|
|
179
|
+
// // Mutations replace the value (Object.is-deduped); subscribers run synchronously.
|
|
180
|
+
// const add = (text: string) => items.set([...items.get(), { id: crypto.randomUUID(), text, done: false }])
|
|
181
|
+
// void add
|
|
182
|
+
//
|
|
183
|
+
// // 5. Return the teardown - islands call it on soft-nav. This is what NF-C021 protects.
|
|
184
|
+
// return () => { for (const off of cleanups) off() }
|
|
185
|
+
// })
|
|
186
|
+
//
|
|
187
|
+
// mountIslands({ todos })
|
|
188
|
+
//
|
|
189
|
+
// Cross-island coordination: one createIslandBus() closed over in each enhancer. nifra_docs("nano")
|
|
190
|
+
// has the full cookbook; \`nifra check\` runs NF-C021/C022/C023 over the client you write.
|
|
191
|
+
`;
|
|
192
|
+
}
|
|
70
193
|
/** Param names a route file declares, for the stub's notes. */
|
|
71
194
|
function paramsOf(file) {
|
|
72
195
|
const out = [];
|
|
@@ -76,20 +199,36 @@ function paramsOf(file) {
|
|
|
76
199
|
}
|
|
77
200
|
/** Scaffold a page route for `urlPath` under the project's `framework`. Returns the correct file path
|
|
78
201
|
* always; a ready-to-write stub for the JSX family, contract guidance otherwise. */
|
|
79
|
-
export function scaffoldRoute(urlPath, framework) {
|
|
202
|
+
export function scaffoldRoute(urlPath, framework, variant = "default") {
|
|
80
203
|
const ext = EXT[framework];
|
|
81
204
|
const file = routePathToFile(urlPath, ext);
|
|
82
205
|
const params = paramsOf(file);
|
|
206
|
+
// `stateful` is vanilla-only: it swaps the static island stub for the nano golden pattern. Asking
|
|
207
|
+
// for it on a JSX/SFC framework is a no-op on the flavour (those lanes have their own reactivity).
|
|
208
|
+
if (framework === "vanilla" && variant === "stateful") {
|
|
209
|
+
return {
|
|
210
|
+
file,
|
|
211
|
+
content: nanoStub(file, params),
|
|
212
|
+
note: `Create ${file} as a zero-runtime @nifrajs/web-vanilla route with a nano island. ${ROUTE_CONTRACT}\nThe stub embeds the golden nano client (signal + computed(fn,[deps]) + keyed bindList + collected cleanups); write it as the companion .client.ts. \`nifra check\` runs NF-C021/C022/C023 over it; nifra_docs("nano") is the full cookbook.`,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
83
215
|
if (framework === "react" || framework === "preact" || framework === "solid") {
|
|
84
216
|
return {
|
|
85
217
|
file,
|
|
86
218
|
content: jsxStub(file, params),
|
|
87
|
-
note: `Create ${file}. ${ROUTE_CONTRACT}
|
|
219
|
+
note: `Create ${file}. ${ROUTE_CONTRACT}\nIf the rendered page misbehaves (hydration warning, a value that stops updating), call nifra_frontend { adapter: "${framework}" } for the cause + fix.`,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
if (framework === "vanilla") {
|
|
223
|
+
return {
|
|
224
|
+
file,
|
|
225
|
+
content: vanillaStub(file, params),
|
|
226
|
+
note: `Create ${file} as a zero-runtime @nifrajs/web-vanilla route. ${ROUTE_CONTRACT}\nInteractivity comes from islands (imperative enhancers), never hydration - the stub embeds the golden pattern; nifra_example("islands") has the full cookbook. For explicit local state (a list a human edits), scaffold with variant "stateful" to get the nano pattern instead.`,
|
|
88
227
|
};
|
|
89
228
|
}
|
|
90
229
|
return {
|
|
91
230
|
file,
|
|
92
|
-
note: `Create ${file} as a ${framework} route module. ${ROUTE_CONTRACT}\nFor the ${framework} page body, call nifra_example (it ships verified ${framework} snippets) rather than guessing the SFC shape.`,
|
|
231
|
+
note: `Create ${file} as a ${framework} route module. ${ROUTE_CONTRACT}\nFor the ${framework} page body, call nifra_example (it ships verified ${framework} snippets) rather than guessing the SFC shape. If a value stops updating the template, call nifra_frontend { adapter: "${framework}" } for the ${framework} reactivity-loss fix.`,
|
|
93
232
|
};
|
|
94
233
|
}
|
|
95
234
|
function resolveInsideCwd(cwd, relativeFile) {
|
|
@@ -134,8 +273,8 @@ async function assertNoSymlinkedAncestors(root, target) {
|
|
|
134
273
|
/** Write a scaffolded route stub when the framework has a verified ready-to-write body. The write is
|
|
135
274
|
* intentionally conservative: it refuses non-JSX stubs (where we only return contract guidance) and
|
|
136
275
|
* uses `wx`, so an agent cannot overwrite user work by accident. */
|
|
137
|
-
export async function writeScaffoldRoute(cwd, urlPath, framework) {
|
|
138
|
-
const result = scaffoldRoute(urlPath, framework);
|
|
276
|
+
export async function writeScaffoldRoute(cwd, urlPath, framework, variant = "default") {
|
|
277
|
+
const result = scaffoldRoute(urlPath, framework, variant);
|
|
139
278
|
if (result.content === undefined) {
|
|
140
279
|
return {
|
|
141
280
|
...result,
|
|
@@ -159,10 +298,10 @@ export async function writeScaffoldRoute(cwd, urlPath, framework) {
|
|
|
159
298
|
return { ...result, written: true };
|
|
160
299
|
}
|
|
161
300
|
/** Render the tool result as markdown - the file path, the stub (if any), and the contract note. */
|
|
162
|
-
export function renderScaffold(urlPath, framework) {
|
|
301
|
+
export function renderScaffold(urlPath, framework, variant = "default") {
|
|
163
302
|
let r;
|
|
164
303
|
try {
|
|
165
|
-
r = scaffoldRoute(urlPath, framework);
|
|
304
|
+
r = scaffoldRoute(urlPath, framework, variant);
|
|
166
305
|
}
|
|
167
306
|
catch (err) {
|
|
168
307
|
return `Cannot scaffold ${JSON.stringify(urlPath)}: ${err instanceof Error ? err.message : String(err)}`;
|
package/dist/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-terms.d.ts","sourceRoot":"","sources":["../src/search-terms.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAkCD,eAAO,MAAM,eAAe,MAAM,CAAA;AAClC,eAAO,MAAM,eAAe,KAAK,CAAA;AAEjC,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,KAAG,MAAM,EAIX,CAAA;AAEhC,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,EAAE,CAOhE;
|
|
1
|
+
{"version":3,"file":"search-terms.d.ts","sourceRoot":"","sources":["../src/search-terms.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAkCD,eAAO,MAAM,eAAe,MAAM,CAAA;AAClC,eAAO,MAAM,eAAe,KAAK,CAAA;AAEjC,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,KAAG,MAAM,EAIX,CAAA;AAEhC,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,EAAE,CAOhE;AAYD,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAOxF;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAchG"}
|
package/dist/search-terms.js
CHANGED
|
@@ -51,11 +51,13 @@ export function queryTermGroups(query) {
|
|
|
51
51
|
variants: [term, ...(ALIASES[term] ?? [])],
|
|
52
52
|
}));
|
|
53
53
|
}
|
|
54
|
-
function tokenMatches(term,
|
|
55
|
-
if (term ===
|
|
54
|
+
function tokenMatches(term, candidate) {
|
|
55
|
+
if (term === candidate)
|
|
56
56
|
return true;
|
|
57
57
|
// Prefix matching catches plural/stem variants without letting very short terms get noisy.
|
|
58
|
-
return term.length >= 4 &&
|
|
58
|
+
return (term.length >= 4 &&
|
|
59
|
+
candidate.length >= 4 &&
|
|
60
|
+
(term.startsWith(candidate) || candidate.startsWith(term)));
|
|
59
61
|
}
|
|
60
62
|
export function tokenSetHas(tokens, group) {
|
|
61
63
|
for (const variant of group.variants) {
|
package/dist/search-terms.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-terms.js","sourceRoot":"","sources":["../src/search-terms.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"search-terms.js","sourceRoot":"","sources":["../src/search-terms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface MigrationIssue {
|
|
2
|
+
readonly file: string;
|
|
3
|
+
readonly line: number;
|
|
4
|
+
readonly token: string;
|
|
5
|
+
readonly reason: string;
|
|
6
|
+
}
|
|
7
|
+
export interface SourceMigration {
|
|
8
|
+
readonly source: string;
|
|
9
|
+
readonly changed: boolean;
|
|
10
|
+
readonly replacements: number;
|
|
11
|
+
readonly issues: readonly MigrationIssue[];
|
|
12
|
+
}
|
|
13
|
+
export interface StylexMigrationOptions {
|
|
14
|
+
readonly write?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface StylexMigrationFile {
|
|
17
|
+
readonly file: string;
|
|
18
|
+
readonly changed: boolean;
|
|
19
|
+
readonly replacements: number;
|
|
20
|
+
readonly written: boolean;
|
|
21
|
+
readonly issues: readonly MigrationIssue[];
|
|
22
|
+
}
|
|
23
|
+
export interface StylexMigrationResult {
|
|
24
|
+
readonly ok: boolean;
|
|
25
|
+
readonly from: "tailwind";
|
|
26
|
+
readonly to: "stylex";
|
|
27
|
+
readonly write: boolean;
|
|
28
|
+
readonly scanned: number;
|
|
29
|
+
readonly changed: readonly string[];
|
|
30
|
+
readonly written: readonly string[];
|
|
31
|
+
readonly issues: readonly MigrationIssue[];
|
|
32
|
+
readonly files: readonly StylexMigrationFile[];
|
|
33
|
+
}
|
|
34
|
+
/** Transform one source file. The returned source is unchanged when every match is unsupported. */
|
|
35
|
+
export declare function migrateTailwindSource(source: string, file: string): SourceMigration;
|
|
36
|
+
/** Scan a project and optionally write only the statically safe transformations. */
|
|
37
|
+
export declare function migrateTailwindToStylex(root: string, options?: StylexMigrationOptions): Promise<StylexMigrationResult>;
|
|
38
|
+
//# sourceMappingURL=stylex-migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stylex-migrate.d.ts","sourceRoot":"","sources":["../src/stylex-migrate.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAA;CAC3C;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAA;CAC3C;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAA;IAC1C,QAAQ,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAA;CAC/C;AAu7BD,mGAAmG;AACnG,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CA2EnF;AAuBD,oFAAoF;AACpF,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC,CAsChC"}
|