sdsetup 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/README.md +66 -2
- package/dist/babel.d.ts +25 -0
- package/dist/babel.d.ts.map +1 -0
- package/dist/babel.js +246 -0
- package/dist/babel.js.map +1 -0
- package/dist/config/android.d.ts +15 -0
- package/dist/config/android.d.ts.map +1 -0
- package/dist/config/android.js +133 -0
- package/dist/config/android.js.map +1 -0
- package/dist/config/pods.d.ts +11 -0
- package/dist/config/pods.d.ts.map +1 -0
- package/dist/config/pods.js +28 -0
- package/dist/config/pods.js.map +1 -0
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +27 -0
- package/dist/constants.js.map +1 -0
- package/dist/detect.d.ts +19 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +78 -0
- package/dist/detect.js.map +1 -0
- package/dist/files.d.ts +19 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +48 -0
- package/dist/files.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +189 -0
- package/dist/index.js.map +1 -0
- package/dist/install.d.ts +11 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +37 -0
- package/dist/install.js.map +1 -0
- package/dist/pm.d.ts +14 -0
- package/dist/pm.d.ts.map +1 -0
- package/dist/pm.js +52 -0
- package/dist/pm.js.map +1 -0
- package/dist/setup/cli.d.ts +20 -0
- package/dist/setup/cli.d.ts.map +1 -0
- package/dist/setup/cli.js +133 -0
- package/dist/setup/cli.js.map +1 -0
- package/dist/setup/expo.d.ts +20 -0
- package/dist/setup/expo.d.ts.map +1 -0
- package/dist/setup/expo.js +52 -0
- package/dist/setup/expo.js.map +1 -0
- package/package.json +44 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3D,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAoBD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAyDtD"}
|
package/dist/detect.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectProject = detectProject;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const pm_js_1 = require("./pm.js");
|
|
7
|
+
function readJsonFile(path) {
|
|
8
|
+
try {
|
|
9
|
+
if (!(0, node_fs_1.existsSync)(path))
|
|
10
|
+
return null;
|
|
11
|
+
return JSON.parse((0, node_fs_1.readFileSync)(path, 'utf8'));
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function parseSdkMajor(version) {
|
|
18
|
+
if (!version)
|
|
19
|
+
return null;
|
|
20
|
+
// Handles "~52.0.0", "^52.0.0", "52.0.0", "52" — first number is the major.
|
|
21
|
+
const m = version.match(/(\d+)/);
|
|
22
|
+
if (!m)
|
|
23
|
+
return null;
|
|
24
|
+
const n = Number.parseInt(m[1], 10);
|
|
25
|
+
return Number.isNaN(n) ? null : n;
|
|
26
|
+
}
|
|
27
|
+
function detectProject(cwd) {
|
|
28
|
+
const pkgPath = (0, node_path_1.join)(cwd, 'package.json');
|
|
29
|
+
if (!(0, node_fs_1.existsSync)(pkgPath)) {
|
|
30
|
+
throw new Error(`No package.json found in ${cwd}.\nRun \`npx sdsetup\` from the root of a React Native project (Expo or bare CLI).`);
|
|
31
|
+
}
|
|
32
|
+
const pkg = readJsonFile(pkgPath);
|
|
33
|
+
if (!pkg) {
|
|
34
|
+
throw new Error(`Could not parse ${pkgPath}. Make sure it contains valid JSON with react-native or expo listed.`);
|
|
35
|
+
}
|
|
36
|
+
const dependencies = pkg.dependencies ?? {};
|
|
37
|
+
const devDependencies = pkg.devDependencies ?? {};
|
|
38
|
+
const hasRN = 'react-native' in dependencies || 'react-native' in devDependencies;
|
|
39
|
+
const hasExpo = 'expo' in dependencies || 'expo' in devDependencies;
|
|
40
|
+
if (!hasRN && !hasExpo) {
|
|
41
|
+
throw new Error(`Not a React Native project: package.json in ${cwd} does not list \`react-native\` or \`expo\` in dependencies/devDependencies.\nRun \`npx sdsetup\` from the root of a React Native project.`);
|
|
42
|
+
}
|
|
43
|
+
const projectType = hasExpo ? 'expo' : 'bare';
|
|
44
|
+
const packageManager = (0, pm_js_1.detectPackageManager)(cwd);
|
|
45
|
+
const expoVersion = dependencies['expo'] ?? devDependencies['expo'] ?? null;
|
|
46
|
+
const reactNativeVersion = dependencies['react-native'] ?? devDependencies['react-native'] ?? null;
|
|
47
|
+
const expoSdkMajor = parseSdkMajor(expoVersion);
|
|
48
|
+
const lockfile = (0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'pnpm-lock.yaml'))
|
|
49
|
+
? 'pnpm-lock.yaml'
|
|
50
|
+
: (0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'yarn.lock'))
|
|
51
|
+
? 'yarn.lock'
|
|
52
|
+
: (0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'bun.lockb'))
|
|
53
|
+
? 'bun.lockb'
|
|
54
|
+
: (0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'bun.lock'))
|
|
55
|
+
? 'bun.lock'
|
|
56
|
+
: (0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'package-lock.json'))
|
|
57
|
+
? 'package-lock.json'
|
|
58
|
+
: null;
|
|
59
|
+
return {
|
|
60
|
+
cwd,
|
|
61
|
+
projectType,
|
|
62
|
+
packageManager,
|
|
63
|
+
expoSdkMajor,
|
|
64
|
+
reactNativeVersion,
|
|
65
|
+
expoVersion,
|
|
66
|
+
dependencies,
|
|
67
|
+
devDependencies,
|
|
68
|
+
hasAppJson: (0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'app.json')),
|
|
69
|
+
hasAppConfig: (0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'app.config.js')) ||
|
|
70
|
+
(0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'app.config.ts')) ||
|
|
71
|
+
(0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'app.config.cjs')),
|
|
72
|
+
hasEasJson: (0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'eas.json')),
|
|
73
|
+
hasIosDir: (0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'ios')),
|
|
74
|
+
hasAndroidDir: (0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'android')),
|
|
75
|
+
lockfile,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"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"}
|
package/dist/files.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Idempotent backup: only writes the .bak file the first time (never overwrites an existing backup). */
|
|
2
|
+
export declare function backupFile(originalPath: string, backupPath: string): void;
|
|
3
|
+
export declare function readIfExists(path: string): string | null;
|
|
4
|
+
export interface TextEditResult {
|
|
5
|
+
changed: boolean;
|
|
6
|
+
backup: string | null;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Idempotent string edit helper: if `needle` already present, no change.
|
|
10
|
+
* Otherwise applies `apply(content)` (on '' when missing), backs up original, writes file.
|
|
11
|
+
*/
|
|
12
|
+
export declare function editTextFile(path: string, needle: string, apply: (content: string) => string, opts?: {
|
|
13
|
+
dryRun?: boolean;
|
|
14
|
+
backupSuffix?: string;
|
|
15
|
+
}): TextEditResult & {
|
|
16
|
+
created: boolean;
|
|
17
|
+
wouldChange: boolean;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAGA,yGAAyG;AACzG,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAIzE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOxD;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,EAClC,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACrD,cAAc,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAe7D"}
|
package/dist/files.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.backupFile = backupFile;
|
|
4
|
+
exports.readIfExists = readIfExists;
|
|
5
|
+
exports.editTextFile = editTextFile;
|
|
6
|
+
const node_fs_1 = require("node:fs");
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
/** Idempotent backup: only writes the .bak file the first time (never overwrites an existing backup). */
|
|
9
|
+
function backupFile(originalPath, backupPath) {
|
|
10
|
+
if ((0, node_fs_1.existsSync)(backupPath))
|
|
11
|
+
return;
|
|
12
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(backupPath), { recursive: true });
|
|
13
|
+
(0, node_fs_1.copyFileSync)(originalPath, backupPath);
|
|
14
|
+
}
|
|
15
|
+
function readIfExists(path) {
|
|
16
|
+
try {
|
|
17
|
+
if (!(0, node_fs_1.existsSync)(path))
|
|
18
|
+
return null;
|
|
19
|
+
return (0, node_fs_1.readFileSync)(path, 'utf8');
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Idempotent string edit helper: if `needle` already present, no change.
|
|
27
|
+
* Otherwise applies `apply(content)` (on '' when missing), backs up original, writes file.
|
|
28
|
+
*/
|
|
29
|
+
function editTextFile(path, needle, apply, opts = {}) {
|
|
30
|
+
const existed = (0, node_fs_1.existsSync)(path);
|
|
31
|
+
const original = existed ? (0, node_fs_1.readFileSync)(path, 'utf8') : '';
|
|
32
|
+
if (original.includes(needle))
|
|
33
|
+
return { changed: false, backup: null, created: false, wouldChange: false };
|
|
34
|
+
if (opts.dryRun)
|
|
35
|
+
return { changed: false, backup: null, created: !existed, wouldChange: true };
|
|
36
|
+
const next = apply(original);
|
|
37
|
+
if (next === original)
|
|
38
|
+
return { changed: false, backup: null, created: false, wouldChange: false };
|
|
39
|
+
let backup = null;
|
|
40
|
+
if (existed) {
|
|
41
|
+
backup = path + (opts.backupSuffix ?? '.sdsetup.bak');
|
|
42
|
+
backupFile(path, backup);
|
|
43
|
+
}
|
|
44
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(path), { recursive: true });
|
|
45
|
+
(0, node_fs_1.writeFileSync)(path, next, 'utf8');
|
|
46
|
+
return { changed: true, backup, created: !existed, wouldChange: true };
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":";;AAIA,gCAIC;AAED,oCAOC;AAWD,oCAoBC;AAhDD,qCAA2F;AAC3F,yCAAoC;AAEpC,yGAAyG;AACzG,SAAgB,UAAU,CAAC,YAAoB,EAAE,UAAkB;IACjE,IAAI,IAAA,oBAAU,EAAC,UAAU,CAAC;QAAE,OAAO;IACnC,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,IAAA,sBAAY,EAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAOD;;;GAGG;AACH,SAAgB,YAAY,CAC1B,IAAY,EACZ,MAAc,EACd,KAAkC,EAClC,OAAoD,EAAE;IAEtD,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,IAAI,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAC3G,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC/F,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7B,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACnG,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,cAAc,CAAC,CAAC;QACtD,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC;IACD,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,IAAA,uBAAa,EAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACzE,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
8
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
9
|
+
const detect_js_1 = require("./detect.js");
|
|
10
|
+
const install_js_1 = require("./install.js");
|
|
11
|
+
const expo_js_1 = require("./setup/expo.js");
|
|
12
|
+
const cli_js_1 = require("./setup/cli.js");
|
|
13
|
+
const pm_js_1 = require("./pm.js");
|
|
14
|
+
function parseArgs(argv) {
|
|
15
|
+
const flags = { dryRun: false, yes: false, skipPods: false, help: false };
|
|
16
|
+
for (const a of argv) {
|
|
17
|
+
if (a === '--dry-run')
|
|
18
|
+
flags.dryRun = true;
|
|
19
|
+
else if (a === '--yes' || a === '-y')
|
|
20
|
+
flags.yes = true;
|
|
21
|
+
else if (a === '--skip-pods')
|
|
22
|
+
flags.skipPods = true;
|
|
23
|
+
else if (a === '--help' || a === '-h')
|
|
24
|
+
flags.help = true;
|
|
25
|
+
}
|
|
26
|
+
return flags;
|
|
27
|
+
}
|
|
28
|
+
function printHelp() {
|
|
29
|
+
console.log(`
|
|
30
|
+
${picocolors_1.default.bold('sdsetup')} — set up a React Native project (Expo or bare CLI) with:
|
|
31
|
+
Redux Toolkit, react-redux, Reanimated, Worklets, Formik, Yup,
|
|
32
|
+
TanStack Query, React Navigation (native, native-stack, bottom-tabs),
|
|
33
|
+
react-native-screens, react-native-safe-area-context.
|
|
34
|
+
|
|
35
|
+
Usage:
|
|
36
|
+
npx sdsetup [options]
|
|
37
|
+
|
|
38
|
+
Options:
|
|
39
|
+
--dry-run Print planned commands and edits, change nothing.
|
|
40
|
+
--yes, -y No prompts (accept all defaults).
|
|
41
|
+
--skip-pods Skip iOS pod install.
|
|
42
|
+
--help, -h Show this help.
|
|
43
|
+
`);
|
|
44
|
+
}
|
|
45
|
+
async function main() {
|
|
46
|
+
const flags = parseArgs(process.argv.slice(2));
|
|
47
|
+
if (flags.help) {
|
|
48
|
+
printHelp();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const cwd = process.cwd();
|
|
52
|
+
console.log(picocolors_1.default.bold('\n⚙️ sdsetup\n'));
|
|
53
|
+
// Step 1: validate + detect (never fail on missing optional files)
|
|
54
|
+
let info;
|
|
55
|
+
try {
|
|
56
|
+
info = (0, detect_js_1.detectProject)(cwd);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
console.error(picocolors_1.default.red(`Error: ${err?.message ?? String(err)}`));
|
|
60
|
+
process.exitCode = 1;
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
console.log(`${picocolors_1.default.green('✓')} Detected ${picocolors_1.default.bold(info.projectType === 'expo' ? 'Expo' : 'bare React Native CLI')} project (package manager: ${picocolors_1.default.bold(info.packageManager)}${info.lockfile ? ` via ${info.lockfile}` : ' (default npm)'}).`);
|
|
64
|
+
if (info.projectType === 'expo') {
|
|
65
|
+
console.log(picocolors_1.default.dim(` Expo ${info.expoVersion ?? '(version unknown)'}${info.expoSdkMajor != null ? ` → SDK ${info.expoSdkMajor}` : ''} · React Native ${info.reactNativeVersion ?? '(unknown)'}`));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
console.log(picocolors_1.default.dim(` React Native ${info.reactNativeVersion ?? '(unknown)'}`));
|
|
69
|
+
}
|
|
70
|
+
if (!info.hasAppJson && !info.hasAppConfig)
|
|
71
|
+
console.log(picocolors_1.default.dim(' Note: no app.json / app.config found (optional — continuing).'));
|
|
72
|
+
if (info.projectType === 'expo' && !info.hasEasJson)
|
|
73
|
+
console.log(picocolors_1.default.dim(' Note: no eas.json found (optional — continuing).'));
|
|
74
|
+
// Confirm unless --yes
|
|
75
|
+
const toInstallPreview = (0, install_js_1.missingPackages)(info);
|
|
76
|
+
if (toInstallPreview.length === 0) {
|
|
77
|
+
console.log(picocolors_1.default.green('\n✓ All sdsetup packages are already installed — nothing to install.'));
|
|
78
|
+
}
|
|
79
|
+
if (!flags.yes && !flags.dryRun && toInstallPreview.length > 0) {
|
|
80
|
+
const preview = (0, pm_js_1.formatInstallCommand)((0, pm_js_1.buildInstallCommand)(info.packageManager, info.projectType, toInstallPreview));
|
|
81
|
+
const ans = await (0, prompts_1.default)({
|
|
82
|
+
type: 'confirm',
|
|
83
|
+
name: 'go',
|
|
84
|
+
message: `Install ${toInstallPreview.length} package(s)?\n $ ${preview}`,
|
|
85
|
+
initial: true,
|
|
86
|
+
});
|
|
87
|
+
if (!ans.go) {
|
|
88
|
+
console.log(picocolors_1.default.yellow('Cancelled — no changes made.'));
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Step 2: install (one batch)
|
|
93
|
+
console.log(picocolors_1.default.bold('\n📦 Install'));
|
|
94
|
+
let installRes;
|
|
95
|
+
try {
|
|
96
|
+
installRes = await (0, install_js_1.installPackages)(info, { dryRun: flags.dryRun });
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
console.error(picocolors_1.default.red(`Error: ${err?.message ?? String(err)}`));
|
|
100
|
+
process.exitCode = 1;
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (installRes.commandStr) {
|
|
104
|
+
console.log(flags.dryRun ? picocolors_1.default.dim(` [dry-run] would run: ${installRes.commandStr}`) : picocolors_1.default.dim(` ran: ${installRes.commandStr}`));
|
|
105
|
+
}
|
|
106
|
+
if (installRes.installed.length > 0) {
|
|
107
|
+
console.log(`${picocolors_1.default.green('✓')} ${flags.dryRun ? 'Would install' : 'Installed'} (${installRes.installed.length}): ${installRes.installed.join(', ')}`);
|
|
108
|
+
}
|
|
109
|
+
if (installRes.skipped.length > 0) {
|
|
110
|
+
console.log(picocolors_1.default.dim(` Skipped (already present): ${installRes.skipped.join(', ')}`));
|
|
111
|
+
}
|
|
112
|
+
// Step 3: configure
|
|
113
|
+
console.log(picocolors_1.default.bold('\n🔧 Configure'));
|
|
114
|
+
const changedFiles = [];
|
|
115
|
+
const warnings = [];
|
|
116
|
+
const manualSteps = [];
|
|
117
|
+
try {
|
|
118
|
+
if (info.projectType === 'expo') {
|
|
119
|
+
const r = (0, expo_js_1.setupExpo)(info, { dryRun: flags.dryRun });
|
|
120
|
+
if (r.babelChanged)
|
|
121
|
+
changedFiles.push(r.babelFile + (r.babelBackup ? ` (backup: ${r.babelBackup})` : ''));
|
|
122
|
+
warnings.push(...r.warnings);
|
|
123
|
+
manualSteps.push(...r.manualSteps);
|
|
124
|
+
if (r.presetHandlesPlugin)
|
|
125
|
+
console.log(picocolors_1.default.dim(` ${r.babelAction}`));
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
const r = await (0, cli_js_1.setupBareCli)(info, { dryRun: flags.dryRun, skipPods: flags.skipPods });
|
|
129
|
+
if (r.babelChanged)
|
|
130
|
+
changedFiles.push(`${r.babelFile}${r.babelCreated ? ' (created)' : ''}${r.babelBackup ? ` (backup: ${r.babelBackup})` : ''}`);
|
|
131
|
+
if ((r.androidChanged || r.androidWouldChange) && r.androidFile)
|
|
132
|
+
changedFiles.push(`${r.androidFile}${r.androidBackup ? ` (backup: ${r.androidBackup})` : ''}`);
|
|
133
|
+
warnings.push(...r.warnings);
|
|
134
|
+
manualSteps.push(...r.manualSteps);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
console.error(picocolors_1.default.red(`Error during configuration: ${err?.message ?? String(err)}`));
|
|
139
|
+
console.error(picocolors_1.default.dim('Nothing was rolled back — restore from .sdsetup.bak backups if needed.'));
|
|
140
|
+
process.exitCode = 1;
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
console.log(picocolors_1.default.dim('\n Note: Redux Toolkit / react-redux, Formik, Yup and TanStack Query are install-only.'));
|
|
144
|
+
console.log(picocolors_1.default.dim(' Providers (Provider, QueryClientProvider, NavigationContainer) are not auto-wired — add them in your app entry.'));
|
|
145
|
+
// Step 4: summary
|
|
146
|
+
console.log(picocolors_1.default.bold('\n✅ Summary'));
|
|
147
|
+
console.log(` Project: ${info.projectType} · pm: ${info.packageManager} · dir: ${info.cwd}`);
|
|
148
|
+
if (installRes.installed.length > 0)
|
|
149
|
+
console.log(` ${flags.dryRun ? 'Would install' : 'Installed'}: ${installRes.installed.join(', ')}`);
|
|
150
|
+
else
|
|
151
|
+
console.log(' Installed: (none — all present)');
|
|
152
|
+
if (changedFiles.length > 0) {
|
|
153
|
+
console.log(` ${flags.dryRun ? 'Would change' : 'Changed'} files:`);
|
|
154
|
+
for (const f of changedFiles)
|
|
155
|
+
console.log(` - ${f}`);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
console.log(' Changed files: (none)');
|
|
159
|
+
}
|
|
160
|
+
const remaining = [...manualSteps];
|
|
161
|
+
if (changedFiles.length > 0 || flags.dryRun) {
|
|
162
|
+
if (info.projectType === 'expo')
|
|
163
|
+
remaining.push('Rebuild/start with cleared Metro cache: `npx expo start -c`. For dev clients, rebuild the dev client after native changes.');
|
|
164
|
+
else
|
|
165
|
+
remaining.push('Rebuild the native app after native/babel changes (`npx react-native run-ios` / `run-android`), with Metro cache cleared.');
|
|
166
|
+
}
|
|
167
|
+
if (warnings.length > 0) {
|
|
168
|
+
console.log(picocolors_1.default.yellow('\n Warnings:'));
|
|
169
|
+
for (const w of warnings)
|
|
170
|
+
console.log(picocolors_1.default.yellow(` ! ${w}`));
|
|
171
|
+
}
|
|
172
|
+
if (remaining.length > 0) {
|
|
173
|
+
console.log(picocolors_1.default.bold('\n Remaining manual steps:'));
|
|
174
|
+
for (const s of remaining)
|
|
175
|
+
console.log(` - ${s}`);
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
console.log(picocolors_1.default.dim('\n No remaining manual steps.'));
|
|
179
|
+
}
|
|
180
|
+
if (flags.dryRun)
|
|
181
|
+
console.log(picocolors_1.default.dim('\n [dry-run] No files or packages were changed.'));
|
|
182
|
+
console.log('');
|
|
183
|
+
}
|
|
184
|
+
main().catch((err) => {
|
|
185
|
+
console.error(`Unexpected error: ${err?.message ?? String(err)}`);
|
|
186
|
+
console.error('Fix: re-run with --dry-run to preview, and report the issue with the error above.');
|
|
187
|
+
process.exitCode = 1;
|
|
188
|
+
});
|
|
189
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ProjectInfo } from './detect.js';
|
|
2
|
+
export declare function missingPackages(info: ProjectInfo): string[];
|
|
3
|
+
export interface InstallResult {
|
|
4
|
+
skipped: string[];
|
|
5
|
+
installed: string[];
|
|
6
|
+
commandStr: string | null;
|
|
7
|
+
}
|
|
8
|
+
export declare function installPackages(info: ProjectInfo, opts?: {
|
|
9
|
+
dryRun?: boolean;
|
|
10
|
+
}): Promise<InstallResult>;
|
|
11
|
+
//# sourceMappingURL=install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CAG3D;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,WAAW,EACjB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9B,OAAO,CAAC,aAAa,CAAC,CAqBxB"}
|
package/dist/install.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.missingPackages = missingPackages;
|
|
7
|
+
exports.installPackages = installPackages;
|
|
8
|
+
const execa_1 = require("execa");
|
|
9
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
10
|
+
const constants_js_1 = require("./constants.js");
|
|
11
|
+
const pm_js_1 = require("./pm.js");
|
|
12
|
+
function missingPackages(info) {
|
|
13
|
+
const installed = new Set([...Object.keys(info.dependencies), ...Object.keys(info.devDependencies)]);
|
|
14
|
+
return [...constants_js_1.PACKAGES].filter((p) => !installed.has(p));
|
|
15
|
+
}
|
|
16
|
+
async function installPackages(info, opts = {}) {
|
|
17
|
+
const toInstall = missingPackages(info);
|
|
18
|
+
const skipped = [...constants_js_1.PACKAGES].filter((p) => !toInstall.includes(p));
|
|
19
|
+
if (toInstall.length === 0) {
|
|
20
|
+
return { skipped, installed: [], commandStr: null };
|
|
21
|
+
}
|
|
22
|
+
const cmd = (0, pm_js_1.buildInstallCommand)(info.packageManager, info.projectType, toInstall);
|
|
23
|
+
const commandStr = (0, pm_js_1.formatInstallCommand)(cmd);
|
|
24
|
+
if (opts.dryRun) {
|
|
25
|
+
return { skipped, installed: toInstall, commandStr };
|
|
26
|
+
}
|
|
27
|
+
console.log(picocolors_1.default.cyan(`\n$ ${commandStr}`));
|
|
28
|
+
try {
|
|
29
|
+
await (0, execa_1.execa)(cmd.command, cmd.args, { cwd: info.cwd, stdio: 'inherit' });
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
const msg = err?.shortMessage || err?.message || String(err);
|
|
33
|
+
throw new Error(`Install failed:\n ${commandStr}\n ${msg}\nFix: check your network and package manager setup, then re-run. Already-installed packages are skipped automatically.`);
|
|
34
|
+
}
|
|
35
|
+
return { skipped, installed: toInstall, commandStr };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":";;;;;AAMA,0CAGC;AAQD,0CAwBC;AAzCD,iCAA8B;AAC9B,4DAA4B;AAC5B,iDAA0C;AAC1C,mCAAoE;AAGpE,SAAgB,eAAe,CAAC,IAAiB;IAC/C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACrG,OAAO,CAAC,GAAG,uBAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAQM,KAAK,UAAU,eAAe,CACnC,IAAiB,EACjB,OAA6B,EAAE;IAE/B,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,CAAC,GAAG,uBAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAW,CAAC,CAAa,CAAC;IAC1F,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACtD,CAAC;IACD,MAAM,GAAG,GAAG,IAAA,2BAAmB,EAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAClF,MAAM,UAAU,GAAG,IAAA,4BAAoB,EAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;IACvD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,oBAAE,CAAC,IAAI,CAAC,OAAO,UAAU,EAAE,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,IAAA,aAAK,EAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,GAAG,EAAE,YAAY,IAAI,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CACb,sBAAsB,UAAU,OAAO,GAAG,yHAAyH,CACpK,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACvD,CAAC"}
|
package/dist/pm.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';
|
|
2
|
+
export type ProjectType = 'expo' | 'bare';
|
|
3
|
+
export interface InstallCommand {
|
|
4
|
+
command: string;
|
|
5
|
+
args: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function detectPackageManager(cwd: string): PackageManager;
|
|
8
|
+
/**
|
|
9
|
+
* Pure function that builds the install command for a given package manager + project type.
|
|
10
|
+
* Expo uses `expo install` so versions match the SDK; bare CLI uses the plain add command.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildInstallCommand(pm: PackageManager, projectType: ProjectType, packages: string[]): InstallCommand;
|
|
13
|
+
export declare function formatInstallCommand(cmd: InstallCommand): string;
|
|
14
|
+
//# sourceMappingURL=pm.d.ts.map
|
package/dist/pm.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pm.d.ts","sourceRoot":"","sources":["../src/pm.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAC7D,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAKhE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,cAAc,EAClB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,EAAE,GACjB,cAAc,CA0BhB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAGhE"}
|
package/dist/pm.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectPackageManager = detectPackageManager;
|
|
4
|
+
exports.buildInstallCommand = buildInstallCommand;
|
|
5
|
+
exports.formatInstallCommand = formatInstallCommand;
|
|
6
|
+
const node_fs_1 = require("node:fs");
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
function detectPackageManager(cwd) {
|
|
9
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'pnpm-lock.yaml')))
|
|
10
|
+
return 'pnpm';
|
|
11
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'yarn.lock')))
|
|
12
|
+
return 'yarn';
|
|
13
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'bun.lockb')) || (0, node_fs_1.existsSync)((0, node_path_1.join)(cwd, 'bun.lock')))
|
|
14
|
+
return 'bun';
|
|
15
|
+
return 'npm';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Pure function that builds the install command for a given package manager + project type.
|
|
19
|
+
* Expo uses `expo install` so versions match the SDK; bare CLI uses the plain add command.
|
|
20
|
+
*/
|
|
21
|
+
function buildInstallCommand(pm, projectType, packages) {
|
|
22
|
+
if (packages.length === 0) {
|
|
23
|
+
throw new Error('buildInstallCommand: packages must not be empty');
|
|
24
|
+
}
|
|
25
|
+
if (projectType === 'expo') {
|
|
26
|
+
switch (pm) {
|
|
27
|
+
case 'npm':
|
|
28
|
+
return { command: 'npx', args: ['expo', 'install', ...packages] };
|
|
29
|
+
case 'yarn':
|
|
30
|
+
return { command: 'yarn', args: ['expo', 'install', ...packages] };
|
|
31
|
+
case 'pnpm':
|
|
32
|
+
return { command: 'pnpm', args: ['dlx', 'expo', 'install', ...packages] };
|
|
33
|
+
case 'bun':
|
|
34
|
+
return { command: 'bunx', args: ['expo', 'install', ...packages] };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
switch (pm) {
|
|
38
|
+
case 'npm':
|
|
39
|
+
return { command: 'npm', args: ['install', ...packages] };
|
|
40
|
+
case 'yarn':
|
|
41
|
+
return { command: 'yarn', args: ['add', ...packages] };
|
|
42
|
+
case 'pnpm':
|
|
43
|
+
return { command: 'pnpm', args: ['add', ...packages] };
|
|
44
|
+
case 'bun':
|
|
45
|
+
return { command: 'bun', args: ['add', ...packages] };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function formatInstallCommand(cmd) {
|
|
49
|
+
const q = (s) => (/\s/.test(s) ? JSON.stringify(s) : s);
|
|
50
|
+
return [cmd.command, ...cmd.args].map(q).join(' ');
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=pm.js.map
|
package/dist/pm.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pm.js","sourceRoot":"","sources":["../src/pm.ts"],"names":[],"mappings":";;AAWA,oDAKC;AAMD,kDA8BC;AAED,oDAGC;AAzDD,qCAAqC;AACrC,yCAAiC;AAUjC,SAAgB,oBAAoB,CAAC,GAAW;IAC9C,IAAI,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3D,IAAI,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACtD,IAAI,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC,IAAI,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1F,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CACjC,EAAkB,EAClB,WAAwB,EACxB,QAAkB;IAElB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,QAAQ,EAAE,EAAE,CAAC;YACX,KAAK,KAAK;gBACR,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;YACpE,KAAK,MAAM;gBACT,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;YACrE,KAAK,MAAM;gBACT,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;YAC5E,KAAK,KAAK;gBACR,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QACvE,CAAC;IACH,CAAC;IACD,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,KAAK;YACR,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QAC5D,KAAK,MAAM;YACT,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QACzD,KAAK,MAAM;YACT,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QACzD,KAAK,KAAK;YACR,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,SAAgB,oBAAoB,CAAC,GAAmB;IACtD,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ProjectInfo } from '../detect.js';
|
|
2
|
+
export interface CliSetupResult {
|
|
3
|
+
plugin: string;
|
|
4
|
+
babelChanged: boolean;
|
|
5
|
+
babelFile: string;
|
|
6
|
+
babelBackup: string | null;
|
|
7
|
+
babelCreated: boolean;
|
|
8
|
+
androidFile: string | null;
|
|
9
|
+
androidChanged: boolean;
|
|
10
|
+
androidWouldChange: boolean;
|
|
11
|
+
androidBackup: string | null;
|
|
12
|
+
warnings: string[];
|
|
13
|
+
manualSteps: string[];
|
|
14
|
+
podCommand: string | null;
|
|
15
|
+
}
|
|
16
|
+
export declare function setupBareCli(info: ProjectInfo, opts?: {
|
|
17
|
+
dryRun?: boolean;
|
|
18
|
+
skipPods?: boolean;
|
|
19
|
+
}): Promise<CliSetupResult>;
|
|
20
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/setup/cli.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAoBD,wBAAsB,YAAY,CAChC,IAAI,EAAE,WAAW,EACjB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAClD,OAAO,CAAC,cAAc,CAAC,CAiGzB"}
|