create-rock 0.10.2 → 0.11.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 (55) hide show
  1. package/dist/src/bin.js +146 -9
  2. package/package.json +9 -11
  3. package/dist/e2e/e2e.test.d.ts +0 -1
  4. package/dist/e2e/e2e.test.js +0 -98
  5. package/dist/e2e/e2e.test.js.map +0 -1
  6. package/dist/src/bin.d.ts +0 -2
  7. package/dist/src/bin.js.map +0 -1
  8. package/dist/src/index.d.ts +0 -1
  9. package/dist/src/index.js +0 -2
  10. package/dist/src/index.js.map +0 -1
  11. package/dist/src/lib/bin.d.ts +0 -4
  12. package/dist/src/lib/bin.js +0 -210
  13. package/dist/src/lib/bin.js.map +0 -1
  14. package/dist/src/lib/steps/git-init.d.ts +0 -3
  15. package/dist/src/lib/steps/git-init.js +0 -51
  16. package/dist/src/lib/steps/git-init.js.map +0 -1
  17. package/dist/src/lib/templates.d.ts +0 -23
  18. package/dist/src/lib/templates.js +0 -122
  19. package/dist/src/lib/templates.js.map +0 -1
  20. package/dist/src/lib/utils/edit-template.d.ts +0 -10
  21. package/dist/src/lib/utils/edit-template.js +0 -48
  22. package/dist/src/lib/utils/edit-template.js.map +0 -1
  23. package/dist/src/lib/utils/fs.d.ts +0 -10
  24. package/dist/src/lib/utils/fs.js +0 -49
  25. package/dist/src/lib/utils/fs.js.map +0 -1
  26. package/dist/src/lib/utils/getPkgManager.d.ts +0 -2
  27. package/dist/src/lib/utils/getPkgManager.js +0 -25
  28. package/dist/src/lib/utils/getPkgManager.js.map +0 -1
  29. package/dist/src/lib/utils/initInExistingProject.d.ts +0 -2
  30. package/dist/src/lib/utils/initInExistingProject.js +0 -251
  31. package/dist/src/lib/utils/initInExistingProject.js.map +0 -1
  32. package/dist/src/lib/utils/migrateRnefProject.d.ts +0 -2
  33. package/dist/src/lib/utils/migrateRnefProject.js +0 -206
  34. package/dist/src/lib/utils/migrateRnefProject.js.map +0 -1
  35. package/dist/src/lib/utils/package-json.d.ts +0 -2
  36. package/dist/src/lib/utils/package-json.js +0 -65
  37. package/dist/src/lib/utils/package-json.js.map +0 -1
  38. package/dist/src/lib/utils/parse-cli-options.d.ts +0 -14
  39. package/dist/src/lib/utils/parse-cli-options.js +0 -35
  40. package/dist/src/lib/utils/parse-cli-options.js.map +0 -1
  41. package/dist/src/lib/utils/parsers.d.ts +0 -10
  42. package/dist/src/lib/utils/parsers.js +0 -22
  43. package/dist/src/lib/utils/parsers.js.map +0 -1
  44. package/dist/src/lib/utils/project-name.d.ts +0 -8
  45. package/dist/src/lib/utils/project-name.js +0 -88
  46. package/dist/src/lib/utils/project-name.js.map +0 -1
  47. package/dist/src/lib/utils/prompts.d.ts +0 -14
  48. package/dist/src/lib/utils/prompts.js +0 -141
  49. package/dist/src/lib/utils/prompts.js.map +0 -1
  50. package/dist/src/lib/utils/tarball.d.ts +0 -8
  51. package/dist/src/lib/utils/tarball.js +0 -47
  52. package/dist/src/lib/utils/tarball.js.map +0 -1
  53. package/dist/src/lib/utils/version.d.ts +0 -1
  54. package/dist/src/lib/utils/version.js +0 -18
  55. package/dist/src/lib/utils/version.js.map +0 -1
@@ -1,48 +0,0 @@
1
- import * as fs from 'node:fs';
2
- import * as path from 'node:path';
3
- import { renameFile, walkDirectory } from './fs.js';
4
- /**
5
- * Placeholder name used in template, that should be replaced with normalized project name.
6
- */
7
- const PLACEHOLDER_NAME = 'HelloWorld';
8
- /**
9
- * Rename common files that cannot be put into template literaly, e.g. .gitignore.
10
- */
11
- export function renameCommonFiles(projectPath) {
12
- const sourceGitIgnorePath = path.join(projectPath, 'gitignore');
13
- if (!fs.existsSync(sourceGitIgnorePath)) {
14
- return;
15
- }
16
- fs.renameSync(sourceGitIgnorePath, path.join(projectPath, '.gitignore'));
17
- }
18
- /**
19
- * Replace placeholder with project nae in whole template:
20
- * - Rename paths containing placeholder
21
- * - Replace placeholder in text files
22
- */
23
- export function replacePlaceholder(projectPath, normalizedName) {
24
- if (normalizedName === PLACEHOLDER_NAME) {
25
- return;
26
- }
27
- for (const filePath of walkDirectory(projectPath).reverse()) {
28
- if (!fs.statSync(filePath).isDirectory()) {
29
- replacePlaceholderInTextFile(filePath, normalizedName);
30
- }
31
- if (path.basename(filePath).includes(PLACEHOLDER_NAME)) {
32
- renameFile(filePath, PLACEHOLDER_NAME, normalizedName);
33
- }
34
- else if (path.basename(filePath).includes(PLACEHOLDER_NAME.toLowerCase())) {
35
- renameFile(filePath, PLACEHOLDER_NAME.toLowerCase(), normalizedName.toLowerCase());
36
- }
37
- }
38
- }
39
- function replacePlaceholderInTextFile(filePath, normalizedName) {
40
- const fileContent = fs.readFileSync(filePath, 'utf8');
41
- const replacedFileContent = fileContent
42
- .replaceAll(PLACEHOLDER_NAME, normalizedName)
43
- .replaceAll(PLACEHOLDER_NAME.toLowerCase(), normalizedName.toLowerCase());
44
- if (fileContent !== replacedFileContent) {
45
- fs.writeFileSync(filePath, replacedFileContent, 'utf8');
46
- }
47
- }
48
- //# sourceMappingURL=edit-template.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edit-template.js","sourceRoot":"","sources":["../../../../src/lib/utils/edit-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEpD;;GAEG;AACH,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAChE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;IAED,EAAE,CAAC,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,cAAsB;IAEtB,IAAI,cAAc,KAAK,gBAAgB,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5D,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACzC,4BAA4B,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvD,UAAU,CAAC,QAAQ,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;QACzD,CAAC;aAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,EAChE,CAAC;YACD,UAAU,CACR,QAAQ,EACR,gBAAgB,CAAC,WAAW,EAAE,EAC9B,cAAc,CAAC,WAAW,EAAE,CAC7B,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CACnC,QAAgB,EAChB,cAAsB;IAEtB,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,mBAAmB,GAAG,WAAW;SACpC,UAAU,CAAC,gBAAgB,EAAE,cAAc,CAAC;SAC5C,UAAU,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;IAE5E,IAAI,WAAW,KAAK,mBAAmB,EAAE,CAAC;QACxC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}
@@ -1,10 +0,0 @@
1
- export declare function isEmptyDirSync(path: string): boolean;
2
- type CopyDirOptions = {
3
- skipFiles?: string[];
4
- };
5
- export declare function copyDirSync(from: string, to: string, { skipFiles }?: CopyDirOptions): void;
6
- export declare function removeDirSync(path: string): void;
7
- export declare function walkDirectory(currentPath: string): string[];
8
- export declare function renameFile(filePath: string, oldName: string, newName: string): void;
9
- export declare function getNameWithoutExtension(filePath: string): string;
10
- export {};
@@ -1,49 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import nodePath from 'node:path';
4
- import { mergePackageJsons } from './package-json.js';
5
- export function isEmptyDirSync(path) {
6
- const files = fs.readdirSync(path);
7
- return files.length === 0 || (files.length === 1 && files[0] === '.git');
8
- }
9
- export function copyDirSync(from, to, { skipFiles = [] } = {}) {
10
- fs.mkdirSync(to, { recursive: true });
11
- for (const file of fs.readdirSync(from)) {
12
- const srcFile = nodePath.resolve(from, file);
13
- const stat = fs.statSync(srcFile);
14
- const distFile = nodePath.resolve(to, file);
15
- if (stat.isDirectory()) {
16
- copyDirSync(srcFile, distFile, { skipFiles });
17
- }
18
- else {
19
- if (nodePath.basename(srcFile) === 'package.json') {
20
- mergePackageJsons(srcFile, distFile);
21
- }
22
- else {
23
- fs.copyFileSync(srcFile, distFile);
24
- }
25
- }
26
- }
27
- }
28
- export function removeDirSync(path) {
29
- if (fs.existsSync(path)) {
30
- fs.rmSync(path, { recursive: true });
31
- }
32
- }
33
- export function walkDirectory(currentPath) {
34
- if (!fs.lstatSync(currentPath).isDirectory()) {
35
- return [currentPath];
36
- }
37
- const childPaths = fs
38
- .readdirSync(currentPath)
39
- .flatMap((childName) => walkDirectory(path.join(currentPath, childName)));
40
- return [currentPath, ...childPaths];
41
- }
42
- export function renameFile(filePath, oldName, newName) {
43
- const newFileName = nodePath.join(nodePath.dirname(filePath), nodePath.basename(filePath).replaceAll(oldName, newName));
44
- fs.renameSync(filePath, newFileName);
45
- }
46
- export function getNameWithoutExtension(filePath) {
47
- return path.basename(filePath, path.extname(filePath));
48
- }
49
- //# sourceMappingURL=fs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../../src/lib/utils/fs.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function getPkgManager(): string;
2
- export declare function getPkgManagerFromLockFile(): "npm" | "pnpm" | "yarn" | "bun";
@@ -1,25 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { parsePackageManagerFromUserAgent } from './parsers.js';
4
- export function getPkgManager() {
5
- const fromUserAgent = parsePackageManagerFromUserAgent(process.env['npm_config_user_agent']);
6
- if (fromUserAgent) {
7
- return fromUserAgent.name;
8
- }
9
- return getPkgManagerFromLockFile();
10
- }
11
- export function getPkgManagerFromLockFile() {
12
- if (fs.existsSync(path.join(process.cwd(), 'pnpm-lock.yaml'))) {
13
- return 'pnpm';
14
- }
15
- if (fs.existsSync(path.join(process.cwd(), 'yarn.lock')) ||
16
- fs.existsSync(path.join(process.cwd(), '.yarn'))) {
17
- return 'yarn';
18
- }
19
- if (fs.existsSync(path.join(process.cwd(), 'bun.lockb')) ||
20
- fs.existsSync(path.join(process.cwd(), 'bun.lock'))) {
21
- return 'bun';
22
- }
23
- return 'npm';
24
- }
25
- //# sourceMappingURL=getPkgManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getPkgManager.js","sourceRoot":"","sources":["../../../../src/lib/utils/getPkgManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gCAAgC,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,UAAU,aAAa;IAC3B,MAAM,aAAa,GAAG,gCAAgC,CACpD,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CACrC,CAAC;IACF,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC,IAAI,CAAC;IAC5B,CAAC;IACD,OAAO,yBAAyB,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IACE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;QACpD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAChD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IACE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;QACpD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC,EACnD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function initInExistingProject(projectRoot: string): Promise<void>;
2
- export declare function updateAndroidBuildGradle(projectRoot: string, sourceDir: string): void;
@@ -1,251 +0,0 @@
1
- import fs from 'node:fs';
2
- import { createRequire } from 'node:module';
3
- import path from 'node:path';
4
- import { color, colorLink, logger, note, outro, spawn, spinner, } from '@rock-js/tools';
5
- import { getPkgManagerFromLockFile } from './getPkgManager.js';
6
- export async function initInExistingProject(projectRoot) {
7
- const pkgManager = getPkgManagerFromLockFile();
8
- const loader = spinner();
9
- // 1) Install Rock dev dependencies
10
- const rockPackages = [
11
- 'rock',
12
- '@rock-js/plugin-metro',
13
- '@rock-js/platform-android',
14
- '@rock-js/platform-ios',
15
- ];
16
- loader.start(`Adding ${color.bold('Rock')} dependencies with ${color.bold(pkgManager)}`);
17
- await addDevDependencies(projectRoot, pkgManager, rockPackages);
18
- loader.stop(`Added ${color.bold('Rock')} dependencies`);
19
- // 2) Remove community CLI deps
20
- const rnCliPackages = [
21
- '@react-native-community/cli',
22
- '@react-native-community/cli-platform-android',
23
- '@react-native-community/cli-platform-ios',
24
- ];
25
- loader.start(`Removing ${color.bold('React Native Community CLI')} packages`);
26
- await removeDependencies(projectRoot, pkgManager, rnCliPackages);
27
- loader.stop(`Removed ${color.bold('React Native Community CLI')} packages`);
28
- // 3) Ensure .gitignore includes .rock/
29
- loader.start(`Adding ${color.bold('.gitignore')} entry for .rock/`);
30
- ensureGitignoreEntry(projectRoot, '.rock/');
31
- loader.stop(`Added ${color.bold('.gitignore')} entry for .rock/`);
32
- // 4) Generate rock.config.mjs (optionally migrate a bit from react-native.config.js)
33
- loader.start(`Generating ${color.bold('rock.config.mjs')}`);
34
- const platformArgs = readPlatformArgsFromReactNativeConfig(projectRoot);
35
- createMigrationConfig(projectRoot, platformArgs);
36
- loader.stop(`Generated ${color.bold('rock.config.mjs')}`);
37
- const iosSourceDir = platformArgs.ios?.sourceDir ?? 'ios';
38
- const androidSourceDir = platformArgs.android?.sourceDir ?? 'android';
39
- // 5) Android file changes
40
- loader.start(`Updating ${color.bold(`${androidSourceDir}/app/build.gradle`)} and ${color.bold(`${androidSourceDir}/settings.gradle`)}`);
41
- updateAndroidBuildGradle(projectRoot, androidSourceDir);
42
- updateAndroidSettingsGradle(projectRoot, androidSourceDir);
43
- loader.stop(`Updated ${color.bold(`${androidSourceDir}/app/build.gradle`)} and ${color.bold(`${androidSourceDir}/settings.gradle`)}`);
44
- // 6) Podfile changes
45
- loader.start(`Updating ${color.bold(`${iosSourceDir}/Podfile`)}`);
46
- updatePodfile(projectRoot, iosSourceDir);
47
- loader.stop(`Updated ${color.bold(`${iosSourceDir}/Podfile`)}`);
48
- // 7) Xcode project changes
49
- loader.start(`Updating ${color.bold(`${iosSourceDir}/project.pbxproj`)}`);
50
- updateXcodeProject(projectRoot, iosSourceDir);
51
- loader.stop(`Updated ${color.bold(`${iosSourceDir}/project.pbxproj`)}`);
52
- // 8) Update package.json scripts
53
- loader.start(`Updating ${color.bold('package.json')} scripts`);
54
- updatePackageJsonScripts(projectRoot);
55
- loader.stop(`Updated ${color.bold('package.json')} scripts`);
56
- note([
57
- `1. Run ${color.bold('git diff')} to see the changes. Adjust as necessary e.g.:`,
58
- ` - paths in monorepo`,
59
- ` - commands in shell scripts`,
60
- ` - commands in CI workflows`,
61
- `2. Run the dev server as you would normally do`,
62
- `3. Run iOS and Android apps as you would normally do`,
63
- `4. Setup Remote Cache: ${colorLink('https://rockjs.dev/docs/configuration#remote-cache-configuration')}`,
64
- ].join('\n'), 'Next steps');
65
- outro('Success 🎉.');
66
- }
67
- function ensureGitignoreEntry(projectRoot, entry) {
68
- const gitignorePath = path.join(projectRoot, '.gitignore');
69
- if (fs.existsSync(gitignorePath) &&
70
- !fs.readFileSync(gitignorePath, 'utf8').includes(entry)) {
71
- fs.appendFileSync(gitignorePath, `\n# Rock\n${entry}\n`);
72
- return;
73
- }
74
- }
75
- function readPlatformArgsFromReactNativeConfig(projectRoot) {
76
- const rnConfigPath = path.join(projectRoot, 'react-native.config.js');
77
- if (!fs.existsSync(rnConfigPath)) {
78
- return {};
79
- }
80
- try {
81
- const require = createRequire(import.meta.url);
82
- const rnConfig = require(rnConfigPath);
83
- return { ios: rnConfig.project?.ios, android: rnConfig.project?.android };
84
- }
85
- catch {
86
- return {};
87
- }
88
- }
89
- function createMigrationConfig(projectRoot, platformArgs) {
90
- const rockConfigPath = path.join(projectRoot, 'rock.config.mjs');
91
- const iosArgs = platformArgs.ios
92
- ? `({
93
- ${Object.entries(platformArgs.ios)
94
- .map(([key, value]) => `${key}: '${value}'`)
95
- .join(',\n ')},
96
- })`
97
- : '()';
98
- const androidArgs = platformArgs.android
99
- ? `({
100
- ${Object.entries(platformArgs.android)
101
- .map(([key, value]) => `${key}: '${value}'`)
102
- .join(',\n ')},
103
- })`
104
- : '()';
105
- const content = `// @ts-check
106
- import { platformIOS } from '@rock-js/platform-ios';
107
- import { platformAndroid } from '@rock-js/platform-android';
108
- import { pluginMetro } from '@rock-js/plugin-metro';
109
-
110
- /** @type {import('rock').Config} */
111
- export default {
112
- bundler: pluginMetro(),
113
- platforms: {
114
- ios: platformIOS${iosArgs},
115
- android: platformAndroid${androidArgs},
116
- },
117
- remoteCacheProvider: null,
118
- };
119
- `;
120
- fs.writeFileSync(rockConfigPath, content);
121
- }
122
- export function updateAndroidBuildGradle(projectRoot, sourceDir) {
123
- const filePath = path.join(projectRoot, sourceDir, 'app', 'build.gradle');
124
- if (!fs.existsSync(filePath)) {
125
- return;
126
- }
127
- const desired = 'cliFile = file("../../node_modules/rock/dist/src/bin.js")';
128
- const content = fs.readFileSync(filePath, 'utf8');
129
- if (content.includes(desired)) {
130
- logger.debug(`${filePath} already contains "${desired}"`);
131
- return;
132
- }
133
- const replaced = content.replace(/(?:\/\/\s+)?cliFile\s*=\s*file\([^)]*\)/g, desired);
134
- if (replaced === content) {
135
- logger.warn(`Unable to update ${color.bold(filePath)}.
136
- Please update the "CLI file" build phase manually with:
137
- cliFile = file("../../node_modules/rock/dist/src/bin.js")
138
- `);
139
- return;
140
- }
141
- fs.writeFileSync(filePath, replaced);
142
- }
143
- function updateAndroidSettingsGradle(projectRoot, sourceDir) {
144
- const filePath = path.join(projectRoot, sourceDir, 'settings.gradle');
145
- if (!fs.existsSync(filePath)) {
146
- return;
147
- }
148
- const content = fs.readFileSync(filePath, 'utf8');
149
- const target = "extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand(['npx', 'rock', 'config', '-p', 'android']) }";
150
- let replaced = content.replace(/extensions\.configure\(com\.facebook\.react\.ReactSettingsExtension\)\{[^}]*autolinkLibrariesFromCommand\([^)]*\)[^}]*\}/gs, target);
151
- if (replaced === content) {
152
- // Try to replace only the inner call if block structure differs
153
- replaced = content.replace(/autolinkLibrariesFromCommand\([^)]*\)/g, "autolinkLibrariesFromCommand(['npx', 'rock', 'config', '-p', 'android'])");
154
- }
155
- if (replaced !== content) {
156
- fs.writeFileSync(filePath, replaced);
157
- }
158
- }
159
- function updateXcodeProject(projectRoot, sourceDir) {
160
- const toReplace = 'shellScript = "set -e\\n\\nWITH_ENVIRONMENT=\\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\\"\\nREACT_NATIVE_XCODE=\\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\\"\\n\\n/bin/sh -c \\"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\\"\\n";';
161
- const expected = 'shellScript = "set -e\\nif [[ -f \\"$PODS_ROOT/../.xcode.env\\" ]]; then\\nsource \\"$PODS_ROOT/../.xcode.env\\"\\nfi\\nif [[ -f \\"$PODS_ROOT/../.xcode.env.local\\" ]]; then\\nsource \\"$PODS_ROOT/../.xcode.env.local\\"\\nfi\\nexport CONFIG_CMD=\\"dummy-workaround-value\\"\\nexport CLI_PATH=\\"$(\\"$NODE_BINARY\\" --print \\"require(\'path\').dirname(require.resolve(\'rock/package.json\')) + \'/dist/src/bin.js\'\\")\\"\\nWITH_ENVIRONMENT=\\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\\"\\n";';
162
- const xcodeProjectFolder = fs
163
- .readdirSync(path.join(projectRoot, sourceDir))
164
- .find((file) => file.endsWith('.xcodeproj'));
165
- const xcodeProjectPath = xcodeProjectFolder
166
- ? path.join(projectRoot, sourceDir, xcodeProjectFolder, 'project.pbxproj')
167
- : undefined;
168
- if (!xcodeProjectPath) {
169
- logger.debug(`No Xcode project found in ${sourceDir}`);
170
- return;
171
- }
172
- const content = fs.readFileSync(xcodeProjectPath, 'utf8');
173
- const replaced = content.replace(toReplace, expected);
174
- if (replaced !== content) {
175
- fs.writeFileSync(xcodeProjectPath, replaced);
176
- }
177
- else {
178
- logger.warn(`Unable to update ${color.bold(xcodeProjectPath)}.
179
- Please update the "Bundle React Native code and images" build phase manually with:
180
- set -e
181
- if [[ -f "$PODS_ROOT/../.xcode.env" ]]; then
182
- source "$PODS_ROOT/../.xcode.env"
183
- fi
184
- if [[ -f "$PODS_ROOT/../.xcode.env.local" ]]; then
185
- source "$PODS_ROOT/../.xcode.env.local"
186
- fi
187
- export CONFIG_CMD="dummy-workaround-value"
188
- export CLI_PATH="$("$NODE_BINARY" --print "require('path').dirname(require.resolve('rock/package.json')) + '/dist/src/bin.js'")"
189
- WITH_ENVIRONMENT="$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh"
190
- `);
191
- }
192
- }
193
- function updatePodfile(projectRoot, sourceDir) {
194
- const filePath = path.join(projectRoot, sourceDir, 'Podfile');
195
- if (!fs.existsSync(filePath)) {
196
- return;
197
- }
198
- const content = fs.readFileSync(filePath, 'utf8');
199
- const replaced = content.replace(/(config\s*=\s*use_native_modules!)(\s*)/g, "$1(['npx', 'rock', 'config', '-p', 'ios'])$2");
200
- if (!content.includes(`(['npx', 'rock', 'config', '-p', 'ios'])`) &&
201
- replaced !== content) {
202
- fs.writeFileSync(filePath, replaced);
203
- }
204
- }
205
- function updatePackageJsonScripts(projectRoot) {
206
- const packageJsonPath = path.join(projectRoot, 'package.json');
207
- if (!fs.existsSync(packageJsonPath)) {
208
- return;
209
- }
210
- const content = fs.readFileSync(packageJsonPath, 'utf8');
211
- const replaced = content
212
- .replaceAll('react-native start', 'rock start')
213
- .replaceAll('react-native run-android', 'rock run:android')
214
- .replaceAll('react-native build-android', 'rock build:android')
215
- .replaceAll('react-native run-ios', 'rock run:ios')
216
- .replaceAll('react-native build-ios', 'rock build:ios')
217
- .replaceAll(/run:android(.*)--mode(.*)/g, 'run:android$1--variant$2')
218
- .replaceAll(/run:ios(.*)--mode(.*)/g, 'run:ios$1--configuration$2')
219
- .replaceAll(/build:android(.*)--mode(.*)/g, 'build:android$1--variant$2')
220
- .replaceAll(/build:ios(.*)--mode(.*)/g, 'build:ios$1--configuration$2')
221
- .replaceAll('--appIdSuffix', '--app-id-suffix')
222
- .replaceAll('--appId', '--app-id')
223
- .replaceAll('--buildFolder', '--build-folder');
224
- fs.writeFileSync(packageJsonPath, replaced);
225
- }
226
- async function addDevDependencies(projectRoot, pkgManager, packages) {
227
- const argsByManager = {
228
- npm: ['install', '-D', ...packages],
229
- pnpm: ['add', '-D', ...packages],
230
- yarn: ['add', '-D', ...packages],
231
- bun: ['add', '-D', ...packages],
232
- };
233
- const args = argsByManager[pkgManager] ?? ['install', '-D', ...packages];
234
- await spawn(pkgManager, args, { cwd: projectRoot });
235
- }
236
- async function removeDependencies(projectRoot, pkgManager, packages) {
237
- const argsByManager = {
238
- npm: ['remove', ...packages],
239
- pnpm: ['remove', ...packages],
240
- yarn: ['remove', ...packages],
241
- bun: ['remove', ...packages],
242
- };
243
- const args = argsByManager[pkgManager] ?? ['remove', ...packages];
244
- try {
245
- await spawn(pkgManager, args, { cwd: projectRoot });
246
- }
247
- catch (error) {
248
- logger.debug(error.message, 'Continuing with the rest of the steps\n');
249
- }
250
- }
251
- //# sourceMappingURL=initInExistingProject.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"initInExistingProject.js","sourceRoot":"","sources":["../../../../src/lib/utils/initInExistingProject.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- declare function migrateRnefProject(projectRoot: string): Promise<void>;
2
- export { migrateRnefProject };
@@ -1,206 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { color, logger, note, outro, spawn, spinner } from '@rock-js/tools';
4
- import { getPkgManagerFromLockFile } from './getPkgManager.js';
5
- async function migrateRnefProject(projectRoot) {
6
- const pkgManager = getPkgManagerFromLockFile();
7
- const loader = spinner();
8
- const packagesMap = {
9
- '@rnef/cli': 'rock',
10
- '@rnef/platform-android': '@rock-js/platform-android',
11
- '@rnef/platform-ios': '@rock-js/platform-ios',
12
- '@rnef/plugin-metro': '@rock-js/plugin-metro',
13
- '@rnef/plugin-repack': '@rock-js/plugin-repack',
14
- '@rnef/provider-github': '@rock-js/provider-github',
15
- '@rnef/provider-s3': '@rock-js/provider-s3',
16
- '@rnef/welcome-screen': '@rock-js/welcome-screen',
17
- };
18
- const rnefDependencies = collectCurrentRnefDependencies(projectRoot);
19
- // 1) Remove RNEF packages and add Rock counterparts
20
- loader.start(`Removing ${color.bold('RNEF')} packages`);
21
- await removeDependencies(projectRoot, pkgManager, rnefDependencies);
22
- loader.stop(`Removed ${color.bold('RNEF')} packages`);
23
- loader.start(`Adding ${color.bold('Rock')} packages with ${color.bold(pkgManager)}`);
24
- await addDevDependencies(projectRoot, pkgManager, rnefDependencies.map((dependency) => packagesMap[dependency]));
25
- loader.stop(`Added ${color.bold('Rock')} packages`);
26
- // 2) Update .gitignore
27
- loader.start(`Updating ${color.bold('.gitignore')}`);
28
- updateGitignore(projectRoot);
29
- loader.stop(`Updated ${color.bold('.gitignore')}`);
30
- // 3) Rename .rnef/ directory to .rock/
31
- loader.start(`Updating cache`);
32
- renameRnefDirectory(projectRoot);
33
- updateCacheFilenames(projectRoot);
34
- loader.stop(`Updated cache`);
35
- // 4) Rename and update rnef.config.mjs
36
- loader.start(`Renaming and updating ${color.bold('rnef.config.mjs')} to ${color.bold('rock.config.mjs')}`);
37
- renameAndUpdateConfig(projectRoot);
38
- loader.stop(`Renamed and updated ${color.bold('rnef.config.mjs')} to ${color.bold('rock.config.mjs')}`);
39
- // 5) Update Android build.gradle
40
- loader.start(`Updating ${color.bold('android/app/build.gradle')}`);
41
- updateAndroidBuildGradle(projectRoot);
42
- loader.stop(`Updated ${color.bold('android/app/build.gradle')}`);
43
- // 6) Update iOS Podfile
44
- loader.start(`Updating ${color.bold('ios/Podfile')}`);
45
- updatePodfile(projectRoot);
46
- loader.stop(`Updated ${color.bold('ios/Podfile')}`);
47
- // 7) Update Android settings.gradle
48
- loader.start(`Updating ${color.bold('android/settings.gradle')}`);
49
- updateAndroidSettingsGradle(projectRoot);
50
- loader.stop(`Updated ${color.bold('android/settings.gradle')}`);
51
- // 8) Update Xcode project.pbxproj
52
- loader.start(`Updating ${color.bold('ios/project.pbxproj')}`);
53
- updateXcodeProject(projectRoot);
54
- loader.stop(`Updated ${color.bold('ios/project.pbxproj')}`);
55
- // 9) Update package.json scripts
56
- loader.start(`Updating ${color.bold('package.json')} scripts`);
57
- updatePackageJsonScripts(projectRoot);
58
- loader.stop(`Updated ${color.bold('package.json')} scripts`);
59
- note([
60
- `1. Run ${color.bold('git diff')} to see the changes. Adjust as necessary e.g.:`,
61
- ` - paths in monorepo`,
62
- ` - commands in shell scripts`,
63
- ` - commands in CI workflows`,
64
- `2. Run the dev server as you would normally do`,
65
- `3. Run iOS and Android apps as you would normally do`,
66
- `4. Setup Remote Cache: ${color.bold('https://rockjs.dev/docs/configuration#remote-cache-configuration')}`,
67
- ].join('\n'), 'Next steps');
68
- outro('RNEF to Rock migration completed successfully 🎉.');
69
- }
70
- function collectCurrentRnefDependencies(projectRoot) {
71
- const packageJsonPath = path.join(projectRoot, 'package.json');
72
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
73
- const rnefDependencies = Object.keys(packageJson.dependencies).filter((dependency) => dependency.startsWith('@rnef/'));
74
- const rnefDevDependencies = Object.keys(packageJson.devDependencies).filter((dependency) => dependency.startsWith('@rnef/'));
75
- return [...rnefDependencies, ...rnefDevDependencies];
76
- }
77
- function updateGitignore(projectRoot) {
78
- const gitignorePath = path.join(projectRoot, '.gitignore');
79
- if (fs.existsSync(gitignorePath)) {
80
- let content = fs.readFileSync(gitignorePath, 'utf8');
81
- content = content.replace(/\.rnef\//g, '.rock/');
82
- fs.writeFileSync(gitignorePath, content);
83
- }
84
- }
85
- function renameRnefDirectory(projectRoot) {
86
- const rnefPath = path.join(projectRoot, '.rnef');
87
- const rockPath = path.join(projectRoot, '.rock');
88
- if (fs.existsSync(rnefPath)) {
89
- if (fs.existsSync(rockPath)) {
90
- // If .rock already exists, remove it first
91
- fs.rmSync(rockPath, { recursive: true, force: true });
92
- }
93
- fs.renameSync(rnefPath, rockPath);
94
- }
95
- }
96
- function updateCacheFilenames(projectRoot) {
97
- const cachePath = path.join(projectRoot, '.rock', 'cache', 'remote-build');
98
- if (!fs.existsSync(cachePath)) {
99
- return;
100
- }
101
- const files = fs.readdirSync(cachePath);
102
- files.forEach((file) => {
103
- if (file.includes('rnef')) {
104
- const newName = file.replace(/rnef/g, 'rock');
105
- const oldPath = path.join(cachePath, file);
106
- const newPath = path.join(cachePath, newName);
107
- fs.renameSync(oldPath, newPath);
108
- }
109
- });
110
- }
111
- function renameAndUpdateConfig(projectRoot) {
112
- const rnefConfigPath = path.join(projectRoot, 'rnef.config.mjs');
113
- const rockConfigPath = path.join(projectRoot, 'rock.config.mjs');
114
- if (fs.existsSync(rnefConfigPath)) {
115
- let content = fs.readFileSync(rnefConfigPath, 'utf8');
116
- // Replace package names
117
- content = content.replace(/@rnef\//g, '@rock-js/');
118
- content = content.replace(/@rnef\/cli/g, 'rock');
119
- // Write to new file
120
- fs.writeFileSync(rockConfigPath, content);
121
- // Remove old file
122
- fs.unlinkSync(rnefConfigPath);
123
- }
124
- }
125
- function updateAndroidBuildGradle(projectRoot) {
126
- const filePath = path.join(projectRoot, 'android', 'app', 'build.gradle');
127
- if (!fs.existsSync(filePath)) {
128
- return;
129
- }
130
- let content = fs.readFileSync(filePath, 'utf8');
131
- content = content.replace(/@rnef\/cli\/dist\/src\/bin\.js/g, 'rock/dist/src/bin.js');
132
- fs.writeFileSync(filePath, content);
133
- }
134
- function updatePodfile(projectRoot) {
135
- const filePath = path.join(projectRoot, 'ios', 'Podfile');
136
- if (!fs.existsSync(filePath)) {
137
- return;
138
- }
139
- let content = fs.readFileSync(filePath, 'utf8');
140
- content = content.replace(/rnef/g, 'rock');
141
- fs.writeFileSync(filePath, content);
142
- }
143
- function updateAndroidSettingsGradle(projectRoot) {
144
- const filePath = path.join(projectRoot, 'android', 'settings.gradle');
145
- if (!fs.existsSync(filePath)) {
146
- return;
147
- }
148
- let content = fs.readFileSync(filePath, 'utf8');
149
- content = content.replace(/rnef/g, 'rock');
150
- fs.writeFileSync(filePath, content);
151
- }
152
- function updateXcodeProject(projectRoot) {
153
- const iosPath = path.join(projectRoot, 'ios');
154
- if (!fs.existsSync(iosPath)) {
155
- return;
156
- }
157
- const xcodeProjectFolder = fs
158
- .readdirSync(iosPath)
159
- .find((file) => file.endsWith('.xcodeproj'));
160
- if (!xcodeProjectFolder) {
161
- return;
162
- }
163
- const xcodeProjectPath = path.join(iosPath, xcodeProjectFolder, 'project.pbxproj');
164
- if (!fs.existsSync(xcodeProjectPath)) {
165
- return;
166
- }
167
- let content = fs.readFileSync(xcodeProjectPath, 'utf8');
168
- content = content.replace(/@rnef\/cli/g, 'rock');
169
- fs.writeFileSync(xcodeProjectPath, content);
170
- }
171
- function updatePackageJsonScripts(projectRoot) {
172
- const packageJsonPath = path.join(projectRoot, 'package.json');
173
- if (!fs.existsSync(packageJsonPath)) {
174
- return;
175
- }
176
- let content = fs.readFileSync(packageJsonPath, 'utf8');
177
- content = content.replace(/rnef/g, 'rock');
178
- fs.writeFileSync(packageJsonPath, content);
179
- }
180
- async function addDevDependencies(projectRoot, pkgManager, packages) {
181
- const argsByManager = {
182
- npm: ['install', '-D', ...packages],
183
- pnpm: ['add', '-D', ...packages],
184
- yarn: ['add', '-D', ...packages],
185
- bun: ['add', '-D', ...packages],
186
- };
187
- const args = argsByManager[pkgManager] ?? ['install', '-D', ...packages];
188
- await spawn(pkgManager, args, { cwd: projectRoot });
189
- }
190
- async function removeDependencies(projectRoot, pkgManager, packages) {
191
- const argsByManager = {
192
- npm: ['remove', ...packages],
193
- pnpm: ['remove', ...packages],
194
- yarn: ['remove', ...packages],
195
- bun: ['remove', ...packages],
196
- };
197
- const args = argsByManager[pkgManager] ?? ['remove', ...packages];
198
- try {
199
- await spawn(pkgManager, args, { cwd: projectRoot });
200
- }
201
- catch (error) {
202
- logger.debug(error.message, 'Continuing with the rest of the steps\n');
203
- }
204
- }
205
- export { migrateRnefProject };
206
- //# sourceMappingURL=migrateRnefProject.js.map