@duro-app/cli 3.3.0 → 3.4.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 +40 -6
- package/dist/bin.js +15 -15
- package/dist/bin.js.map +1 -1
- package/dist/commands/doctor.d.ts +41 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +476 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/mockup.d.ts.map +1 -1
- package/dist/commands/mockup.js +1 -7
- package/dist/commands/mockup.js.map +1 -1
- package/dist/hook-script.d.ts +9 -2
- package/dist/hook-script.d.ts.map +1 -1
- package/dist/hook-script.js +37 -6
- package/dist/hook-script.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +17 -0
- package/dist/manifest.js.map +1 -1
- package/dist/scan.d.ts +19 -0
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +29 -0
- package/dist/scan.js.map +1 -0
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -109,11 +109,11 @@ npx -y @duro-app/cli hook install --check # CI: exit 1 if it drifted
|
|
|
109
109
|
|
|
110
110
|
`install` is idempotent, and touches exactly three files:
|
|
111
111
|
|
|
112
|
-
| File | What install does
|
|
113
|
-
| ------------------------------- |
|
|
114
|
-
| `.claude/hooks/duro-catalog.sh` | Writes the generated hook: fetches the catalog, caches it for 7 days (npx resolution dominates session start; the catalog only changes on upgrade), stays silent when offline with no cache.
|
|
115
|
-
| `.claude/settings.json` | Adds the `SessionStart` entry. Existing hooks, permissions and skill overrides are preserved; a hand-renamed duro command is migrated in place rather than duplicated. Unparseable JSON is reported, never clobbered.
|
|
116
|
-
| `.gitignore` | Ignores `.claude/.duro-session.cache*` — a glob, because a hook killed mid-`npx` leaves the staging `.tmp` behind.
|
|
112
|
+
| File | What install does |
|
|
113
|
+
| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
114
|
+
| `.claude/hooks/duro-catalog.sh` | Writes the generated hook: fetches the catalog, caches it for 7 days (npx resolution dominates session start; the catalog only changes on upgrade), stays silent when offline with no cache. Then runs [`duro doctor --session`](#duro-doctor), re-run only when a file it reads changes. |
|
|
115
|
+
| `.claude/settings.json` | Adds the `SessionStart` entry. Existing hooks, permissions and skill overrides are preserved; a hand-renamed duro command is migrated in place rather than duplicated. Unparseable JSON is reported, never clobbered. |
|
|
116
|
+
| `.gitignore` | Ignores `.claude/.duro-session.cache*` — a glob, because a hook killed mid-`npx` leaves the staging `.tmp` behind. |
|
|
117
117
|
|
|
118
118
|
Do not hand-edit the generated script — `--check` is a byte comparison, so an
|
|
119
119
|
edit shows up as drift and the next `install` overwrites it. **Repo-specific
|
|
@@ -129,13 +129,47 @@ hand-roll widgets the DS ships.
|
|
|
129
129
|
```
|
|
130
130
|
|
|
131
131
|
Wire `--check` into the repo's lint or CI job to catch a stale hook after a
|
|
132
|
-
CLI upgrade. The generated script pins `@duro-app/cli@^3.
|
|
132
|
+
CLI upgrade. The generated script pins `@duro-app/cli@^3.4.0` — a floating
|
|
133
133
|
pin, so patch releases never read as drift, but a **floor**: a repo whose
|
|
134
134
|
script still pins `^1.2.0` never resolves a 2.x or 3.x payload and never sees
|
|
135
135
|
what the session-start injection gained since. After a major, re-run
|
|
136
136
|
`hook install` in every consumer and delete `.claude/.duro-session.cache*`
|
|
137
137
|
(the payload is cached seven days).
|
|
138
138
|
|
|
139
|
+
## duro doctor
|
|
140
|
+
|
|
141
|
+
The design system's stylesheet is layered: `reset`, then StyleX's
|
|
142
|
+
`priority1`…`priority5`, so a component's `padding-left` beats the reset's
|
|
143
|
+
`padding: 0`. An app can break that without touching a component, and the
|
|
144
|
+
symptom is always the same — buttons, inputs and page wrappers rendered with
|
|
145
|
+
almost no padding while `@duro-app/ui`'s CSS is fine. `duro doctor` checks the
|
|
146
|
+
app's wiring, statically, from its package root (or a repo root: it follows
|
|
147
|
+
pnpm/npm workspaces, else looks one directory down):
|
|
148
|
+
|
|
149
|
+
| Rule | Severity | What breaks |
|
|
150
|
+
| -------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
151
|
+
| `runtime-injection` | error | `runtimeInjection: true` in a vite/babel config. StyleX injects react-strict-dom's element reset into an unlayered `<style>`, and unlayered beats every layer. A warning in `vitest.*` (jsdom only). |
|
|
152
|
+
| `layered-extraction` | error | `useCSSLayers: false` in postcss.config: the app's extracted rules — react-strict-dom's reset included — land unlayered. |
|
|
153
|
+
| `css-imported` | error | The entry (`app/root.tsx`, `src/main.tsx`, …) never imports `@duro-app/ui/dist/index.css`. The JavaScript does not load it; components render unstyled. |
|
|
154
|
+
| `css-load-order` | error | A stylesheet declares the `priority*` layers before `reset`. The first declaration fixes layer order for the page, which puts the reset on top. |
|
|
155
|
+
| `unlayered-reset` | warn | `* { padding: 0 }` (or on `button`, `input`, `main`, …) outside any `@layer` in the app's own CSS. |
|
|
156
|
+
| `version-skew` | warn | The installed `@duro-app/ui` is not the version this CLI checks. |
|
|
157
|
+
|
|
158
|
+
It exits 1 on any error, so it gates. Two places run it, and a consuming repo
|
|
159
|
+
wires both:
|
|
160
|
+
|
|
161
|
+
- **Every agent session** — the [session hook](#claude-code-session-hook)
|
|
162
|
+
runs `doctor --session`, which prints nothing when the repo is healthy and
|
|
163
|
+
an agent-facing block when it is not. `hook install` wires it.
|
|
164
|
+
- **Every commit that touches the wiring** — an [amont](https://github.com/fredericrous/amont)
|
|
165
|
+
row in `amont.conf`. Add any custom config file the app has (a
|
|
166
|
+
`vite.strict-dom.ts`) to the scope:
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
# stage name scope severity command
|
|
170
|
+
pre-commit duro-doctor *.css,package.json,root.tsx,main.tsx,vite.config.ts,vitest.config.ts,postcss.config.js,postcss.config.mjs,babel.config.js block npx -y @duro-app/cli@^3.4.0 doctor
|
|
171
|
+
```
|
|
172
|
+
|
|
139
173
|
## Mockups that speak the design system
|
|
140
174
|
|
|
141
175
|
A mockup drawn outside the token system has to be translated when it is
|
package/dist/bin.js
CHANGED
|
@@ -6,6 +6,7 @@ import { runList } from './commands/list.js';
|
|
|
6
6
|
import { runHook } from './commands/hook.js';
|
|
7
7
|
import { runMockup } from './commands/mockup.js';
|
|
8
8
|
import { runSkill } from './commands/skill.js';
|
|
9
|
+
import { runDoctor, uiVersionSkew } from './commands/doctor.js';
|
|
9
10
|
import { runManifest, cliVersion } from './commands/manifest.js';
|
|
10
11
|
function emit(result, json) {
|
|
11
12
|
if (json) {
|
|
@@ -17,7 +18,7 @@ function emit(result, json) {
|
|
|
17
18
|
process.exit(result.exitCode ?? 0);
|
|
18
19
|
}
|
|
19
20
|
function usageError(message) {
|
|
20
|
-
process.stderr.write(`${message}\nUsage: duro <name|list|manifest|hook|skill|mockup|mcp> [flags] — duro manifest for details\n`);
|
|
21
|
+
process.stderr.write(`${message}\nUsage: duro <name|list|manifest|hook|skill|mockup|doctor|mcp> [flags] — duro manifest for details\n`);
|
|
21
22
|
process.exit(2);
|
|
22
23
|
}
|
|
23
24
|
async function main() {
|
|
@@ -32,6 +33,7 @@ async function main() {
|
|
|
32
33
|
'source-only': { type: 'boolean', default: false },
|
|
33
34
|
'no-color': { type: 'boolean', default: false },
|
|
34
35
|
check: { type: 'boolean', default: false },
|
|
36
|
+
session: { type: 'boolean', default: false },
|
|
35
37
|
out: { type: 'string' },
|
|
36
38
|
name: { type: 'string' },
|
|
37
39
|
theme: { type: 'string' },
|
|
@@ -49,23 +51,16 @@ async function main() {
|
|
|
49
51
|
process.exit(0);
|
|
50
52
|
}
|
|
51
53
|
const registry = loadRegistry();
|
|
54
|
+
const [first, ...rest] = positionals;
|
|
52
55
|
// Version-skew guard: the registry documents the lockstep-released ui
|
|
53
|
-
// version; warn (stderr only) when a locally installed ui differs.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const own = cliVersion();
|
|
60
|
-
if (uiPkg.version && own !== '0.0.0' && uiPkg.version !== own) {
|
|
61
|
-
process.stderr.write(`duro: docs are for @duro-app/ui@${own}, you have ${uiPkg.version} — npm i -D @duro-app/cli@${uiPkg.version}\n`);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
// No local ui — nothing to compare.
|
|
56
|
+
// version; warn (stderr only) when a locally installed ui differs. doctor
|
|
57
|
+
// reports the same skew as one of its findings instead.
|
|
58
|
+
if (!values.json && first !== 'doctor') {
|
|
59
|
+
const skew = uiVersionSkew(process.cwd());
|
|
60
|
+
if (skew) {
|
|
61
|
+
process.stderr.write(`duro: docs are for @duro-app/ui@${skew.own}, you have ${skew.installed} — npm i -D @duro-app/cli@${skew.installed}\n`);
|
|
66
62
|
}
|
|
67
63
|
}
|
|
68
|
-
const [first, ...rest] = positionals;
|
|
69
64
|
if (values.help || first === undefined) {
|
|
70
65
|
emit(runManifest(registry), values.json);
|
|
71
66
|
}
|
|
@@ -91,6 +86,11 @@ async function main() {
|
|
|
91
86
|
const [sub, ...files] = rest;
|
|
92
87
|
emit(runMockup(registry, sub, files, { out: values.out, name: values.name, theme: values.theme }), values.json);
|
|
93
88
|
}
|
|
89
|
+
if (first === 'doctor') {
|
|
90
|
+
if (rest.length > 0)
|
|
91
|
+
usageError('duro doctor takes no arguments — run it from the package root');
|
|
92
|
+
emit(runDoctor({ session: values.session }), values.json);
|
|
93
|
+
}
|
|
94
94
|
if (first === 'mcp') {
|
|
95
95
|
const { runMcp } = await import('./commands/mcp.js');
|
|
96
96
|
await runMcp(registry);
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAA;AACnC,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAC,SAAS,EAAqB,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,wBAAwB,CAAA;AAE9D,SAAS,IAAI,CAAC,MAAqB,EAAE,IAAa;IAChD,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IACnE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IAC1C,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAA;AACpC,CAAC;AAED,SAAS,UAAU,CAAC,OAAe;IACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { CommandResult } from './lookup.js';
|
|
2
|
+
/**
|
|
3
|
+
* `duro doctor` — checks how the app in the cwd wires @duro-app/ui into its
|
|
4
|
+
* build. Every rule here is a way a consumer has shipped design-system
|
|
5
|
+
* components with their spacing flattened while the design system's own
|
|
6
|
+
* stylesheet was correct: the stylesheet is layered (`reset`, then StyleX's
|
|
7
|
+
* `priority1..5`), and anything that lands outside those layers, or declares
|
|
8
|
+
* them in the wrong order, outranks it. Each app used to rediscover this
|
|
9
|
+
* alone; the contract lives here now.
|
|
10
|
+
*
|
|
11
|
+
* Static and dependency-free on purpose: it runs under npx from the
|
|
12
|
+
* SessionStart hook, so it reads files with regexes over comment-masked
|
|
13
|
+
* source instead of loading a parser or executing the app's config.
|
|
14
|
+
*/
|
|
15
|
+
export type DoctorRule = 'runtime-injection' | 'layered-extraction' | 'css-imported' | 'css-load-order' | 'unlayered-reset' | 'version-skew';
|
|
16
|
+
export interface DoctorFinding {
|
|
17
|
+
rule: DoctorRule;
|
|
18
|
+
severity: 'error' | 'warn';
|
|
19
|
+
/** Relative to the checked package root. */
|
|
20
|
+
file: string;
|
|
21
|
+
line?: number;
|
|
22
|
+
message: string;
|
|
23
|
+
fix: string;
|
|
24
|
+
}
|
|
25
|
+
export interface DoctorOptions {
|
|
26
|
+
/** Package root to check. Defaults to the process cwd. */
|
|
27
|
+
cwd?: string;
|
|
28
|
+
/**
|
|
29
|
+
* SessionStart mode: print nothing when healthy, an agent-facing block
|
|
30
|
+
* otherwise, and always exit 0 — findings are context for the session, and
|
|
31
|
+
* a non-zero exit is what the hook script reads as "npx failed".
|
|
32
|
+
*/
|
|
33
|
+
session?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare function runDoctor(options?: DoctorOptions): CommandResult;
|
|
36
|
+
/** The installed @duro-app/ui version when it differs from this CLI's. */
|
|
37
|
+
export declare function uiVersionSkew(cwd: string): {
|
|
38
|
+
own: string;
|
|
39
|
+
installed: string;
|
|
40
|
+
} | null;
|
|
41
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;AAI9C;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,UAAU,GAClB,mBAAmB,GACnB,oBAAoB,GACpB,cAAc,GACd,gBAAgB,GAChB,iBAAiB,GACjB,cAAc,CAAA;AAElB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAA;IAC1B,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAoED,wBAAgB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,aAAa,CAsBpE;AAoJD,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CASlF"}
|
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { basename, dirname, join, relative, resolve } from 'node:path';
|
|
4
|
+
import { cliVersion } from './manifest.js';
|
|
5
|
+
import { lineOf, maskComments } from '../scan.js';
|
|
6
|
+
const DS_CSS = '@duro-app/ui/dist/index.css';
|
|
7
|
+
const PRIORITIES = ['priority1', 'priority2', 'priority3', 'priority4', 'priority5'];
|
|
8
|
+
const LAYER_STATEMENT = `@layer reset, ${PRIORITIES.join(', ')};`;
|
|
9
|
+
/** Layers each design-system stylesheet declares, in declaration order. */
|
|
10
|
+
const DS_SHEETS = {
|
|
11
|
+
[DS_CSS]: ['reset', ...PRIORITIES],
|
|
12
|
+
'@duro-app/ui/reset.css': ['reset'],
|
|
13
|
+
'@duro-app/ui/strict.css': ['reset', ...PRIORITIES],
|
|
14
|
+
};
|
|
15
|
+
/** Build config that can carry StyleX / react-strict-dom options. */
|
|
16
|
+
const CONFIG_FILE = /^(?:(?:vite|vitest|babel|postcss)(?:\.[\w-]+)*\.[cm]?[jt]s|\.babelrc(?:\.[cm]?js|\.json)?|[\w-]+\.babel\.[cm]?[jt]s)$/;
|
|
17
|
+
/** App entry modules, most specific first. */
|
|
18
|
+
const ENTRIES = [
|
|
19
|
+
'app/root.tsx',
|
|
20
|
+
'app/root.jsx',
|
|
21
|
+
'src/main.tsx',
|
|
22
|
+
'src/main.jsx',
|
|
23
|
+
'src/main.ts',
|
|
24
|
+
'src/index.tsx',
|
|
25
|
+
'src/index.jsx',
|
|
26
|
+
'src/root.tsx',
|
|
27
|
+
];
|
|
28
|
+
/**
|
|
29
|
+
* Elements the design system renders. A zero padding/margin on one of these
|
|
30
|
+
* (or on `*`) outside a layer beats the component's own spacing.
|
|
31
|
+
*/
|
|
32
|
+
const COMPONENT_ELEMENTS = new Set([
|
|
33
|
+
'a',
|
|
34
|
+
'button',
|
|
35
|
+
'div',
|
|
36
|
+
'fieldset',
|
|
37
|
+
'form',
|
|
38
|
+
'h1',
|
|
39
|
+
'h2',
|
|
40
|
+
'h3',
|
|
41
|
+
'h4',
|
|
42
|
+
'h5',
|
|
43
|
+
'h6',
|
|
44
|
+
'header',
|
|
45
|
+
'footer',
|
|
46
|
+
'input',
|
|
47
|
+
'label',
|
|
48
|
+
'legend',
|
|
49
|
+
'li',
|
|
50
|
+
'main',
|
|
51
|
+
'nav',
|
|
52
|
+
'ol',
|
|
53
|
+
'p',
|
|
54
|
+
'section',
|
|
55
|
+
'select',
|
|
56
|
+
'span',
|
|
57
|
+
'table',
|
|
58
|
+
'td',
|
|
59
|
+
'textarea',
|
|
60
|
+
'th',
|
|
61
|
+
'ul',
|
|
62
|
+
]);
|
|
63
|
+
const ZERO_SPACING = /(?:^|[;{\s])((?:padding|margin)(?:-(?:top|right|bottom|left|block|inline)(?:-(?:start|end))?)?)\s*:\s*0(?:px|rem|em)?\s*(?:!important\s*)?(?=;|$)/g;
|
|
64
|
+
export function runDoctor(options = {}) {
|
|
65
|
+
const root = resolve(options.cwd ?? process.cwd());
|
|
66
|
+
const packages = consumerPackages(root);
|
|
67
|
+
if (packages.length === 0) {
|
|
68
|
+
return {
|
|
69
|
+
text: options.session
|
|
70
|
+
? ''
|
|
71
|
+
: 'duro doctor: no package here uses @duro-app/ui — nothing to check',
|
|
72
|
+
data: { ok: true, findings: [], checked: [], packages: [] },
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const findings = [];
|
|
76
|
+
const checked = [];
|
|
77
|
+
const rel = (path) => relative(root, path) || '.';
|
|
78
|
+
for (const { dir, pkg } of packages)
|
|
79
|
+
findings.push(...checkPackage(dir, pkg, rel, checked));
|
|
80
|
+
return report(findings, checked, packages.map(({ dir }) => rel(dir)), options.session === true);
|
|
81
|
+
}
|
|
82
|
+
/** Every check, for one package that depends on @duro-app/ui. */
|
|
83
|
+
function checkPackage(dir, pkg, rel, checked) {
|
|
84
|
+
const findings = [];
|
|
85
|
+
let unlayeredExtraction = false;
|
|
86
|
+
for (const name of readdirSync(dir)
|
|
87
|
+
.filter((entry) => CONFIG_FILE.test(entry))
|
|
88
|
+
.sort()) {
|
|
89
|
+
const source = readText(join(dir, name));
|
|
90
|
+
if (source === null)
|
|
91
|
+
continue;
|
|
92
|
+
const file = rel(join(dir, name));
|
|
93
|
+
checked.push(file);
|
|
94
|
+
findings.push(...checkRuntimeInjection(file, source));
|
|
95
|
+
const extraction = checkExtraction(file, source);
|
|
96
|
+
if (extraction) {
|
|
97
|
+
unlayeredExtraction = true;
|
|
98
|
+
findings.push(extraction);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const entry = ENTRIES.map((path) => join(dir, path)).find((path) => existsSync(path));
|
|
102
|
+
if (entry !== undefined) {
|
|
103
|
+
checked.push(rel(entry));
|
|
104
|
+
findings.push(...checkStylesheets(dir, entry, rel, checked, unlayeredExtraction));
|
|
105
|
+
}
|
|
106
|
+
else if (!isLibrary(pkg)) {
|
|
107
|
+
// A library (it publishes main/exports) has no entry by design: its
|
|
108
|
+
// consumers load the stylesheet, and doctor checks them.
|
|
109
|
+
findings.push({
|
|
110
|
+
rule: 'css-imported',
|
|
111
|
+
severity: 'warn',
|
|
112
|
+
file: rel(dir),
|
|
113
|
+
message: `No app entry found (looked for ${ENTRIES.join(', ')}), so the stylesheet wiring was not checked.`,
|
|
114
|
+
fix: `Import '${DS_CSS}' in the module that renders the app.`,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
const skew = uiVersionSkew(dir);
|
|
118
|
+
if (skew) {
|
|
119
|
+
findings.push({
|
|
120
|
+
rule: 'version-skew',
|
|
121
|
+
severity: 'warn',
|
|
122
|
+
file: rel(join(dir, 'package.json')),
|
|
123
|
+
message: `@duro-app/ui is ${skew.installed}, but this CLI documents and checks ${skew.own}.`,
|
|
124
|
+
fix: `npx -y @duro-app/cli@${skew.installed} doctor, or upgrade @duro-app/ui.`,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
return findings;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* The packages under `root` that depend on @duro-app/ui. The hook runs at
|
|
131
|
+
* the repo root, which in a workspace (or an app kept in web/) is not the
|
|
132
|
+
* package that renders anything: follow the workspace globs, and without
|
|
133
|
+
* any, look one directory down.
|
|
134
|
+
*/
|
|
135
|
+
function consumerPackages(root) {
|
|
136
|
+
const rootPkg = readPackage(root);
|
|
137
|
+
const dirs = [root];
|
|
138
|
+
const patterns = workspacePatterns(root, rootPkg);
|
|
139
|
+
for (const pattern of patterns)
|
|
140
|
+
dirs.push(...expandWorkspace(root, pattern));
|
|
141
|
+
if (patterns.length === 0 && !(rootPkg && dependsOnUi(rootPkg))) {
|
|
142
|
+
dirs.push(...childDirs(root));
|
|
143
|
+
}
|
|
144
|
+
const out = [];
|
|
145
|
+
for (const dir of new Set(dirs)) {
|
|
146
|
+
const pkg = readPackage(dir);
|
|
147
|
+
if (pkg && dependsOnUi(pkg))
|
|
148
|
+
out.push({ dir, pkg });
|
|
149
|
+
}
|
|
150
|
+
return out;
|
|
151
|
+
}
|
|
152
|
+
function readPackage(dir) {
|
|
153
|
+
const raw = readText(join(dir, 'package.json'));
|
|
154
|
+
return raw === null ? null : parsePackage(raw);
|
|
155
|
+
}
|
|
156
|
+
/** npm/yarn `workspaces` and pnpm-workspace.yaml `packages`, negations dropped. */
|
|
157
|
+
function workspacePatterns(root, pkg) {
|
|
158
|
+
const field = pkg?.workspaces;
|
|
159
|
+
const fromPkg = Array.isArray(field)
|
|
160
|
+
? field
|
|
161
|
+
: Array.isArray(field?.packages)
|
|
162
|
+
? field.packages
|
|
163
|
+
: [];
|
|
164
|
+
const yaml = readText(join(root, 'pnpm-workspace.yaml')) ?? '';
|
|
165
|
+
const block = /^packages:\s*\n((?:[ \t]+-.*\n?|[ \t]*#.*\n?|[ \t]*\n)*)/m.exec(yaml)?.[1] ?? '';
|
|
166
|
+
const fromYaml = [...block.matchAll(/^[ \t]+-\s*['"]?([^'"#\n]+?)['"]?\s*(?:#.*)?$/gm)].map((match) => match[1]);
|
|
167
|
+
return [...fromPkg, ...fromYaml].filter((pattern) => typeof pattern === 'string' && !pattern.startsWith('!'));
|
|
168
|
+
}
|
|
169
|
+
/** `apps/*` and `apps/**` list apps' subdirectories; anything else is a path. */
|
|
170
|
+
function expandWorkspace(root, pattern) {
|
|
171
|
+
const glob = /^(.*?)\/\*\*?$/.exec(pattern.replace(/\/$/, ''));
|
|
172
|
+
return glob ? childDirs(join(root, glob[1])) : [join(root, pattern)];
|
|
173
|
+
}
|
|
174
|
+
function childDirs(dir) {
|
|
175
|
+
try {
|
|
176
|
+
return readdirSync(dir, { withFileTypes: true })
|
|
177
|
+
.filter((entry) => entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'node_modules')
|
|
178
|
+
.map((entry) => join(dir, entry.name))
|
|
179
|
+
.sort();
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return [];
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function readText(path) {
|
|
186
|
+
try {
|
|
187
|
+
return readFileSync(path, 'utf8');
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
function parsePackage(raw) {
|
|
194
|
+
try {
|
|
195
|
+
return JSON.parse(raw);
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return {};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function dependsOnUi(pkg) {
|
|
202
|
+
return ['dependencies', 'devDependencies', 'peerDependencies'].some((field) => pkg[field]?.['@duro-app/ui'] !== undefined);
|
|
203
|
+
}
|
|
204
|
+
function isLibrary(pkg) {
|
|
205
|
+
return pkg.exports !== undefined || pkg.main !== undefined || pkg.module !== undefined;
|
|
206
|
+
}
|
|
207
|
+
/** The installed @duro-app/ui version when it differs from this CLI's. */
|
|
208
|
+
export function uiVersionSkew(cwd) {
|
|
209
|
+
try {
|
|
210
|
+
const require = createRequire(join(cwd, 'package.json'));
|
|
211
|
+
const installed = require('@duro-app/ui/package.json').version;
|
|
212
|
+
const own = cliVersion();
|
|
213
|
+
return installed && own !== '0.0.0' && installed !== own ? { own, installed } : null;
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
function checkRuntimeInjection(file, source) {
|
|
220
|
+
const masked = maskComments(source, { line: true });
|
|
221
|
+
const out = [];
|
|
222
|
+
const name = basename(file);
|
|
223
|
+
for (const match of masked.matchAll(/\bruntimeInjection\s*:\s*([^,}\n]+)/g)) {
|
|
224
|
+
const value = match[1].trim();
|
|
225
|
+
if (/^false\b/.test(value))
|
|
226
|
+
continue;
|
|
227
|
+
const literal = /^(?:true\b|['"`])/.test(value);
|
|
228
|
+
// Test runners render into jsdom, where nothing is laid out: injection
|
|
229
|
+
// there changes no pixel anyone sees, but it is one copy-paste from the
|
|
230
|
+
// app config, so it is still worth a warning.
|
|
231
|
+
const testOnly = name.startsWith('vitest.');
|
|
232
|
+
out.push({
|
|
233
|
+
rule: 'runtime-injection',
|
|
234
|
+
severity: literal && !testOnly ? 'error' : 'warn',
|
|
235
|
+
file,
|
|
236
|
+
line: lineOf(source, match.index),
|
|
237
|
+
message: `${literal
|
|
238
|
+
? `runtimeInjection: ${value}`
|
|
239
|
+
: `runtimeInjection is computed (${value}), and may be on`}${testOnly ? ' (test config only)' : ''} — StyleX then injects react-strict-dom's element reset (padding: 0, margin: 0) into an unlayered <style> at import time. Unlayered rules beat every @layer rule, so it flattens the spacing of every @duro-app/ui component.`,
|
|
240
|
+
fix: `Set runtimeInjection: false and extract the rules at build time instead: react-strict-dom/postcss-plugin in postcss.config, plus a CSS file containing @react-strict-dom; imported after '${DS_CSS}'.`,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
return out;
|
|
244
|
+
}
|
|
245
|
+
function checkExtraction(file, source) {
|
|
246
|
+
if (!basename(file).startsWith('postcss.config'))
|
|
247
|
+
return null;
|
|
248
|
+
const masked = maskComments(source, { line: true });
|
|
249
|
+
const match = /\buseCSSLayers\s*:\s*false\b/.exec(masked);
|
|
250
|
+
if (!match)
|
|
251
|
+
return null;
|
|
252
|
+
return {
|
|
253
|
+
rule: 'layered-extraction',
|
|
254
|
+
severity: 'error',
|
|
255
|
+
file,
|
|
256
|
+
line: lineOf(source, match.index),
|
|
257
|
+
message: "useCSSLayers: false emits this app's StyleX rules unlayered — including react-strict-dom's element reset (padding: 0) — and unlayered rules beat the design system's layered component styles.",
|
|
258
|
+
fix: 'Remove useCSSLayers (it defaults to true) so the extracted rules land in the same priority layers as @duro-app/ui.',
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
function checkStylesheets(root, entry, rel, checked, unlayeredExtraction) {
|
|
262
|
+
const walk = {
|
|
263
|
+
root,
|
|
264
|
+
rel,
|
|
265
|
+
checked,
|
|
266
|
+
unlayeredExtraction,
|
|
267
|
+
layers: new Map(),
|
|
268
|
+
findings: [],
|
|
269
|
+
seen: new Set(),
|
|
270
|
+
dsImported: false,
|
|
271
|
+
};
|
|
272
|
+
const source = readText(entry) ?? '';
|
|
273
|
+
for (const imp of cssImports(source)) {
|
|
274
|
+
visit(walk, imp.specifier, dirname(entry), { file: rel(entry), line: imp.line }, false);
|
|
275
|
+
}
|
|
276
|
+
if (!walk.dsImported) {
|
|
277
|
+
walk.findings.unshift({
|
|
278
|
+
rule: 'css-imported',
|
|
279
|
+
severity: 'error',
|
|
280
|
+
file: rel(entry),
|
|
281
|
+
message: `${rel(entry)} never imports '${DS_CSS}'. @duro-app/ui's JavaScript does not load its stylesheet, so every component renders unstyled.`,
|
|
282
|
+
fix: `Add import '${DS_CSS}' to ${rel(entry)}, before the app's own CSS.`,
|
|
283
|
+
});
|
|
284
|
+
return walk.findings;
|
|
285
|
+
}
|
|
286
|
+
const order = [...walk.layers.keys()];
|
|
287
|
+
const reset = order.indexOf('reset');
|
|
288
|
+
const firstPriority = order.findIndex((name) => PRIORITIES.includes(name));
|
|
289
|
+
if (reset > firstPriority && firstPriority >= 0) {
|
|
290
|
+
const origin = walk.layers.get(order[firstPriority]);
|
|
291
|
+
walk.findings.unshift({
|
|
292
|
+
rule: 'css-load-order',
|
|
293
|
+
severity: 'error',
|
|
294
|
+
file: origin.file,
|
|
295
|
+
line: origin.line,
|
|
296
|
+
message: `${origin.file} declares StyleX's priority layers before 'reset'. The first declaration fixes layer order for the whole page, so the design system's reset (* { padding: 0; margin: 0 }) now outranks every component style.`,
|
|
297
|
+
fix: `Import '${DS_CSS}' before ${origin.file}, or start ${origin.file} with ${LAYER_STATEMENT}`,
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
return walk.findings;
|
|
301
|
+
}
|
|
302
|
+
/** Stylesheet imports of a JS/TS module, in source order. */
|
|
303
|
+
function cssImports(source) {
|
|
304
|
+
const masked = maskComments(source, { line: true });
|
|
305
|
+
const out = [];
|
|
306
|
+
for (const match of masked.matchAll(/^[ \t]*import\s+(?:([\w$*{}\s,]+?)\s+from\s+)?(['"])([^'"\n]+)\2/gm)) {
|
|
307
|
+
const [, clause, , specifier] = match;
|
|
308
|
+
if (!/\.css(?:\?[\w&=-]*)?$/.test(specifier))
|
|
309
|
+
continue;
|
|
310
|
+
// `import {spacing} from '@duro-app/tokens/tokens/spacing.css'` is a
|
|
311
|
+
// .css.ts module, not a stylesheet — only side-effect and ?url imports
|
|
312
|
+
// put CSS on the page.
|
|
313
|
+
if (clause !== undefined && !specifier.includes('?'))
|
|
314
|
+
continue;
|
|
315
|
+
out.push({ specifier: specifier.replace(/\?.*$/, ''), line: lineOf(source, match.index) });
|
|
316
|
+
}
|
|
317
|
+
return out;
|
|
318
|
+
}
|
|
319
|
+
function resolveSheet(walk, specifier, fromDir) {
|
|
320
|
+
const candidates = specifier.startsWith('.')
|
|
321
|
+
? [resolve(fromDir, specifier)]
|
|
322
|
+
: specifier.startsWith('~/')
|
|
323
|
+
? ['app', 'src'].map((dir) => join(walk.root, dir, specifier.slice(2)))
|
|
324
|
+
: specifier.startsWith('/')
|
|
325
|
+
? [join(walk.root, specifier)]
|
|
326
|
+
: [];
|
|
327
|
+
return candidates.find((path) => existsSync(path)) ?? null;
|
|
328
|
+
}
|
|
329
|
+
function declare(walk, names, origin) {
|
|
330
|
+
for (const name of names)
|
|
331
|
+
if (!walk.layers.has(name))
|
|
332
|
+
walk.layers.set(name, origin);
|
|
333
|
+
}
|
|
334
|
+
/** One stylesheet import: record the layers it declares and scan app CSS. */
|
|
335
|
+
function visit(walk, specifier, fromDir, origin, layered) {
|
|
336
|
+
const ds = DS_SHEETS[specifier];
|
|
337
|
+
if (ds) {
|
|
338
|
+
if (specifier === DS_CSS)
|
|
339
|
+
walk.dsImported = true;
|
|
340
|
+
if (!layered)
|
|
341
|
+
declare(walk, ds, { file: specifier, line: 0 });
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
const path = resolveSheet(walk, specifier, fromDir);
|
|
345
|
+
if (path === null || walk.seen.has(path))
|
|
346
|
+
return;
|
|
347
|
+
walk.seen.add(path);
|
|
348
|
+
const file = walk.rel(path);
|
|
349
|
+
walk.checked.push(file);
|
|
350
|
+
scanSheet(walk, path, file, layered);
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Walks a stylesheet's blocks in order: top-level layer declarations
|
|
354
|
+
* (statements, blocks, `@react-strict-dom;`, `@import … layer()`), and zero
|
|
355
|
+
* spacing on component elements outside any layer.
|
|
356
|
+
*/
|
|
357
|
+
function scanSheet(walk, path, file, layered) {
|
|
358
|
+
const source = readText(path) ?? '';
|
|
359
|
+
const css = maskComments(source, { line: false });
|
|
360
|
+
const stack = [];
|
|
361
|
+
const insideLayer = () => layered || stack.some((block) => block.kind === 'layer');
|
|
362
|
+
let pos = 0;
|
|
363
|
+
for (const boundary of css.matchAll(/[{};]/g)) {
|
|
364
|
+
const at = boundary.index;
|
|
365
|
+
const prelude = css.slice(pos, at).trim();
|
|
366
|
+
const preludeAt = at - css.slice(pos, at).trimStart().length;
|
|
367
|
+
pos = at + 1;
|
|
368
|
+
const origin = { file, line: lineOf(source, preludeAt) };
|
|
369
|
+
const topLevel = !insideLayer() && stack.every((block) => block.kind !== 'rule');
|
|
370
|
+
if (boundary[0] === '{') {
|
|
371
|
+
if (prelude.startsWith('@layer')) {
|
|
372
|
+
const name = prelude.slice('@layer'.length).trim();
|
|
373
|
+
if (topLevel && name)
|
|
374
|
+
declare(walk, [name], origin);
|
|
375
|
+
stack.push({ kind: 'layer' });
|
|
376
|
+
}
|
|
377
|
+
else if (prelude.startsWith('@')) {
|
|
378
|
+
stack.push({ kind: 'at' });
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
stack.push({ kind: 'rule', selector: prelude, body: at + 1 });
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
else if (boundary[0] === '}') {
|
|
385
|
+
const block = stack.pop();
|
|
386
|
+
if (block?.kind === 'rule' && !insideLayer()) {
|
|
387
|
+
const body = css.slice(block.body, at);
|
|
388
|
+
const selector = block.selector ?? '';
|
|
389
|
+
if (targetsComponents(selector)) {
|
|
390
|
+
for (const decl of body.matchAll(ZERO_SPACING)) {
|
|
391
|
+
walk.findings.push({
|
|
392
|
+
rule: 'unlayered-reset',
|
|
393
|
+
severity: 'warn',
|
|
394
|
+
file,
|
|
395
|
+
line: lineOf(source, (block.body ?? 0) + decl.index),
|
|
396
|
+
message: `'${selector.replace(/\s+/g, ' ')} { ${decl[1]}: 0 }' sits outside any @layer, so it beats the spacing @duro-app/ui components set in their layers.`,
|
|
397
|
+
fix: `Wrap the rule in @layer reset { … } — the design system's reset layer, which component styles already outrank.`,
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
else if (topLevel) {
|
|
404
|
+
if (prelude.startsWith('@layer')) {
|
|
405
|
+
const names = prelude
|
|
406
|
+
.slice('@layer'.length)
|
|
407
|
+
.split(',')
|
|
408
|
+
.map((name) => name.trim())
|
|
409
|
+
.filter(Boolean);
|
|
410
|
+
declare(walk, names, origin);
|
|
411
|
+
}
|
|
412
|
+
else if (prelude === '@react-strict-dom') {
|
|
413
|
+
// Extracted with layers (the default), this directive expands to
|
|
414
|
+
// StyleX's priority layers; unlayered, layered-extraction reports it.
|
|
415
|
+
if (!walk.unlayeredExtraction)
|
|
416
|
+
declare(walk, PRIORITIES, origin);
|
|
417
|
+
}
|
|
418
|
+
else if (prelude.startsWith('@import')) {
|
|
419
|
+
const target = /@import\s+(?:url\(\s*)?(['"])([^'"]+)\1/.exec(prelude);
|
|
420
|
+
if (target) {
|
|
421
|
+
const layer = /\blayer\(\s*([\w.-]+)\s*\)/.exec(prelude);
|
|
422
|
+
if (layer)
|
|
423
|
+
declare(walk, [layer[1]], origin);
|
|
424
|
+
visit(walk, target[2], dirname(path), origin, layer !== null || /\blayer\b/.test(prelude));
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
/** Whether any selector in a list is `*` or a bare element the DS renders. */
|
|
431
|
+
function targetsComponents(selectorList) {
|
|
432
|
+
return selectorList.split(',').some((selector) => {
|
|
433
|
+
const bare = selector.trim().replace(/::?[\w-]+(?:\([^)]*\))?/g, '');
|
|
434
|
+
return bare === '*' || COMPONENT_ELEMENTS.has(bare);
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
function report(findings, checked, packages, session) {
|
|
438
|
+
const errors = findings.filter((finding) => finding.severity === 'error');
|
|
439
|
+
const warnings = findings.filter((finding) => finding.severity === 'warn');
|
|
440
|
+
const data = { ok: errors.length === 0, findings, checked, packages };
|
|
441
|
+
const where = (finding) => finding.line ? `${finding.file}:${finding.line}` : finding.file;
|
|
442
|
+
if (session) {
|
|
443
|
+
if (findings.length === 0)
|
|
444
|
+
return { text: '', data };
|
|
445
|
+
return {
|
|
446
|
+
text: [
|
|
447
|
+
errors.length > 0
|
|
448
|
+
? "DURO DOCTOR — this repo's @duro-app/ui wiring is broken: components render with their spacing flattened until it is fixed. Fix it before any styling work:"
|
|
449
|
+
: "DURO DOCTOR — warnings about this repo's @duro-app/ui wiring:",
|
|
450
|
+
...findings.map((finding) => `- [${finding.severity}] ${finding.rule} at ${where(finding)}: ${finding.message} Fix: ${finding.fix}`),
|
|
451
|
+
'Re-check with: npx -y @duro-app/cli doctor',
|
|
452
|
+
].join('\n'),
|
|
453
|
+
data,
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
if (findings.length === 0) {
|
|
457
|
+
return {
|
|
458
|
+
text: `duro doctor: no problems found\n checked: ${checked.join(', ')}`,
|
|
459
|
+
data,
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
return {
|
|
463
|
+
text: [
|
|
464
|
+
`duro doctor: ${errors.length} error(s), ${warnings.length} warning(s)`,
|
|
465
|
+
...findings.flatMap((finding) => [
|
|
466
|
+
` ${finding.severity.padEnd(5)} ${finding.rule.padEnd(18)} ${where(finding)}`,
|
|
467
|
+
` ${finding.message}`,
|
|
468
|
+
` fix: ${finding.fix}`,
|
|
469
|
+
]),
|
|
470
|
+
` checked: ${checked.join(', ')}`,
|
|
471
|
+
].join('\n'),
|
|
472
|
+
data,
|
|
473
|
+
exitCode: errors.length > 0 ? 1 : undefined,
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockup.d.ts","sourceRoot":"","sources":["../../src/commands/mockup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"mockup.d.ts","sourceRoot":"","sources":["../../src/commands/mockup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;AAuB9C,eAAO,MAAM,YAAY,4BAA4B,CAAA;AACrD,eAAO,MAAM,UAAU,0BAA0B,CAAA;AAEjD,uEAAuE;AACvE,eAAO,MAAM,cAAc,OAAO,CAAA;AAClC,eAAO,MAAM,eAAe,MAAM,CAAA;AAElC,eAAO,MAAM,aAAa,6CAA8C,CAAA;AACxE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EACA,WAAW,GACX,YAAY,GACZ,gBAAgB,GAChB,mBAAmB,GACnB,kBAAkB,GAClB,qBAAqB,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;CAChB;AAKD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CA2DzF;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,WAAgB,GAAG,aAAa,CAgC1F;AAiSD,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAUzF;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,YAAiB,GACzB,aAAa,CA6Bf;AAID,wBAAgB,SAAS,CACvB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,WAAW,GAAG,YAAY,GAClC,aAAa,CASf"}
|
package/dist/commands/mockup.js
CHANGED
|
@@ -2,6 +2,7 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
|
2
2
|
import { join, resolve } from 'node:path';
|
|
3
3
|
import { lookup } from '../registry.js';
|
|
4
4
|
import { suggestions } from '../search.js';
|
|
5
|
+
import { lineOf } from '../scan.js';
|
|
5
6
|
/*
|
|
6
7
|
* duro mockup — token-seeded artboards, and the check that makes one a
|
|
7
8
|
* handoff contract.
|
|
@@ -155,13 +156,6 @@ const VOID_ELEMENTS = new Set([
|
|
|
155
156
|
function usage(text) {
|
|
156
157
|
return { text, data: { kind: 'usage-error' }, exitCode: 2 };
|
|
157
158
|
}
|
|
158
|
-
function lineOf(source, index) {
|
|
159
|
-
let line = 1;
|
|
160
|
-
for (let i = 0; i < index && i < source.length; i++)
|
|
161
|
-
if (source[i] === '\n')
|
|
162
|
-
line++;
|
|
163
|
-
return line;
|
|
164
|
-
}
|
|
165
159
|
/** Blank out the token block so its literals are never scanned, keeping offsets. */
|
|
166
160
|
function maskTokenBlock(source) {
|
|
167
161
|
const start = source.indexOf(TOKENS_START);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockup.js","sourceRoot":"","sources":["../../src/commands/mockup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mockup.js","sourceRoot":"","sources":["../../src/commands/mockup.ts"],"names":[],"mappings":"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"}
|
package/dist/hook-script.d.ts
CHANGED
|
@@ -9,6 +9,12 @@
|
|
|
9
9
|
export declare const HOOK_SCRIPT_PATH = ".claude/hooks/duro-catalog.sh";
|
|
10
10
|
export declare const HOOK_SETTINGS_PATH = ".claude/settings.json";
|
|
11
11
|
export declare const HOOK_CACHE_PATH = ".claude/.duro-session.cache";
|
|
12
|
+
/**
|
|
13
|
+
* `duro doctor --session` output, and the key of the files it was computed
|
|
14
|
+
* from. Named under HOOK_CACHE_PATH so the existing ignore glob covers them —
|
|
15
|
+
* no .gitignore drift in the repos already wired.
|
|
16
|
+
*/
|
|
17
|
+
export declare const HOOK_DOCTOR_CACHE_PATH = ".claude/.duro-session.cache.doctor";
|
|
12
18
|
/**
|
|
13
19
|
* Glob, not the bare path: the script stages the fetch through
|
|
14
20
|
* "<cache>.tmp", and a session-start hook killed mid-npx leaves that behind.
|
|
@@ -24,8 +30,9 @@ export declare const HOOK_COMMAND = "sh .claude/hooks/duro-catalog.sh";
|
|
|
24
30
|
* as --check drift, but a floor left behind a major means no consumer ever
|
|
25
31
|
* sees what the payload gained (1.2.0 pinned every repo out of 2.x).
|
|
26
32
|
* 3.0.0: the SCREENS section and the /duro-mockup pointer.
|
|
33
|
+
* 3.4.0: duro doctor --session.
|
|
27
34
|
*/
|
|
28
|
-
export declare const HOOK_MIN_CLI = "3.
|
|
29
|
-
export declare const HOOK_SCRIPT = "#!/bin/sh\n# Duro design-system session bootstrap \u2014 GENERATED by `duro hook install`.\n# Regenerate: npx -y @duro-app/cli hook install (--check verifies it in CI)\n#\n# Injects the consult-first preamble plus the component catalog into agent\n# context at SessionStart, so \"check the design system before building UI\" is\n# ambient context instead of a step an agent has to remember.\n#\n# Do not hand-edit. Repo-specific caveats go in\n# .claude/duro-hook.local.md \u2014 appended below, and left alone by regeneration.\ncache=\".claude/.duro-session.cache\"\nnotes=\".claude/duro-hook.local.md\"\n\n# npx resolution dominates session start; the catalog only changes on upgrade.\nif [ ! -s \"$cache\" ] || [ -n \"$(find \"$cache\" -mtime +7 2>/dev/null)\" ]; then\n if npx -y @duro-app/cli@^3.
|
|
35
|
+
export declare const HOOK_MIN_CLI = "3.4.0";
|
|
36
|
+
export declare const HOOK_SCRIPT = "#!/bin/sh\n# Duro design-system session bootstrap \u2014 GENERATED by `duro hook install`.\n# Regenerate: npx -y @duro-app/cli hook install (--check verifies it in CI)\n#\n# Injects the consult-first preamble plus the component catalog into agent\n# context at SessionStart, so \"check the design system before building UI\" is\n# ambient context instead of a step an agent has to remember. Then runs\n# `duro doctor`, which says nothing unless this repo's build wiring flattens\n# the components' styles.\n#\n# Do not hand-edit. Repo-specific caveats go in\n# .claude/duro-hook.local.md \u2014 appended below, and left alone by regeneration.\ncache=\".claude/.duro-session.cache\"\nnotes=\".claude/duro-hook.local.md\"\ndoctor=\".claude/.duro-session.cache.doctor\"\n\n# npx resolution dominates session start; the catalog only changes on upgrade.\nif [ ! -s \"$cache\" ] || [ -n \"$(find \"$cache\" -mtime +7 2>/dev/null)\" ]; then\n if npx -y @duro-app/cli@^3.4.0 hook session-start >\"$cache.tmp\" 2>/dev/null; then\n mv \"$cache.tmp\" \"$cache\"\n else\n rm -f \"$cache.tmp\"\n fi\nfi\n\n# Offline with no cache yet: stay silent rather than fail the session.\nif [ -s \"$cache\" ]; then\n cat \"$cache\"\n if [ -s \"$notes\" ]; then\n echo\n cat \"$notes\"\n fi\nfi\n\n# duro doctor reads build config, entries and stylesheets. Re-run it when one\n# of those changes rather than on a timer, so an edit shows up next session\n# and a healthy repo only pays for npx after touching its config.\nkey=$(find . -maxdepth 4 \\( -name node_modules -o -name .git -o -name dist -o -name build \\) -prune -o \\\n -type f \\( -name package.json -o -name pnpm-workspace.yaml -o -name '*.css' -o -name 'vite*' \\\n -o -name 'babel*' -o -name '.babelrc*' -o -name '*.babel.*' -o -name 'postcss*' \\\n -o -name 'root.tsx' -o -name 'main.tsx' -o -name 'index.tsx' \\) -exec cksum {} + 2>/dev/null |\n sort | cksum)\nif [ \"$key\" != \"$(cat \"$doctor.key\" 2>/dev/null)\" ]; then\n if npx -y @duro-app/cli@^3.4.0 doctor --session >\"$doctor.tmp\" 2>/dev/null; then\n mv \"$doctor.tmp\" \"$doctor\"\n echo \"$key\" >\"$doctor.key\"\n else\n rm -f \"$doctor.tmp\"\n fi\nfi\nif [ -s \"$doctor\" ]; then\n echo\n cat \"$doctor\"\nfi\n";
|
|
30
37
|
export declare const GITIGNORE_BLOCK = "# Duro session-hook cache (duro hook install)\n.claude/.duro-session.cache*\n";
|
|
31
38
|
//# sourceMappingURL=hook-script.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-script.d.ts","sourceRoot":"","sources":["../src/hook-script.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,kCAAkC,CAAA;AAC/D,eAAO,MAAM,kBAAkB,0BAA0B,CAAA;AACzD,eAAO,MAAM,eAAe,gCAAgC,CAAA;AAC5D;;;GAGG;AACH,eAAO,MAAM,iBAAiB,iCAAwB,CAAA;AACtD,gFAAgF;AAChF,eAAO,MAAM,eAAe,+BAA+B,CAAA;AAE3D,mEAAmE;AACnE,eAAO,MAAM,YAAY,qCAA2B,CAAA;AAEpD
|
|
1
|
+
{"version":3,"file":"hook-script.d.ts","sourceRoot":"","sources":["../src/hook-script.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,kCAAkC,CAAA;AAC/D,eAAO,MAAM,kBAAkB,0BAA0B,CAAA;AACzD,eAAO,MAAM,eAAe,gCAAgC,CAAA;AAC5D;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,uCAA8B,CAAA;AACjE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,iCAAwB,CAAA;AACtD,gFAAgF;AAChF,eAAO,MAAM,eAAe,+BAA+B,CAAA;AAE3D,mEAAmE;AACnE,eAAO,MAAM,YAAY,qCAA2B,CAAA;AAEpD;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,UAAU,CAAA;AAEnC,eAAO,MAAM,WAAW,qtEAsDvB,CAAA;AAED,eAAO,MAAM,eAAe,kFAA0E,CAAA"}
|
package/dist/hook-script.js
CHANGED
|
@@ -9,6 +9,12 @@
|
|
|
9
9
|
export const HOOK_SCRIPT_PATH = '.claude/hooks/duro-catalog.sh';
|
|
10
10
|
export const HOOK_SETTINGS_PATH = '.claude/settings.json';
|
|
11
11
|
export const HOOK_CACHE_PATH = '.claude/.duro-session.cache';
|
|
12
|
+
/**
|
|
13
|
+
* `duro doctor --session` output, and the key of the files it was computed
|
|
14
|
+
* from. Named under HOOK_CACHE_PATH so the existing ignore glob covers them —
|
|
15
|
+
* no .gitignore drift in the repos already wired.
|
|
16
|
+
*/
|
|
17
|
+
export const HOOK_DOCTOR_CACHE_PATH = `${HOOK_CACHE_PATH}.doctor`;
|
|
12
18
|
/**
|
|
13
19
|
* Glob, not the bare path: the script stages the fetch through
|
|
14
20
|
* "<cache>.tmp", and a session-start hook killed mid-npx leaves that behind.
|
|
@@ -24,20 +30,24 @@ export const HOOK_COMMAND = `sh ${HOOK_SCRIPT_PATH}`;
|
|
|
24
30
|
* as --check drift, but a floor left behind a major means no consumer ever
|
|
25
31
|
* sees what the payload gained (1.2.0 pinned every repo out of 2.x).
|
|
26
32
|
* 3.0.0: the SCREENS section and the /duro-mockup pointer.
|
|
33
|
+
* 3.4.0: duro doctor --session.
|
|
27
34
|
*/
|
|
28
|
-
export const HOOK_MIN_CLI = '3.
|
|
35
|
+
export const HOOK_MIN_CLI = '3.4.0';
|
|
29
36
|
export const HOOK_SCRIPT = `#!/bin/sh
|
|
30
37
|
# Duro design-system session bootstrap — GENERATED by \`duro hook install\`.
|
|
31
38
|
# Regenerate: npx -y @duro-app/cli hook install (--check verifies it in CI)
|
|
32
39
|
#
|
|
33
40
|
# Injects the consult-first preamble plus the component catalog into agent
|
|
34
41
|
# context at SessionStart, so "check the design system before building UI" is
|
|
35
|
-
# ambient context instead of a step an agent has to remember.
|
|
42
|
+
# ambient context instead of a step an agent has to remember. Then runs
|
|
43
|
+
# \`duro doctor\`, which says nothing unless this repo's build wiring flattens
|
|
44
|
+
# the components' styles.
|
|
36
45
|
#
|
|
37
46
|
# Do not hand-edit. Repo-specific caveats go in
|
|
38
47
|
# ${HOOK_NOTES_PATH} — appended below, and left alone by regeneration.
|
|
39
48
|
cache="${HOOK_CACHE_PATH}"
|
|
40
49
|
notes="${HOOK_NOTES_PATH}"
|
|
50
|
+
doctor="${HOOK_DOCTOR_CACHE_PATH}"
|
|
41
51
|
|
|
42
52
|
# npx resolution dominates session start; the catalog only changes on upgrade.
|
|
43
53
|
if [ ! -s "$cache" ] || [ -n "$(find "$cache" -mtime +7 2>/dev/null)" ]; then
|
|
@@ -49,12 +59,33 @@ if [ ! -s "$cache" ] || [ -n "$(find "$cache" -mtime +7 2>/dev/null)" ]; then
|
|
|
49
59
|
fi
|
|
50
60
|
|
|
51
61
|
# Offline with no cache yet: stay silent rather than fail the session.
|
|
52
|
-
[ -s "$cache" ]
|
|
53
|
-
cat "$cache"
|
|
62
|
+
if [ -s "$cache" ]; then
|
|
63
|
+
cat "$cache"
|
|
64
|
+
if [ -s "$notes" ]; then
|
|
65
|
+
echo
|
|
66
|
+
cat "$notes"
|
|
67
|
+
fi
|
|
68
|
+
fi
|
|
54
69
|
|
|
55
|
-
|
|
70
|
+
# duro doctor reads build config, entries and stylesheets. Re-run it when one
|
|
71
|
+
# of those changes rather than on a timer, so an edit shows up next session
|
|
72
|
+
# and a healthy repo only pays for npx after touching its config.
|
|
73
|
+
key=$(find . -maxdepth 4 \\( -name node_modules -o -name .git -o -name dist -o -name build \\) -prune -o \\
|
|
74
|
+
-type f \\( -name package.json -o -name pnpm-workspace.yaml -o -name '*.css' -o -name 'vite*' \\
|
|
75
|
+
-o -name 'babel*' -o -name '.babelrc*' -o -name '*.babel.*' -o -name 'postcss*' \\
|
|
76
|
+
-o -name 'root.tsx' -o -name 'main.tsx' -o -name 'index.tsx' \\) -exec cksum {} + 2>/dev/null |
|
|
77
|
+
sort | cksum)
|
|
78
|
+
if [ "$key" != "$(cat "$doctor.key" 2>/dev/null)" ]; then
|
|
79
|
+
if npx -y @duro-app/cli@^${HOOK_MIN_CLI} doctor --session >"$doctor.tmp" 2>/dev/null; then
|
|
80
|
+
mv "$doctor.tmp" "$doctor"
|
|
81
|
+
echo "$key" >"$doctor.key"
|
|
82
|
+
else
|
|
83
|
+
rm -f "$doctor.tmp"
|
|
84
|
+
fi
|
|
85
|
+
fi
|
|
86
|
+
if [ -s "$doctor" ]; then
|
|
56
87
|
echo
|
|
57
|
-
cat "$
|
|
88
|
+
cat "$doctor"
|
|
58
89
|
fi
|
|
59
90
|
`;
|
|
60
91
|
export const GITIGNORE_BLOCK = `# Duro session-hook cache (duro hook install)\n${HOOK_CACHE_IGNORE}\n`;
|
package/dist/hook-script.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-script.js","sourceRoot":"","sources":["../src/hook-script.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,+BAA+B,CAAA;AAC/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAA;AACzD,MAAM,CAAC,MAAM,eAAe,GAAG,6BAA6B,CAAA;AAC5D;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,eAAe,GAAG,CAAA;AACtD,gFAAgF;AAChF,MAAM,CAAC,MAAM,eAAe,GAAG,4BAA4B,CAAA;AAE3D,mEAAmE;AACnE,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,gBAAgB,EAAE,CAAA;AAEpD
|
|
1
|
+
{"version":3,"file":"hook-script.js","sourceRoot":"","sources":["../src/hook-script.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,+BAA+B,CAAA;AAC/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAA;AACzD,MAAM,CAAC,MAAM,eAAe,GAAG,6BAA6B,CAAA;AAC5D;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,eAAe,SAAS,CAAA;AACjE;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,eAAe,GAAG,CAAA;AACtD,gFAAgF;AAChF,MAAM,CAAC,MAAM,eAAe,GAAG,4BAA4B,CAAA;AAE3D,mEAAmE;AACnE,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,gBAAgB,EAAE,CAAA;AAEpD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAA;AAEnC,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;IAWvB,eAAe;SACV,eAAe;SACf,eAAe;UACd,sBAAsB;;;;6BAIH,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;6BAyBZ,YAAY;;;;;;;;;;;CAWxC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,kDAAkD,iBAAiB,IAAI,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export { loadRegistry, lookup, lookupNames } from './registry.js';
|
|
|
3
3
|
export { search, suggestions } from './search.js';
|
|
4
4
|
export { buildManifest, COMMANDS } from './manifest.js';
|
|
5
5
|
export { checkArtboard, seedArtboard, type Finding } from './commands/mockup.js';
|
|
6
|
+
export { runDoctor, type DoctorFinding, type DoctorRule } from './commands/doctor.js';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,qBAAqB,CAAA;AACxC,OAAO,EAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAC,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAA;AACrD,OAAO,EAAC,aAAa,EAAE,YAAY,EAAE,KAAK,OAAO,EAAC,MAAM,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,qBAAqB,CAAA;AACxC,OAAO,EAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAC,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAA;AACrD,OAAO,EAAC,aAAa,EAAE,YAAY,EAAE,KAAK,OAAO,EAAC,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EAAC,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAC,MAAM,sBAAsB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -2,4 +2,5 @@ export { loadRegistry, lookup, lookupNames } from './registry.js';
|
|
|
2
2
|
export { search, suggestions } from './search.js';
|
|
3
3
|
export { buildManifest, COMMANDS } from './manifest.js';
|
|
4
4
|
export { checkArtboard, seedArtboard } from './commands/mockup.js';
|
|
5
|
+
export { runDoctor } from './commands/doctor.js';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAC,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAA;AACrD,OAAO,EAAC,aAAa,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAC,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAA;AACrD,OAAO,EAAC,aAAa,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EAAC,SAAS,EAAsC,MAAM,sBAAsB,CAAA"}
|
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,KAAK,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAGjD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;IACxF,KAAK,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;IAC7E,OAAO,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAA;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,QAAQ,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAGjD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;IACxF,KAAK,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;IAC7E,OAAO,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAA;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,QAAQ,EAAE,WAAW,EA4KjC,CAAA;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;EAqBhE"}
|
package/dist/manifest.js
CHANGED
|
@@ -132,6 +132,23 @@ export const COMMANDS = [
|
|
|
132
132
|
],
|
|
133
133
|
mcpTool: 'duro_ds_mockup_check',
|
|
134
134
|
},
|
|
135
|
+
{
|
|
136
|
+
name: 'doctor',
|
|
137
|
+
summary: "Check how the app in the cwd wires @duro-app/ui into its build: runtimeInjection left on, unlayered StyleX extraction, the stylesheet missing from the entry, layers declared out of order, unlayered resets. Each one flattens component spacing while the design system's own CSS is fine",
|
|
138
|
+
args: [],
|
|
139
|
+
flags: [
|
|
140
|
+
{
|
|
141
|
+
name: 'session',
|
|
142
|
+
type: 'boolean',
|
|
143
|
+
description: 'SessionStart mode: silent when healthy, an agent-facing block otherwise, always exit 0',
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
returns: {
|
|
147
|
+
shape: '{ok: boolean, findings: DoctorFinding[], checked: string[]}',
|
|
148
|
+
description: '{rule, severity, file, line?, message, fix} per finding — runtime-injection, layered-extraction, css-imported, css-load-order, unlayered-reset, version-skew. Exit 1 on any error',
|
|
149
|
+
},
|
|
150
|
+
examples: ['duro doctor', 'duro doctor --json', 'duro doctor --session'],
|
|
151
|
+
},
|
|
135
152
|
{
|
|
136
153
|
name: 'mcp',
|
|
137
154
|
summary: 'Run a stdio MCP server exposing duro_ds_lookup / duro_ds_list / duro_ds_manifest / duro_ds_mockup_check',
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AAgBzC,MAAM,CAAC,MAAM,QAAQ,GAAkB;IACrC;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EACL,+LAA+L;QACjM,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,IAAI;gBACd,WAAW,EACT,uGAAuG;gBACzG,UAAU,EAAE,OAAO;aACpB;SACF;QACD,KAAK,EAAE;YACL,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAC;YACtF,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAC;YAChE,EAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,oCAAoC,EAAC;SAC1F;QACD,OAAO,EAAE;YACP,KAAK,EACH,wFAAwF;YAC1F,WAAW,EAAE,uEAAuE;SACrF;QACD,QAAQ,EAAE;YACR,aAAa;YACb,yBAAyB;YACzB,+BAA+B;YAC/B,uBAAuB;SACxB;QACD,OAAO,EAAE,gBAAgB;KAC1B;IACD;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,yCAAyC;QAClD,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,8CAA8C;gBAC3D,UAAU,EAAE,OAAO;aACpB;SACF;QACD,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,wCAAwC,EAAC;QACtF,QAAQ,EAAE,CAAC,WAAW,EAAE,0BAA0B,CAAC;QACnD,OAAO,EAAE,cAAc;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,8EAA8E;QACvF,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,mDAAmD,EAAC;QAC9F,QAAQ,EAAE,CAAC,sBAAsB,CAAC;QAClC,OAAO,EAAE,kBAAkB;KAC5B;IACD;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EACL,uIAAuI;QACzI,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,wEAAwE;gBACrF,UAAU,EAAE,QAAQ;aACrB;SACF;QACD,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,8DAA8D;aAC5E;SACF;QACD,OAAO,EAAE;YACP,KAAK,EAAE,iFAAiF;YACxF,WAAW,EACT,mGAAmG;SACtG;QACD,QAAQ,EAAE,CAAC,yBAAyB,EAAE,mBAAmB,EAAE,2BAA2B,CAAC;KACxF;IACD;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EACL,wHAAwH;QAC1H,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,qDAAqD;gBAClE,UAAU,EAAE,cAAc;aAC3B;SACF;QACD,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,8DAA8D;aAC5E;SACF;QACD,OAAO,EAAE;YACP,KAAK,EAAE,sCAAsC;YAC7C,WAAW,EAAE,yBAAyB;SACvC;QACD,QAAQ,EAAE,CAAC,oBAAoB,EAAE,4BAA4B,CAAC;KAC/D;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EACL,sLAAsL;QACxL,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,4EAA4E;gBACzF,UAAU,EAAE,eAAe;aAC5B;SACF;QACD,KAAK,EAAE;YACL,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAC;YAC3F,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oCAAoC,EAAC;YACjF;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uEAAuE;aACrF;SACF;QACD,OAAO,EAAE;YACP,KAAK,EAAE,kEAAkE;YACzE,WAAW,EACT,wKAAwK;SAC3K;QACD,QAAQ,EAAE;YACR,2DAA2D;YAC3D,oDAAoD;YACpD,uCAAuC;SACxC;QACD,OAAO,EAAE,sBAAsB;KAChC;IACD;QACE,IAAI,EAAE,KAAK;QACX,OAAO,EACL,yGAAyG;QAC3G,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAC;QACnE,QAAQ,EAAE;YACR,sFAAsF;SACvF;KACF;CACF,CAAA;AAED,MAAM,UAAU,aAAa,CAAC,QAAkB,EAAE,OAAe;IAC/D,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,GAAG,EAAE,MAAM;QACX,OAAO;QACP,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,WAAW,EAAE,oDAAoD;QACjE,KAAK,EAAE,sCAAsC;QAC7C,WAAW,EAAE;YACX,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,qBAAqB,EAAC;YACnE,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sBAAsB,EAAC;SACzE;QACD,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE;YACL,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC;YAC5B,KAAK,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC;YAC1C,MAAM,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC;YACpC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;YAChC,YAAY,EAAE,CAAC,SAAS,CAAC;SAC1B;KACF,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/scan.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offset-preserving text helpers shared by the file checkers (mockup check,
|
|
3
|
+
* doctor). They scan with regexes over masked source rather than parse, which
|
|
4
|
+
* keeps the CLI free of runtime dependencies — it runs under npx at session
|
|
5
|
+
* start, where every dependency is install time.
|
|
6
|
+
*/
|
|
7
|
+
/** 1-based line number of an offset. */
|
|
8
|
+
export declare function lineOf(source: string, index: number): number;
|
|
9
|
+
/**
|
|
10
|
+
* Blank out comments, keeping offsets, so prose that mentions a setting
|
|
11
|
+
* ("never set runtimeInjection: true") is never read as the setting.
|
|
12
|
+
* `line` also masks `//` comments (JS/TS); CSS has only block comments.
|
|
13
|
+
* String literals are skipped over, not masked, so a `//` inside a URL
|
|
14
|
+
* survives while the string's own content stays matchable.
|
|
15
|
+
*/
|
|
16
|
+
export declare function maskComments(source: string, { line }: {
|
|
17
|
+
line: boolean;
|
|
18
|
+
}): string;
|
|
19
|
+
//# sourceMappingURL=scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wCAAwC;AACxC,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI5D;AAID;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAC,IAAI,EAAC,EAAE;IAAC,IAAI,EAAE,OAAO,CAAA;CAAC,GAAG,MAAM,CAO5E"}
|
package/dist/scan.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offset-preserving text helpers shared by the file checkers (mockup check,
|
|
3
|
+
* doctor). They scan with regexes over masked source rather than parse, which
|
|
4
|
+
* keeps the CLI free of runtime dependencies — it runs under npx at session
|
|
5
|
+
* start, where every dependency is install time.
|
|
6
|
+
*/
|
|
7
|
+
/** 1-based line number of an offset. */
|
|
8
|
+
export function lineOf(source, index) {
|
|
9
|
+
let line = 1;
|
|
10
|
+
for (let i = 0; i < index && i < source.length; i++)
|
|
11
|
+
if (source[i] === '\n')
|
|
12
|
+
line++;
|
|
13
|
+
return line;
|
|
14
|
+
}
|
|
15
|
+
const blank = (text) => text.replace(/[^\n]/g, ' ');
|
|
16
|
+
/**
|
|
17
|
+
* Blank out comments, keeping offsets, so prose that mentions a setting
|
|
18
|
+
* ("never set runtimeInjection: true") is never read as the setting.
|
|
19
|
+
* `line` also masks `//` comments (JS/TS); CSS has only block comments.
|
|
20
|
+
* String literals are skipped over, not masked, so a `//` inside a URL
|
|
21
|
+
* survives while the string's own content stays matchable.
|
|
22
|
+
*/
|
|
23
|
+
export function maskComments(source, { line }) {
|
|
24
|
+
const re = line
|
|
25
|
+
? /("(?:\\.|[^"\\\n])*"|'(?:\\.|[^'\\\n])*'|`(?:\\.|[^`\\])*`)|\/\*[\s\S]*?\*\/|\/\/[^\n]*/g
|
|
26
|
+
: /("(?:\\.|[^"\\\n])*"|'(?:\\.|[^'\\\n])*')|\/\*[\s\S]*?\*\//g;
|
|
27
|
+
return source.replace(re, (match, literal) => literal === undefined ? blank(match) : match);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=scan.js.map
|
package/dist/scan.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wCAAwC;AACxC,MAAM,UAAU,MAAM,CAAC,MAAc,EAAE,KAAa;IAClD,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,IAAI,EAAE,CAAA;IACnF,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;AAE3D;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,EAAC,IAAI,EAAkB;IAClE,MAAM,EAAE,GAAG,IAAI;QACb,CAAC,CAAC,0FAA0F;QAC5F,CAAC,CAAC,6DAA6D,CAAA;IACjE,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE,CAC/D,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAC7C,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@duro-app/cli",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Machine-queryable docs for the Duro design system: components, props, recipes, tokens and rules as CLI output, JSON, or an MCP server.",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"@modelcontextprotocol/sdk": ">=1.0.0",
|
|
48
|
-
"@duro-app/ui": "^3.
|
|
48
|
+
"@duro-app/ui": "^3.4.0"
|
|
49
49
|
},
|
|
50
50
|
"peerDependenciesMeta": {
|
|
51
51
|
"@duro-app/ui": {
|
|
@@ -60,9 +60,9 @@
|
|
|
60
60
|
"@types/node": "^24.0.0",
|
|
61
61
|
"ts-morph": "^26.0.0",
|
|
62
62
|
"typescript": "^5.7.0",
|
|
63
|
-
"@duro-app/eslint-plugin": "^3.
|
|
64
|
-
"@duro-app/
|
|
65
|
-
"@duro-app/
|
|
63
|
+
"@duro-app/eslint-plugin": "^3.4.0",
|
|
64
|
+
"@duro-app/ui": "^3.4.0",
|
|
65
|
+
"@duro-app/tokens": "^3.4.0"
|
|
66
66
|
},
|
|
67
67
|
"scripts": {
|
|
68
68
|
"registry": "node scripts/build-registry.mjs",
|