@stag-build/phonebook 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -1
- package/dist/cli.js +22 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts +21 -2
- package/dist/commands/init.js +33 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/engines/android.d.ts +54 -0
- package/dist/engines/android.js +152 -6
- package/dist/engines/android.js.map +1 -1
- package/dist/engines/ios.d.ts +53 -4
- package/dist/engines/ios.js +142 -27
- package/dist/engines/ios.js.map +1 -1
- package/dist/errors.js +12 -1
- package/dist/errors.js.map +1 -1
- package/dist/ios/snapshotTestClass.d.ts +44 -0
- package/dist/ios/snapshotTestClass.js +115 -0
- package/dist/ios/snapshotTestClass.js.map +1 -1
- package/dist/ios/unrendered.d.ts +38 -0
- package/dist/ios/unrendered.js +92 -0
- package/dist/ios/unrendered.js.map +1 -0
- package/dist/manifest.d.ts +23 -2
- package/dist/manifest.js +58 -0
- package/dist/manifest.js.map +1 -1
- package/dist/mcp/server.d.ts +28 -0
- package/dist/mcp/server.js +232 -11
- package/dist/mcp/server.js.map +1 -1
- package/dist/png.d.ts +18 -0
- package/dist/png.js +44 -0
- package/dist/png.js.map +1 -0
- package/dist/scan/android.js +142 -16
- package/dist/scan/android.js.map +1 -1
- package/dist/scan/gaps.d.ts +52 -0
- package/dist/scan/gaps.js +169 -0
- package/dist/scan/gaps.js.map +1 -0
- package/dist/scan/ios.d.ts +44 -0
- package/dist/scan/ios.js +445 -41
- package/dist/scan/ios.js.map +1 -1
- package/dist/scan/scope.d.ts +30 -0
- package/dist/scan/scope.js +208 -0
- package/dist/scan/scope.js.map +1 -0
- package/dist/scan/stats.d.ts +12 -0
- package/dist/scan/stats.js +24 -0
- package/dist/scan/stats.js.map +1 -0
- package/dist/scan/types.d.ts +87 -1
- package/dist/site/build.js +0 -0
- package/dist/site/build.js.map +1 -1
- package/package.json +1 -1
package/dist/mcp/server.js
CHANGED
|
@@ -7,8 +7,10 @@ import { z } from 'zod';
|
|
|
7
7
|
import { loadConfig } from '../config.js';
|
|
8
8
|
import { collectDoctorChecks } from '../commands/doctor.js';
|
|
9
9
|
import { generateAndroid } from '../engines/android.js';
|
|
10
|
-
import { generateIos } from '../engines/ios.js';
|
|
10
|
+
import { generateIos, IncompleteRenderError } from '../engines/ios.js';
|
|
11
|
+
import { explainFailedPreviews, summarizeIncompleteRender } from '../ios/unrendered.js';
|
|
11
12
|
import { buildSite } from '../site/build.js';
|
|
13
|
+
import { changedFiles, scopeReport } from '../scan/scope.js';
|
|
12
14
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
15
|
async function readPackageVersion() {
|
|
14
16
|
try {
|
|
@@ -26,22 +28,189 @@ function errorResult(message) {
|
|
|
26
28
|
function textResult(text) {
|
|
27
29
|
return { content: [{ type: 'text', text }] };
|
|
28
30
|
}
|
|
29
|
-
|
|
31
|
+
/**
|
|
32
|
+
* A requested file that declares no previews renders nothing — on Android,
|
|
33
|
+
* narrowing the recording task to a `--tests` pattern for it would otherwise
|
|
34
|
+
* fail the whole build ("no tests found for given includes") rather than just
|
|
35
|
+
* recording nothing there. `isFailOnNoMatchingTests = false` in the project's
|
|
36
|
+
* own Gradle setup prevents the crash; this is the proactive half, telling
|
|
37
|
+
* the agent *before* the run that a file it asked for has nothing to show,
|
|
38
|
+
* instead of leaving it to infer that from an empty manifest.
|
|
39
|
+
*
|
|
40
|
+
* Best-effort: a scan failure here must never block the generate it's
|
|
41
|
+
* warning about, so errors are swallowed and reported as no warning.
|
|
42
|
+
*/
|
|
43
|
+
async function warnAboutPreviewlessFiles(config, projectDir, requested) {
|
|
44
|
+
let report;
|
|
45
|
+
try {
|
|
46
|
+
if (config.platform === 'android') {
|
|
47
|
+
const { scanAndroid } = await import('../scan/android.js');
|
|
48
|
+
report = await scanAndroid(projectDir, config.android?.modules ?? [':app']);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const { scanIos } = await import('../scan/ios.js');
|
|
52
|
+
report = await scanIos(projectDir);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return '';
|
|
57
|
+
}
|
|
58
|
+
const covered = new Set();
|
|
59
|
+
for (const c of report.components) {
|
|
60
|
+
if (c.previews.length > 0)
|
|
61
|
+
covered.add(c.file);
|
|
62
|
+
}
|
|
63
|
+
for (const p of report.orphanPreviews)
|
|
64
|
+
covered.add(p.file);
|
|
65
|
+
const empty = requested.filter((f) => !covered.has(f));
|
|
66
|
+
if (empty.length === 0)
|
|
67
|
+
return '';
|
|
68
|
+
return (`warning: no previews found in ${empty.join(', ')} — generate will record nothing for ` +
|
|
69
|
+
`${empty.length === 1 ? 'it' : 'them'}. Run analyze_coverage to see why.\n\n`);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The crash report for a render that did not finish. Only this path needs the
|
|
73
|
+
* source: the test names say which file crashed, and the scan says which
|
|
74
|
+
* previews that file declares. Without a scan the containers still say where to
|
|
75
|
+
* look.
|
|
76
|
+
*/
|
|
77
|
+
async function explainIncompleteRender(error, projectDir) {
|
|
78
|
+
let explained = [...new Set(error.failedPreviews)].map((container) => ({
|
|
79
|
+
container,
|
|
80
|
+
failures: error.failedPreviews.filter((f) => f === container).length,
|
|
81
|
+
unrendered: [],
|
|
82
|
+
}));
|
|
83
|
+
try {
|
|
84
|
+
const { scanIos } = await import('../scan/ios.js');
|
|
85
|
+
const report = await scanIos(projectDir);
|
|
86
|
+
const previews = [...report.components.flatMap((c) => c.previews), ...report.orphanPreviews];
|
|
87
|
+
explained = explainFailedPreviews(error.failedPreviews, error.manifest.entries, previews);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// The containers alone still say where to look.
|
|
91
|
+
}
|
|
92
|
+
return summarizeIncompleteRender(error, explained);
|
|
93
|
+
}
|
|
94
|
+
export function summarizeCoverage(report) {
|
|
30
95
|
const { stats } = report;
|
|
31
96
|
const withoutPreview = stats.components - stats.withPreview;
|
|
32
97
|
const orphanCount = report.orphanPreviews.length;
|
|
33
98
|
return [
|
|
99
|
+
// First, so a reader never mistakes a slice for the project. Every number
|
|
100
|
+
// under it counts the components in scope and no others.
|
|
101
|
+
...(report.scope
|
|
102
|
+
? [
|
|
103
|
+
`Scope: ${stats.components} of ${report.scope.componentsScanned} components, filtered to ${report.scope.paths.join(', ')}`,
|
|
104
|
+
]
|
|
105
|
+
: []),
|
|
34
106
|
`Components: ${stats.components}`,
|
|
35
107
|
`With preview: ${stats.withPreview}`,
|
|
36
108
|
`Without preview: ${withoutPreview}`,
|
|
37
109
|
`With dark preview: ${stats.withDarkPreview}`,
|
|
110
|
+
`Components with missing previews: ${stats.componentsWithGaps}`,
|
|
111
|
+
report.extraLocales.length > 0
|
|
112
|
+
? `Localizations beyond the development language: ${report.extraLocales.join(', ')}`
|
|
113
|
+
: 'Localizations beyond the development language: none',
|
|
38
114
|
orphanCount > 0
|
|
39
115
|
? `Orphan previews (could not be matched to a component in the same file): ${orphanCount}`
|
|
40
116
|
: `Orphan previews (unmatched to a component): ${orphanCount}`,
|
|
41
117
|
].join('\n');
|
|
42
118
|
}
|
|
119
|
+
const REACH_LIST_CAP = 25;
|
|
120
|
+
/**
|
|
121
|
+
* What a scoped report would otherwise hide: previews and views outside the
|
|
122
|
+
* scope that show a component inside it.
|
|
123
|
+
*
|
|
124
|
+
* Kept apart from the gaps above, and worded differently, because they are not
|
|
125
|
+
* the same kind of claim. A gap is a defect with a fix. The first list here is
|
|
126
|
+
* a fact — these previews show what you changed, and only their source says
|
|
127
|
+
* whether that matters. The second is a question: nothing renders that context
|
|
128
|
+
* at all, and whether it deserves a preview is a judgment about the product
|
|
129
|
+
* rather than about the code.
|
|
130
|
+
*/
|
|
131
|
+
export function summarizeReach(report) {
|
|
132
|
+
const shown = report.scope?.previewsOfWhatChanged ?? [];
|
|
133
|
+
const ask = report.scope?.uncoveredUsesOfWhatChanged ?? [];
|
|
134
|
+
if (shown.length === 0 && ask.length === 0)
|
|
135
|
+
return '';
|
|
136
|
+
const lines = [];
|
|
137
|
+
if (shown.length > 0) {
|
|
138
|
+
lines.push(`Previews elsewhere that render what you changed (${shown.length})`, 'Outside the files you named, so they are not in the report above. A preview reaches', 'what you changed through the views it renders, so its own body may not name it. Read', 'each one and decide whether it still shows the right thing.');
|
|
139
|
+
for (const p of shown.slice(0, REACH_LIST_CAP)) {
|
|
140
|
+
lines.push(` ${p.file}:${p.line} "${p.name}" renders ${p.renders.join(', ')}`);
|
|
141
|
+
}
|
|
142
|
+
if (shown.length > REACH_LIST_CAP)
|
|
143
|
+
lines.push(` ... and ${shown.length - REACH_LIST_CAP} more (see JSON)`);
|
|
144
|
+
}
|
|
145
|
+
if (ask.length > 0) {
|
|
146
|
+
if (lines.length > 0)
|
|
147
|
+
lines.push('');
|
|
148
|
+
lines.push(`Views that show what you changed, where no preview does (${ask.length})`, 'Your change never reaches a screenshot in these contexts. Whether it should is the', 'designer\'s call, not yours: end your turn by asking, with these as the options.');
|
|
149
|
+
for (const u of ask.slice(0, REACH_LIST_CAP)) {
|
|
150
|
+
if (u.reason === 'no-preview') {
|
|
151
|
+
lines.push(` ${u.file}:${u.line} ${u.component} renders ${u.uses.join(', ')} and has no preview`);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
// Two lines, because a condition the reader cannot act on is not worth the
|
|
155
|
+
// one. The first says what hides the render, the second says which preview
|
|
156
|
+
// could stop hiding it.
|
|
157
|
+
lines.push(` ${u.file}:${u.line} ${u.component} renders ${u.uses.join(', ')} only inside \`${u.guard}\``);
|
|
158
|
+
const previews = u.previews ?? [];
|
|
159
|
+
const where = previews.map((p) => `${p.file}:${p.line}`).join(', ');
|
|
160
|
+
lines.push(previews.length === 1
|
|
161
|
+
? ` its preview (${where}) does not set that`
|
|
162
|
+
: ` none of its ${previews.length} previews set that (${where})`);
|
|
163
|
+
}
|
|
164
|
+
if (ask.length > REACH_LIST_CAP)
|
|
165
|
+
lines.push(` ... and ${ask.length - REACH_LIST_CAP} more (see JSON)`);
|
|
166
|
+
}
|
|
167
|
+
return lines.join('\n');
|
|
168
|
+
}
|
|
43
169
|
const HINT_LIST_CAP = 40;
|
|
44
|
-
|
|
170
|
+
const GAP_COMPONENT_CAP = 60;
|
|
171
|
+
/**
|
|
172
|
+
* What each component is missing, which is the half `summarizeHints` cannot
|
|
173
|
+
* see: a hint needs a preview to exist before it can say anything about it.
|
|
174
|
+
*
|
|
175
|
+
* Grouped by component rather than listed flat. A flat list sorted by severity
|
|
176
|
+
* put every "has no preview" first, and on a repository with a hundred of them
|
|
177
|
+
* the cap fell before a single state gap was reached — the specific, useful
|
|
178
|
+
* half of the report never reached the reader. Components carrying the most
|
|
179
|
+
* missing states come first for the same reason.
|
|
180
|
+
*
|
|
181
|
+
* It reports; it never edits.
|
|
182
|
+
*/
|
|
183
|
+
export function summarizeGaps(report) {
|
|
184
|
+
const withGaps = report.components.filter((c) => (c.gaps ?? []).length > 0);
|
|
185
|
+
const total = withGaps.reduce((sum, c) => sum + (c.gaps ?? []).length, 0);
|
|
186
|
+
if (total === 0) {
|
|
187
|
+
return 'Missing previews (0)';
|
|
188
|
+
}
|
|
189
|
+
const warnings = (component) => (component.gaps ?? []).filter((g) => g.severity === 'warning').length;
|
|
190
|
+
const ordered = [...withGaps].sort((a, b) => warnings(b) - warnings(a) ||
|
|
191
|
+
(b.gaps ?? []).length - (a.gaps ?? []).length ||
|
|
192
|
+
a.file.localeCompare(b.file) ||
|
|
193
|
+
a.line - b.line);
|
|
194
|
+
const shown = ordered.slice(0, GAP_COMPONENT_CAP);
|
|
195
|
+
const blocks = shown.map((component) => {
|
|
196
|
+
const gaps = component.gaps ?? [];
|
|
197
|
+
const header = `${component.file}:${component.line} ${component.name} (${gaps.length} missing)`;
|
|
198
|
+
const lines = gaps.map((g) => ` [${g.rule}] ${g.message} -> ${g.suggestion}`);
|
|
199
|
+
return [header, ...lines].join('\n');
|
|
200
|
+
});
|
|
201
|
+
const remaining = ordered.length - shown.length;
|
|
202
|
+
if (remaining > 0) {
|
|
203
|
+
blocks.push(`... and ${remaining} more component${remaining === 1 ? '' : 's'} (see JSON)`);
|
|
204
|
+
}
|
|
205
|
+
return [
|
|
206
|
+
`Missing previews (${total} across ${withGaps.length} component${withGaps.length === 1 ? '' : 's'})`,
|
|
207
|
+
'',
|
|
208
|
+
...blocks,
|
|
209
|
+
'',
|
|
210
|
+
'Read each component before writing previews: the states above are inferred from its parameters, and only its source says which of them are worth a preview. Call get_preview_guidance for the naming convention and a template.',
|
|
211
|
+
].join('\n');
|
|
212
|
+
}
|
|
213
|
+
export function summarizeHints(report) {
|
|
45
214
|
const allPreviews = [
|
|
46
215
|
...report.components.flatMap((c) => c.previews),
|
|
47
216
|
...report.orphanPreviews,
|
|
@@ -76,6 +245,8 @@ Canvas size (Android): preview dimensions come only from the @Preview annotation
|
|
|
76
245
|
|
|
77
246
|
Canvas size (iOS): preview dimensions come from traits: (e.g. .fixedLayout(width:height:)) or .previewDevice on the #Preview, not from a frame modifier in the view body.
|
|
78
247
|
|
|
248
|
+
Environment (iOS): a preview must supply every object the view tree reads with @Environment(SomeType.self). SwiftUI has no default for one, so an @Observable that is missing traps the moment the body reads it — the preview does not render wrong, it crashes. Read the view's own @Environment declarations, and its subviews', and pass each one: .environment(SomeType.shared), .environment(SomeType()), or the project's own preview helper if it has one (a \`func ...() -> some View\` extension that chains .environment calls). analyze_coverage reports the direct ones it can see as \`env-missing\`; a subview's needs are yours to find. The keypath form, @Environment(\\.openURL), always has a value and never needs supplying.
|
|
249
|
+
|
|
79
250
|
Snapshot test class (iOS): the SnapshotTest subclass that records previews must live in the app-hosted unit-test target's own folder (the target linking SnapshottingTests, hosted via TEST_HOST/BUNDLE_LOADER) — run \`phonebook doctor\` to see which target and where. In a project using Xcode's filesystem-synchronized groups, just creating the file in that folder is enough (Xcode picks it up automatically); \`phonebook init --write-snapshot-class\` can do this for you when that condition holds.`;
|
|
80
251
|
function androidTemplate(component, states) {
|
|
81
252
|
const name = component || 'Component';
|
|
@@ -114,11 +285,19 @@ export async function runMcpServer() {
|
|
|
114
285
|
const version = await readPackageVersion();
|
|
115
286
|
const server = new McpServer({ name: 'phonebook', version });
|
|
116
287
|
server.registerTool('analyze_coverage', {
|
|
117
|
-
description: 'Scan the codebase for UI components and the previews that cover them:
|
|
288
|
+
description: 'Scan the codebase for UI components and the previews that cover them, and report what each component is missing: states implied by its parameters, environment objects no preview supplies, dark theme, large text, and localization when the project ships one. Read-only — it reports the gaps, it does not write previews. After editing, pass changed: true (or paths) to hear only about what you touched; the whole project is always scanned either way, so the answers stay correct.',
|
|
118
289
|
inputSchema: {
|
|
119
290
|
dir: z.string().default('.').describe('Project directory containing phonebook.config.json'),
|
|
291
|
+
paths: z
|
|
292
|
+
.array(z.string())
|
|
293
|
+
.optional()
|
|
294
|
+
.describe('Report only components declared in these files or directories, relative to the project directory. The whole project is still scanned.'),
|
|
295
|
+
changed: z
|
|
296
|
+
.boolean()
|
|
297
|
+
.optional()
|
|
298
|
+
.describe('Report only components in files with uncommitted git changes — what you just edited. Ignored outside a git repository. Combined with paths when both are given.'),
|
|
120
299
|
},
|
|
121
|
-
}, async ({ dir }) => {
|
|
300
|
+
}, async ({ dir, paths, changed }) => {
|
|
122
301
|
let projectDir;
|
|
123
302
|
let platform;
|
|
124
303
|
let modules;
|
|
@@ -145,9 +324,23 @@ export async function runMcpServer() {
|
|
|
145
324
|
catch (err) {
|
|
146
325
|
return errorResult(`Failed to analyze coverage: ${err.message}`);
|
|
147
326
|
}
|
|
327
|
+
// Scoping narrows the report, never the scan: which types are enums,
|
|
328
|
+
// what the project's preview helper supplies and which locales ship are
|
|
329
|
+
// facts about the project, and a scan of the changed files alone would
|
|
330
|
+
// get all three wrong.
|
|
331
|
+
const scope = [...(paths ?? []), ...(changed ? await changedFiles(projectDir) : [])];
|
|
332
|
+
if (scope.length > 0) {
|
|
333
|
+
const scoped = scopeReport(report, scope);
|
|
334
|
+
if (scoped.components.length === 0) {
|
|
335
|
+
return textResult(`No components found in ${scope.join(', ')}. The scan found ${report.components.length} in the project; either nothing there declares a component, or the paths are not relative to ${projectDir}.`);
|
|
336
|
+
}
|
|
337
|
+
report = scoped;
|
|
338
|
+
}
|
|
148
339
|
const summary = summarizeCoverage(report);
|
|
340
|
+
const gaps = summarizeGaps(report);
|
|
149
341
|
const hints = summarizeHints(report);
|
|
150
|
-
|
|
342
|
+
const reach = summarizeReach(report);
|
|
343
|
+
return textResult([summary, gaps, hints, reach, JSON.stringify(report, null, 2)].filter((s) => s !== '').join('\n\n'));
|
|
151
344
|
});
|
|
152
345
|
server.registerTool('check_setup', {
|
|
153
346
|
description: "Check that the project is correctly set up for `phonebook generate` (same checks as `phonebook doctor`): libraries wired, test target present, JDK/Xcode/simulator available.",
|
|
@@ -174,28 +367,56 @@ export async function runMcpServer() {
|
|
|
174
367
|
return textResult(text);
|
|
175
368
|
});
|
|
176
369
|
server.registerTool('run_generate', {
|
|
177
|
-
description: 'Run the platform engine to render all previews and produce a bundle (manifest + images), same as `phonebook generate`.'
|
|
370
|
+
description: 'Run the platform engine to render all previews and produce a bundle (manifest + images), same as `phonebook generate`. ' +
|
|
371
|
+
'When previews crash, keeps what rendered and says which previews did not, by file and line. ' +
|
|
372
|
+
'Pass changed or files to render only the previews declared in those files, for a faster loop while iterating.',
|
|
178
373
|
inputSchema: {
|
|
179
374
|
dir: z.string().default('.').describe('Project directory containing phonebook.config.json'),
|
|
375
|
+
changed: z
|
|
376
|
+
.boolean()
|
|
377
|
+
.optional()
|
|
378
|
+
.describe('Render only previews declared in files with uncommitted git changes. Ignored outside a git repository.'),
|
|
379
|
+
files: z
|
|
380
|
+
.array(z.string())
|
|
381
|
+
.optional()
|
|
382
|
+
.describe('Render only previews declared in these files, relative to the project directory.'),
|
|
180
383
|
},
|
|
181
|
-
}, async ({ dir }) => {
|
|
384
|
+
}, async ({ dir, changed, files }) => {
|
|
385
|
+
if (changed && files) {
|
|
386
|
+
return errorResult('changed and files cannot be combined: pass one or the other.');
|
|
387
|
+
}
|
|
182
388
|
let projectDir;
|
|
183
389
|
try {
|
|
184
390
|
const loaded = await loadConfig(dir);
|
|
185
391
|
projectDir = loaded.projectDir;
|
|
186
392
|
const outputDir = resolve(projectDir, loaded.config.output ?? 'phonebook-out');
|
|
393
|
+
const requested = files ?? (changed ? await changedFiles(projectDir) : undefined);
|
|
394
|
+
const warning = requested?.length
|
|
395
|
+
? await warnAboutPreviewlessFiles(loaded.config, projectDir, requested)
|
|
396
|
+
: '';
|
|
187
397
|
const manifest = loaded.config.platform === 'android'
|
|
188
|
-
? await generateAndroid(loaded.config, projectDir, outputDir, {
|
|
189
|
-
|
|
398
|
+
? await generateAndroid(loaded.config, projectDir, outputDir, {
|
|
399
|
+
quiet: true,
|
|
400
|
+
...(changed ? { changedOnly: true } : {}),
|
|
401
|
+
...(files ? { files } : {}),
|
|
402
|
+
})
|
|
403
|
+
: await generateIos(loaded.config, projectDir, outputDir, {
|
|
404
|
+
quiet: true,
|
|
405
|
+
...(changed ? { changedOnly: true } : {}),
|
|
406
|
+
...(files ? { files } : {}),
|
|
407
|
+
});
|
|
190
408
|
const componentStates = manifest.entries.map((e) => `${e.component}/${e.state}`).sort();
|
|
191
409
|
const text = [
|
|
192
|
-
|
|
410
|
+
`${warning}Recorded ${manifest.entries.length} previews -> ${outputDir}`,
|
|
193
411
|
'',
|
|
194
412
|
...componentStates,
|
|
195
413
|
].join('\n');
|
|
196
414
|
return textResult(text);
|
|
197
415
|
}
|
|
198
416
|
catch (err) {
|
|
417
|
+
if (err instanceof IncompleteRenderError) {
|
|
418
|
+
return errorResult(await explainIncompleteRender(err, projectDir));
|
|
419
|
+
}
|
|
199
420
|
return errorResult(`${err.message}\nRun the check_setup tool (or \`phonebook doctor\`) to diagnose the project setup.`);
|
|
200
421
|
}
|
|
201
422
|
});
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
package/dist/png.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface PngSize {
|
|
2
|
+
width: number;
|
|
3
|
+
height: number;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Read a PNG's pixel dimensions from its IHDR header.
|
|
7
|
+
*
|
|
8
|
+
* A gallery cannot lay out a screenshot it has no size for: real preview
|
|
9
|
+
* output ranges from a 161x79 badge to a 1206x2622 full screen, and a
|
|
10
|
+
* consumer that does not know which is which either reflows as images load or
|
|
11
|
+
* reserves the wrong space. The dimensions are the first 24 bytes of the file,
|
|
12
|
+
* so this reads the header rather than decoding the image.
|
|
13
|
+
*
|
|
14
|
+
* Returns `undefined` for anything that is not a readable PNG. Size is
|
|
15
|
+
* optional in the manifest, and one odd file is not a reason to fail a whole
|
|
16
|
+
* `generate`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function readPngSize(path: string): Promise<PngSize | undefined>;
|
package/dist/png.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { open } from 'node:fs/promises';
|
|
2
|
+
/** `\x89PNG\r\n\x1a\n` — the 8-byte signature every PNG starts with. */
|
|
3
|
+
const PNG_SIGNATURE = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
|
|
4
|
+
/** Signature (8) + IHDR length and type (8) + width and height (8). */
|
|
5
|
+
const HEADER_BYTES = 24;
|
|
6
|
+
/**
|
|
7
|
+
* Read a PNG's pixel dimensions from its IHDR header.
|
|
8
|
+
*
|
|
9
|
+
* A gallery cannot lay out a screenshot it has no size for: real preview
|
|
10
|
+
* output ranges from a 161x79 badge to a 1206x2622 full screen, and a
|
|
11
|
+
* consumer that does not know which is which either reflows as images load or
|
|
12
|
+
* reserves the wrong space. The dimensions are the first 24 bytes of the file,
|
|
13
|
+
* so this reads the header rather than decoding the image.
|
|
14
|
+
*
|
|
15
|
+
* Returns `undefined` for anything that is not a readable PNG. Size is
|
|
16
|
+
* optional in the manifest, and one odd file is not a reason to fail a whole
|
|
17
|
+
* `generate`.
|
|
18
|
+
*/
|
|
19
|
+
export async function readPngSize(path) {
|
|
20
|
+
let handle;
|
|
21
|
+
try {
|
|
22
|
+
handle = await open(path, 'r');
|
|
23
|
+
const buffer = Buffer.alloc(HEADER_BYTES);
|
|
24
|
+
const { bytesRead } = await handle.read(buffer, 0, HEADER_BYTES, 0);
|
|
25
|
+
if (bytesRead < HEADER_BYTES)
|
|
26
|
+
return undefined;
|
|
27
|
+
if (!buffer.subarray(0, 8).equals(PNG_SIGNATURE))
|
|
28
|
+
return undefined;
|
|
29
|
+
if (buffer.subarray(12, 16).toString('latin1') !== 'IHDR')
|
|
30
|
+
return undefined;
|
|
31
|
+
const width = buffer.readUInt32BE(16);
|
|
32
|
+
const height = buffer.readUInt32BE(20);
|
|
33
|
+
if (width === 0 || height === 0)
|
|
34
|
+
return undefined;
|
|
35
|
+
return { width, height };
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
await handle?.close();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=png.js.map
|
package/dist/png.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"png.js","sourceRoot":"","sources":["../src/png.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,wEAAwE;AACxE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEpF,uEAAuE;AACvE,MAAM,YAAY,GAAG,EAAE,CAAC;AAOxB;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QACpE,IAAI,SAAS,GAAG,YAAY;YAAE,OAAO,SAAS,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;YAAE,OAAO,SAAS,CAAC;QACnE,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,MAAM;YAAE,OAAO,SAAS,CAAC;QAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAClD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
|