@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 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Detects an Android module's application package, trying (in order):
3
+ * `namespace = "..."` in its build.gradle(.kts), `applicationId = "..."` in
4
+ * the same file, the `package="..."` attribute in its AndroidManifest.xml,
5
+ * and finally the directory structure under src/main/java or src/main/kotlin.
6
+ */
7
+ export declare function detectAndroidPackage(projectDir: string, module: string): Promise<string | undefined>;
8
+ export declare function runInit(dir: string, options?: {
9
+ writeSnapshotClass?: boolean;
10
+ }): Promise<void>;
11
+ /**
12
+ * The ONE exception to `init` never editing your project: writes the missing
13
+ * SnapshotTest subclass to disk when — and only when — it's provably safe to
14
+ * do so without touching project.pbxproj: SnapshotPreviews is wired in, the
15
+ * linking target is identified, that target's source folder is a Xcode
16
+ * filesystem-synchronized group (so a new file there is picked up
17
+ * automatically), and no subclass already exists. Refuses with a clear
18
+ * reason in every other case. Explicit opt-in via `--write-snapshot-class`;
19
+ * default `init` behavior is unaffected.
20
+ */
21
+ export declare function tryWriteSnapshotClass(projectDir: string): Promise<{
22
+ ok: boolean;
23
+ message: string;
24
+ path?: string;
25
+ }>;
26
+ /** The SnapshotTest subclass snippet printed by `init` and reused by `doctor`'s snapshot-test-class check. */
27
+ export declare const IOS_SNAPSHOT_TEST_CLASS_SNIPPET = " import SnapshottingTests\n\n class Snapshots: SnapshotTest {\n override class func snapshotPreviews() -> [String]? { nil }\n }";
@@ -0,0 +1,415 @@
1
+ import { access, mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
2
+ import { basename, extname, join, resolve } from 'node:path';
3
+ import { loadConfig } from '../config.js';
4
+ import { detectKotlinVersion, resolveMaxCompatible } from '../versions.js';
5
+ import { accessorFor, loadVersionCatalog, pluginAccessorFor } from '../gradle/catalog.js';
6
+ import { findSnapshotTestClassLocation, findSnapshotTestSubclass, readPbxprojText, } from '../ios/snapshotTestClass.js';
7
+ const ROBORAZZI_GROUP = 'io.github.takahirom.roborazzi';
8
+ const ROBORAZZI_ARTIFACT = 'roborazzi';
9
+ const CPS_GROUP = 'io.github.sergio-sastre.ComposablePreviewScanner';
10
+ const CPS_ARTIFACT = 'android';
11
+ const DEFAULT_ROBORAZZI_VERSION = '1.72.0';
12
+ const DEFAULT_CPS_VERSION = '0.9.3';
13
+ async function exists(path) {
14
+ try {
15
+ await access(path);
16
+ return true;
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ }
22
+ async function readTextOrUndefined(path) {
23
+ try {
24
+ return await readFile(path, 'utf8');
25
+ }
26
+ catch {
27
+ return undefined;
28
+ }
29
+ }
30
+ /** Reads a module's own build.gradle(.kts) files (not the root project's), concatenated. */
31
+ async function readModuleGradleTexts(moduleDir) {
32
+ const texts = [];
33
+ for (const name of ['build.gradle.kts', 'build.gradle']) {
34
+ const text = await readTextOrUndefined(join(moduleDir, name));
35
+ if (text !== undefined)
36
+ texts.push(text);
37
+ }
38
+ return texts.join('\n');
39
+ }
40
+ /**
41
+ * Walks down single-child directories from `base` until reaching the first
42
+ * level that contains .kt/.java files or branches into more than one
43
+ * subdirectory, returning the dotted path walked as a package name. Returns
44
+ * undefined if `base` doesn't exist or no package-like structure is found.
45
+ */
46
+ async function detectPackageFromDirTree(base) {
47
+ const segments = [];
48
+ let current = base;
49
+ for (;;) {
50
+ let entries;
51
+ try {
52
+ entries = await readdir(current, { withFileTypes: true });
53
+ }
54
+ catch {
55
+ return undefined;
56
+ }
57
+ const dirs = entries.filter((e) => e.isDirectory());
58
+ const hasSources = entries.some((e) => e.isFile() && (e.name.endsWith('.kt') || e.name.endsWith('.java')));
59
+ if (hasSources || dirs.length !== 1) {
60
+ return segments.length > 0 ? segments.join('.') : undefined;
61
+ }
62
+ segments.push(dirs[0].name);
63
+ current = join(current, dirs[0].name);
64
+ }
65
+ }
66
+ /**
67
+ * Detects an Android module's application package, trying (in order):
68
+ * `namespace = "..."` in its build.gradle(.kts), `applicationId = "..."` in
69
+ * the same file, the `package="..."` attribute in its AndroidManifest.xml,
70
+ * and finally the directory structure under src/main/java or src/main/kotlin.
71
+ */
72
+ export async function detectAndroidPackage(projectDir, module) {
73
+ const moduleDir = join(projectDir, ...module.split(':').filter(Boolean));
74
+ const gradleText = await readModuleGradleTexts(moduleDir);
75
+ const namespaceMatch = gradleText.match(/\bnamespace\s*=?\s*['"]([^'"]+)['"]/);
76
+ if (namespaceMatch)
77
+ return namespaceMatch[1];
78
+ const applicationIdMatch = gradleText.match(/\bapplicationId\s*=?\s*['"]([^'"]+)['"]/);
79
+ if (applicationIdMatch)
80
+ return applicationIdMatch[1];
81
+ const manifestText = await readTextOrUndefined(join(moduleDir, 'src', 'main', 'AndroidManifest.xml'));
82
+ if (manifestText) {
83
+ const packageMatch = manifestText.match(/\bpackage\s*=\s*"([^"]+)"/);
84
+ if (packageMatch)
85
+ return packageMatch[1];
86
+ }
87
+ for (const srcRoot of ['java', 'kotlin']) {
88
+ const pkg = await detectPackageFromDirTree(join(moduleDir, 'src', 'main', srcRoot));
89
+ if (pkg)
90
+ return pkg;
91
+ }
92
+ return undefined;
93
+ }
94
+ /** Detects the platform of a project directory from marker files. */
95
+ async function detectPlatform(projectDir) {
96
+ const entries = await readdir(projectDir);
97
+ const hasAndroid = entries.includes('settings.gradle') || entries.includes('settings.gradle.kts');
98
+ const xcworkspace = entries.find((e) => extname(e) === '.xcworkspace');
99
+ const xcodeproj = entries.find((e) => extname(e) === '.xcodeproj');
100
+ const hasIos = Boolean(xcworkspace || xcodeproj);
101
+ if (hasAndroid && hasIos) {
102
+ throw new Error('Detected both an Android (settings.gradle) and an iOS (.xcodeproj/.xcworkspace) project ' +
103
+ 'in this directory. Run `phonebook init` from a single-platform repo, or write ' +
104
+ 'phonebook.config.json by hand.');
105
+ }
106
+ if (hasAndroid)
107
+ return { platform: 'android' };
108
+ if (hasIos)
109
+ return { platform: 'ios', project: xcodeproj, workspace: xcworkspace };
110
+ return { platform: undefined };
111
+ }
112
+ export async function runInit(dir, options = {}) {
113
+ const projectDir = resolve(dir);
114
+ const configPath = resolve(projectDir, 'phonebook.config.json');
115
+ const alreadyExists = await exists(configPath);
116
+ const detected = await detectPlatform(projectDir);
117
+ if (!detected.platform) {
118
+ throw new Error(`Could not detect a platform in ${projectDir}: no settings.gradle(.kts), .xcodeproj, or ` +
119
+ '.xcworkspace found.');
120
+ }
121
+ if (alreadyExists) {
122
+ console.log(`${configPath} already exists; leaving it untouched.`);
123
+ }
124
+ else {
125
+ const appName = basename(projectDir);
126
+ let config;
127
+ if (detected.platform === 'android') {
128
+ config = {
129
+ appName,
130
+ platform: 'android',
131
+ android: { modules: [':app'], variant: 'debug' },
132
+ };
133
+ }
134
+ else {
135
+ const projectName = basename((detected.workspace ?? detected.project), extname((detected.workspace ?? detected.project)));
136
+ config = {
137
+ appName,
138
+ platform: 'ios',
139
+ ios: {
140
+ ...(detected.workspace ? { workspace: detected.workspace } : { project: detected.project }),
141
+ scheme: projectName,
142
+ simulator: 'iPhone 17 Pro',
143
+ },
144
+ };
145
+ }
146
+ await writeFile(configPath, JSON.stringify(config, null, 2) + '\n');
147
+ console.log(`Wrote ${configPath}`);
148
+ }
149
+ if (detected.platform === 'android') {
150
+ let modules = [':app'];
151
+ try {
152
+ const loaded = await loadConfig(projectDir);
153
+ if (loaded.config.platform === 'android')
154
+ modules = loaded.config.android?.modules ?? [':app'];
155
+ }
156
+ catch {
157
+ // Config unreadable/invalid; fall back to the default module.
158
+ }
159
+ await printAndroidInstructions(projectDir, modules);
160
+ if (options.writeSnapshotClass) {
161
+ console.log('\n--write-snapshot-class only applies to iOS projects; nothing was written.');
162
+ }
163
+ }
164
+ else {
165
+ printIosInstructions();
166
+ if (options.writeSnapshotClass) {
167
+ console.log('');
168
+ const result = await tryWriteSnapshotClass(projectDir);
169
+ console.log(result.message);
170
+ }
171
+ }
172
+ }
173
+ /**
174
+ * The ONE exception to `init` never editing your project: writes the missing
175
+ * SnapshotTest subclass to disk when — and only when — it's provably safe to
176
+ * do so without touching project.pbxproj: SnapshotPreviews is wired in, the
177
+ * linking target is identified, that target's source folder is a Xcode
178
+ * filesystem-synchronized group (so a new file there is picked up
179
+ * automatically), and no subclass already exists. Refuses with a clear
180
+ * reason in every other case. Explicit opt-in via `--write-snapshot-class`;
181
+ * default `init` behavior is unaffected.
182
+ */
183
+ export async function tryWriteSnapshotClass(projectDir) {
184
+ let config;
185
+ try {
186
+ const loaded = await loadConfig(projectDir);
187
+ config = loaded.config;
188
+ }
189
+ catch (err) {
190
+ return { ok: false, message: `--write-snapshot-class: ${err.message}` };
191
+ }
192
+ if (config.platform !== 'ios') {
193
+ return { ok: false, message: '--write-snapshot-class only applies to iOS projects; nothing was written.' };
194
+ }
195
+ const ios = config.ios;
196
+ if (!ios?.scheme || (!ios.project && !ios.workspace)) {
197
+ return {
198
+ ok: false,
199
+ message: '--write-snapshot-class: phonebook.config.json: ios.scheme and ios.project/workspace are required; ' +
200
+ 'nothing was written.',
201
+ };
202
+ }
203
+ const projectPath = ios.project ? resolve(projectDir, ios.project) : undefined;
204
+ const pbxprojText = await readPbxprojText(projectDir, projectPath);
205
+ if (!pbxprojText.includes('SnapshotPreviews') && !pbxprojText.includes('SnapshottingTests')) {
206
+ return {
207
+ ok: false,
208
+ message: '--write-snapshot-class: SnapshotPreviews / SnapshottingTests is not wired into the project yet — see ' +
209
+ 'the setup steps above first; nothing was written.',
210
+ };
211
+ }
212
+ const existing = await findSnapshotTestSubclass(projectDir);
213
+ if (existing) {
214
+ return {
215
+ ok: false,
216
+ message: `--write-snapshot-class: a SnapshotTest subclass already exists (${existing.className} at ` +
217
+ `${existing.relativePath}); nothing was written.`,
218
+ };
219
+ }
220
+ const location = findSnapshotTestClassLocation(pbxprojText);
221
+ if (!location) {
222
+ return {
223
+ ok: false,
224
+ message: '--write-snapshot-class: could not identify the target that links SnapshottingTests in the .pbxproj; ' +
225
+ 'add the SnapshotTest subclass manually (see the setup steps above). Nothing was written.',
226
+ };
227
+ }
228
+ if (!location.synchronizedFolder) {
229
+ return {
230
+ ok: false,
231
+ message: `--write-snapshot-class: the "${location.targetName}" target does not use Xcode's synchronized groups, ` +
232
+ 'so writing the file would require editing project.pbxproj — which this flag will not do. Create the ' +
233
+ `file and add it to the ${location.targetName} target in Xcode (File > Add Files, check the ` +
234
+ `${location.targetName} box). Nothing was written.`,
235
+ };
236
+ }
237
+ const targetDir = resolve(projectDir, location.synchronizedFolder);
238
+ const filePath = join(targetDir, 'PhonebookSnapshots.swift');
239
+ const contents = IOS_SNAPSHOT_TEST_CLASS_SNIPPET.split('\n')
240
+ .map((line) => line.replace(/^ {5}/, ''))
241
+ .join('\n') + '\n';
242
+ await mkdir(targetDir, { recursive: true });
243
+ await writeFile(filePath, contents);
244
+ return {
245
+ ok: true,
246
+ path: filePath,
247
+ message: `Wrote ${filePath}.\nSafe because the "${location.targetName}" target uses a filesystem-synchronized ` +
248
+ `group (${location.synchronizedFolder}/): Xcode picks up new files under it automatically, so no ` +
249
+ 'project.pbxproj edit was needed or made.',
250
+ };
251
+ }
252
+ async function printAndroidInstructions(projectDir, modules) {
253
+ const detected = await detectKotlinVersion(projectDir);
254
+ let roborazziVersion = DEFAULT_ROBORAZZI_VERSION;
255
+ let cpsVersion = DEFAULT_CPS_VERSION;
256
+ let note;
257
+ if (detected) {
258
+ const [roborazzi, cps] = await Promise.all([
259
+ resolveMaxCompatible(ROBORAZZI_GROUP, ROBORAZZI_ARTIFACT, detected.version),
260
+ resolveMaxCompatible(CPS_GROUP, CPS_ARTIFACT, detected.version),
261
+ ]);
262
+ if (roborazzi.best)
263
+ roborazziVersion = roborazzi.best;
264
+ if (cps.best)
265
+ cpsVersion = cps.best;
266
+ const kotlinLabel = `${detected.version.major}.${detected.version.minor}.${detected.version.patch}`;
267
+ if (roborazzi.best && roborazzi.latest && roborazzi.best !== roborazzi.latest) {
268
+ note =
269
+ `note: Roborazzi ${roborazzi.latest} is available but requires Kotlin >= ${roborazzi.latestNeedsKotlin}; ` +
270
+ `your project uses ${kotlinLabel} (${detected.source}). Using ${roborazzi.best}. Upgrade Kotlin to use the latest.`;
271
+ }
272
+ }
273
+ else {
274
+ note = `note: could not detect this project's Kotlin version; using Roborazzi ${DEFAULT_ROBORAZZI_VERSION} / ` +
275
+ `ComposablePreviewScanner ${DEFAULT_CPS_VERSION}. Verify these are compatible with your Kotlin version, or ` +
276
+ 'run `phonebook doctor` after wiring things up.';
277
+ }
278
+ const moduleBlocks = await Promise.all(modules.map(async (module) => {
279
+ const pkg = await detectAndroidPackage(projectDir, module);
280
+ return pkg
281
+ ? { module, packagesLine: `packages = listOf("${pkg}")`, warning: undefined }
282
+ : {
283
+ module,
284
+ packagesLine: 'packages = listOf("REPLACE_ME.your.app.package")',
285
+ warning: `could not detect the package for ${module} — replace REPLACE_ME... before running generate`,
286
+ };
287
+ }));
288
+ const step2 = moduleBlocks
289
+ .map(({ module, packagesLine, warning }) => `
290
+ 2. In ${module}'s build.gradle.kts, apply the plugin and add:
291
+
292
+ plugins {
293
+ id("io.github.takahirom.roborazzi")
294
+ }
295
+
296
+ dependencies {
297
+ testImplementation("io.github.takahirom.roborazzi:roborazzi:${roborazziVersion}")
298
+ testImplementation("io.github.takahirom.roborazzi:roborazzi-compose:${roborazziVersion}")
299
+ testImplementation("io.github.takahirom.roborazzi:roborazzi-compose-preview-scanner-support:${roborazziVersion}")
300
+ testImplementation("io.github.sergio-sastre.ComposablePreviewScanner:android:${cpsVersion}")
301
+ testImplementation("org.robolectric:robolectric:4.14.1")
302
+ // version from your Compose BOM, or pin one
303
+ testImplementation("androidx.compose.ui:ui-test-junit4")
304
+ }
305
+
306
+ @OptIn(ExperimentalRoborazziApi::class)
307
+ roborazzi {
308
+ generateComposePreviewRobolectricTests {
309
+ enable = true
310
+ ${packagesLine}
311
+ includePrivatePreviews = true
312
+ }
313
+ }
314
+
315
+ android {
316
+ testOptions {
317
+ unitTests {
318
+ isIncludeAndroidResources = true
319
+ all {
320
+ it.systemProperties["robolectric.pixelCopyRenderMode"] = "hardware"
321
+ }
322
+ }
323
+ }
324
+ }
325
+ ${warning ? `\n note: ${warning}\n` : ''}`)
326
+ .join('\n');
327
+ console.log(`
328
+ Next steps to wire up Roborazzi preview recording:
329
+
330
+ 1. In the root build.gradle.kts, add the Roborazzi plugin:
331
+
332
+ plugins {
333
+ id("io.github.takahirom.roborazzi") version "${roborazziVersion}" apply false
334
+ }
335
+ ${step2}
336
+ 3. Run \`phonebook doctor\` to verify the setup.
337
+ ${note ? `\n${note}\n` : ''}`);
338
+ const catalogs = await loadVersionCatalog(projectDir);
339
+ if (catalogs.size > 0) {
340
+ const prefix = catalogs.has('libs') ? 'libs' : [...catalogs.keys()][0];
341
+ console.log(catalogInstructions(prefix, roborazziVersion, cpsVersion));
342
+ }
343
+ }
344
+ /** Builds the version-catalog variant of the setup instructions, for projects that already use one. */
345
+ function catalogInstructions(prefix, roborazziVersion, cpsVersion) {
346
+ const roborazziAlias = 'roborazzi';
347
+ const roborazziComposeAlias = 'roborazzi-compose';
348
+ const roborazziScannerAlias = 'roborazzi-compose-preview-scanner-support';
349
+ const cpsAlias = 'composable-preview-scanner';
350
+ const robolectricAlias = 'robolectric';
351
+ const uiTestJunit4Alias = 'androidx-compose-ui-test-junit4';
352
+ const pluginAlias = 'roborazzi';
353
+ return `
354
+ This project uses a Gradle version catalog ("${prefix}"). Equivalent additions using catalog accessors:
355
+
356
+ 1. In gradle/${prefix === 'libs' ? 'libs' : prefix}.versions.toml:
357
+
358
+ [versions]
359
+ roborazzi = "${roborazziVersion}"
360
+ composablePreviewScanner = "${cpsVersion}"
361
+
362
+ [libraries]
363
+ ${roborazziAlias} = { module = "io.github.takahirom.roborazzi:roborazzi", version.ref = "roborazzi" }
364
+ ${roborazziComposeAlias} = { module = "io.github.takahirom.roborazzi:roborazzi-compose", version.ref = "roborazzi" }
365
+ ${roborazziScannerAlias} = { module = "io.github.takahirom.roborazzi:roborazzi-compose-preview-scanner-support", version.ref = "roborazzi" }
366
+ ${cpsAlias} = { module = "io.github.sergio-sastre.ComposablePreviewScanner:android", version.ref = "composablePreviewScanner" }
367
+ ${robolectricAlias} = { module = "org.robolectric:robolectric", version = "4.14.1" }
368
+ ${uiTestJunit4Alias} = { group = "androidx.compose.ui", name = "ui-test-junit4" }
369
+
370
+ [plugins]
371
+ ${pluginAlias} = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" }
372
+
373
+ 2. In each recorded module's build.gradle.kts, apply the plugin and add:
374
+
375
+ plugins {
376
+ alias(${pluginAccessorFor(pluginAlias, prefix)})
377
+ }
378
+
379
+ dependencies {
380
+ testImplementation(${accessorFor(roborazziAlias, prefix)})
381
+ testImplementation(${accessorFor(roborazziComposeAlias, prefix)})
382
+ testImplementation(${accessorFor(roborazziScannerAlias, prefix)})
383
+ testImplementation(${accessorFor(cpsAlias, prefix)})
384
+ testImplementation(${accessorFor(robolectricAlias, prefix)})
385
+ // version from your Compose BOM, or pin one in the catalog
386
+ testImplementation(${accessorFor(uiTestJunit4Alias, prefix)})
387
+ }
388
+ `;
389
+ }
390
+ /** The SnapshotTest subclass snippet printed by `init` and reused by `doctor`'s snapshot-test-class check. */
391
+ export const IOS_SNAPSHOT_TEST_CLASS_SNIPPET = ` import SnapshottingTests
392
+
393
+ class Snapshots: SnapshotTest {
394
+ override class func snapshotPreviews() -> [String]? { nil }
395
+ }`;
396
+ function printIosInstructions() {
397
+ console.log(`
398
+ Next steps to wire up SnapshotPreviews recording:
399
+
400
+ 1. Add the Swift package https://github.com/getsentry/SnapshotPreviews to the project.
401
+
402
+ 2. Link the SnapshottingTests product into a unit-test target that is hosted in the app
403
+ (set TEST_HOST / BUNDLE_LOADER to the app target).
404
+
405
+ 3. Add one test class to that target:
406
+
407
+ ${IOS_SNAPSHOT_TEST_CLASS_SNIPPET}
408
+
409
+ 4. Recommend applying \`.sizeThatFitsLayout\` traits on component-sized previews so they
410
+ snapshot at their natural size rather than full-screen.
411
+
412
+ 5. Run \`phonebook doctor\` to verify the setup.
413
+ `);
414
+ }
415
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAwB,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,eAAe,GAChB,MAAM,6BAA6B,CAAC;AAErC,MAAM,eAAe,GAAG,+BAA+B,CAAC;AACxD,MAAM,kBAAkB,GAAG,WAAW,CAAC;AACvC,MAAM,SAAS,GAAG,kDAAkD,CAAC;AACrE,MAAM,YAAY,GAAG,SAAS,CAAC;AAE/B,MAAM,yBAAyB,GAAG,QAAQ,CAAC;AAC3C,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAEpC,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAY;IAC7C,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,4FAA4F;AAC5F,KAAK,UAAU,qBAAqB,CAAC,SAAiB;IACpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9D,IAAI,IAAI,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,wBAAwB,CAAC,IAAY;IAClD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,SAAS,CAAC;QACR,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3G,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAkB,EAAE,MAAc;IAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAE1D,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC/E,IAAI,cAAc;QAAE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;IAE7C,MAAM,kBAAkB,GAAG,UAAU,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACvF,IAAI,kBAAkB;QAAE,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACtG,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACrE,IAAI,YAAY;YAAE,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACpF,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,qEAAqE;AACrE,KAAK,UAAU,cAAc,CAC3B,UAAkB;IAMlB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IAE1C,MAAM,UAAU,GACd,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAEjF,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;IAEjD,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,0FAA0F;YACxF,gFAAgF;YAChF,gCAAgC,CACnC,CAAC;IACJ,CAAC;IACD,IAAI,UAAU;QAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAC/C,IAAI,MAAM;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;IACnF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,UAA4C,EAAE;IACvF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,kCAAkC,UAAU,6CAA6C;YACvF,qBAAqB,CACxB,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,wCAAwC,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,MAAuB,CAAC;QAC5B,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,GAAG;gBACP,OAAO;gBACP,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE;aACjD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,QAAQ,CAC1B,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAE,EACzC,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAE,CAAC,CACnD,CAAC;YACF,MAAM,GAAG;gBACP,OAAO;gBACP,QAAQ,EAAE,KAAK;gBACf,GAAG,EAAE;oBACH,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;oBAC3F,MAAM,EAAE,WAAW;oBACnB,SAAS,EAAE,eAAe;iBAC3B;aACF,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,OAAO,GAAa,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS;gBAAE,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;QACjG,CAAC;QAAC,MAAM,CAAC;YACP,8DAA8D;QAChE,CAAC;QACD,MAAM,wBAAwB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;SAAM,CAAC;QACN,oBAAoB,EAAE,CAAC;QACvB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAkB;IAElB,IAAI,MAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,2BAA4B,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;IACrF,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,2EAA2E,EAAE,CAAC;IAC7G,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACvB,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EACL,oGAAoG;gBACpG,sBAAsB;SACzB,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC5F,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EACL,uGAAuG;gBACvG,mDAAmD;SACtD,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EACL,mEAAmE,QAAQ,CAAC,SAAS,MAAM;gBAC3F,GAAG,QAAQ,CAAC,YAAY,yBAAyB;SACpD,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;IAC5D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EACL,sGAAsG;gBACtG,0FAA0F;SAC7F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QACjC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EACL,gCAAgC,QAAQ,CAAC,UAAU,qDAAqD;gBACxG,sGAAsG;gBACtG,0BAA0B,QAAQ,CAAC,UAAU,gDAAgD;gBAC7F,GAAG,QAAQ,CAAC,UAAU,6BAA6B;SACtD,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;IAC7D,MAAM,QAAQ,GACZ,+BAA+B,CAAC,KAAK,CAAC,IAAI,CAAC;SACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;SACxC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACvB,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpC,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EACL,SAAS,QAAQ,wBAAwB,QAAQ,CAAC,UAAU,0CAA0C;YACtG,UAAU,QAAQ,CAAC,kBAAkB,6DAA6D;YAClG,0CAA0C;KAC7C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,UAAkB,EAAE,OAAiB;IAC3E,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEvD,IAAI,gBAAgB,GAAG,yBAAyB,CAAC;IACjD,IAAI,UAAU,GAAG,mBAAmB,CAAC;IACrC,IAAI,IAAwB,CAAC;IAE7B,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzC,oBAAoB,CAAC,eAAe,EAAE,kBAAkB,EAAE,QAAQ,CAAC,OAAO,CAAC;YAC3E,oBAAoB,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC;SAChE,CAAC,CAAC;QACH,IAAI,SAAS,CAAC,IAAI;YAAE,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAC;QACtD,IAAI,GAAG,CAAC,IAAI;YAAE,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC;QAEpC,MAAM,WAAW,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACpG,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;YAC9E,IAAI;gBACF,mBAAmB,SAAS,CAAC,MAAM,wCAAwC,SAAS,CAAC,iBAAiB,IAAI;oBAC1G,qBAAqB,WAAW,KAAK,QAAQ,CAAC,MAAM,YAAY,SAAS,CAAC,IAAI,qCAAqC,CAAC;QACxH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,yEAAyE,yBAAyB,KAAK;YAC5G,4BAA4B,mBAAmB,6DAA6D;YAC5G,gDAAgD,CAAC;IACrD,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC3D,OAAO,GAAG;YACR,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,sBAAsB,GAAG,IAAI,EAAE,OAAO,EAAE,SAA+B,EAAE;YACnG,CAAC,CAAC;gBACE,MAAM;gBACN,YAAY,EAAE,kDAAkD;gBAChE,OAAO,EAAE,oCAAoC,MAAM,kDAAkD;aACtG,CAAC;IACR,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,KAAK,GAAG,YAAY;SACvB,GAAG,CACF,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACrC,MAAM;;;;;;;qEAOuD,gBAAgB;6EACR,gBAAgB;qGACQ,gBAAgB;sFAC/B,UAAU;;;;;;;;;;WAUrF,YAAY;;;;;;;;;;;;;;;EAerB,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACvC;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,CAAC,GAAG,CAAC;;;;;;sDAMwC,gBAAgB;;EAEpE,KAAK;;EAEL,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE7B,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,uGAAuG;AACvG,SAAS,mBAAmB,CAAC,MAAc,EAAE,gBAAwB,EAAE,UAAkB;IACvF,MAAM,cAAc,GAAG,WAAW,CAAC;IACnC,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;IAClD,MAAM,qBAAqB,GAAG,2CAA2C,CAAC;IAC1E,MAAM,QAAQ,GAAG,4BAA4B,CAAC;IAC9C,MAAM,gBAAgB,GAAG,aAAa,CAAC;IACvC,MAAM,iBAAiB,GAAG,iCAAiC,CAAC;IAC5D,MAAM,WAAW,GAAG,WAAW,CAAC;IAEhC,OAAO;+CACsC,MAAM;;eAEtC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;;;oBAG9B,gBAAgB;mCACD,UAAU;;;OAGtC,cAAc;OACd,qBAAqB;OACrB,qBAAqB;OACrB,QAAQ;OACR,gBAAgB;OAChB,iBAAiB;;;OAGjB,WAAW;;;;;eAKH,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC;;;;4BAIzB,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC;4BACnC,WAAW,CAAC,qBAAqB,EAAE,MAAM,CAAC;4BAC1C,WAAW,CAAC,qBAAqB,EAAE,MAAM,CAAC;4BAC1C,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC;4BAC7B,WAAW,CAAC,gBAAgB,EAAE,MAAM,CAAC;;4BAErC,WAAW,CAAC,iBAAiB,EAAE,MAAM,CAAC;;CAEjE,CAAC;AACF,CAAC;AAED,8GAA8G;AAC9G,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;OAIxC,CAAC;AAER,SAAS,oBAAoB;IAC3B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;EAUZ,+BAA+B;;;;;;CAMhC,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { Platform } from './manifest.js';
2
+ export interface PhonebookConfig {
3
+ /** App display name shown in the gallery header */
4
+ appName: string;
5
+ platform: Platform;
6
+ /** Bundle output directory, relative to the config file. Default: "phonebook-out" */
7
+ output?: string;
8
+ android?: {
9
+ /** Gradle modules to record, e.g. [":app"]. Default: [":app"] */
10
+ modules?: string[];
11
+ /** Gradle build variant used for recording. Default: "debug" */
12
+ variant?: string;
13
+ };
14
+ ios?: {
15
+ /** Xcode project (.xcodeproj) or workspace path, relative to the config file. */
16
+ project?: string;
17
+ workspace?: string;
18
+ /** Scheme containing the SnapshotPreviews test target. Required for iOS. */
19
+ scheme?: string;
20
+ /** Simulator destination name. Default: "iPhone 17 Pro" */
21
+ simulator?: string;
22
+ /**
23
+ * -only-testing target[/class] passed to xcodebuild, so generate runs just
24
+ * the snapshot tests instead of the whole suite. Auto-detected from the
25
+ * SnapshotTest subclass when omitted; set to "" to force the full suite.
26
+ */
27
+ onlyTesting?: string;
28
+ };
29
+ }
30
+ export declare function loadConfig(dir: string): Promise<{
31
+ config: PhonebookConfig;
32
+ projectDir: string;
33
+ }>;
package/dist/config.js ADDED
@@ -0,0 +1,21 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { resolve } from 'node:path';
3
+ export async function loadConfig(dir) {
4
+ const projectDir = resolve(dir);
5
+ const path = resolve(projectDir, 'phonebook.config.json');
6
+ let raw;
7
+ try {
8
+ raw = await readFile(path, 'utf8');
9
+ }
10
+ catch {
11
+ throw new Error(`No phonebook.config.json found in ${projectDir}`);
12
+ }
13
+ const config = JSON.parse(raw);
14
+ if (!config.appName)
15
+ throw new Error('phonebook.config.json: "appName" is required');
16
+ if (config.platform !== 'android' && config.platform !== 'ios') {
17
+ throw new Error('phonebook.config.json: "platform" must be "android" or "ios"');
18
+ }
19
+ return { config, projectDir };
20
+ }
21
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCpC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;IAC1D,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,qCAAqC,UAAU,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACrF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,70 @@
1
+ import type { PhonebookConfig } from '../config.js';
2
+ import { type Manifest } from '../manifest.js';
3
+ export declare const EMPTY_PREVIEWS_MESSAGE: string;
4
+ /**
5
+ * Guards against `generate` silently succeeding with zero recorded previews.
6
+ * Throws unless `allowEmpty` is set (the `--allow-empty` CLI flag), in which
7
+ * case the caller downgrades this to a warning and still writes the manifest.
8
+ * Pure/exported so it can be unit-tested without spawning Gradle.
9
+ */
10
+ export declare function checkEmptyEntries(entryCount: number, allowEmpty: boolean): void;
11
+ /**
12
+ * Runs Roborazzi (with ComposablePreviewScanner-generated tests) via Gradle and
13
+ * harvests the recorded PNGs into a Phonebook bundle.
14
+ */
15
+ export declare function generateAndroid(config: PhonebookConfig, projectDir: string, outputDir: string, options?: {
16
+ quiet?: boolean;
17
+ allowEmpty?: boolean;
18
+ }): Promise<Manifest>;
19
+ interface RoborazziImageMeta {
20
+ fqn: string;
21
+ functionName: string;
22
+ displayName?: string;
23
+ theme?: 'light' | 'dark';
24
+ /** Derived from the package + file-class segments, e.g. "dev/stag/sample/PrimaryButton.kt" */
25
+ sourceFile?: string;
26
+ /**
27
+ * Machine-generated markers Roborazzi appends for @Preview attributes
28
+ * (e.g. "WITH_BACKGROUND" for showBackground = true) that are not a
29
+ * user-chosen display name. See parseRoborazziFileName for classification.
30
+ */
31
+ tags?: string[];
32
+ }
33
+ /**
34
+ * Roborazzi + ComposablePreviewScanner names recorded images
35
+ * `<package>.<FileKt>.<PreviewFunction>[.<preview display name>].png`, where a
36
+ * display name containing "/" becomes real subdirectories on disk (verified
37
+ * against Roborazzi 1.72.0):
38
+ * dev.stag.sample.PrimaryButtonKt.PrimaryButtonEnabledPreview.Button/Enabled.png
39
+ * dev.stag.sample.UserCardKt.UserCardPreview.png
40
+ * dev.stag.sample.UserCardKt.UserCardDarkPreview.NIGHT.png (uiMode night)
41
+ *
42
+ * Roborazzi also appends machine-generated ALL-CAPS markers derived from
43
+ * `@Preview` attributes (verified against a real app whose previews are all
44
+ * `@Preview(showBackground = true)`, with no explicit name):
45
+ * com.om.spotifyuiapp...HomeContentKt.HomeContent.WITH_BACKGROUND.png
46
+ * These are not a user-chosen display name and must not become the state;
47
+ * they are collected into `tags` instead. NIGHT/NOTNIGHT (uiMode) become
48
+ * `theme` rather than a tag, as before.
49
+ *
50
+ * `file` is the png path relative to the roborazzi output dir ("/"-separated).
51
+ */
52
+ export declare function parseRoborazziFileName(file: string): RoborazziImageMeta;
53
+ /**
54
+ * Runs Gradle. When `quiet` is false (the CLI default), output streams
55
+ * straight through to this process's stdout/stderr as it arrives (so a human
56
+ * can watch the build) while a rolling tail is kept alongside it for error
57
+ * translation. When `quiet` is true (used by the MCP server, whose stdout is
58
+ * the JSON-RPC channel and must never carry build output), only the tail is
59
+ * kept and nothing is echoed live; the tail is written to stderr once if the
60
+ * build fails, unless `dumpTailOnFailure` is set to false.
61
+ *
62
+ * `onOutput`, when provided, is called once on exit (success or failure) with
63
+ * the full, untruncated captured output — useful for callers that want to
64
+ * write a complete log file rather than relying on the 200-line tail.
65
+ */
66
+ export declare function runGradle(projectDir: string, tasks: string[], quiet: boolean, options?: {
67
+ dumpTailOnFailure?: boolean;
68
+ onOutput?: (output: string) => void;
69
+ }): Promise<void>;
70
+ export {};