@getargus/build-tools 0.0.0-stage → 0.3.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/LICENSE +21 -0
- package/README.md +218 -2
- package/bin/argus-build.cjs +8 -0
- package/dist/cli-C6Vb06ix.d.ts +317 -0
- package/dist/cli-Poqz5E1p.d.cts +317 -0
- package/dist/cli.cjs +1283 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.cts +2 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +1254 -0
- package/dist/cli.js.map +1 -0
- package/dist/ids-T7ddcOxQ.d.cts +41 -0
- package/dist/ids-T7ddcOxQ.d.ts +41 -0
- package/dist/index.cjs +1548 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +31 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.js +1486 -0
- package/dist/index.js.map +1 -0
- package/dist/metro.cjs +117 -0
- package/dist/metro.cjs.map +1 -0
- package/dist/metro.d.cts +40 -0
- package/dist/metro.d.ts +40 -0
- package/dist/metro.js +92 -0
- package/dist/metro.js.map +1 -0
- package/dist/next.cjs +609 -0
- package/dist/next.cjs.map +1 -0
- package/dist/next.d.cts +60 -0
- package/dist/next.d.ts +60 -0
- package/dist/next.js +582 -0
- package/dist/next.js.map +1 -0
- package/package.json +67 -3
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import { B as BuildPlatform } from './ids-T7ddcOxQ.cjs';
|
|
2
|
+
|
|
3
|
+
type ArtifactFileKind = 'sourcemap' | 'js_bundle' | 'dsym' | 'proguard' | 'elf';
|
|
4
|
+
/** Mirrors `classify` in crates/cli/src/upload.rs (hermes maps are detected by the CLI from content). */
|
|
5
|
+
declare function classifyArtifact(path: string): ArtifactFileKind | undefined;
|
|
6
|
+
/** Recursive file list, sorted, symlinks not followed. */
|
|
7
|
+
declare function walkFiles(dir: string, opts?: {
|
|
8
|
+
skipDirs?: ReadonlySet<string>;
|
|
9
|
+
}): string[];
|
|
10
|
+
interface UploadMeta {
|
|
11
|
+
release?: string | undefined;
|
|
12
|
+
dist?: string | undefined;
|
|
13
|
+
nativeRelease?: string | undefined;
|
|
14
|
+
nativeBuild?: string | undefined;
|
|
15
|
+
runtimeVersion?: string | undefined;
|
|
16
|
+
gitSha?: string | undefined;
|
|
17
|
+
}
|
|
18
|
+
interface UploadPlan extends UploadMeta {
|
|
19
|
+
/** e.g. `next:browser`, `expo-export:ios`, `native:android`. */
|
|
20
|
+
label: string;
|
|
21
|
+
artifactSetId: string;
|
|
22
|
+
platform: BuildPlatform;
|
|
23
|
+
/** Absolute paths handed to the CLI. A `.dSYM` bundle is passed as its directory. */
|
|
24
|
+
paths: string[];
|
|
25
|
+
/** Every file that will be part of the set, with its kind — what `collect` prints. */
|
|
26
|
+
files: {
|
|
27
|
+
path: string;
|
|
28
|
+
kind: ArtifactFileKind;
|
|
29
|
+
size: number;
|
|
30
|
+
}[];
|
|
31
|
+
/** `--strip-prefix`: removed from JS paths to form the name frames are matched against. */
|
|
32
|
+
stripPrefix?: string | undefined;
|
|
33
|
+
/** `--url-prefix`: prepended to that name. */
|
|
34
|
+
urlPrefix?: string | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Source map → generated file, for maps not named `<generated file>.map` (Turbopack chunks).
|
|
37
|
+
* Only the HTTP transport honours it; the argus CLI names a map after its own file name.
|
|
38
|
+
*/
|
|
39
|
+
generatedFor?: Record<string, string> | undefined;
|
|
40
|
+
/** OTA update (not embedded in a native binary). */
|
|
41
|
+
ota?: boolean | undefined;
|
|
42
|
+
updateId?: string | undefined;
|
|
43
|
+
/** Artifact set of the native build this OTA update runs on (native symbols are resolved there). */
|
|
44
|
+
parentSetId?: string | undefined;
|
|
45
|
+
warnings: string[];
|
|
46
|
+
}
|
|
47
|
+
interface NextPlanOptions extends UploadMeta {
|
|
48
|
+
/** Project directory containing the build output. Default `process.cwd()`. */
|
|
49
|
+
projectDir?: string;
|
|
50
|
+
/** Build output directory relative to the project. Default `.next`. */
|
|
51
|
+
distDir?: string;
|
|
52
|
+
/** Artifact set of the browser chunks. */
|
|
53
|
+
artifactSetId: string;
|
|
54
|
+
/** Artifact set of the server chunks. Default `<artifactSetId>-node`. */
|
|
55
|
+
serverArtifactSetId?: string;
|
|
56
|
+
/** Public path the browser loads chunks from. Default `/_next/` (add your basePath / assetPrefix path). */
|
|
57
|
+
urlPrefix?: string;
|
|
58
|
+
/** Upload the generated JS next to each map. Default true. */
|
|
59
|
+
includeBundles?: boolean;
|
|
60
|
+
}
|
|
61
|
+
declare function planNext(options: NextPlanOptions): UploadPlan[];
|
|
62
|
+
/** Deletes browser `.map` files from the build output so they are never deployed or served. Returns the removed paths. */
|
|
63
|
+
declare function browserSourceMaps(projectDir: string, distDir?: string): string[];
|
|
64
|
+
type MobilePlatform = 'ios' | 'android';
|
|
65
|
+
interface ExpoExportPlanOptions extends UploadMeta {
|
|
66
|
+
/** Output directory of `expo export`. Default `dist`. */
|
|
67
|
+
exportDir?: string;
|
|
68
|
+
/** One artifact set per platform (an artifact set has exactly one platform). */
|
|
69
|
+
artifactSetIds: Partial<Record<MobilePlatform, string>>;
|
|
70
|
+
/** Limit to these platforms. Default: every platform in `metadata.json` that has an id. */
|
|
71
|
+
platforms?: MobilePlatform[];
|
|
72
|
+
/** OTA update id per platform (or one string for a single platform). Falls back to `metadata.json` when it carries one. */
|
|
73
|
+
updateId?: string | Partial<Record<MobilePlatform, string>>;
|
|
74
|
+
/** Artifact set of the native build the update targets, per platform. */
|
|
75
|
+
parentSetIds?: Partial<Record<MobilePlatform, string>>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* One plan per platform from `expo export` output: the bundle named by
|
|
79
|
+
* `metadata.json → fileMetadata.<platform>.bundle` and its `.map` (export with
|
|
80
|
+
* `--dump-sourcemap` / `--source-maps`). Marked `--ota` with update id, runtime version and the
|
|
81
|
+
* parent (native build) set.
|
|
82
|
+
*/
|
|
83
|
+
declare function planExpoExport(options: ExpoExportPlanOptions): UploadPlan[];
|
|
84
|
+
interface NativePlanOptions extends UploadMeta {
|
|
85
|
+
platform: MobilePlatform;
|
|
86
|
+
artifactSetId: string;
|
|
87
|
+
/**
|
|
88
|
+
* Directories / files to search: an `.xcarchive`, a `dSYMs` folder, `ios/build`,
|
|
89
|
+
* `android/app/build`, an EAS artifacts folder, or explicit files.
|
|
90
|
+
*/
|
|
91
|
+
searchPaths: string[];
|
|
92
|
+
/** Embedded JS bundle and its (Hermes-composed) source map, when not found by the search. */
|
|
93
|
+
bundle?: string;
|
|
94
|
+
sourcemap?: string;
|
|
95
|
+
/** Android: also upload unstripped `.so` files found under the search paths. Default false. */
|
|
96
|
+
includeNativeLibs?: boolean;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The embedded build of one platform — one artifact set holding
|
|
100
|
+
* - iOS: every `.dSYM` bundle + `main.jsbundle(.map)`;
|
|
101
|
+
* - Android: R8 `mapping.txt` + `index.android.bundle(.map)` (+ unstripped `.so` on request).
|
|
102
|
+
* JS files keep their file name (`index.android.bundle`), which is what Hermes frames report.
|
|
103
|
+
*/
|
|
104
|
+
declare function planNative(options: NativePlanOptions): UploadPlan;
|
|
105
|
+
interface FilesPlanOptions extends UploadMeta {
|
|
106
|
+
artifactSetId: string;
|
|
107
|
+
platform: BuildPlatform;
|
|
108
|
+
/** Files or directories; directories are searched for `*.map` with their generated file. */
|
|
109
|
+
paths: string[];
|
|
110
|
+
stripPrefix?: string;
|
|
111
|
+
urlPrefix?: string;
|
|
112
|
+
includeBundles?: boolean;
|
|
113
|
+
}
|
|
114
|
+
/** Any bundler output (esbuild, Vite, a worker build…): source maps plus their generated files. */
|
|
115
|
+
declare function planFiles(options: FilesPlanOptions): UploadPlan;
|
|
116
|
+
/**
|
|
117
|
+
* Arguments for the Rust CLI: `argus artifacts upload …` (flags as defined in
|
|
118
|
+
* crates/cli/src/upload.rs). The upload key is never put on the command line; the CLI reads
|
|
119
|
+
* `ARGUS_UPLOAD_KEY` (and `ARGUS_URL`) from the environment.
|
|
120
|
+
*/
|
|
121
|
+
declare function uploadArgs(plan: UploadPlan, opts?: {
|
|
122
|
+
dryRun?: boolean;
|
|
123
|
+
url?: string;
|
|
124
|
+
}): string[];
|
|
125
|
+
/** The name a JS file gets in the manifest (`bundle_name`), mirroring the CLI's rule. For display and tests. */
|
|
126
|
+
declare function manifestName(plan: Pick<UploadPlan, 'stripPrefix' | 'urlPrefix' | 'generatedFor'>, file: string): string;
|
|
127
|
+
/** A copy-pasteable shell command for a plan (paths relative to `cwd` when inside it). */
|
|
128
|
+
declare function formatCommand(bin: string, args: string[], cwd?: string): string;
|
|
129
|
+
|
|
130
|
+
type ProjectKind = 'next' | 'expo' | 'react-native' | 'node';
|
|
131
|
+
type PackageManager = 'pnpm' | 'yarn' | 'npm' | 'bun';
|
|
132
|
+
interface ProjectInfo {
|
|
133
|
+
kind: ProjectKind;
|
|
134
|
+
dir: string;
|
|
135
|
+
/** Package name from `package.json`, for messages only. */
|
|
136
|
+
name: string | undefined;
|
|
137
|
+
typescript: boolean;
|
|
138
|
+
/** `"type": "module"` in package.json. */
|
|
139
|
+
esm: boolean;
|
|
140
|
+
packageManager: PackageManager;
|
|
141
|
+
/** All dependency names (dependencies + devDependencies). */
|
|
142
|
+
deps: Set<string>;
|
|
143
|
+
/** Next: `src` when the app lives in `src/`, else ``. Node: `src` when that directory exists. */
|
|
144
|
+
sourceDir: string;
|
|
145
|
+
/** Next only. */
|
|
146
|
+
router?: 'app' | 'pages' | undefined;
|
|
147
|
+
nextConfig?: string | undefined;
|
|
148
|
+
/** Next only: `[major, minor]` of the installed (else declared) version. */
|
|
149
|
+
nextVersion?: [number, number] | undefined;
|
|
150
|
+
/** Node only: `main` of package.json when it names a file. */
|
|
151
|
+
main?: string | undefined;
|
|
152
|
+
}
|
|
153
|
+
interface PackageJson {
|
|
154
|
+
name?: unknown;
|
|
155
|
+
type?: unknown;
|
|
156
|
+
main?: unknown;
|
|
157
|
+
packageManager?: unknown;
|
|
158
|
+
dependencies?: Record<string, string>;
|
|
159
|
+
devDependencies?: Record<string, string>;
|
|
160
|
+
}
|
|
161
|
+
/** Lockfile next to package.json, else in a parent (a workspace keeps one lockfile at its root). */
|
|
162
|
+
declare function detectPackageManager(dir: string, pkg?: PackageJson): PackageManager;
|
|
163
|
+
/** Reads `package.json` in `dir` (only there: in a monorepo, run it inside the app's package). */
|
|
164
|
+
declare function detectProject(dir: string): ProjectInfo;
|
|
165
|
+
interface InitAction {
|
|
166
|
+
/** `create`/`append`/`modify` write; `ok` is already in place; `manual` is printed for the user to do. */
|
|
167
|
+
type: 'create' | 'append' | 'modify' | 'ok' | 'manual';
|
|
168
|
+
/** Path relative to the project directory. */
|
|
169
|
+
file: string;
|
|
170
|
+
/** One line: what and why. */
|
|
171
|
+
summary: string;
|
|
172
|
+
/** create: the whole file. append: the text added at the end. modify: the whole new file. */
|
|
173
|
+
content?: string;
|
|
174
|
+
/** What is shown for the action: the new file, the appended lines, a diff or a snippet. */
|
|
175
|
+
preview?: string;
|
|
176
|
+
}
|
|
177
|
+
interface InitPlan {
|
|
178
|
+
project: ProjectInfo;
|
|
179
|
+
actions: InitAction[];
|
|
180
|
+
/** Missing packages, as the command for the project's package manager. */
|
|
181
|
+
install: string | undefined;
|
|
182
|
+
/** What is left for the user, in order. */
|
|
183
|
+
nextSteps: string[];
|
|
184
|
+
}
|
|
185
|
+
interface InitOptions {
|
|
186
|
+
/** Project directory. Default `process.cwd()`. */
|
|
187
|
+
dir?: string;
|
|
188
|
+
/** Written to a git-ignored local env file (`.env.local` for Next, `.env` for Node); never to a tracked file. */
|
|
189
|
+
dsn?: string;
|
|
190
|
+
}
|
|
191
|
+
/** Decides what to do. Reads the project, writes nothing. */
|
|
192
|
+
declare function planInit(options?: InitOptions): InitPlan;
|
|
193
|
+
/** Applies the writing actions of a plan. Refuses to replace a file that appeared since planning. */
|
|
194
|
+
declare function applyInit(plan: InitPlan): string[];
|
|
195
|
+
type RenderMode = 'applied' | 'dry-run' | 'preview';
|
|
196
|
+
/** The full report of a plan. */
|
|
197
|
+
declare function renderInit(plan: InitPlan, mode: RenderMode): string;
|
|
198
|
+
interface RunInitOptions extends InitOptions {
|
|
199
|
+
/** Write without asking. */
|
|
200
|
+
yes?: boolean;
|
|
201
|
+
/** Never write. Wins over `yes`. */
|
|
202
|
+
dryRun?: boolean;
|
|
203
|
+
/** Asked once when neither flag is given and there is something to write. Absent: do not ask, do not write. */
|
|
204
|
+
confirm?: (question: string) => Promise<boolean>;
|
|
205
|
+
out?: (text: string) => void;
|
|
206
|
+
}
|
|
207
|
+
/** Plan, show, and write when allowed. Returns the plan and the files written. */
|
|
208
|
+
declare function runInit(options?: RunInitOptions): Promise<{
|
|
209
|
+
plan: InitPlan;
|
|
210
|
+
written: string[];
|
|
211
|
+
}>;
|
|
212
|
+
|
|
213
|
+
type HttpFetch = (url: string, init: {
|
|
214
|
+
method: string;
|
|
215
|
+
headers: Record<string, string>;
|
|
216
|
+
body?: string | Uint8Array;
|
|
217
|
+
}) => Promise<{
|
|
218
|
+
status: number;
|
|
219
|
+
text(): Promise<string>;
|
|
220
|
+
}>;
|
|
221
|
+
interface HttpUploadOptions {
|
|
222
|
+
/** Server base URL, e.g. `https://argus.example.com`. */
|
|
223
|
+
url: string;
|
|
224
|
+
/** Upload key (kind `upload`). */
|
|
225
|
+
uploadKey: string;
|
|
226
|
+
dryRun?: boolean;
|
|
227
|
+
fetch?: HttpFetch;
|
|
228
|
+
log?: (line: string) => void;
|
|
229
|
+
}
|
|
230
|
+
interface ManifestFileEntry {
|
|
231
|
+
kind: 'sourcemap' | 'hermes_sourcemap' | 'js_bundle';
|
|
232
|
+
name: string;
|
|
233
|
+
bundle_name?: string;
|
|
234
|
+
sha256: string;
|
|
235
|
+
size: number;
|
|
236
|
+
}
|
|
237
|
+
interface Found {
|
|
238
|
+
path: string;
|
|
239
|
+
file: ManifestFileEntry;
|
|
240
|
+
}
|
|
241
|
+
/** True when every file of the plan can be uploaded without the CLI. */
|
|
242
|
+
declare function isJsOnlyPlan(plan: UploadPlan): boolean;
|
|
243
|
+
/** Builds the manifest for a JS-only plan. Exported for tests and `--dry-run`. */
|
|
244
|
+
declare function buildManifest(plan: UploadPlan): Promise<{
|
|
245
|
+
manifest: Record<string, unknown>;
|
|
246
|
+
found: Found[];
|
|
247
|
+
}>;
|
|
248
|
+
/**
|
|
249
|
+
* Creates the set, uploads the blobs the server does not have yet and finalizes. Idempotent:
|
|
250
|
+
* re-running with identical files uploads nothing. Throws unless the set ends up `ready`.
|
|
251
|
+
*/
|
|
252
|
+
declare function uploadPlanOverHttp(plan: UploadPlan, options: HttpUploadOptions): Promise<{
|
|
253
|
+
status: string;
|
|
254
|
+
uploaded: number;
|
|
255
|
+
files: number;
|
|
256
|
+
}>;
|
|
257
|
+
|
|
258
|
+
interface RunResult {
|
|
259
|
+
plan: UploadPlan;
|
|
260
|
+
command: string;
|
|
261
|
+
code: number;
|
|
262
|
+
}
|
|
263
|
+
interface RunOptions {
|
|
264
|
+
/** The `argus` binary. Default: `$ARGUS_BIN`, else `argus` on PATH. */
|
|
265
|
+
bin?: string;
|
|
266
|
+
/** Pass `--dry-run`: the CLI prints the manifest and uploads nothing. */
|
|
267
|
+
dryRun?: boolean;
|
|
268
|
+
/** Server base URL (`--url`). Default: the CLI's own `ARGUS_URL` handling. */
|
|
269
|
+
url?: string;
|
|
270
|
+
env?: Record<string, string | undefined>;
|
|
271
|
+
cwd?: string;
|
|
272
|
+
/**
|
|
273
|
+
* `http`: upload from Node (JS artifacts only). `cli`: run the `argus` binary. Default `auto`
|
|
274
|
+
* (env `ARGUS_UPLOAD_TRANSPORT`): HTTP for JS-only sets unless `ARGUS_BIN` names a binary,
|
|
275
|
+
* the CLI for sets with native symbols.
|
|
276
|
+
*/
|
|
277
|
+
transport?: 'auto' | 'http' | 'cli';
|
|
278
|
+
/** HTTP client for the `http` transport, replaceable in tests. */
|
|
279
|
+
fetch?: HttpFetch;
|
|
280
|
+
/** Process launcher, replaceable in tests. Resolves with the exit code. */
|
|
281
|
+
exec?: (bin: string, args: string[], opts: {
|
|
282
|
+
env: Record<string, string | undefined>;
|
|
283
|
+
cwd: string;
|
|
284
|
+
}) => Promise<number>;
|
|
285
|
+
log?: (line: string) => void;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Uploads the plans one after another and stops at the first failure (a build must not be
|
|
289
|
+
* promoted with a half-uploaded artifact set). Credentials come from the environment
|
|
290
|
+
* (`ARGUS_UPLOAD_KEY`); they are never placed on the command line.
|
|
291
|
+
*/
|
|
292
|
+
declare function runUploads(plans: UploadPlan[], options?: RunOptions): Promise<RunResult[]>;
|
|
293
|
+
|
|
294
|
+
declare const USAGE = "argus-build <command>\n\n init [--dsn <dsn>] [--yes] [--dry-run] [--dir <project>]\n set a Next.js / Node / Expo project up for Argus: prints every file it\n would write; writes with --yes (or after asking, on a terminal); never\n overwrites a file, never installs anything\n new-id [--prefix <p>] print a new artifact set id (same format as `argus artifacts new-id`)\n prelude --set-id <id> --out <file> write the generated module that defines globalThis.__ARGUS_ARTIFACT_SET_ID__\n collect <target> [options] print what would be uploaded, per artifact set (no network)\n upload <target> [options] upload each artifact set (JS sets over HTTP, native symbols via the argus CLI)\n\nTargets\n next --set-id <web id> [--server-set-id <id>] [--dir <project>] [--dist-dir .next] [--url-prefix /_next/]\n browser chunks and server chunks go to two different sets (default server id: <web id>-node)\n expo-export --ios-set-id <id> --android-set-id <id> [--dir dist] [--platform ios|android]\n [--update-id <id> | --ios-update-id <id> --android-update-id <id>]\n [--parent-set-id <id> | --ios-parent-set-id <id> --android-parent-set-id <id>] [--runtime-version <v>]\n ios --set-id <id> --dir <xcarchive | dSYMs | build dir>... [--bundle <main.jsbundle>] [--sourcemap <map>]\n android --set-id <id> --dir <android/app/build>... [--bundle <f>] [--sourcemap <map>] [--native-libs]\n files --set-id <id> --platform <ios|android|web|node> --dir <dir or file>... [--strip-prefix <p>] [--url-prefix <p>]\n\nCommon options\n --release <r> --dist <d> --native-release <v> --native-build <b> --runtime-version <v> --git-sha <sha>\n --no-bundles upload source maps only (next, files)\n --json collect: machine readable output\n --dry-run upload: print the manifests and upload nothing\n --print upload: only print the commands\n --transport <t> upload: http (from Node, JS artifacts only), cli (the argus binary) or auto (default:\n http for JS-only sets, cli for native symbols)\n --delete-maps upload next: delete browser .map files from the build output after a successful upload\n --argus-bin <path> the argus binary (default $ARGUS_BIN, else \"argus\")\n --url <base url> server (default: $ARGUS_URL as read by the argus CLI)\n\nEnvironment: ARGUS_UPLOAD_KEY (upload key; never passed on the command line), ARGUS_URL, ARGUS_BIN, ARGUS_GIT_SHA.\n";
|
|
295
|
+
interface ParsedArgs {
|
|
296
|
+
positionals: string[];
|
|
297
|
+
flags: Record<string, string | boolean | undefined>;
|
|
298
|
+
multi: Record<string, string[]>;
|
|
299
|
+
}
|
|
300
|
+
declare function parseArgs(argv: string[]): ParsedArgs;
|
|
301
|
+
/** Builds the upload plans for a target from CLI arguments. Exported for tests. */
|
|
302
|
+
declare function plansFor(target: string, args: ParsedArgs, env?: Record<string, string | undefined>, cwd?: string): UploadPlan[];
|
|
303
|
+
/** Human readable listing of the plans: what `collect` prints. */
|
|
304
|
+
declare function renderPlans(plans: UploadPlan[], bin: string, cwd: string): string;
|
|
305
|
+
interface CliIo {
|
|
306
|
+
out?: (text: string) => void;
|
|
307
|
+
err?: (text: string) => void;
|
|
308
|
+
env?: Record<string, string | undefined>;
|
|
309
|
+
cwd?: string;
|
|
310
|
+
exec?: RunOptions['exec'];
|
|
311
|
+
/** `init`: asks before writing. Default: a y/N prompt when stdin and stdout are terminals, else no prompt. */
|
|
312
|
+
confirm?: RunInitOptions['confirm'];
|
|
313
|
+
}
|
|
314
|
+
/** Runs the CLI. Returns the process exit code; never throws. */
|
|
315
|
+
declare function main(argv: string[], io?: CliIo): Promise<number>;
|
|
316
|
+
|
|
317
|
+
export { type ArtifactFileKind as A, runUploads as B, uploadArgs as C, uploadPlanOverHttp as D, type ExpoExportPlanOptions as E, type FilesPlanOptions as F, walkFiles as G, type HttpFetch as H, type InitAction as I, type CliIo as J, type ParsedArgs as K, USAGE as L, type MobilePlatform as M, type NativePlanOptions as N, parseArgs as O, type PackageManager as P, plansFor as Q, type RunOptions as R, renderPlans as S, type UploadMeta as U, type HttpUploadOptions as a, type InitOptions as b, type InitPlan as c, type NextPlanOptions as d, type ProjectInfo as e, type ProjectKind as f, type RunInitOptions as g, type RunResult as h, type UploadPlan as i, applyInit as j, browserSourceMaps as k, buildManifest as l, classifyArtifact as m, detectPackageManager as n, detectProject as o, formatCommand as p, isJsOnlyPlan as q, manifestName as r, planExpoExport as s, planFiles as t, planInit as u, planNative as v, planNext as w, renderInit as x, main as y, runInit as z };
|