@meadow-studio/platform 0.0.0-stage → 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.
- package/MeadowPlatform.podspec +17 -0
- package/Package.swift +23 -0
- package/README.md +147 -2
- package/android/build.gradle +42 -0
- package/android/src/main/AndroidManifest.xml +1 -0
- package/android/src/main/java/app/meadow/platform/MeadowAppRatingPlugin.java +38 -0
- package/dist/cli/commands.d.ts +74 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +1062 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/config.d.ts +123 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +428 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/meadow.d.ts +8 -0
- package/dist/cli/meadow.d.ts.map +1 -0
- package/dist/cli/meadow.js +463 -0
- package/dist/cli/meadow.js.map +1 -0
- package/dist/cli/recipes.d.ts +10 -0
- package/dist/cli/recipes.d.ts.map +1 -0
- package/dist/cli/recipes.js +575 -0
- package/dist/cli/recipes.js.map +1 -0
- package/dist/cli/sync.d.ts +14 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +310 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/cli/templates.d.ts +27 -0
- package/dist/cli/templates.d.ts.map +1 -0
- package/dist/cli/templates.js +1246 -0
- package/dist/cli/templates.js.map +1 -0
- package/dist/cli/website.d.ts +5 -0
- package/dist/cli/website.d.ts.map +1 -0
- package/dist/cli/website.js +262 -0
- package/dist/cli/website.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/notifications.d.ts +119 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +320 -0
- package/dist/notifications.js.map +1 -0
- package/dist/platform.d.ts +163 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +623 -0
- package/dist/platform.js.map +1 -0
- package/dist/purchases.d.ts +88 -0
- package/dist/purchases.d.ts.map +1 -0
- package/dist/purchases.js +296 -0
- package/dist/purchases.js.map +1 -0
- package/dist/ui/app-build.component.d.ts +18 -0
- package/dist/ui/app-build.component.d.ts.map +1 -0
- package/dist/ui/app-build.component.js +56 -0
- package/dist/ui/app-build.component.js.map +1 -0
- package/dist/ui/app-build.model.d.ts +11 -0
- package/dist/ui/app-build.model.d.ts.map +1 -0
- package/dist/ui/app-build.model.js +18 -0
- package/dist/ui/app-build.model.js.map +1 -0
- package/dist/ui/app-links.component.d.ts +14 -0
- package/dist/ui/app-links.component.d.ts.map +1 -0
- package/dist/ui/app-links.component.js +77 -0
- package/dist/ui/app-links.component.js.map +1 -0
- package/dist/ui/app-links.model.d.ts +18 -0
- package/dist/ui/app-links.model.d.ts.map +1 -0
- package/dist/ui/app-links.model.js +17 -0
- package/dist/ui/app-links.model.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +5 -0
- package/dist/ui/index.js.map +1 -0
- package/docs/CLI.md +376 -0
- package/docs/PLATFORM_GUIDE.md +422 -0
- package/docs/POC_FINDINGS.md +218 -0
- package/docs/PROJECT_BRIEF.md +501 -0
- package/docs/RELEASING.md +49 -0
- package/docs/V0.1_PATH.md +310 -0
- package/ios/Sources/MeadowPlatformPlugin/MeadowAppRatingPlugin.swift +39 -0
- package/package.json +89 -4
- package/schema/meadow-config.schema.json +250 -0
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
export const MEADOW_CONFIG_FILE = 'meadow.config.json';
|
|
4
|
+
export const MEADOW_CONFIG_SCHEMA = './node_modules/@meadow-studio/platform/schema/meadow-config.schema.json';
|
|
5
|
+
export function slugify(value) {
|
|
6
|
+
const slug = value
|
|
7
|
+
.normalize('NFKD')
|
|
8
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
9
|
+
.toLowerCase()
|
|
10
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
11
|
+
.replace(/^-+|-+$/g, '');
|
|
12
|
+
if (!slug)
|
|
13
|
+
throw new Error('App name must contain at least one letter or number.');
|
|
14
|
+
return slug;
|
|
15
|
+
}
|
|
16
|
+
export function compactSlug(slug) {
|
|
17
|
+
return slug.replace(/-/g, '');
|
|
18
|
+
}
|
|
19
|
+
export function createProjectConfig(answers) {
|
|
20
|
+
const name = requiredText(answers.name, 'app name');
|
|
21
|
+
const slug = answers.slug ? slugify(answers.slug) : slugify(name);
|
|
22
|
+
const defaultId = answers.id?.trim() || `app.meadow.${compactSlug(slug)}`;
|
|
23
|
+
const revenuecat = answers.revenuecat === true;
|
|
24
|
+
const supabase = answers.supabase === true;
|
|
25
|
+
const devices = answers.devices?.length ? [...answers.devices] : ['phone', 'tablet'];
|
|
26
|
+
const baseDomain = answers.websiteBaseDomain?.trim().toLowerCase();
|
|
27
|
+
if (baseDomain && !/^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$/.test(baseDomain)) {
|
|
28
|
+
throw new Error('Website base domain must be a DNS name such as meadow-development.app.');
|
|
29
|
+
}
|
|
30
|
+
const websiteUrl = answers.websiteUrl?.trim() ||
|
|
31
|
+
(baseDomain
|
|
32
|
+
? `https://${slug}.${baseDomain}`
|
|
33
|
+
: undefined);
|
|
34
|
+
return validateProjectConfig({
|
|
35
|
+
$schema: MEADOW_CONFIG_SCHEMA,
|
|
36
|
+
version: 2,
|
|
37
|
+
app: {
|
|
38
|
+
name,
|
|
39
|
+
slug,
|
|
40
|
+
description: answers.description?.trim() ?? '',
|
|
41
|
+
identifiers: {
|
|
42
|
+
ios: answers.iosId?.trim() || defaultId,
|
|
43
|
+
android: answers.androidId?.trim() || defaultId,
|
|
44
|
+
},
|
|
45
|
+
platforms: answers.platforms?.length ? [...answers.platforms] : ['ios', 'android'],
|
|
46
|
+
orientation: answers.orientation ?? 'any',
|
|
47
|
+
devices,
|
|
48
|
+
},
|
|
49
|
+
links: {
|
|
50
|
+
supportEmail: answers.supportEmail?.trim() || 'oestbalmer@gmail.com',
|
|
51
|
+
...(answers.supportUrl?.trim() ? { supportUrl: answers.supportUrl.trim() } : {}),
|
|
52
|
+
...(answers.privacyUrl?.trim() ? { privacyUrl: answers.privacyUrl.trim() } : {}),
|
|
53
|
+
...(answers.termsUrl?.trim() ? { termsUrl: answers.termsUrl.trim() } : {}),
|
|
54
|
+
...(websiteUrl ? { websiteUrl } : {}),
|
|
55
|
+
},
|
|
56
|
+
store: {},
|
|
57
|
+
services: {
|
|
58
|
+
firebase: {
|
|
59
|
+
enabled: true,
|
|
60
|
+
configured: false,
|
|
61
|
+
analyticsConsent: 'explicit',
|
|
62
|
+
crashlyticsConsent: 'explicit',
|
|
63
|
+
},
|
|
64
|
+
revenuecat: {
|
|
65
|
+
enabled: revenuecat,
|
|
66
|
+
configured: false,
|
|
67
|
+
mode: revenuecat ? answers.monetizationMode ?? 'subscription-and-lifetime' : 'none',
|
|
68
|
+
productIds: [],
|
|
69
|
+
},
|
|
70
|
+
supabase: {
|
|
71
|
+
enabled: supabase,
|
|
72
|
+
configured: false,
|
|
73
|
+
auth: supabase ? 'email-otp' : 'none',
|
|
74
|
+
storage: supabase,
|
|
75
|
+
urlVariable: 'MEADOW_SUPABASE_URL',
|
|
76
|
+
publishableKeyVariable: 'MEADOW_SUPABASE_PUBLISHABLE_KEY',
|
|
77
|
+
},
|
|
78
|
+
localData: { enabled: false, configured: false, databaseVersion: 0 },
|
|
79
|
+
notifications: { enabled: false, configured: false },
|
|
80
|
+
},
|
|
81
|
+
environments: defaultEnvironments(),
|
|
82
|
+
analytics: { events: {} },
|
|
83
|
+
ci: { provider: 'github', visualViewports: devices },
|
|
84
|
+
release: { version: '0.1.0', build: 1, channel: 'development' },
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
export function readProjectConfig(directory = process.cwd()) {
|
|
88
|
+
const path = resolve(directory, MEADOW_CONFIG_FILE);
|
|
89
|
+
let parsed;
|
|
90
|
+
try {
|
|
91
|
+
parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
throw new Error(`Could not read ${path}: ${error instanceof Error ? error.message : String(error)}`);
|
|
95
|
+
}
|
|
96
|
+
return validateProjectConfig(parsed);
|
|
97
|
+
}
|
|
98
|
+
export function writeProjectConfig(config, directory = process.cwd()) {
|
|
99
|
+
writeFileSync(resolve(directory, MEADOW_CONFIG_FILE), `${JSON.stringify(validateProjectConfig(config), null, 2)}\n`);
|
|
100
|
+
}
|
|
101
|
+
export function validateProjectConfig(input) {
|
|
102
|
+
const value = input;
|
|
103
|
+
if (!isRecord(value) || value.version !== 2 || !isRecord(value.app)) {
|
|
104
|
+
throw new Error('Invalid Meadow config: expected version 2 with an app object.');
|
|
105
|
+
}
|
|
106
|
+
assertOnlyKeys(value, ['$schema', 'version', 'app', 'links', 'store', 'services', 'environments', 'analytics', 'ci', 'release'], 'root');
|
|
107
|
+
const app = value.app;
|
|
108
|
+
assertOnlyKeys(app, ['name', 'slug', 'description', 'identifiers', 'platforms', 'orientation', 'devices'], 'app');
|
|
109
|
+
const name = requiredText(app.name, 'app.name');
|
|
110
|
+
const slug = requiredText(app.slug, 'app.slug');
|
|
111
|
+
if (slugify(slug) !== slug)
|
|
112
|
+
throw new Error('Invalid Meadow config: app.slug is not canonical.');
|
|
113
|
+
if (!isRecord(app.identifiers))
|
|
114
|
+
throw new Error('Invalid Meadow config: app.identifiers is required.');
|
|
115
|
+
assertOnlyKeys(app.identifiers, ['ios', 'android'], 'app.identifiers');
|
|
116
|
+
const iosId = applicationId(app.identifiers.ios, 'app.identifiers.ios');
|
|
117
|
+
const androidId = applicationId(app.identifiers.android, 'app.identifiers.android');
|
|
118
|
+
const platforms = normalizeEnumArray(app.platforms, ['ios', 'android'], 'app.platforms');
|
|
119
|
+
const orientation = String(app.orientation);
|
|
120
|
+
if (!['any', 'portrait', 'landscape'].includes(orientation)) {
|
|
121
|
+
throw new Error('Invalid Meadow config: app.orientation must be any, portrait, or landscape.');
|
|
122
|
+
}
|
|
123
|
+
const devices = normalizeEnumArray(app.devices, ['phone', 'tablet'], 'app.devices');
|
|
124
|
+
const links = optionalRecord(value.links, 'links');
|
|
125
|
+
const store = optionalRecord(value.store, 'store');
|
|
126
|
+
assertOnlyKeys(links, ['supportEmail', 'supportUrl', 'privacyUrl', 'termsUrl', 'websiteUrl'], 'links');
|
|
127
|
+
assertOnlyKeys(store, ['appleAppId', 'appStoreUrl', 'playStoreUrl'], 'store');
|
|
128
|
+
if (!isRecord(value.services))
|
|
129
|
+
throw new Error('Invalid Meadow config: services is required.');
|
|
130
|
+
assertOnlyKeys(value.services, ['firebase', 'revenuecat', 'supabase', 'localData', 'notifications'], 'services');
|
|
131
|
+
const firebase = value.services.firebase;
|
|
132
|
+
const revenuecat = value.services.revenuecat;
|
|
133
|
+
const supabase = value.services.supabase;
|
|
134
|
+
const localData = value.services.localData;
|
|
135
|
+
const notifications = value.services.notifications;
|
|
136
|
+
if (!isRecord(firebase) ||
|
|
137
|
+
!isRecord(revenuecat) ||
|
|
138
|
+
!isRecord(supabase) ||
|
|
139
|
+
!isRecord(localData) ||
|
|
140
|
+
!isRecord(notifications)) {
|
|
141
|
+
throw new Error('Invalid Meadow config: all service sections are required.');
|
|
142
|
+
}
|
|
143
|
+
assertOnlyKeys(firebase, ['enabled', 'configured', 'analyticsConsent', 'crashlyticsConsent'], 'services.firebase');
|
|
144
|
+
assertOnlyKeys(revenuecat, ['enabled', 'configured', 'mode', 'entitlementId', 'offeringId', 'productIds'], 'services.revenuecat');
|
|
145
|
+
assertOnlyKeys(supabase, ['enabled', 'configured', 'auth', 'storage', 'projectRef', 'urlVariable', 'publishableKeyVariable'], 'services.supabase');
|
|
146
|
+
assertOnlyKeys(localData, ['enabled', 'configured', 'databaseVersion'], 'services.localData');
|
|
147
|
+
assertOnlyKeys(notifications, ['enabled', 'configured'], 'services.notifications');
|
|
148
|
+
const mode = String(revenuecat.mode);
|
|
149
|
+
if (!['none', 'subscription', 'lifetime', 'subscription-and-lifetime'].includes(mode)) {
|
|
150
|
+
throw new Error('Invalid Meadow config: unsupported RevenueCat mode.');
|
|
151
|
+
}
|
|
152
|
+
const revenuecatEnabled = boolean(revenuecat.enabled, 'services.revenuecat.enabled');
|
|
153
|
+
const revenuecatConfigured = boolean(revenuecat.configured, 'services.revenuecat.configured');
|
|
154
|
+
const revenuecatEntitlementId = optionalText(revenuecat.entitlementId, 'entitlementId').entitlementId;
|
|
155
|
+
const revenuecatOfferingId = optionalText(revenuecat.offeringId, 'offeringId').offeringId;
|
|
156
|
+
if (revenuecatConfigured && (!revenuecatEnabled || !revenuecatEntitlementId || !revenuecatOfferingId)) {
|
|
157
|
+
throw new Error('Invalid Meadow config: configured RevenueCat requires enabled, entitlementId, and offeringId.');
|
|
158
|
+
}
|
|
159
|
+
const auth = String(supabase.auth);
|
|
160
|
+
if (!['none', 'email-otp'].includes(auth)) {
|
|
161
|
+
throw new Error('Invalid Meadow config: unsupported Supabase auth mode.');
|
|
162
|
+
}
|
|
163
|
+
const databaseVersion = nonNegativeInteger(localData.databaseVersion, 'services.localData.databaseVersion');
|
|
164
|
+
const notificationsEnabled = boolean(notifications.enabled, 'services.notifications.enabled');
|
|
165
|
+
const notificationsConfigured = boolean(notifications.configured, 'services.notifications.configured');
|
|
166
|
+
if (notificationsConfigured && !notificationsEnabled) {
|
|
167
|
+
throw new Error('Invalid Meadow config: configured notifications must also be enabled.');
|
|
168
|
+
}
|
|
169
|
+
const environments = normalizeEnvironments(value.environments);
|
|
170
|
+
const analytics = optionalRecord(value.analytics, 'analytics');
|
|
171
|
+
assertOnlyKeys(analytics, ['events'], 'analytics');
|
|
172
|
+
const events = normalizeAnalyticsEvents(analytics.events ?? {});
|
|
173
|
+
if (!isRecord(value.ci) || value.ci.provider !== 'github') {
|
|
174
|
+
throw new Error('Invalid Meadow config: ci.provider must be github.');
|
|
175
|
+
}
|
|
176
|
+
assertOnlyKeys(value.ci, ['provider', 'visualViewports'], 'ci');
|
|
177
|
+
const visualViewports = normalizeEnumArray(value.ci.visualViewports, ['phone', 'tablet'], 'ci.visualViewports');
|
|
178
|
+
if (!isRecord(value.release))
|
|
179
|
+
throw new Error('Invalid Meadow config: release is required.');
|
|
180
|
+
assertOnlyKeys(value.release, ['version', 'build', 'channel'], 'release');
|
|
181
|
+
const releaseVersion = String(value.release.version);
|
|
182
|
+
if (!/^\d+\.\d+\.\d+$/.test(releaseVersion)) {
|
|
183
|
+
throw new Error('Invalid Meadow config: release.version must be x.y.z.');
|
|
184
|
+
}
|
|
185
|
+
const releaseBuild = positiveInteger(value.release.build, 'release.build');
|
|
186
|
+
const releaseChannel = String(value.release.channel);
|
|
187
|
+
if (!['development', 'test', 'production'].includes(releaseChannel)) {
|
|
188
|
+
throw new Error('Invalid Meadow config: unsupported release channel.');
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
$schema: typeof value.$schema === 'string' ? value.$schema : MEADOW_CONFIG_SCHEMA,
|
|
192
|
+
version: 2,
|
|
193
|
+
app: {
|
|
194
|
+
name,
|
|
195
|
+
slug,
|
|
196
|
+
description: typeof app.description === 'string' ? app.description.trim() : '',
|
|
197
|
+
identifiers: { ios: iosId, android: androidId },
|
|
198
|
+
platforms,
|
|
199
|
+
orientation: orientation,
|
|
200
|
+
devices,
|
|
201
|
+
},
|
|
202
|
+
links: {
|
|
203
|
+
...optionalText(links.supportEmail, 'links.supportEmail'),
|
|
204
|
+
...optionalUrl(links.supportUrl, 'links.supportUrl'),
|
|
205
|
+
...optionalUrl(links.privacyUrl, 'links.privacyUrl'),
|
|
206
|
+
...optionalUrl(links.termsUrl, 'links.termsUrl'),
|
|
207
|
+
...optionalUrl(links.websiteUrl, 'links.websiteUrl'),
|
|
208
|
+
},
|
|
209
|
+
store: {
|
|
210
|
+
...optionalText(store.appleAppId, 'store.appleAppId'),
|
|
211
|
+
...optionalUrl(store.appStoreUrl, 'store.appStoreUrl'),
|
|
212
|
+
...optionalUrl(store.playStoreUrl, 'store.playStoreUrl'),
|
|
213
|
+
},
|
|
214
|
+
services: {
|
|
215
|
+
firebase: {
|
|
216
|
+
enabled: boolean(firebase.enabled, 'services.firebase.enabled'),
|
|
217
|
+
configured: boolean(firebase.configured, 'services.firebase.configured'),
|
|
218
|
+
analyticsConsent: literal(firebase.analyticsConsent, 'explicit', 'analyticsConsent'),
|
|
219
|
+
crashlyticsConsent: literal(firebase.crashlyticsConsent, 'explicit', 'crashlyticsConsent'),
|
|
220
|
+
},
|
|
221
|
+
revenuecat: {
|
|
222
|
+
enabled: revenuecatEnabled,
|
|
223
|
+
configured: revenuecatConfigured,
|
|
224
|
+
mode: mode,
|
|
225
|
+
...(revenuecatEntitlementId ? { entitlementId: revenuecatEntitlementId } : {}),
|
|
226
|
+
...(revenuecatOfferingId ? { offeringId: revenuecatOfferingId } : {}),
|
|
227
|
+
productIds: stringArray(revenuecat.productIds ?? [], 'services.revenuecat.productIds'),
|
|
228
|
+
},
|
|
229
|
+
supabase: {
|
|
230
|
+
enabled: boolean(supabase.enabled, 'services.supabase.enabled'),
|
|
231
|
+
configured: boolean(supabase.configured, 'services.supabase.configured'),
|
|
232
|
+
auth: auth,
|
|
233
|
+
storage: boolean(supabase.storage, 'services.supabase.storage'),
|
|
234
|
+
...optionalText(supabase.projectRef, 'services.supabase.projectRef'),
|
|
235
|
+
urlVariable: optionalEnvironmentVariable(supabase.urlVariable, 'services.supabase.urlVariable') ?? 'MEADOW_SUPABASE_URL',
|
|
236
|
+
publishableKeyVariable: optionalEnvironmentVariable(supabase.publishableKeyVariable, 'services.supabase.publishableKeyVariable') ?? 'MEADOW_SUPABASE_PUBLISHABLE_KEY',
|
|
237
|
+
},
|
|
238
|
+
localData: {
|
|
239
|
+
enabled: boolean(localData.enabled, 'services.localData.enabled'),
|
|
240
|
+
configured: boolean(localData.configured, 'services.localData.configured'),
|
|
241
|
+
databaseVersion,
|
|
242
|
+
},
|
|
243
|
+
notifications: {
|
|
244
|
+
enabled: notificationsEnabled,
|
|
245
|
+
configured: notificationsConfigured,
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
environments,
|
|
249
|
+
analytics: { events },
|
|
250
|
+
ci: { provider: 'github', visualViewports },
|
|
251
|
+
release: {
|
|
252
|
+
version: releaseVersion,
|
|
253
|
+
build: releaseBuild,
|
|
254
|
+
channel: releaseChannel,
|
|
255
|
+
},
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
function defaultEnvironments() {
|
|
259
|
+
return {
|
|
260
|
+
development: { runtime: 'development', analytics: false, crashlytics: false },
|
|
261
|
+
test: { runtime: 'device', analytics: false, crashlytics: false },
|
|
262
|
+
production: { runtime: 'production', analytics: true, crashlytics: true },
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
function normalizeEnvironments(value) {
|
|
266
|
+
if (!isRecord(value))
|
|
267
|
+
throw new Error('Invalid Meadow config: environments is required.');
|
|
268
|
+
assertOnlyKeys(value, ['development', 'test', 'production'], 'environments');
|
|
269
|
+
return Object.fromEntries(['development', 'test', 'production'].map((name) => {
|
|
270
|
+
const entry = value[name];
|
|
271
|
+
if (!isRecord(entry))
|
|
272
|
+
throw new Error(`Invalid Meadow config: environments.${name} is required.`);
|
|
273
|
+
assertOnlyKeys(entry, ['runtime', 'analytics', 'crashlytics'], `environments.${name}`);
|
|
274
|
+
const runtime = String(entry.runtime);
|
|
275
|
+
if (!['development', 'device', 'production'].includes(runtime)) {
|
|
276
|
+
throw new Error(`Invalid Meadow config: environments.${name}.runtime is unsupported.`);
|
|
277
|
+
}
|
|
278
|
+
return [name, {
|
|
279
|
+
runtime: runtime,
|
|
280
|
+
analytics: boolean(entry.analytics, `environments.${name}.analytics`),
|
|
281
|
+
crashlytics: boolean(entry.crashlytics, `environments.${name}.crashlytics`),
|
|
282
|
+
}];
|
|
283
|
+
}));
|
|
284
|
+
}
|
|
285
|
+
function normalizeAnalyticsEvents(value) {
|
|
286
|
+
if (!isRecord(value))
|
|
287
|
+
throw new Error('Invalid Meadow config: analytics.events must be an object.');
|
|
288
|
+
return Object.fromEntries(Object.entries(value)
|
|
289
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
290
|
+
.map(([eventName, definition]) => {
|
|
291
|
+
analyticsName(eventName, `analytics event ${eventName}`);
|
|
292
|
+
if (!isRecord(definition))
|
|
293
|
+
throw new Error(`Invalid Meadow config: analytics.events.${eventName} must be an object.`);
|
|
294
|
+
assertOnlyKeys(definition, ['properties'], `analytics.events.${eventName}`);
|
|
295
|
+
const propertiesValue = definition.properties ?? {};
|
|
296
|
+
if (!isRecord(propertiesValue))
|
|
297
|
+
throw new Error(`Invalid Meadow config: analytics.events.${eventName}.properties must be an object.`);
|
|
298
|
+
const properties = Object.fromEntries(Object.entries(propertiesValue)
|
|
299
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
300
|
+
.map(([propertyName, property]) => {
|
|
301
|
+
analyticsName(propertyName, `analytics property ${propertyName}`);
|
|
302
|
+
if (!isRecord(property))
|
|
303
|
+
throw new Error(`Invalid Meadow config: analytics property ${propertyName} must be an object.`);
|
|
304
|
+
assertOnlyKeys(property, ['type', 'required', 'values'], `analytics.events.${eventName}.properties.${propertyName}`);
|
|
305
|
+
const type = String(property.type);
|
|
306
|
+
if (!['string', 'number', 'integer', 'boolean'].includes(type)) {
|
|
307
|
+
throw new Error(`Invalid Meadow config: analytics property ${propertyName} has an unsupported type.`);
|
|
308
|
+
}
|
|
309
|
+
const values = property.values === undefined ? undefined : stringArray(property.values, `analytics property ${propertyName}.values`);
|
|
310
|
+
if (values && type !== 'string')
|
|
311
|
+
throw new Error(`Invalid Meadow config: analytics property ${propertyName}.values requires type string.`);
|
|
312
|
+
return [propertyName, {
|
|
313
|
+
type: type,
|
|
314
|
+
required: property.required === true,
|
|
315
|
+
...(values ? { values } : {}),
|
|
316
|
+
}];
|
|
317
|
+
}));
|
|
318
|
+
return [eventName, { properties }];
|
|
319
|
+
}));
|
|
320
|
+
}
|
|
321
|
+
function analyticsName(value, label) {
|
|
322
|
+
if (!/^[a-z][a-z0-9_]{0,39}$/.test(value)) {
|
|
323
|
+
throw new Error(`Invalid Meadow config: ${label} must use lowercase letters, numbers, and underscores.`);
|
|
324
|
+
}
|
|
325
|
+
return value;
|
|
326
|
+
}
|
|
327
|
+
function applicationId(value, label) {
|
|
328
|
+
const id = requiredText(value, label);
|
|
329
|
+
if (!/^[A-Za-z][A-Za-z0-9_]*(?:\.[A-Za-z][A-Za-z0-9_]*)+$/.test(id)) {
|
|
330
|
+
throw new Error(`Invalid Meadow config: ${label} must be a reverse-domain identifier.`);
|
|
331
|
+
}
|
|
332
|
+
return id;
|
|
333
|
+
}
|
|
334
|
+
function optionalRecord(value, label) {
|
|
335
|
+
if (value === undefined)
|
|
336
|
+
return {};
|
|
337
|
+
if (!isRecord(value))
|
|
338
|
+
throw new Error(`Invalid Meadow config: ${label} must be an object.`);
|
|
339
|
+
return value;
|
|
340
|
+
}
|
|
341
|
+
function requiredText(value, label) {
|
|
342
|
+
if (typeof value !== 'string' || !value.trim())
|
|
343
|
+
throw new Error(`${label} is required.`);
|
|
344
|
+
return value.trim();
|
|
345
|
+
}
|
|
346
|
+
function optionalText(value, label) {
|
|
347
|
+
if (value === undefined || value === null || value === '')
|
|
348
|
+
return {};
|
|
349
|
+
if (typeof value !== 'string')
|
|
350
|
+
throw new Error(`${label} must be text.`);
|
|
351
|
+
const key = label.split('.').at(-1) ?? label;
|
|
352
|
+
const trimmed = value.trim();
|
|
353
|
+
return trimmed ? { [key]: trimmed } : {};
|
|
354
|
+
}
|
|
355
|
+
function assertOnlyKeys(value, allowed, label) {
|
|
356
|
+
const unknown = Object.keys(value).filter((key) => !allowed.includes(key));
|
|
357
|
+
if (unknown.length) {
|
|
358
|
+
throw new Error(`Invalid Meadow config: ${label} contains unknown field ${unknown.join(', ')}.`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
function optionalUrl(value, label) {
|
|
362
|
+
const field = optionalText(value, label);
|
|
363
|
+
const key = label.split('.').at(-1) ?? label;
|
|
364
|
+
if (!field[key])
|
|
365
|
+
return {};
|
|
366
|
+
return { [key]: validatedUrl(field[key], label) };
|
|
367
|
+
}
|
|
368
|
+
function validatedUrl(value, label) {
|
|
369
|
+
let url;
|
|
370
|
+
try {
|
|
371
|
+
url = new URL(value);
|
|
372
|
+
}
|
|
373
|
+
catch {
|
|
374
|
+
throw new Error(`${label} must be an absolute URL.`);
|
|
375
|
+
}
|
|
376
|
+
if (!['http:', 'https:'].includes(url.protocol))
|
|
377
|
+
throw new Error(`${label} must use http or https.`);
|
|
378
|
+
return url.toString();
|
|
379
|
+
}
|
|
380
|
+
function optionalEnvironmentVariable(value, label) {
|
|
381
|
+
if (value === undefined || value === null || value === '')
|
|
382
|
+
return undefined;
|
|
383
|
+
const name = requiredText(value, label);
|
|
384
|
+
if (!/^[A-Z][A-Z0-9_]*$/.test(name)) {
|
|
385
|
+
throw new Error(`Invalid Meadow config: ${label} must be an uppercase environment variable name.`);
|
|
386
|
+
}
|
|
387
|
+
return name;
|
|
388
|
+
}
|
|
389
|
+
function boolean(value, label) {
|
|
390
|
+
if (typeof value !== 'boolean')
|
|
391
|
+
throw new Error(`Invalid Meadow config: ${label} must be boolean.`);
|
|
392
|
+
return value;
|
|
393
|
+
}
|
|
394
|
+
function literal(value, expected, label) {
|
|
395
|
+
if (value !== expected)
|
|
396
|
+
throw new Error(`Invalid Meadow config: ${label} must be ${expected}.`);
|
|
397
|
+
return expected;
|
|
398
|
+
}
|
|
399
|
+
function normalizeEnumArray(value, allowed, label) {
|
|
400
|
+
if (!Array.isArray(value) || !value.length)
|
|
401
|
+
throw new Error(`Invalid Meadow config: ${label} must not be empty.`);
|
|
402
|
+
const normalized = [...new Set(value.map(String))];
|
|
403
|
+
if (normalized.some((entry) => !allowed.includes(entry)))
|
|
404
|
+
throw new Error(`Invalid Meadow config: ${label} contains an unsupported value.`);
|
|
405
|
+
return normalized;
|
|
406
|
+
}
|
|
407
|
+
function stringArray(value, label) {
|
|
408
|
+
if (!Array.isArray(value) || value.some((entry) => typeof entry !== 'string' || !entry.trim())) {
|
|
409
|
+
throw new Error(`Invalid Meadow config: ${label} must contain non-empty strings.`);
|
|
410
|
+
}
|
|
411
|
+
return [...new Set(value.map((entry) => String(entry).trim()))];
|
|
412
|
+
}
|
|
413
|
+
function nonNegativeInteger(value, label) {
|
|
414
|
+
const number = Number(value);
|
|
415
|
+
if (!Number.isInteger(number) || number < 0)
|
|
416
|
+
throw new Error(`Invalid Meadow config: ${label} must be a non-negative integer.`);
|
|
417
|
+
return number;
|
|
418
|
+
}
|
|
419
|
+
function positiveInteger(value, label) {
|
|
420
|
+
const number = Number(value);
|
|
421
|
+
if (!Number.isInteger(number) || number < 1)
|
|
422
|
+
throw new Error(`Invalid Meadow config: ${label} must be a positive integer.`);
|
|
423
|
+
return number;
|
|
424
|
+
}
|
|
425
|
+
function isRecord(value) {
|
|
426
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
427
|
+
}
|
|
428
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export interface ParsedArguments {
|
|
3
|
+
readonly positionals: readonly string[];
|
|
4
|
+
readonly options: Readonly<Record<string, string | boolean>>;
|
|
5
|
+
}
|
|
6
|
+
export declare function run(argv?: string[]): Promise<number>;
|
|
7
|
+
export declare function parseArguments(args: readonly string[]): ParsedArguments;
|
|
8
|
+
//# sourceMappingURL=meadow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meadow.d.ts","sourceRoot":"","sources":["../../src/cli/meadow.ts"],"names":[],"mappings":";AA+BA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAC9D;AAED,wBAAsB,GAAG,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyCvE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,eAAe,CA4BvE"}
|