@stag-build/phonebook 0.1.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.
Files changed (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +283 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +82 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/doctor.d.ts +33 -0
  7. package/dist/commands/doctor.js +690 -0
  8. package/dist/commands/doctor.js.map +1 -0
  9. package/dist/commands/init.d.ts +27 -0
  10. package/dist/commands/init.js +415 -0
  11. package/dist/commands/init.js.map +1 -0
  12. package/dist/config.d.ts +33 -0
  13. package/dist/config.js +21 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/engines/android.d.ts +70 -0
  16. package/dist/engines/android.js +265 -0
  17. package/dist/engines/android.js.map +1 -0
  18. package/dist/engines/git.d.ts +4 -0
  19. package/dist/engines/git.js +13 -0
  20. package/dist/engines/git.js.map +1 -0
  21. package/dist/engines/ios.d.ts +55 -0
  22. package/dist/engines/ios.js +195 -0
  23. package/dist/engines/ios.js.map +1 -0
  24. package/dist/errors.d.ts +12 -0
  25. package/dist/errors.js +69 -0
  26. package/dist/errors.js.map +1 -0
  27. package/dist/gradle/catalog.d.ts +110 -0
  28. package/dist/gradle/catalog.js +413 -0
  29. package/dist/gradle/catalog.js.map +1 -0
  30. package/dist/ios/snapshotTestClass.d.ts +59 -0
  31. package/dist/ios/snapshotTestClass.js +195 -0
  32. package/dist/ios/snapshotTestClass.js.map +1 -0
  33. package/dist/manifest.d.ts +32 -0
  34. package/dist/manifest.js +23 -0
  35. package/dist/manifest.js.map +1 -0
  36. package/dist/mcp/server.d.ts +1 -0
  37. package/dist/mcp/server.js +226 -0
  38. package/dist/mcp/server.js.map +1 -0
  39. package/dist/naming.d.ts +18 -0
  40. package/dist/naming.js +34 -0
  41. package/dist/naming.js.map +1 -0
  42. package/dist/scan/android.d.ts +7 -0
  43. package/dist/scan/android.js +222 -0
  44. package/dist/scan/android.js.map +1 -0
  45. package/dist/scan/hints.d.ts +25 -0
  46. package/dist/scan/hints.js +338 -0
  47. package/dist/scan/hints.js.map +1 -0
  48. package/dist/scan/ios.d.ts +7 -0
  49. package/dist/scan/ios.js +201 -0
  50. package/dist/scan/ios.js.map +1 -0
  51. package/dist/scan/types.d.ts +52 -0
  52. package/dist/scan/types.js +7 -0
  53. package/dist/scan/types.js.map +1 -0
  54. package/dist/site/build.d.ts +17 -0
  55. package/dist/site/build.js +0 -0
  56. package/dist/site/build.js.map +1 -0
  57. package/dist/versions.d.ts +71 -0
  58. package/dist/versions.js +334 -0
  59. package/dist/versions.js.map +1 -0
  60. package/package.json +54 -0
@@ -0,0 +1,334 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { inflateRawSync } from 'node:zlib';
4
+ /** Parses a "X.Y[.Z]" version string. */
5
+ export function parseKotlinVersion(s) {
6
+ const m = s.trim().match(/^(\d+)\.(\d+)(?:\.(\d+))?/);
7
+ if (!m)
8
+ return undefined;
9
+ return { major: Number(m[1]), minor: Number(m[2]), patch: m[3] !== undefined ? Number(m[3]) : 0 };
10
+ }
11
+ async function readTextOrUndefined(path) {
12
+ try {
13
+ return await readFile(path, 'utf8');
14
+ }
15
+ catch {
16
+ return undefined;
17
+ }
18
+ }
19
+ /**
20
+ * Patterns for the Kotlin plugin version in a Gradle build/settings file, in the
21
+ * forms observed in real projects (Kotlin DSL and Groovy DSL alike). The first
22
+ * pattern that matches wins.
23
+ */
24
+ const GRADLE_KOTLIN_PATTERNS = [
25
+ /kotlin\(\s*["']android["']\s*\)\s+version\s+["']([0-9][0-9.]*)["']/,
26
+ /id\(\s*["']org\.jetbrains\.kotlin\.android["']\s*\)\s+version\s+["']([0-9][0-9.]*)["']/,
27
+ /id\s+["']org\.jetbrains\.kotlin\.android["']\s+version\s+["']([0-9][0-9.]*)["']/,
28
+ /ext\.kotlin_version\s*=\s*["']([0-9][0-9.]*)["']/,
29
+ /(?<!ext\.)\bkotlin_version\s*=\s*["']([0-9][0-9.]*)["']/,
30
+ ];
31
+ async function detectFromGradleFile(path) {
32
+ const text = await readTextOrUndefined(path);
33
+ if (!text)
34
+ return undefined;
35
+ for (const pattern of GRADLE_KOTLIN_PATTERNS) {
36
+ const m = text.match(pattern);
37
+ if (m)
38
+ return parseKotlinVersion(m[1]);
39
+ }
40
+ return undefined;
41
+ }
42
+ async function detectFromVersionCatalog(path) {
43
+ const text = await readTextOrUndefined(path);
44
+ if (!text)
45
+ return undefined;
46
+ const section = text.match(/\[versions\]([\s\S]*?)(?:\n\[|$)/);
47
+ const body = section ? section[1] : text;
48
+ // Matches "kotlin = "X.Y.Z"" as well as "kotlin-something = "X.Y.Z"" (aliases
49
+ // used by e.g. `libs.plugins.kotlin.android`), but not "kotlinx-..." keys.
50
+ const m = body.match(/^\s*kotlin(?:[-_][A-Za-z0-9_-]*)?\s*=\s*"([0-9]+\.[0-9]+(?:\.[0-9]+)?)"/m);
51
+ if (!m)
52
+ return undefined;
53
+ return parseKotlinVersion(m[1]);
54
+ }
55
+ /**
56
+ * Detects the project's Kotlin (compiler) version by searching, in order:
57
+ * gradle/libs.versions.toml, root build.gradle.kts/build.gradle, and
58
+ * settings.gradle.kts/settings.gradle (pluginManagement plugins block).
59
+ * Returns the first hit, with `source` set to the file it came from
60
+ * (relative to `projectDir`).
61
+ */
62
+ export async function detectKotlinVersion(projectDir) {
63
+ const tomlRel = join('gradle', 'libs.versions.toml');
64
+ const tomlVersion = await detectFromVersionCatalog(join(projectDir, tomlRel));
65
+ if (tomlVersion)
66
+ return { version: tomlVersion, source: tomlRel };
67
+ for (const rel of ['build.gradle.kts', 'build.gradle']) {
68
+ const version = await detectFromGradleFile(join(projectDir, rel));
69
+ if (version)
70
+ return { version, source: rel };
71
+ }
72
+ for (const rel of ['settings.gradle.kts', 'settings.gradle']) {
73
+ const version = await detectFromGradleFile(join(projectDir, rel));
74
+ if (version)
75
+ return { version, source: rel };
76
+ }
77
+ return undefined;
78
+ }
79
+ /**
80
+ * Whether a Kotlin compiler `K.M.*` can read metadata written by a compiler
81
+ * whose binary metadata version is `(a, b[, c])`: (a, b) <= (K, M+1).
82
+ * Special case: metadata (1, 9, 9999) means "pinned to language version 1.9"
83
+ * and is readable by any compiler >= 1.9.
84
+ */
85
+ export function canRead(compiler, metadata) {
86
+ const [a, b, c] = metadata;
87
+ if (a === 1 && b === 9 && c === 9999) {
88
+ return compiler.major > 1 || (compiler.major === 1 && compiler.minor >= 9);
89
+ }
90
+ if (a !== compiler.major)
91
+ return a < compiler.major;
92
+ return b <= compiler.minor + 1;
93
+ }
94
+ // ---------------------------------------------------------------------------
95
+ // Minimal zip reading (no new dependencies): parse the End Of Central
96
+ // Directory + central directory to locate an entry, then inflate it.
97
+ // ---------------------------------------------------------------------------
98
+ const EOCD_SIGNATURE = 0x06054b50;
99
+ const CENTRAL_DIR_SIGNATURE = 0x02014b50;
100
+ /** Finds and decompresses a single zip entry whose name satisfies `matches`. */
101
+ export function readZipEntry(buf, matches) {
102
+ const maxCommentLen = 65535;
103
+ const searchStart = Math.max(0, buf.length - 22 - maxCommentLen);
104
+ let eocdOffset = -1;
105
+ for (let i = buf.length - 22; i >= searchStart; i--) {
106
+ if (i >= 0 && buf.readUInt32LE(i) === EOCD_SIGNATURE) {
107
+ eocdOffset = i;
108
+ break;
109
+ }
110
+ }
111
+ if (eocdOffset === -1)
112
+ return undefined;
113
+ const totalEntries = buf.readUInt16LE(eocdOffset + 10);
114
+ let offset = buf.readUInt32LE(eocdOffset + 16);
115
+ for (let i = 0; i < totalEntries; i++) {
116
+ if (offset + 46 > buf.length)
117
+ return undefined;
118
+ if (buf.readUInt32LE(offset) !== CENTRAL_DIR_SIGNATURE)
119
+ return undefined;
120
+ const method = buf.readUInt16LE(offset + 10);
121
+ const compSize = buf.readUInt32LE(offset + 20);
122
+ const nameLen = buf.readUInt16LE(offset + 28);
123
+ const extraLen = buf.readUInt16LE(offset + 30);
124
+ const commentLen = buf.readUInt16LE(offset + 32);
125
+ const localHeaderOffset = buf.readUInt32LE(offset + 42);
126
+ const name = buf.toString('utf8', offset + 46, offset + 46 + nameLen);
127
+ if (matches(name)) {
128
+ const localNameLen = buf.readUInt16LE(localHeaderOffset + 26);
129
+ const localExtraLen = buf.readUInt16LE(localHeaderOffset + 28);
130
+ const dataStart = localHeaderOffset + 30 + localNameLen + localExtraLen;
131
+ const compData = buf.subarray(dataStart, dataStart + compSize);
132
+ if (method === 0)
133
+ return Buffer.from(compData);
134
+ if (method === 8)
135
+ return inflateRawSync(compData);
136
+ return undefined;
137
+ }
138
+ offset += 46 + nameLen + extraLen + commentLen;
139
+ }
140
+ return undefined;
141
+ }
142
+ /**
143
+ * Parses a `META-INF/*.kotlin_module` file: a big-endian int32 entry count N,
144
+ * followed by N big-endian int32s making up the metadata version, e.g. (2,3,0).
145
+ */
146
+ function parseKotlinModuleMetadata(buf) {
147
+ if (buf.length < 4)
148
+ return undefined;
149
+ const n = buf.readInt32BE(0);
150
+ if (n <= 0 || buf.length < 4 + n * 4)
151
+ return undefined;
152
+ const nums = [];
153
+ for (let i = 0; i < n; i++)
154
+ nums.push(buf.readInt32BE(4 + i * 4));
155
+ return [nums[0] ?? 0, nums[1] ?? 0, nums[2] ?? 0];
156
+ }
157
+ async function fetchWithTimeout(url, ms = 15000) {
158
+ const controller = new AbortController();
159
+ const timer = setTimeout(() => controller.abort(), ms);
160
+ try {
161
+ return await fetch(url, { signal: controller.signal });
162
+ }
163
+ catch {
164
+ return undefined;
165
+ }
166
+ finally {
167
+ clearTimeout(timer);
168
+ }
169
+ }
170
+ function mavenGroupPath(group) {
171
+ return group.replace(/\./g, '/');
172
+ }
173
+ const metadataCache = new Map();
174
+ /**
175
+ * Fetches an artifact's real Kotlin metadata version straight from its
176
+ * bytecode (not its POM, which can lie): tries the .aar first (containing
177
+ * classes.jar), falling back to a plain .jar on 404.
178
+ */
179
+ export async function fetchKotlinMetadataVersion(group, artifact, version) {
180
+ const key = `${group}:${artifact}:${version}`;
181
+ if (metadataCache.has(key))
182
+ return metadataCache.get(key);
183
+ const result = await fetchKotlinMetadataVersionUncached(group, artifact, version);
184
+ metadataCache.set(key, result);
185
+ return result;
186
+ }
187
+ async function fetchKotlinMetadataVersionUncached(group, artifact, version) {
188
+ const base = `https://repo1.maven.org/maven2/${mavenGroupPath(group)}/${artifact}/${version}/${artifact}-${version}`;
189
+ const aarRes = await fetchWithTimeout(`${base}.aar`);
190
+ if (aarRes && aarRes.ok) {
191
+ const aarBuf = Buffer.from(await aarRes.arrayBuffer());
192
+ const classesJar = readZipEntry(aarBuf, (name) => name === 'classes.jar');
193
+ if (!classesJar)
194
+ return undefined;
195
+ return extractKotlinModuleMetadata(classesJar);
196
+ }
197
+ const jarRes = await fetchWithTimeout(`${base}.jar`);
198
+ if (!jarRes || !jarRes.ok)
199
+ return undefined;
200
+ const jarBuf = Buffer.from(await jarRes.arrayBuffer());
201
+ return extractKotlinModuleMetadata(jarBuf);
202
+ }
203
+ function extractKotlinModuleMetadata(jarBuf) {
204
+ const entry = readZipEntry(jarBuf, (name) => name.startsWith('META-INF/') && name.endsWith('.kotlin_module'));
205
+ if (!entry)
206
+ return undefined;
207
+ return parseKotlinModuleMetadata(entry);
208
+ }
209
+ const versionsCache = new Map();
210
+ /** Lists released (non-alpha/rc) versions of a Maven artifact, oldest first. */
211
+ export async function listMavenVersions(group, artifact) {
212
+ const key = `${group}:${artifact}`;
213
+ const cached = versionsCache.get(key);
214
+ if (cached)
215
+ return cached;
216
+ const url = `https://repo1.maven.org/maven2/${mavenGroupPath(group)}/${artifact}/maven-metadata.xml`;
217
+ const res = await fetchWithTimeout(url);
218
+ let versions = [];
219
+ if (res && res.ok) {
220
+ const text = await res.text();
221
+ versions = [...text.matchAll(/<version>([^<]+)<\/version>/g)]
222
+ .map((m) => m[1])
223
+ .filter((v) => !v.includes('-'));
224
+ }
225
+ versionsCache.set(key, versions);
226
+ return versions;
227
+ }
228
+ /**
229
+ * Known Kotlin-metadata ranges, probed empirically on 2026-08-22 by fetching
230
+ * each artifact's real bytecode (its POM understates Kotlin requirements).
231
+ * Used to skip network probes in resolveMaxCompatible, and as a last resort
232
+ * when the network is unavailable.
233
+ */
234
+ export const FALLBACK = {
235
+ 'io.github.takahirom.roborazzi:roborazzi': [
236
+ { range: ['1.61.0', '1.72.0'], metadata: [2, 3, 0] },
237
+ { range: ['1.50.0', '1.60.0'], metadata: [1, 9, 9999] },
238
+ { range: ['1.44.0', '1.46.1'], metadata: [1, 9, 0] },
239
+ ],
240
+ 'io.github.sergio-sastre.ComposablePreviewScanner:android': [
241
+ // Probed 2026-08-22: android-0.9.3.jar has no .aar (pure JVM artifact);
242
+ // META-INF/android.kotlin_module = (1, 9, 9999) — pinned to language
243
+ // version 1.9, readable by any Kotlin compiler >= 1.9.
244
+ { range: ['0.9.3', '0.9.3'], metadata: [1, 9, 9999] },
245
+ ],
246
+ };
247
+ function compareVersions(a, b) {
248
+ const pa = a.split('.').map(Number);
249
+ const pb = b.split('.').map(Number);
250
+ for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
251
+ const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
252
+ if (diff !== 0)
253
+ return diff;
254
+ }
255
+ return 0;
256
+ }
257
+ /** Looks up an artifact version's Kotlin metadata in the FALLBACK table, if known. */
258
+ export function lookupFallbackMetadata(group, artifact, version) {
259
+ const entries = FALLBACK[`${group}:${artifact}`];
260
+ if (!entries)
261
+ return undefined;
262
+ for (const entry of entries) {
263
+ if (compareVersions(version, entry.range[0]) >= 0 && compareVersions(version, entry.range[1]) <= 0) {
264
+ return entry.metadata;
265
+ }
266
+ }
267
+ return undefined;
268
+ }
269
+ function needsKotlinLabel(metadata) {
270
+ const [a, b, c] = metadata;
271
+ if (a === 1 && b === 9 && c === 9999)
272
+ return '1.9';
273
+ return `${a}.${Math.max(0, b - 1)}`;
274
+ }
275
+ /** Offline fallback path: only FALLBACK's known ranges are available (no version list). */
276
+ function resolveFromFallbackOnly(group, artifact, kotlin) {
277
+ const entries = FALLBACK[`${group}:${artifact}`];
278
+ if (!entries || entries.length === 0)
279
+ return {};
280
+ const byLatest = [...entries].sort((a, b) => compareVersions(b.range[1], a.range[1]));
281
+ const latestEntry = byLatest[0];
282
+ const latest = latestEntry.range[1];
283
+ const latestNeedsKotlin = needsKotlinLabel(latestEntry.metadata);
284
+ let best;
285
+ for (const entry of byLatest) {
286
+ if (canRead(kotlin, entry.metadata)) {
287
+ best = entry.range[1];
288
+ break;
289
+ }
290
+ }
291
+ return { best, latest, latestNeedsKotlin };
292
+ }
293
+ const resolveCache = new Map();
294
+ /**
295
+ * Finds the newest version of `group:artifact` compatible with `kotlin`, by
296
+ * walking released versions from newest to oldest (capped at 15 network
297
+ * probes) checking real Kotlin metadata, seeded by FALLBACK to skip probing
298
+ * known ranges.
299
+ */
300
+ export async function resolveMaxCompatible(group, artifact, kotlin) {
301
+ const key = `${group}:${artifact}:${kotlin.major}.${kotlin.minor}`;
302
+ const cached = resolveCache.get(key);
303
+ if (cached)
304
+ return cached;
305
+ const versions = await listMavenVersions(group, artifact);
306
+ if (versions.length === 0) {
307
+ const result = resolveFromFallbackOnly(group, artifact, kotlin);
308
+ resolveCache.set(key, result);
309
+ return result;
310
+ }
311
+ const latest = versions[versions.length - 1];
312
+ const latestMeta = lookupFallbackMetadata(group, artifact, latest) ?? (await fetchKotlinMetadataVersion(group, artifact, latest));
313
+ const latestNeedsKotlin = latestMeta ? needsKotlinLabel(latestMeta) : undefined;
314
+ let best;
315
+ let probes = 0;
316
+ for (let i = versions.length - 1; i >= 0; i--) {
317
+ const v = versions[i];
318
+ let meta = lookupFallbackMetadata(group, artifact, v);
319
+ if (!meta) {
320
+ if (probes >= 15)
321
+ continue;
322
+ meta = await fetchKotlinMetadataVersion(group, artifact, v);
323
+ probes++;
324
+ }
325
+ if (meta && canRead(kotlin, meta)) {
326
+ best = v;
327
+ break;
328
+ }
329
+ }
330
+ const result = { best, latest, latestNeedsKotlin };
331
+ resolveCache.set(key, result);
332
+ return result;
333
+ }
334
+ //# sourceMappingURL=versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@stag-build/phonebook",
3
+ "version": "0.1.0",
4
+ "description": "Storybook-style static gallery generated from Compose @Preview / SwiftUI #Preview screenshots",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/stag-build/phonebook.git"
10
+ },
11
+ "homepage": "https://github.com/stag-build/phonebook#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/stag-build/phonebook/issues"
14
+ },
15
+ "keywords": [
16
+ "storybook",
17
+ "compose",
18
+ "jetpack-compose",
19
+ "swiftui",
20
+ "preview",
21
+ "screenshot",
22
+ "gallery",
23
+ "mcp",
24
+ "roborazzi"
25
+ ],
26
+ "bin": {
27
+ "phonebook": "dist/cli.js"
28
+ },
29
+ "files": [
30
+ "dist"
31
+ ],
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "engines": {
36
+ "node": ">=20"
37
+ },
38
+ "scripts": {
39
+ "build": "tsc",
40
+ "test": "vitest run",
41
+ "dev": "tsx src/cli.ts"
42
+ },
43
+ "dependencies": {
44
+ "@modelcontextprotocol/sdk": "^1.30.0",
45
+ "commander": "^12.1.0",
46
+ "zod": "^4.4.3"
47
+ },
48
+ "devDependencies": {
49
+ "@types/node": "^22.10.0",
50
+ "tsx": "^4.19.0",
51
+ "typescript": "^5.7.0",
52
+ "vitest": "^4.1.11"
53
+ }
54
+ }