@meadow-studio/platform 0.0.0-stage → 0.1.1

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 (91) hide show
  1. package/MeadowPlatform.podspec +17 -0
  2. package/Package.swift +23 -0
  3. package/README.md +147 -2
  4. package/android/build.gradle +42 -0
  5. package/android/src/main/AndroidManifest.xml +1 -0
  6. package/android/src/main/java/app/meadow/platform/MeadowAppRatingPlugin.java +38 -0
  7. package/dist/cli/app-skill.d.ts +3 -0
  8. package/dist/cli/app-skill.d.ts.map +1 -0
  9. package/dist/cli/app-skill.js +38 -0
  10. package/dist/cli/app-skill.js.map +1 -0
  11. package/dist/cli/commands.d.ts +74 -0
  12. package/dist/cli/commands.d.ts.map +1 -0
  13. package/dist/cli/commands.js +1095 -0
  14. package/dist/cli/commands.js.map +1 -0
  15. package/dist/cli/config.d.ts +123 -0
  16. package/dist/cli/config.d.ts.map +1 -0
  17. package/dist/cli/config.js +428 -0
  18. package/dist/cli/config.js.map +1 -0
  19. package/dist/cli/inspiration.d.ts +3 -0
  20. package/dist/cli/inspiration.d.ts.map +1 -0
  21. package/dist/cli/inspiration.js +12 -0
  22. package/dist/cli/inspiration.js.map +1 -0
  23. package/dist/cli/meadow.d.ts +8 -0
  24. package/dist/cli/meadow.d.ts.map +1 -0
  25. package/dist/cli/meadow.js +466 -0
  26. package/dist/cli/meadow.js.map +1 -0
  27. package/dist/cli/product-brief.d.ts +3 -0
  28. package/dist/cli/product-brief.d.ts.map +1 -0
  29. package/dist/cli/product-brief.js +38 -0
  30. package/dist/cli/product-brief.js.map +1 -0
  31. package/dist/cli/recipes.d.ts +10 -0
  32. package/dist/cli/recipes.d.ts.map +1 -0
  33. package/dist/cli/recipes.js +575 -0
  34. package/dist/cli/recipes.js.map +1 -0
  35. package/dist/cli/sync.d.ts +14 -0
  36. package/dist/cli/sync.d.ts.map +1 -0
  37. package/dist/cli/sync.js +310 -0
  38. package/dist/cli/sync.js.map +1 -0
  39. package/dist/cli/templates.d.ts +27 -0
  40. package/dist/cli/templates.d.ts.map +1 -0
  41. package/dist/cli/templates.js +1292 -0
  42. package/dist/cli/templates.js.map +1 -0
  43. package/dist/cli/website.d.ts +5 -0
  44. package/dist/cli/website.d.ts.map +1 -0
  45. package/dist/cli/website.js +262 -0
  46. package/dist/cli/website.js.map +1 -0
  47. package/dist/index.d.ts +5 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +5 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/notifications.d.ts +119 -0
  52. package/dist/notifications.d.ts.map +1 -0
  53. package/dist/notifications.js +320 -0
  54. package/dist/notifications.js.map +1 -0
  55. package/dist/platform.d.ts +163 -0
  56. package/dist/platform.d.ts.map +1 -0
  57. package/dist/platform.js +623 -0
  58. package/dist/platform.js.map +1 -0
  59. package/dist/purchases.d.ts +88 -0
  60. package/dist/purchases.d.ts.map +1 -0
  61. package/dist/purchases.js +296 -0
  62. package/dist/purchases.js.map +1 -0
  63. package/dist/ui/app-build.component.d.ts +18 -0
  64. package/dist/ui/app-build.component.d.ts.map +1 -0
  65. package/dist/ui/app-build.component.js +56 -0
  66. package/dist/ui/app-build.component.js.map +1 -0
  67. package/dist/ui/app-build.model.d.ts +11 -0
  68. package/dist/ui/app-build.model.d.ts.map +1 -0
  69. package/dist/ui/app-build.model.js +18 -0
  70. package/dist/ui/app-build.model.js.map +1 -0
  71. package/dist/ui/app-links.component.d.ts +14 -0
  72. package/dist/ui/app-links.component.d.ts.map +1 -0
  73. package/dist/ui/app-links.component.js +77 -0
  74. package/dist/ui/app-links.component.js.map +1 -0
  75. package/dist/ui/app-links.model.d.ts +18 -0
  76. package/dist/ui/app-links.model.d.ts.map +1 -0
  77. package/dist/ui/app-links.model.js +17 -0
  78. package/dist/ui/app-links.model.js.map +1 -0
  79. package/dist/ui/index.d.ts +5 -0
  80. package/dist/ui/index.d.ts.map +1 -0
  81. package/dist/ui/index.js +5 -0
  82. package/dist/ui/index.js.map +1 -0
  83. package/docs/CLI.md +389 -0
  84. package/docs/PLATFORM_GUIDE.md +423 -0
  85. package/docs/POC_FINDINGS.md +218 -0
  86. package/docs/PROJECT_BRIEF.md +501 -0
  87. package/docs/RELEASING.md +49 -0
  88. package/docs/V0.1_PATH.md +310 -0
  89. package/ios/Sources/MeadowPlatformPlugin/MeadowAppRatingPlugin.swift +39 -0
  90. package/package.json +89 -4
  91. package/schema/meadow-config.schema.json +250 -0
@@ -0,0 +1,466 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync, realpathSync } from 'node:fs';
3
+ import { basename, dirname, resolve } from 'node:path';
4
+ import { createInterface } from 'node:readline/promises';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { addCapability, configureIntegration, createProject, doctor, initCleanRepository, initProject, inspectExistingProject, isCleanGitRepository, releaseCheck, setApplicationVersion, SYSTEM_COMMAND_RUNNER, } from './commands.js';
7
+ import { createProjectConfig, validateProjectConfig, } from './config.js';
8
+ import { syncProject } from './sync.js';
9
+ export async function run(argv = process.argv.slice(2)) {
10
+ const [command, ...rest] = argv;
11
+ try {
12
+ switch (command) {
13
+ case 'new':
14
+ await runNew(rest);
15
+ return 0;
16
+ case 'init':
17
+ return runInit(rest);
18
+ case 'sync':
19
+ return runSync(rest);
20
+ case 'configure':
21
+ runConfigure(rest);
22
+ return 0;
23
+ case 'add':
24
+ runAdd(rest);
25
+ return 0;
26
+ case 'doctor':
27
+ return runDoctor(rest);
28
+ case 'version':
29
+ runVersion(rest);
30
+ return 0;
31
+ case 'release-check':
32
+ return runReleaseCheck(rest);
33
+ case 'help':
34
+ case '--help':
35
+ case '-h':
36
+ case undefined:
37
+ process.stdout.write(helpText());
38
+ return 0;
39
+ case '--version':
40
+ case '-v':
41
+ process.stdout.write(`${platformVersion()}\n`);
42
+ return 0;
43
+ default:
44
+ throw new Error(`Unknown command: ${command}\n\n${helpText()}`);
45
+ }
46
+ }
47
+ catch (error) {
48
+ process.stderr.write(`Meadow CLI failed: ${errorMessage(error)}\n`);
49
+ return 1;
50
+ }
51
+ }
52
+ export function parseArguments(args) {
53
+ const positionals = [];
54
+ const options = {};
55
+ for (let index = 0; index < args.length; index += 1) {
56
+ const value = args[index];
57
+ if (!value.startsWith('--')) {
58
+ positionals.push(value);
59
+ continue;
60
+ }
61
+ const [rawKey, inlineValue] = value.slice(2).split('=', 2);
62
+ if (!rawKey)
63
+ throw new Error(`Invalid option: ${value}`);
64
+ if (rawKey.startsWith('no-')) {
65
+ options[rawKey] = true;
66
+ continue;
67
+ }
68
+ if (inlineValue !== undefined) {
69
+ options[rawKey] = inlineValue;
70
+ continue;
71
+ }
72
+ const next = args[index + 1];
73
+ if (next !== undefined && !next.startsWith('--')) {
74
+ options[rawKey] = next;
75
+ index += 1;
76
+ }
77
+ else {
78
+ options[rawKey] = true;
79
+ }
80
+ }
81
+ return { positionals, options };
82
+ }
83
+ async function runNew(args) {
84
+ const parsed = parseArguments(args);
85
+ if (parsed.positionals.length !== 1)
86
+ throw new Error('Usage: meadow new <name> [options]');
87
+ const requestedName = parsed.positionals[0];
88
+ const automatic = parsed.options.yes === true;
89
+ const configuredAnswers = {
90
+ ...configuredNewAnswers(parsed.options.config),
91
+ ...(stringOption(parsed.options, 'website-base-domain')
92
+ ? { websiteBaseDomain: stringOption(parsed.options, 'website-base-domain') }
93
+ : {}),
94
+ };
95
+ const answers = automatic
96
+ ? { name: requestedName, ...configuredAnswers }
97
+ : await promptForProject({ name: requestedName, ...configuredAnswers });
98
+ const config = createProjectConfig(answers);
99
+ const wantsGithub = parsed.options.github === true;
100
+ if (wantsGithub && parsed.options['no-git'] === true) {
101
+ throw new Error('--github cannot be combined with --no-git.');
102
+ }
103
+ process.stdout.write(`Creating ${config.app.name} in ${config.app.slug}/...\n`);
104
+ const target = createProject({
105
+ directory: stringOption(parsed.options, 'directory') ?? process.cwd(),
106
+ answers,
107
+ platformVersion: platformVersion(),
108
+ platformSpec: stringOption(parsed.options, 'platform-spec'),
109
+ install: parsed.options['no-install'] !== true,
110
+ git: parsed.options['no-git'] !== true,
111
+ visualBaselines: parsed.options['no-install'] !== true &&
112
+ parsed.options['skip-visual-baselines'] !== true,
113
+ ...(wantsGithub
114
+ ? {
115
+ github: {
116
+ owner: stringOption(parsed.options, 'github-owner'),
117
+ visibility: visibility(parsed.options.visibility),
118
+ },
119
+ }
120
+ : {}),
121
+ }, SYSTEM_COMMAND_RUNNER);
122
+ process.stdout.write(`\nCreated ${config.app.name} at ${target}, with its website in ${target}/website.\n`);
123
+ if (parsed.options['no-install'] === true) {
124
+ process.stdout.write('Next: npm install, npm run native:init, npm run check.\n');
125
+ }
126
+ else if (parsed.options['skip-visual-baselines'] === true) {
127
+ process.stdout.write('The app and native projects are ready. Generate reviewed visual baselines before opening a PR.\n');
128
+ }
129
+ else {
130
+ process.stdout.write('The app, native projects, tests, and visual baselines are ready.\n');
131
+ }
132
+ }
133
+ async function runInit(args) {
134
+ const parsed = parseArguments(args);
135
+ if (parsed.positionals.length)
136
+ throw new Error('Usage: meadow init [options]');
137
+ const directory = stringOption(parsed.options, 'directory') ?? process.cwd();
138
+ const configuredAnswers = {
139
+ ...configuredNewAnswers(parsed.options.config),
140
+ ...(stringOption(parsed.options, 'website-base-domain')
141
+ ? { websiteBaseDomain: stringOption(parsed.options, 'website-base-domain') }
142
+ : {}),
143
+ };
144
+ if (isCleanGitRepository(directory)) {
145
+ const name = titleCase(basename(resolve(directory)));
146
+ const seed = { name, ...configuredAnswers };
147
+ const answers = parsed.options.yes === true ? seed : await promptForProject(seed);
148
+ const dryRun = parsed.options['dry-run'] === true;
149
+ if (!dryRun) {
150
+ process.stdout.write(`Building and checking the app in a temporary directory. The completed project will be placed in ${resolve(directory)}.\n`);
151
+ }
152
+ const result = initCleanRepository({
153
+ directory,
154
+ answers,
155
+ platformVersion: platformVersion(),
156
+ platformSpec: stringOption(parsed.options, 'platform-spec'),
157
+ install: parsed.options['no-install'] !== true,
158
+ visualBaselines: parsed.options['no-install'] !== true && parsed.options['skip-visual-baselines'] !== true,
159
+ dryRun,
160
+ }, SYSTEM_COMMAND_RUNNER);
161
+ process.stdout.write(dryRun ? 'Planned clean-repository app:\n' : 'Created Meadow app in the existing Git repository:\n');
162
+ for (const action of result.actions)
163
+ process.stdout.write(`${action.kind === 'run' ? '>' : '+'} ${action.target}\n`);
164
+ if (dryRun)
165
+ return 0;
166
+ process.stdout.write('\nMeadow doctor:\n');
167
+ printDiagnostics(result.diagnostics, false);
168
+ return 0;
169
+ }
170
+ const inspection = inspectExistingProject(directory);
171
+ const seed = { ...inspection.answers, ...configuredAnswers };
172
+ const answers = parsed.options.yes === true || inspection.alreadyInitialized
173
+ ? seed
174
+ : await promptForInit(seed);
175
+ process.stdout.write(`Detected ${answers.name} (${answers.id}) with Angular ${inspection.angularVersion} and Capacitor ${inspection.capacitorVersion} in ${inspection.directory}.\n`);
176
+ for (const warning of inspection.warnings)
177
+ process.stdout.write(`! ${warning}\n`);
178
+ const dryRun = parsed.options['dry-run'] === true;
179
+ const result = initProject({
180
+ directory: inspection.directory,
181
+ answers,
182
+ platformVersion: platformVersion(),
183
+ platformSpec: stringOption(parsed.options, 'platform-spec'),
184
+ install: parsed.options['no-install'] !== true,
185
+ dryRun,
186
+ }, SYSTEM_COMMAND_RUNNER);
187
+ process.stdout.write(dryRun ? '\nPlanned changes:\n' : '\nApplied Meadow adoption plan:\n');
188
+ const actionIcon = { create: '+', update: '~', preserve: '=', run: '>' };
189
+ for (const action of result.actions) {
190
+ process.stdout.write(`${actionIcon[action.kind]} ${action.target}: ${action.detail}\n`);
191
+ }
192
+ if (dryRun) {
193
+ process.stdout.write('\nDry run complete; no files were changed.\n');
194
+ return 0;
195
+ }
196
+ process.stdout.write('\nMeadow doctor:\n');
197
+ printDiagnostics(result.diagnostics, false);
198
+ const failures = result.diagnostics.filter((diagnostic) => diagnostic.level === 'failure').length;
199
+ if (failures) {
200
+ process.stdout.write(`\nInitialization is installed. Meadow doctor found ${failures} existing-project follow-up${failures === 1 ? '' : 's'} to resolve.\n`);
201
+ }
202
+ else {
203
+ process.stdout.write('\nThe existing project is initialized for Meadow Platform.\n');
204
+ }
205
+ return 0;
206
+ }
207
+ function runSync(args) {
208
+ const parsed = parseArguments(args);
209
+ if (parsed.positionals.length)
210
+ throw new Error('Usage: meadow sync [--check]');
211
+ const check = parsed.options.check === true;
212
+ const directory = stringOption(parsed.options, 'directory') ?? process.cwd();
213
+ const result = syncProject(directory, check);
214
+ const icons = { create: '+', update: '~', current: '=', conflict: '!' };
215
+ for (const action of result.actions) {
216
+ if (action.status !== 'current' || check) {
217
+ process.stdout.write(`${icons[action.status]} ${action.path}: ${action.message}\n`);
218
+ }
219
+ }
220
+ if (result.valid) {
221
+ if (!check &&
222
+ parsed.options['no-install'] !== true &&
223
+ result.actions.some((action) => action.path === 'package.json' && action.status !== 'current')) {
224
+ process.stdout.write('Installing synchronized dependencies...\n');
225
+ SYSTEM_COMMAND_RUNNER.run('npm', ['install'], directory);
226
+ }
227
+ process.stdout.write(check ? 'Meadow-generated files are synchronized.\n' : 'Synchronized from meadow.config.json.\n');
228
+ return 0;
229
+ }
230
+ process.stderr.write(check
231
+ ? 'Meadow-generated files have drifted. Run meadow sync and review the changes.\n'
232
+ : 'Meadow sync stopped because an app-owned file conflicts with a generated path.\n');
233
+ return 1;
234
+ }
235
+ async function promptForInit(seed) {
236
+ const io = createInterface({ input: process.stdin, output: process.stdout });
237
+ try {
238
+ const websiteBaseDomain = seed.websiteUrl
239
+ ? seed.websiteBaseDomain
240
+ : await ask(io, 'Website base domain (optional, e.g. meadow-development.app)', seed.websiteBaseDomain ?? '');
241
+ const revenuecat = seed.revenuecat === true
242
+ ? true
243
+ : await askBoolean(io, 'Add RevenueCat to this app?', false);
244
+ const monetizationMode = revenuecat
245
+ ? seed.revenuecat === true && seed.monetizationMode && seed.monetizationMode !== 'none'
246
+ ? seed.monetizationMode
247
+ : await askChoice(io, 'Monetization mode', ['subscription-and-lifetime', 'subscription', 'lifetime'], 'subscription-and-lifetime')
248
+ : 'none';
249
+ const supabase = seed.supabase === true
250
+ ? true
251
+ : await askBoolean(io, 'Add Supabase Auth, data, and storage?', false);
252
+ return { ...seed, websiteBaseDomain, revenuecat, monetizationMode, supabase };
253
+ }
254
+ finally {
255
+ io.close();
256
+ }
257
+ }
258
+ function runConfigure(args) {
259
+ const parsed = parseArguments(args);
260
+ if (parsed.positionals.length !== 1) {
261
+ throw new Error('Usage: meadow configure <firebase|revenuecat|supabase|assets|signing|store|github>');
262
+ }
263
+ const messages = configureIntegration(parsed.positionals[0], {
264
+ directory: stringOption(parsed.options, 'directory') ?? process.cwd(),
265
+ values: parsed.options,
266
+ });
267
+ for (const message of messages)
268
+ process.stdout.write(`${message}\n`);
269
+ }
270
+ function runAdd(args) {
271
+ const parsed = parseArguments(args);
272
+ if (parsed.positionals.length !== 1) {
273
+ throw new Error('Usage: meadow add <local-data|notifications>');
274
+ }
275
+ const messages = addCapability(parsed.positionals[0], { directory: stringOption(parsed.options, 'directory') ?? process.cwd() }, SYSTEM_COMMAND_RUNNER);
276
+ for (const message of messages)
277
+ process.stdout.write(`${message}\n`);
278
+ }
279
+ function runDoctor(args) {
280
+ const parsed = parseArguments(args);
281
+ if (parsed.positionals.length)
282
+ throw new Error('Usage: meadow doctor [--json]');
283
+ const diagnostics = doctor(stringOption(parsed.options, 'directory') ?? process.cwd());
284
+ printDiagnostics(diagnostics, parsed.options.json === true);
285
+ return diagnostics.some((item) => item.level === 'failure') ? 1 : 0;
286
+ }
287
+ function runVersion(args) {
288
+ const parsed = parseArguments(args);
289
+ if (parsed.positionals.length < 1 || parsed.positionals.length > 2) {
290
+ throw new Error('Usage: meadow version <major|minor|patch|x.y.z> [development|test|production]');
291
+ }
292
+ const config = setApplicationVersion(parsed.positionals[0], parsed.positionals[1], stringOption(parsed.options, 'directory') ?? process.cwd());
293
+ process.stdout.write(`Set application version to ${config.release.version} (${config.release.build}), channel ${config.release.channel}.\n`);
294
+ }
295
+ function runReleaseCheck(args) {
296
+ const parsed = parseArguments(args);
297
+ const platform = parsed.positionals[0] ?? 'all';
298
+ if (!['ios', 'android', 'all'].includes(platform) || parsed.positionals.length > 1) {
299
+ throw new Error('Usage: meadow release-check <ios|android|all> [--json]');
300
+ }
301
+ const diagnostics = releaseCheck(platform, stringOption(parsed.options, 'directory') ?? process.cwd());
302
+ printDiagnostics(diagnostics, parsed.options.json === true);
303
+ return diagnostics.some((item) => item.level === 'failure') ? 1 : 0;
304
+ }
305
+ async function promptForProject(seed) {
306
+ const io = createInterface({ input: process.stdin, output: process.stdout });
307
+ try {
308
+ const defaultName = titleCase(seed.name);
309
+ const name = await ask(io, 'Display name', seed.name.includes('-') ? defaultName : seed.name);
310
+ const defaults = createProjectConfig({ ...seed, name });
311
+ const description = await ask(io, 'Short description', seed.description ?? '');
312
+ const id = await ask(io, 'Bundle/application ID', seed.id ?? seed.androidId ?? defaults.app.identifiers.android);
313
+ const supportEmail = await ask(io, 'Support email (optional)', seed.supportEmail ?? '');
314
+ const privacyUrl = await ask(io, 'Privacy URL (optional)', seed.privacyUrl ?? '');
315
+ const termsUrl = await ask(io, 'Terms URL (optional)', seed.termsUrl ?? '');
316
+ const websiteBaseDomain = seed.websiteUrl
317
+ ? seed.websiteBaseDomain
318
+ : await ask(io, 'Website base domain (optional, e.g. meadow-development.app)', seed.websiteBaseDomain ?? '');
319
+ const orientation = await askChoice(io, 'Orientation', ['any', 'portrait', 'landscape'], seed.orientation ?? 'any');
320
+ const devices = await askChoice(io, 'Devices', ['both', 'phone', 'tablet'], 'both');
321
+ const platformDefault = seed.platforms?.length === 1 ? seed.platforms[0] : 'both';
322
+ const platforms = await askChoice(io, 'Platforms', ['both', 'ios', 'android'], platformDefault);
323
+ const revenuecat = await askBoolean(io, 'Include RevenueCat?', seed.revenuecat ?? false);
324
+ const monetizationMode = revenuecat
325
+ ? await askChoice(io, 'Monetization mode', ['subscription-and-lifetime', 'subscription', 'lifetime'], seed.monetizationMode ?? 'subscription-and-lifetime')
326
+ : 'none';
327
+ const supabase = await askBoolean(io, 'Include Supabase Auth, data, and storage?', seed.supabase ?? false);
328
+ return {
329
+ name,
330
+ id,
331
+ description,
332
+ supportEmail,
333
+ privacyUrl,
334
+ termsUrl,
335
+ websiteBaseDomain,
336
+ orientation,
337
+ devices: devices === 'both' ? ['phone', 'tablet'] : [devices],
338
+ platforms: platforms === 'both' ? ['ios', 'android'] : [platforms],
339
+ revenuecat,
340
+ monetizationMode,
341
+ supabase,
342
+ };
343
+ }
344
+ finally {
345
+ io.close();
346
+ }
347
+ }
348
+ function configuredNewAnswers(value) {
349
+ if (value === undefined)
350
+ return {};
351
+ if (typeof value !== 'string')
352
+ throw new Error('--config requires a JSON file path.');
353
+ const parsed = JSON.parse(readFileSync(resolve(value), 'utf8'));
354
+ if (isRecord(parsed) && parsed.version === 2) {
355
+ const config = validateProjectConfig(parsed);
356
+ return {
357
+ name: config.app.name,
358
+ slug: config.app.slug,
359
+ iosId: config.app.identifiers.ios,
360
+ androidId: config.app.identifiers.android,
361
+ description: config.app.description,
362
+ supportEmail: config.links.supportEmail,
363
+ supportUrl: config.links.supportUrl,
364
+ privacyUrl: config.links.privacyUrl,
365
+ termsUrl: config.links.termsUrl,
366
+ websiteUrl: config.links.websiteUrl,
367
+ platforms: config.app.platforms,
368
+ orientation: config.app.orientation,
369
+ devices: config.app.devices,
370
+ revenuecat: config.services.revenuecat.enabled,
371
+ monetizationMode: config.services.revenuecat.mode,
372
+ supabase: config.services.supabase.enabled,
373
+ };
374
+ }
375
+ if (!isRecord(parsed))
376
+ throw new Error('--config must contain a JSON object.');
377
+ return parsed;
378
+ }
379
+ async function ask(io, label, defaultValue) {
380
+ const answer = (await io.question(`${label}${defaultValue ? ` [${defaultValue}]` : ''}: `)).trim();
381
+ return answer || defaultValue;
382
+ }
383
+ async function askBoolean(io, label, defaultValue) {
384
+ const suffix = defaultValue ? 'Y/n' : 'y/N';
385
+ const answer = (await io.question(`${label} [${suffix}]: `)).trim().toLowerCase();
386
+ if (!answer)
387
+ return defaultValue;
388
+ if (['y', 'yes'].includes(answer))
389
+ return true;
390
+ if (['n', 'no'].includes(answer))
391
+ return false;
392
+ throw new Error(`${label} must be answered yes or no.`);
393
+ }
394
+ async function askChoice(io, label, choices, defaultValue) {
395
+ const answer = await ask(io, `${label} (${choices.join('/')})`, defaultValue);
396
+ if (!choices.includes(answer))
397
+ throw new Error(`${label} must be one of ${choices.join(', ')}.`);
398
+ return answer;
399
+ }
400
+ function printDiagnostics(diagnostics, json) {
401
+ if (json) {
402
+ process.stdout.write(`${JSON.stringify(diagnostics, null, 2)}\n`);
403
+ return;
404
+ }
405
+ const icon = { pass: '✓', warning: '!', failure: '✗' };
406
+ for (const diagnostic of diagnostics) {
407
+ process.stdout.write(`${icon[diagnostic.level]} ${diagnostic.message}\n`);
408
+ }
409
+ }
410
+ function visibility(value) {
411
+ const normalized = typeof value === 'string' ? value : 'private';
412
+ if (!['private', 'public', 'internal'].includes(normalized)) {
413
+ throw new Error('--visibility must be private, public, or internal.');
414
+ }
415
+ return normalized;
416
+ }
417
+ function stringOption(options, name) {
418
+ const value = options[name];
419
+ if (value === undefined)
420
+ return undefined;
421
+ if (typeof value !== 'string')
422
+ throw new Error(`--${name} requires a value.`);
423
+ return value;
424
+ }
425
+ function platformVersion() {
426
+ const cliDirectory = dirname(fileURLToPath(import.meta.url));
427
+ const path = resolve(cliDirectory, '../../package.json');
428
+ const packageJson = JSON.parse(readFileSync(path, 'utf8'));
429
+ if (typeof packageJson.version !== 'string')
430
+ throw new Error('Could not read Meadow Platform version.');
431
+ return packageJson.version;
432
+ }
433
+ function titleCase(value) {
434
+ return value
435
+ .split(/[-_\s]+/)
436
+ .filter(Boolean)
437
+ .map((part) => `${part[0]?.toUpperCase() ?? ''}${part.slice(1)}`)
438
+ .join(' ');
439
+ }
440
+ function helpText() {
441
+ return `Meadow CLI
442
+
443
+ Usage:
444
+ meadow new <name> [--yes] [--config file] [--website-base-domain domain] [--no-install] [--no-git] [--github]
445
+ meadow init [--yes] [--config file] [--website-base-domain domain] [--dry-run] [--no-install] [--skip-visual-baselines]
446
+ meadow sync [--check] [--no-install]
447
+ meadow add <local-data|notifications>
448
+ meadow configure <firebase|revenuecat|supabase|assets|signing|store|github> [options]
449
+ meadow doctor [--json]
450
+ meadow version <major|minor|patch|x.y.z> [development|test|production]
451
+ meadow release-check <ios|android|all> [--json]
452
+
453
+ Run meadow configure <target> --help is not required; missing values are reported by name.
454
+ `;
455
+ }
456
+ function isRecord(value) {
457
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
458
+ }
459
+ function errorMessage(error) {
460
+ return error instanceof Error ? error.message : String(error);
461
+ }
462
+ if (process.argv[1] &&
463
+ realpathSync.native(resolve(process.argv[1])) === realpathSync.native(fileURLToPath(import.meta.url))) {
464
+ process.exitCode = await run();
465
+ }
466
+ //# sourceMappingURL=meadow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meadow.js","sourceRoot":"","sources":["../../src/cli/meadow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const PRODUCT_BRIEF_PATH = "PRODUCT_BRIEF.md";
2
+ export declare const PRODUCT_BRIEF_TEMPLATE = "# Product brief\n\nReplace the bracketed prompts with product decisions as they become clear. Keep this brief short and current. Unfilled prompts are questions, not requirements.\n\n## Purpose\n\n[Who does this app help, what problem does it solve, and what outcome should it provide?]\n\n## Primary user\n\n[Who will use the app, and in what situation?]\n\n## Core jobs\n\n- [The first thing a user needs to do]\n- [The second thing]\n- [The third thing]\n\n## Product rules\n\n- [Important terms and their meanings]\n- [How important values are recorded or calculated]\n- [What users may edit or delete]\n\n## Experience\n\n[How should the app feel? Name existing screens or flows to use as references when available.]\n\n## First usable version\n\n[One end-to-end task a user can complete, and the observable result that makes it done.]\n\n## Later\n\n[Ideas intentionally deferred for now.]\n";
3
+ //# sourceMappingURL=product-brief.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-brief.d.ts","sourceRoot":"","sources":["../../src/cli/product-brief.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AAErD,eAAO,MAAM,sBAAsB,q4BAmClC,CAAC"}
@@ -0,0 +1,38 @@
1
+ export const PRODUCT_BRIEF_PATH = 'PRODUCT_BRIEF.md';
2
+ export const PRODUCT_BRIEF_TEMPLATE = `# Product brief
3
+
4
+ Replace the bracketed prompts with product decisions as they become clear. Keep this brief short and current. Unfilled prompts are questions, not requirements.
5
+
6
+ ## Purpose
7
+
8
+ [Who does this app help, what problem does it solve, and what outcome should it provide?]
9
+
10
+ ## Primary user
11
+
12
+ [Who will use the app, and in what situation?]
13
+
14
+ ## Core jobs
15
+
16
+ - [The first thing a user needs to do]
17
+ - [The second thing]
18
+ - [The third thing]
19
+
20
+ ## Product rules
21
+
22
+ - [Important terms and their meanings]
23
+ - [How important values are recorded or calculated]
24
+ - [What users may edit or delete]
25
+
26
+ ## Experience
27
+
28
+ [How should the app feel? Name existing screens or flows to use as references when available.]
29
+
30
+ ## First usable version
31
+
32
+ [One end-to-end task a user can complete, and the observable result that makes it done.]
33
+
34
+ ## Later
35
+
36
+ [Ideas intentionally deferred for now.]
37
+ `;
38
+ //# sourceMappingURL=product-brief.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-brief.js","sourceRoot":"","sources":["../../src/cli/product-brief.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAErD,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCrC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { CommandRunner } from './commands.js';
2
+ export declare const LOCAL_DATA_PACKAGE_VERSION: "8.1.1";
3
+ export declare const JEEP_SQLITE_PACKAGE_VERSION: "2.8.0";
4
+ export declare const SQL_JS_PACKAGE_VERSION: "1.11.0";
5
+ export declare const LOCAL_DATA_DATABASE_VERSION = 1;
6
+ export declare const LOCAL_NOTIFICATIONS_PACKAGE_VERSION: "8.3.1";
7
+ export declare function addNotifications(directory: string, runner: CommandRunner): string[];
8
+ export declare function addLocalData(directory: string, runner: CommandRunner): string[];
9
+ export declare function localDataFiles(slug: string): ReadonlyMap<string, string>;
10
+ //# sourceMappingURL=recipes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/cli/recipes.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,eAAO,MAAM,0BAA0B,SAAsB,CAAC;AAC9D,eAAO,MAAM,2BAA2B,SAAuB,CAAC;AAGhE,eAAO,MAAM,sBAAsB,UAAkB,CAAC;AACtD,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAC7C,eAAO,MAAM,mCAAmC,SAA+B,CAAC;AAKhF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAkEnF;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAqE/E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CASxE"}