@ship-et/buildatlas-cli 0.11.0 → 0.13.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 (58) hide show
  1. package/dist/client.d.ts.map +1 -1
  2. package/dist/client.js +56 -0
  3. package/dist/client.js.map +1 -1
  4. package/dist/client.test.js +56 -0
  5. package/dist/client.test.js.map +1 -1
  6. package/dist/commands/build.d.ts.map +1 -1
  7. package/dist/commands/build.js +80 -15
  8. package/dist/commands/build.js.map +1 -1
  9. package/dist/commands/credentials-wizard.d.ts +1 -1
  10. package/dist/commands/credentials-wizard.d.ts.map +1 -1
  11. package/dist/commands/credentials-wizard.js +20 -0
  12. package/dist/commands/credentials-wizard.js.map +1 -1
  13. package/dist/commands/credentials.d.ts.map +1 -1
  14. package/dist/commands/credentials.js +11 -3
  15. package/dist/commands/credentials.js.map +1 -1
  16. package/dist/commands/migrate/auth.d.ts +9 -0
  17. package/dist/commands/migrate/auth.d.ts.map +1 -0
  18. package/dist/commands/migrate/auth.js +8 -0
  19. package/dist/commands/migrate/auth.js.map +1 -0
  20. package/dist/commands/migrate/build-numbers.d.ts +12 -0
  21. package/dist/commands/migrate/build-numbers.d.ts.map +1 -0
  22. package/dist/commands/migrate/build-numbers.js +34 -0
  23. package/dist/commands/migrate/build-numbers.js.map +1 -0
  24. package/dist/commands/migrate/credentials.d.ts +24 -0
  25. package/dist/commands/migrate/credentials.d.ts.map +1 -0
  26. package/dist/commands/migrate/credentials.js +78 -0
  27. package/dist/commands/migrate/credentials.js.map +1 -0
  28. package/dist/commands/migrate/eas-client.d.ts +88 -0
  29. package/dist/commands/migrate/eas-client.d.ts.map +1 -0
  30. package/dist/commands/migrate/eas-client.js +186 -0
  31. package/dist/commands/migrate/eas-client.js.map +1 -0
  32. package/dist/commands/migrate/expo-session.d.ts +10 -0
  33. package/dist/commands/migrate/expo-session.d.ts.map +1 -0
  34. package/dist/commands/migrate/expo-session.js +51 -0
  35. package/dist/commands/migrate/expo-session.js.map +1 -0
  36. package/dist/commands/migrate/index.d.ts +3 -0
  37. package/dist/commands/migrate/index.d.ts.map +1 -0
  38. package/dist/commands/migrate/index.js +117 -0
  39. package/dist/commands/migrate/index.js.map +1 -0
  40. package/dist/commands/migrate/link-project.d.ts +13 -0
  41. package/dist/commands/migrate/link-project.d.ts.map +1 -0
  42. package/dist/commands/migrate/link-project.js +74 -0
  43. package/dist/commands/migrate/link-project.js.map +1 -0
  44. package/dist/commands/migrate/retry.d.ts +8 -0
  45. package/dist/commands/migrate/retry.d.ts.map +1 -0
  46. package/dist/commands/migrate/retry.js +25 -0
  47. package/dist/commands/migrate/retry.js.map +1 -0
  48. package/dist/config.d.ts +1 -0
  49. package/dist/config.d.ts.map +1 -1
  50. package/dist/config.js +1 -1
  51. package/dist/config.js.map +1 -1
  52. package/dist/index.js +4 -0
  53. package/dist/index.js.map +1 -1
  54. package/dist/spinner.d.ts +8 -0
  55. package/dist/spinner.d.ts.map +1 -0
  56. package/dist/spinner.js +35 -0
  57. package/dist/spinner.js.map +1 -0
  58. package/package.json +2 -3
@@ -0,0 +1,117 @@
1
+ import { resolve } from 'node:path';
2
+ import pc from 'picocolors';
3
+ import { AtlasApiError, apiRequest } from '../../client.js';
4
+ import { readResolvedAppConfig } from '../../config.js';
5
+ import { withPrompter } from '../../prompt.js';
6
+ import { withSpinner } from '../../spinner.js';
7
+ import { requireAuth } from './auth.js';
8
+ import { continueBuildNumbers } from './build-numbers.js';
9
+ import { migrateCredentials } from './credentials.js';
10
+ import { getAppIdentifiers, listExpoApps } from './eas-client.js';
11
+ import { getExpoSession } from './expo-session.js';
12
+ import { offerToLinkProject } from './link-project.js';
13
+ export function registerMigrateCommand(program) {
14
+ program
15
+ .command('migrate')
16
+ .description('Pick an EAS project and create the matching BuildAtlas project')
17
+ .option('--expo-token <token>', 'Expo access token. Skips using an `eas login` session.')
18
+ .option('--slug <slug>', 'BuildAtlas slug to use (default: the EAS project slug)')
19
+ .option('--dir <path>', 'Project directory to read app.json / app.config from', process.cwd())
20
+ .action(async (opts) => {
21
+ await run(async () => {
22
+ const config = await requireAuth();
23
+ const dir = resolve(opts.dir);
24
+ const local = await readResolvedAppConfig(dir);
25
+ // A token, if given, is the explicit override. Otherwise reuse whatever
26
+ // `eas login` already set up rather than making someone paste a personal
27
+ // access token they may not even have handy.
28
+ const auth = opts.expoToken
29
+ ? { kind: 'token', token: opts.expoToken }
30
+ : process.env.EXPO_TOKEN
31
+ ? { kind: 'token', token: process.env.EXPO_TOKEN }
32
+ : await (async () => {
33
+ const session = await getExpoSession();
34
+ if (session.username) {
35
+ console.log(pc.dim(` using EAS session for ${session.username}`));
36
+ }
37
+ return { kind: 'session', sessionSecret: session.sessionSecret };
38
+ })();
39
+ const apps = await withSpinner('fetching EAS projects', () => listExpoApps(auth));
40
+ if (apps.length === 0)
41
+ throw new Error('That account has no EAS projects.');
42
+ const app = await pickApp(apps, local);
43
+ const slug = opts.slug ?? app.slug;
44
+ // Local app.json wins when it disagrees — it's the current source of truth for
45
+ // this checkout — but EAS's own credentials fill in whatever local didn't have,
46
+ // so migrate doesn't need to run from inside a fully-configured project dir.
47
+ const remote = await withSpinner('reading EAS credentials', () => getAppIdentifiers(auth, app.id)).catch(() => ({}));
48
+ const bundleIdentifier = local?.bundleIdentifier ?? remote.bundleIdentifier;
49
+ const androidPackage = local?.androidPackage ?? remote.androidPackage;
50
+ const existing = await apiRequest(config, `/projects/${slug}`, {
51
+ token: config.token,
52
+ }).catch((err) => {
53
+ if (err instanceof AtlasApiError && err.code === 'not_found')
54
+ return undefined;
55
+ throw err;
56
+ });
57
+ // Either way, end up with a project to migrate credentials into. A project
58
+ // that already exists is not a reason to stop — it is the common case for
59
+ // someone re-running `migrate` after rotating a certificate on EAS, and
60
+ // stopping here used to skip credentials entirely.
61
+ let project;
62
+ if (existing) {
63
+ console.log(`${pc.dim('already exists —')} ${pc.bold(existing.project.slug)}`);
64
+ project = existing.project;
65
+ }
66
+ else {
67
+ project = (await withSpinner('creating BuildAtlas project', () => apiRequest(config, '/projects', {
68
+ method: 'POST',
69
+ token: config.token,
70
+ body: JSON.stringify({
71
+ slug,
72
+ name: app.name,
73
+ easProjectId: app.id,
74
+ bundleIdentifier,
75
+ androidPackage,
76
+ }),
77
+ }))).project;
78
+ console.log(`${pc.green('✔')} created project ${pc.bold(project.slug)} from ${app.fullName}`);
79
+ }
80
+ await continueBuildNumbers(config, project.slug, auth, app.id, { bundleIdentifier, androidPackage });
81
+ await migrateCredentials(config, project.slug, auth, app.id, app.fullName);
82
+ if (!bundleIdentifier || !androidPackage) {
83
+ console.log(pc.dim(` Bundle id / package name were not both found in ${dir} or on EAS — fill in what's ` +
84
+ `missing with \`buildatlas projects set --project ${project.slug}\`.`));
85
+ }
86
+ await offerToLinkProject(dir, project.slug);
87
+ });
88
+ });
89
+ }
90
+ /**
91
+ * Skips the menu when the directory this ran from already points at one of the
92
+ * visible apps — matched by EAS project id first, since a slug is only unique
93
+ * within an account and `app.json` does not say which account it belongs to.
94
+ */
95
+ async function pickApp(apps, local) {
96
+ const detected = (local?.easProjectId && apps.find((a) => a.id === local.easProjectId)) ||
97
+ (local?.slug && apps.find((a) => a.slug === local.slug));
98
+ if (detected) {
99
+ console.log(pc.dim(` detected ${detected.fullName} from app config`));
100
+ return detected;
101
+ }
102
+ return withPrompter(async (p) => {
103
+ const chosen = await p.select('Which EAS project?', apps.map((a) => ({ value: a.fullName, label: a.fullName, hint: a.name })));
104
+ return apps.find((a) => a.fullName === chosen);
105
+ });
106
+ }
107
+ async function run(fn) {
108
+ try {
109
+ await fn();
110
+ }
111
+ catch (err) {
112
+ const message = err instanceof AtlasApiError ? `${err.message} (${err.code})` : err.message;
113
+ console.error(pc.red('✖'), message);
114
+ process.exitCode = 1;
115
+ }
116
+ }
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/migrate/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Points a local checkout's `app.json` at the migrated BuildAtlas project, via
3
+ * the same `expo.extra.buildatlas.project` field `resolveProject` already reads
4
+ * (config.ts) — so `buildatlas build` and friends work from this directory
5
+ * without `--project` or `$BUILDATLAS_PROJECT` from here on.
6
+ *
7
+ * Only touches a static app.json: a dynamic `app.config.js`/`.ts` is code, not
8
+ * data, and rewriting it would mean guessing where to inject the field. When
9
+ * there is no app.json at all — a project configured purely through a dynamic
10
+ * config — `offerToCreateAppJson` below handles that instead.
11
+ */
12
+ export declare function offerToLinkProject(dir: string, slug: string): Promise<void>;
13
+ //# sourceMappingURL=link-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-project.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/link-project.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CjF"}
@@ -0,0 +1,74 @@
1
+ import { readFile, writeFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import pc from 'picocolors';
4
+ import { dynamicConfigIn } from '../../config.js';
5
+ import { withPrompter } from '../../prompt.js';
6
+ /**
7
+ * Points a local checkout's `app.json` at the migrated BuildAtlas project, via
8
+ * the same `expo.extra.buildatlas.project` field `resolveProject` already reads
9
+ * (config.ts) — so `buildatlas build` and friends work from this directory
10
+ * without `--project` or `$BUILDATLAS_PROJECT` from here on.
11
+ *
12
+ * Only touches a static app.json: a dynamic `app.config.js`/`.ts` is code, not
13
+ * data, and rewriting it would mean guessing where to inject the field. When
14
+ * there is no app.json at all — a project configured purely through a dynamic
15
+ * config — `offerToCreateAppJson` below handles that instead.
16
+ */
17
+ export async function offerToLinkProject(dir, slug) {
18
+ const path = join(dir, 'app.json');
19
+ const raw = await readFile(path, 'utf8').catch(() => undefined);
20
+ if (raw === undefined) {
21
+ await offerToCreateAppJson(dir, path, slug);
22
+ return;
23
+ }
24
+ let parsed;
25
+ try {
26
+ parsed = JSON.parse(raw);
27
+ }
28
+ catch {
29
+ return;
30
+ }
31
+ const expo = parsed.expo ?? {};
32
+ const current = expo.extra?.buildatlas?.project ?? expo.slug;
33
+ if (current === slug || !process.stdin.isTTY)
34
+ return;
35
+ const link = await withPrompter((p) => p.confirm(`Point app.json at BuildAtlas project "${slug}" for this directory?`, true));
36
+ if (!link)
37
+ return;
38
+ expo.extra = { ...expo.extra, buildatlas: { ...expo.extra?.buildatlas, project: slug } };
39
+ parsed.expo = expo;
40
+ await writeFile(path, `${JSON.stringify(parsed, null, 2)}\n`);
41
+ console.log(`${pc.green('✔')} app.json now points \`buildatlas\` commands at ${pc.bold(slug)}`);
42
+ // Both files existing is common — an app.config.js/ts that does `import base
43
+ // from './app.json'` and layers plugins/env on top. resolveProject reads app.json
44
+ // directly either way, so this write takes effect for `buildatlas` regardless —
45
+ // but `expo config` itself only sees it if the dynamic config actually spreads
46
+ // app.json's `extra`, which we cannot check without running that file's code.
47
+ const dynamic = await dynamicConfigIn(dir);
48
+ if (dynamic) {
49
+ console.log(pc.dim(` Note: ${dynamic} is also here. \`buildatlas\` reads app.json directly, so this ` +
50
+ `takes effect either way — but if ${dynamic} sets "extra" without spreading ` +
51
+ `app.json's, \`expo config\` itself won't show it.`));
52
+ }
53
+ }
54
+ /**
55
+ * No static app.json — if there's a dynamic app.config instead, editing its
56
+ * JavaScript isn't safe to automate. But `resolveProject` (config.ts) checks
57
+ * app.json before it ever evaluates a dynamic config, and its own
58
+ * `noProjectAdvice` documents exactly this escape hatch: a minimal app.json
59
+ * holding only the buildatlas link, which reads cleanly alongside app.config.js
60
+ * without the two ever needing to agree on anything else.
61
+ */
62
+ async function offerToCreateAppJson(dir, path, slug) {
63
+ const dynamic = await dynamicConfigIn(dir);
64
+ if (!dynamic || !process.stdin.isTTY)
65
+ return;
66
+ const create = await withPrompter((p) => p.confirm(`No app.json here (found ${dynamic} instead). Create one just to point \`buildatlas\` ` +
67
+ `commands at project "${slug}"?`, true));
68
+ if (!create)
69
+ return;
70
+ const content = { expo: { extra: { buildatlas: { project: slug } } } };
71
+ await writeFile(path, `${JSON.stringify(content, null, 2)}\n`);
72
+ console.log(`${pc.green('✔')} wrote ${pc.bold('app.json')} — \`buildatlas\` commands from here now use ${pc.bold(slug)}`);
73
+ }
74
+ //# sourceMappingURL=link-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-project.js","sourceRoot":"","sources":["../../../src/commands/migrate/link-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Runs `fn` under the spinner, and on failure — a dropped connection, a 504 from
3
+ * a cold worker, anything transient — offers to try again rather than silently
4
+ * giving up on a step whose only cost of re-running is a few seconds. Skips the
5
+ * prompt outside a TTY (CI, piped input) since there's no one there to answer it.
6
+ */
7
+ export declare function withRetry<T>(label: string, fn: () => Promise<T>): Promise<T | undefined>;
8
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/retry.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAW9F"}
@@ -0,0 +1,25 @@
1
+ import pc from 'picocolors';
2
+ import { withPrompter } from '../../prompt.js';
3
+ import { withSpinner } from '../../spinner.js';
4
+ /**
5
+ * Runs `fn` under the spinner, and on failure — a dropped connection, a 504 from
6
+ * a cold worker, anything transient — offers to try again rather than silently
7
+ * giving up on a step whose only cost of re-running is a few seconds. Skips the
8
+ * prompt outside a TTY (CI, piped input) since there's no one there to answer it.
9
+ */
10
+ export async function withRetry(label, fn) {
11
+ for (;;) {
12
+ try {
13
+ return await withSpinner(label, fn);
14
+ }
15
+ catch (err) {
16
+ console.log(pc.dim(` ${label} failed: ${err.message}`));
17
+ if (!process.stdin.isTTY)
18
+ return undefined;
19
+ const retry = await withPrompter((p) => p.confirm(' Try again?', true));
20
+ if (!retry)
21
+ return undefined;
22
+ }
23
+ }
24
+ }
25
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/commands/migrate/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,KAAa,EAAE,EAAoB;IACpE,SAAS,CAAC;QACR,IAAI,CAAC;YACH,OAAO,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,YAAa,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;gBAAE,OAAO,SAAS,CAAC;YAC3C,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,KAAK;gBAAE,OAAO,SAAS,CAAC;QAC/B,CAAC;IACH,CAAC;AACH,CAAC"}
package/dist/config.d.ts CHANGED
@@ -53,6 +53,7 @@ export interface ExpoConfigValues {
53
53
  /** Everything a caller might want from the app config, static or dynamic. */
54
54
  export declare function readResolvedAppConfig(dir: string): Promise<ExpoConfigValues | undefined>;
55
55
  export declare function resolveProject(explicit: string | undefined, dir?: string): Promise<ResolvedProject>;
56
+ export declare function dynamicConfigIn(dir: string): Promise<string | undefined>;
56
57
  /**
57
58
  * What to tell someone whose directory has no usable static config.
58
59
  *
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;GAKG;AACH,eAAO,MAAM,eAAe,QAAyE,CAAC;AAEtG;;;GAGG;AACH,QAAA,MAAM,YAAY;;;;iBAIhB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAEvD,eAAO,MAAM,UAAU,cAAoD,CAAC;AAS5E;;;;;;GAMG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAUhE;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAqBvD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAOnE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAEnD;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,eAAe,CAAC;CAClE;AAqFD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,6EAA6E;AAC7E,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAiB9F;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAgC1B;AAuBD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBlE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;GAKG;AACH,eAAO,MAAM,eAAe,QAAyE,CAAC;AAEtG;;;GAGG;AACH,QAAA,MAAM,YAAY;;;;iBAIhB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAEvD,eAAO,MAAM,UAAU,cAAoD,CAAC;AAS5E;;;;;;GAMG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAUhE;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAqBvD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAOnE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAEnD;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,eAAe,CAAC;CAClE;AAqFD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,6EAA6E;AAC7E,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAiB9F;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAgC1B;AAWD,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU9E;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBlE"}
package/dist/config.js CHANGED
@@ -215,7 +215,7 @@ export async function resolveProject(explicit, dir = process.cwd()) {
215
215
  * is exactly what the old message did.
216
216
  */
217
217
  const DYNAMIC_CONFIGS = ['app.config.ts', 'app.config.js', 'app.config.mjs', 'app.config.cjs'];
218
- async function dynamicConfigIn(dir) {
218
+ export async function dynamicConfigIn(dir) {
219
219
  for (const name of DYNAMIC_CONFIGS) {
220
220
  try {
221
221
  await readFile(join(dir, name), 'utf8');
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,4BAA4B,CAAC;AAEtG;;;GAGG;AACH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;AAE5E;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAEtE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1F,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;QACvE,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,QAAQ,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YACpD,MAAM;QACR,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;QAC9D,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAEnE,OAAO;QACL,2EAA2E;QAC3E,sCAAsC;QACtC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM;QAClF,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK;QAC5E,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAmB;IAClD,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/E,6EAA6E;IAC7E,0EAA0E;IAC1E,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AACrE,CAAC;AAQD;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,KAAK,UAAU,cAAc,CAAC,GAAW;IACvC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,gFAAgF;IAChF,qBAAqB;IACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,OAAO,yBAAyB,CAAC,CAAC,CAAC;IAE5E,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;YAClG,GAAG,EAAE,GAAG;YACR,8EAA8E;YAC9E,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;YAC3B,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,yDAAyD;QACzD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAQ5C,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI;YACtD,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS;YAC1C,gBAAgB,EAAE,MAAM,CAAC,GAAG,EAAE,gBAAgB;YAC9C,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO;YACvC,iBAAiB,EAAE,OAAO;SAC3B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,iFAAiF;QACjF,2EAA2E;QAC3E,kDAAkD;QAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,EAAE,CAAC,GAAG,CAAC,yBAAyB,OAAO,KAAM,GAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CACxF,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAcD,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAW;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5E,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,IAAI,IAAI,CAAC,IAAI;YAClD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS;YACxC,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,gBAAgB;YAC5C,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO;SACtC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IACD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAA4B,EAC5B,GAAG,GAAW,OAAO,CAAC,GAAG,EAAE;IAE3B,IAAI,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAExD,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,IAAI,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAErD,gFAAgF;IAChF,0EAA0E;IAC1E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;QACnD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,EAAE,CAAC;YACjD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAChD,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;IAED,yEAAyE;IACzE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACzD,CAAC;IAED,MAAM,IAAI,KAAK,CACb,mFAAmF;QACjF,wDAAwD,MAAM,eAAe,CAAC,GAAG,CAAC,EAAE,CACvF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,CAAC,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;AAE/F,KAAK,UAAU,eAAe,CAAC,GAAW;IACxC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW;IAC/C,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,OAAO,EAAE,CAAC;QACZ,gFAAgF;QAChF,oEAAoE;QACpE,OAAO,CACL,SAAS,OAAO,8DAA8D;YAC9E,0DAA0D;YAC1D,mFAAmF;YACnF,sCAAsC;YACtC,sFAAsF;YACtF,0FAA0F;YAC1F,uCAAuC,OAAO,GAAG,CAClD,CAAC;IACJ,CAAC;IACD,OAAO,CACL,mCAAmC,GAAG,qDAAqD;QAC3F,0FAA0F;QAC1F,QAAQ,CACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
+ import { setDefaultAutoSelectFamily } from 'node:net';
3
4
  import { Command } from 'commander';
4
5
  import pc from 'picocolors';
5
6
  import { registerAuthCommands } from './commands/auth.js';
@@ -9,6 +10,7 @@ import { registerCredentialCommands } from './commands/credentials.js';
9
10
  import { registerEnvCommand } from './commands/env.js';
10
11
  import { registerExpoTokenCommands } from './commands/expo-tokens.js';
11
12
  import { registerInitCommand } from './commands/init.js';
13
+ import { registerMigrateCommand } from './commands/migrate/index.js';
12
14
  import { registerProjectCommands } from './commands/projects.js';
13
15
  import { registerSubmitCommand } from './commands/submit.js';
14
16
  import { registerUpdateCommand } from './commands/update.js';
@@ -21,6 +23,7 @@ import { loadConfig } from './config.js';
21
23
  // '../package.json' resolves to the same file from src/index.ts in dev and from
22
24
  // dist/index.js once built.
23
25
  const { version } = createRequire(import.meta.url)('../package.json');
26
+ setDefaultAutoSelectFamily(false);
24
27
  const program = new Command();
25
28
  program
26
29
  .name('buildatlas')
@@ -34,6 +37,7 @@ registerCredentialCommands(program);
34
37
  registerSubmitCommand(program);
35
38
  registerEnvCommand(program);
36
39
  registerExpoTokenCommands(program);
40
+ registerMigrateCommand(program);
37
41
  registerProjectCommands(program);
38
42
  registerUpdateCommand(program);
39
43
  program
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,iFAAiF;AACjF,gFAAgF;AAChF,2DAA2D;AAC3D,EAAE;AACF,gFAAgF;AAChF,4BAA4B;AAC5B,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAwB,CAAC;AAG7F,0BAA0B,CAAC,KAAK,CAAC,CAAC;AAElC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,8EAA8E,CAAC;KAC3F,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAE/B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,6EAA6E;IAC7E,2EAA2E;IAC3E,qEAAqE;IACrE,aAAa;IACb,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAA8B,MAAM,EAAE,UAAU,EAAE;YACjF,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,GAAa,CAAC,OAAO,CAAC;QACnF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,+BAA+B,MAAM,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,oCAAoC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * A loading indicator for the gap between kicking off a network call and getting
3
+ * something back — migrate's round trips to Expo and to BuildAtlas each take a
4
+ * second or two with nothing else to show. Skipped outside a TTY (CI logs, piped
5
+ * output) since redrawing a line there just spams the log instead of animating.
6
+ */
7
+ export declare function withSpinner<T>(label: string, fn: () => Promise<T>): Promise<T>;
8
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../src/spinner.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAsBpF"}
@@ -0,0 +1,35 @@
1
+ import pc from 'picocolors';
2
+ const WORD = 'ATLAS';
3
+ function frame(index) {
4
+ return [...WORD].map((ch, i) => (i === index ? pc.bold(pc.green(ch)) : pc.dim(ch))).join('');
5
+ }
6
+ /**
7
+ * A loading indicator for the gap between kicking off a network call and getting
8
+ * something back — migrate's round trips to Expo and to BuildAtlas each take a
9
+ * second or two with nothing else to show. Skipped outside a TTY (CI logs, piped
10
+ * output) since redrawing a line there just spams the log instead of animating.
11
+ */
12
+ export async function withSpinner(label, fn) {
13
+ if (!process.stdout.isTTY)
14
+ return fn();
15
+ let index = 0;
16
+ let direction = 1;
17
+ const render = () => process.stdout.write(`\r${frame(index)} ${pc.dim(label)}`);
18
+ render();
19
+ process.stdout.write('[?25l');
20
+ const timer = setInterval(() => {
21
+ index += direction;
22
+ if (index === WORD.length - 1 || index === 0)
23
+ direction *= -1;
24
+ render();
25
+ }, 120);
26
+ try {
27
+ return await fn();
28
+ }
29
+ finally {
30
+ clearInterval(timer);
31
+ process.stdout.write(`\r${' '.repeat(WORD.length + 2 + label.length)}\r`);
32
+ process.stdout.write('[?25h');
33
+ }
34
+ }
35
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../src/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,IAAI,GAAG,OAAO,CAAC;AAErB,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAI,KAAa,EAAE,EAAoB;IACtE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,EAAE,EAAE,CAAC;IAEvC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAEjF,MAAM,EAAE,CAAC;IACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,KAAK,IAAI,SAAS,CAAC;QACnB,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC;YAAE,SAAS,IAAI,CAAC,CAAC,CAAC;QAC9D,MAAM,EAAE,CAAC;IACX,CAAC,EAAE,GAAG,CAAC,CAAC;IAER,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ship-et/buildatlas-cli",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "CLI for BuildAtlas — self-hosted Expo builds and OTA updates. Drop-in for `eas build`.",
5
5
  "license": "MIT",
6
6
  "author": "Digicom",
@@ -15,8 +15,7 @@
15
15
  },
16
16
  "publishConfig": {
17
17
  "registry": "https://registry.npmjs.org",
18
- "access": "public",
19
- "provenance": true
18
+ "access": "public"
20
19
  },
21
20
  "keywords": [
22
21
  "expo",