create-react-native-library 0.49.7 → 0.49.9

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 (53) hide show
  1. package/lib/exampleApp/dependencies.js +2 -7
  2. package/lib/exampleApp/dependencies.js.map +1 -1
  3. package/lib/exampleApp/generateExampleApp.js +23 -17
  4. package/lib/exampleApp/generateExampleApp.js.map +1 -1
  5. package/lib/index.js +23 -28
  6. package/lib/index.js.map +1 -1
  7. package/lib/inform.js +37 -47
  8. package/lib/inform.js.map +1 -1
  9. package/lib/input.js +2 -14
  10. package/lib/input.js.map +1 -1
  11. package/lib/template.js +28 -42
  12. package/lib/template.js.map +1 -1
  13. package/lib/utils/local.js +76 -0
  14. package/lib/utils/local.js.map +1 -0
  15. package/lib/utils/packageManager.js +13 -0
  16. package/lib/utils/packageManager.js.map +1 -0
  17. package/package.json +2 -2
  18. package/templates/common/$.gitignore +1 -1
  19. package/templates/common/$package.json +2 -11
  20. package/templates/common/CONTRIBUTING.md +16 -3
  21. package/templates/common/babel.config.js +10 -1
  22. package/templates/common-local/$package.json +1 -3
  23. package/templates/example-common/example/metro.config.js +0 -2
  24. package/templates/expo-library/example/metro.config.js +0 -2
  25. package/templates/native-common/android/build.gradle +5 -31
  26. package/templates/native-common/android/src/main/AndroidManifest.xml +1 -2
  27. package/templates/native-common/{%- project.name %}.podspec +3 -13
  28. package/templates/objc-library/ios/{%- project.name %}.h +1 -13
  29. package/templates/objc-library/ios/{%- project.name %}.mm +0 -24
  30. package/templates/objc-view-new/ios/{%- project.name %}View.mm +4 -4
  31. package/lib/exampleApp/addCodegenBuildScript.js +0 -55
  32. package/lib/exampleApp/addCodegenBuildScript.js.map +0 -1
  33. package/templates/cpp-library/android/CMakeLists.txt +0 -16
  34. package/templates/cpp-library/android/cpp-adapter.cpp +0 -8
  35. package/templates/cpp-library/cpp/{%- project.identifier %}.cpp +0 -7
  36. package/templates/cpp-library/cpp/{%- project.identifier %}.h +0 -8
  37. package/templates/example-module-legacy/example/src/App.tsx +0 -32
  38. package/templates/kotlin-library-legacy/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Module.kt +0 -25
  39. package/templates/kotlin-library-legacy/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.kt +0 -17
  40. package/templates/kotlin-view-legacy/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.kt +0 -17
  41. package/templates/kotlin-view-legacy/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}ViewManager.kt +0 -20
  42. package/templates/native-common/android/src/main/AndroidManifestNew.xml +0 -2
  43. package/templates/native-library-legacy/src/index.tsx +0 -22
  44. package/templates/native-library-new/react-native.config.js +0 -16
  45. package/templates/native-view-legacy/src/index.tsx +0 -26
  46. package/templates/native-view-new/react-native.config.js +0 -16
  47. package/templates/objc-view-legacy/ios/{%- project.name %}ViewManager.m +0 -34
  48. package/templates/swift-library-legacy/ios/{%- project.name %}-Bridging-Header.h +0 -2
  49. package/templates/swift-library-legacy/ios/{%- project.name %}.mm +0 -14
  50. package/templates/swift-library-legacy/ios/{%- project.name %}.swift +0 -8
  51. package/templates/swift-view-legacy/ios/{%- project.name %}-Bridging-Header.h +0 -1
  52. package/templates/swift-view-legacy/ios/{%- project.name %}ViewManager.m +0 -7
  53. package/templates/swift-view-legacy/ios/{%- project.name %}ViewManager.swift +0 -36
@@ -8,14 +8,9 @@ var _path = _interopRequireDefault(require("path"));
8
8
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
9
9
  var _sortObjectKeys = _interopRequireDefault(require("../utils/sortObjectKeys"));
10
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
- async function alignDependencyVersionsWithExampleApp(pkg, folder, config) {
11
+ async function alignDependencyVersionsWithExampleApp(pkg, folder) {
12
12
  const examplePackageJson = await _fsExtra.default.readJSON(_path.default.join(folder, 'example', 'package.json'));
13
- const PACKAGES_TO_COPY = ['react', 'react-native', '@types/react'];
14
- if (config.example === 'vanilla' && (config.project.moduleConfig === 'turbo-modules' || config.project.viewConfig === 'fabric-view')) {
15
- // React Native doesn't provide the community CLI as a dependency.
16
- // We have to read the version from the example app and put to the root package json
17
- PACKAGES_TO_COPY.push('@react-native-community/cli');
18
- }
13
+ const PACKAGES_TO_COPY = ['react', 'react-native', '@types/react', '@react-native/babel-preset'];
19
14
  const devDependencies = {};
20
15
  PACKAGES_TO_COPY.forEach(name => {
21
16
  if (name) {
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.js","names":["_path","_interopRequireDefault","require","_fsExtra","_sortObjectKeys","e","__esModule","default","alignDependencyVersionsWithExampleApp","pkg","folder","config","examplePackageJson","fs","readJSON","path","join","PACKAGES_TO_COPY","example","project","moduleConfig","viewConfig","push","devDependencies","forEach","name","version","dependencies","Error","sortObjectKeys"],"sources":["../../src/exampleApp/dependencies.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport type { TemplateConfiguration } from '../template';\nimport sortObjectKeys from '../utils/sortObjectKeys';\n\ntype PackageJson = {\n devDependencies?: Record<string, string>;\n};\n\nexport async function alignDependencyVersionsWithExampleApp(\n pkg: PackageJson,\n folder: string,\n config: TemplateConfiguration\n) {\n const examplePackageJson = await fs.readJSON(\n path.join(folder, 'example', 'package.json')\n );\n\n const PACKAGES_TO_COPY = ['react', 'react-native', '@types/react'];\n\n if (\n config.example === 'vanilla' &&\n (config.project.moduleConfig === 'turbo-modules' ||\n config.project.viewConfig === 'fabric-view')\n ) {\n // React Native doesn't provide the community CLI as a dependency.\n // We have to read the version from the example app and put to the root package json\n PACKAGES_TO_COPY.push('@react-native-community/cli');\n }\n\n const devDependencies: Record<string, string> = {};\n\n PACKAGES_TO_COPY.forEach((name) => {\n if (name) {\n const version =\n examplePackageJson.dependencies?.[name] ??\n examplePackageJson.devDependencies?.[name];\n\n if (version != null) {\n devDependencies[name] = version;\n } else if (pkg.devDependencies?.[name] == null) {\n throw new Error(\n `Couldn't find the package \"${name}\" in the example app.`\n );\n }\n }\n });\n\n pkg['devDependencies'] = sortObjectKeys({\n ...pkg['devDependencies'],\n ...devDependencies,\n });\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,eAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAqD,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAM9C,eAAeG,qCAAqCA,CACzDC,GAAgB,EAChBC,MAAc,EACdC,MAA6B,EAC7B;EACA,MAAMC,kBAAkB,GAAG,MAAMC,gBAAE,CAACC,QAAQ,CAC1CC,aAAI,CAACC,IAAI,CAACN,MAAM,EAAE,SAAS,EAAE,cAAc,CAC7C,CAAC;EAED,MAAMO,gBAAgB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC;EAElE,IACEN,MAAM,CAACO,OAAO,KAAK,SAAS,KAC3BP,MAAM,CAACQ,OAAO,CAACC,YAAY,KAAK,eAAe,IAC9CT,MAAM,CAACQ,OAAO,CAACE,UAAU,KAAK,aAAa,CAAC,EAC9C;IACA;IACA;IACAJ,gBAAgB,CAACK,IAAI,CAAC,6BAA6B,CAAC;EACtD;EAEA,MAAMC,eAAuC,GAAG,CAAC,CAAC;EAElDN,gBAAgB,CAACO,OAAO,CAAEC,IAAI,IAAK;IACjC,IAAIA,IAAI,EAAE;MACR,MAAMC,OAAO,GACXd,kBAAkB,CAACe,YAAY,GAAGF,IAAI,CAAC,IACvCb,kBAAkB,CAACW,eAAe,GAAGE,IAAI,CAAC;MAE5C,IAAIC,OAAO,IAAI,IAAI,EAAE;QACnBH,eAAe,CAACE,IAAI,CAAC,GAAGC,OAAO;MACjC,CAAC,MAAM,IAAIjB,GAAG,CAACc,eAAe,GAAGE,IAAI,CAAC,IAAI,IAAI,EAAE;QAC9C,MAAM,IAAIG,KAAK,CACb,8BAA8BH,IAAI,uBACpC,CAAC;MACH;IACF;EACF,CAAC,CAAC;EAEFhB,GAAG,CAAC,iBAAiB,CAAC,GAAG,IAAAoB,uBAAc,EAAC;IACtC,GAAGpB,GAAG,CAAC,iBAAiB,CAAC;IACzB,GAAGc;EACL,CAAC,CAAC;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"dependencies.js","names":["_path","_interopRequireDefault","require","_fsExtra","_sortObjectKeys","e","__esModule","default","alignDependencyVersionsWithExampleApp","pkg","folder","examplePackageJson","fs","readJSON","path","join","PACKAGES_TO_COPY","devDependencies","forEach","name","version","dependencies","Error","sortObjectKeys"],"sources":["../../src/exampleApp/dependencies.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport sortObjectKeys from '../utils/sortObjectKeys';\n\ntype PackageJson = {\n devDependencies?: Record<string, string>;\n};\n\nexport async function alignDependencyVersionsWithExampleApp(\n pkg: PackageJson,\n folder: string\n) {\n const examplePackageJson = await fs.readJSON(\n path.join(folder, 'example', 'package.json')\n );\n\n const PACKAGES_TO_COPY = [\n 'react',\n 'react-native',\n '@types/react',\n '@react-native/babel-preset',\n ];\n\n const devDependencies: Record<string, string> = {};\n\n PACKAGES_TO_COPY.forEach((name) => {\n if (name) {\n const version =\n examplePackageJson.dependencies?.[name] ??\n examplePackageJson.devDependencies?.[name];\n\n if (version != null) {\n devDependencies[name] = version;\n } else if (pkg.devDependencies?.[name] == null) {\n throw new Error(\n `Couldn't find the package \"${name}\" in the example app.`\n );\n }\n }\n });\n\n pkg['devDependencies'] = sortObjectKeys({\n ...pkg['devDependencies'],\n ...devDependencies,\n });\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,eAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAqD,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAM9C,eAAeG,qCAAqCA,CACzDC,GAAgB,EAChBC,MAAc,EACd;EACA,MAAMC,kBAAkB,GAAG,MAAMC,gBAAE,CAACC,QAAQ,CAC1CC,aAAI,CAACC,IAAI,CAACL,MAAM,EAAE,SAAS,EAAE,cAAc,CAC7C,CAAC;EAED,MAAMM,gBAAgB,GAAG,CACvB,OAAO,EACP,cAAc,EACd,cAAc,EACd,4BAA4B,CAC7B;EAED,MAAMC,eAAuC,GAAG,CAAC,CAAC;EAElDD,gBAAgB,CAACE,OAAO,CAAEC,IAAI,IAAK;IACjC,IAAIA,IAAI,EAAE;MACR,MAAMC,OAAO,GACXT,kBAAkB,CAACU,YAAY,GAAGF,IAAI,CAAC,IACvCR,kBAAkB,CAACM,eAAe,GAAGE,IAAI,CAAC;MAE5C,IAAIC,OAAO,IAAI,IAAI,EAAE;QACnBH,eAAe,CAACE,IAAI,CAAC,GAAGC,OAAO;MACjC,CAAC,MAAM,IAAIX,GAAG,CAACQ,eAAe,GAAGE,IAAI,CAAC,IAAI,IAAI,EAAE;QAC9C,MAAM,IAAIG,KAAK,CACb,8BAA8BH,IAAI,uBACpC,CAAC;MACH;IACF;EACF,CAAC,CAAC;EAEFV,GAAG,CAAC,iBAAiB,CAAC,GAAG,IAAAc,uBAAc,EAAC;IACtC,GAAGd,GAAG,CAAC,iBAAiB,CAAC;IACzB,GAAGQ;EACL,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -11,6 +11,7 @@ var _spawn = require("../utils/spawn");
11
11
  var _sortObjectKeys = _interopRequireDefault(require("../utils/sortObjectKeys"));
12
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  const FILES_TO_DELETE = ['__tests__', '.buckconfig', '.eslintrc.js', '.flowconfig', '.git', '.gitignore', '.prettierrc.js', 'App.js', 'App.tsx', 'index.js', 'tsconfig.json'];
14
+ const FILES_TO_MOVE = ['.bundle', 'Gemfile'];
14
15
  const PACKAGES_TO_REMOVE = ['@react-native/eslint-config', '@tsconfig/react-native', '@types/jest', '@types/react-test-renderer', '@typescript-eslint/eslint-plugin', '@typescript-eslint/parser', 'babel-jest', 'eslint', 'jest', 'prettier', 'react-test-renderer', 'typescript'];
15
16
  const PACKAGES_TO_ADD_WEB = {
16
17
  '@expo/metro-runtime': '~3.2.1',
@@ -19,10 +20,10 @@ const PACKAGES_TO_ADD_WEB = {
19
20
  };
20
21
  async function generateExampleApp({
21
22
  config,
22
- destination,
23
+ root,
23
24
  reactNativeVersion = 'latest'
24
25
  }) {
25
- const directory = _path.default.join(destination, 'example');
26
+ const directory = _path.default.join(root, 'example');
26
27
 
27
28
  // `npx --package react-native-test-app@latest init --name ${projectName}Example --destination example --version ${reactNativeVersion}`
28
29
  const testAppArgs = ['--package', `react-native-test-app@latest`, 'init', '--name', `${config.project.name}Example`, `--destination`, directory, ...(reactNativeVersion !== 'latest' ? ['--version', reactNativeVersion] : []), '--platform', 'ios', '--platform', 'android'];
@@ -56,6 +57,13 @@ async function generateExampleApp({
56
57
  await _fsExtra.default.remove(_path.default.join(directory, file));
57
58
  }
58
59
 
60
+ // Move files to the root
61
+ for (const file of FILES_TO_MOVE) {
62
+ if (await _fsExtra.default.pathExists(_path.default.join(directory, file))) {
63
+ await _fsExtra.default.move(_path.default.join(directory, file), _path.default.join(root, file));
64
+ }
65
+ }
66
+
59
67
  // Patch the example app's package.json
60
68
  const pkg = await _fsExtra.default.readJSON(_path.default.join(directory, 'package.json'));
61
69
  pkg.name = `${config.project.slug}-example`;
@@ -159,22 +167,20 @@ async function generateExampleApp({
159
167
  // Remove this when the app template is updated.
160
168
  gradleProperties = gradleProperties.replace('android.enableJetifier=true', 'android.enableJetifier=false');
161
169
 
162
- // If the library is on new architecture, enable new arch for iOS and Android
163
- if (config.project.arch === 'new') {
164
- // iOS
165
- // Add ENV['RCT_NEW_ARCH_ENABLED'] = 1 on top of example/ios/Podfile
166
- const podfile = await _fsExtra.default.readFile(_path.default.join(directory, 'ios', 'Podfile'), 'utf8');
167
- await _fsExtra.default.writeFile(_path.default.join(directory, 'ios', 'Podfile'), "ENV['RCT_NEW_ARCH_ENABLED'] = '1'\n\n" + podfile);
170
+ // Enable new arch for iOS and Android
171
+ // iOS
172
+ // Add ENV['RCT_NEW_ARCH_ENABLED'] = 1 on top of example/ios/Podfile
173
+ const podfile = await _fsExtra.default.readFile(_path.default.join(directory, 'ios', 'Podfile'), 'utf8');
174
+ await _fsExtra.default.writeFile(_path.default.join(directory, 'ios', 'Podfile'), "ENV['RCT_NEW_ARCH_ENABLED'] = '1'\n\n" + podfile);
168
175
 
169
- // Android
170
- // Make sure newArchEnabled=true is present in android/gradle.properties
171
- if (gradleProperties.split('\n').includes('#newArchEnabled=true')) {
172
- gradleProperties = gradleProperties.replace('#newArchEnabled=true', 'newArchEnabled=true');
173
- } else if (gradleProperties.split('\n').includes('newArchEnabled=false')) {
174
- gradleProperties = gradleProperties.replace('newArchEnabled=false', 'newArchEnabled=true');
175
- } else if (!gradleProperties.split('\n').includes('newArchEnabled=true')) {
176
- gradleProperties += '\nnewArchEnabled=true';
177
- }
176
+ // Android
177
+ // Make sure newArchEnabled=true is present in android/gradle.properties
178
+ if (gradleProperties.split('\n').includes('#newArchEnabled=true')) {
179
+ gradleProperties = gradleProperties.replace('#newArchEnabled=true', 'newArchEnabled=true');
180
+ } else if (gradleProperties.split('\n').includes('newArchEnabled=false')) {
181
+ gradleProperties = gradleProperties.replace('newArchEnabled=false', 'newArchEnabled=true');
182
+ } else if (!gradleProperties.split('\n').includes('newArchEnabled=true')) {
183
+ gradleProperties += '\nnewArchEnabled=true';
178
184
  }
179
185
  await _fsExtra.default.writeFile(_path.default.join(directory, 'android', 'gradle.properties'), gradleProperties);
180
186
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generateExampleApp.js","names":["_fsExtra","_interopRequireDefault","require","_path","_https","_spawn","_sortObjectKeys","e","__esModule","default","FILES_TO_DELETE","PACKAGES_TO_REMOVE","PACKAGES_TO_ADD_WEB","generateExampleApp","config","destination","reactNativeVersion","directory","path","join","testAppArgs","project","name","vanillaArgs","package","expoArgs","args","example","spawn","env","process","npm_config_yes","file","fs","remove","pkg","readJSON","slug","jest","scripts","dependencies","devDependencies","test","lint","SCRIPTS_TO_ADD","Object","assign","androidBuild","iosBuild","app","android","ios","bundleIdentifier","writeJSON","spaces","forEach","PACKAGES_TO_ADD_DEV","versions","bob","moduleConfig","packagesToAddNitro","nitroModules","sdkVersion","expo","split","replace","bundledNativeModules","Promise","resolve","reject","https","get","res","data","on","chunk","JSON","parse","entries","version","web","field","sortObjectKeys","gradleProperties","readFile","arch","podfile","writeFile","includes"],"sources":["../../src/exampleApp/generateExampleApp.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\nimport https from 'https';\nimport { spawn } from '../utils/spawn';\nimport sortObjectKeys from '../utils/sortObjectKeys';\nimport type { TemplateConfiguration } from '../template';\n\nconst FILES_TO_DELETE = [\n '__tests__',\n '.buckconfig',\n '.eslintrc.js',\n '.flowconfig',\n '.git',\n '.gitignore',\n '.prettierrc.js',\n 'App.js',\n 'App.tsx',\n 'index.js',\n 'tsconfig.json',\n];\n\nconst PACKAGES_TO_REMOVE = [\n '@react-native/eslint-config',\n '@tsconfig/react-native',\n '@types/jest',\n '@types/react-test-renderer',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'babel-jest',\n 'eslint',\n 'jest',\n 'prettier',\n 'react-test-renderer',\n 'typescript',\n];\n\nconst PACKAGES_TO_ADD_WEB = {\n '@expo/metro-runtime': '~3.2.1',\n 'react-dom': '18.2.0',\n 'react-native-web': '~0.18.10',\n};\n\nexport default async function generateExampleApp({\n config,\n destination,\n reactNativeVersion = 'latest',\n}: {\n config: TemplateConfiguration;\n destination: string;\n reactNativeVersion?: string;\n}) {\n const directory = path.join(destination, 'example');\n\n // `npx --package react-native-test-app@latest init --name ${projectName}Example --destination example --version ${reactNativeVersion}`\n const testAppArgs = [\n '--package',\n `react-native-test-app@latest`,\n 'init',\n '--name',\n `${config.project.name}Example`,\n `--destination`,\n directory,\n ...(reactNativeVersion !== 'latest'\n ? ['--version', reactNativeVersion]\n : []),\n '--platform',\n 'ios',\n '--platform',\n 'android',\n ];\n\n // `npx @react-native-community/cli init <projectName> --directory example --skip-install`\n const vanillaArgs = [\n `@react-native-community/cli`,\n 'init',\n `${config.project.name}Example`,\n '--package-name',\n `${config.project.package}.example`,\n '--directory',\n directory,\n '--version',\n reactNativeVersion,\n '--skip-install',\n '--pm',\n 'npm',\n ];\n\n // `npx create-expo-app example --no-install --template blank`\n const expoArgs = [\n 'create-expo-app@latest',\n directory,\n '--no-install',\n '--template',\n 'blank',\n ];\n\n let args: string[] = [];\n\n switch (config.example) {\n case 'vanilla':\n args = vanillaArgs;\n break;\n case 'test-app':\n args = testAppArgs;\n break;\n case 'expo':\n args = expoArgs;\n break;\n }\n\n await spawn('npx', args, {\n env: { ...process.env, npm_config_yes: 'true' },\n });\n\n // Remove unnecessary files and folders\n for (const file of FILES_TO_DELETE) {\n await fs.remove(path.join(directory, file));\n }\n\n // Patch the example app's package.json\n const pkg = await fs.readJSON(path.join(directory, 'package.json'));\n\n pkg.name = `${config.project.slug}-example`;\n\n // Remove Jest config for now\n delete pkg.jest;\n\n const { scripts, dependencies, devDependencies } = pkg;\n\n delete scripts.test;\n delete scripts.lint;\n\n const SCRIPTS_TO_ADD = {\n 'build:android':\n 'react-native build-android --extra-params \"--no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a\"',\n 'build:ios': `react-native build-ios --scheme ${config.project.name}Example --mode Debug --extra-params \"-sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO\"`,\n };\n\n if (config.example === 'vanilla') {\n Object.assign(scripts, SCRIPTS_TO_ADD);\n } else if (config.example === 'test-app') {\n // `react-native-test-app` doesn't bundle application by default in 'Release' mode and also `bundle` command doesn't create a directory.\n // `mkdist` script should be removed after stable React Native major contains this fix: https://github.com/facebook/react-native/pull/45182.\n\n const androidBuild = [\n 'npm run mkdist',\n 'react-native bundle --entry-file index.js --platform android --dev true --bundle-output dist/main.android.jsbundle --assets-dest dist',\n SCRIPTS_TO_ADD['build:android'],\n ].join(' && ');\n\n const iosBuild = [\n 'npm run mkdist',\n 'react-native bundle --entry-file index.js --platform ios --dev true --bundle-output dist/main.ios.jsbundle --assets-dest dist',\n SCRIPTS_TO_ADD['build:ios'],\n ].join(' && ');\n\n Object.assign(scripts, {\n 'build:android': androidBuild,\n 'build:ios': iosBuild,\n });\n\n const app = await fs.readJSON(path.join(directory, 'app.json'));\n\n app.android = app.android || {};\n app.android.package = `${config.project.package}.example`;\n app.ios = app.ios || {};\n app.ios.bundleIdentifier = `${config.project.package}.example`;\n\n await fs.writeJSON(path.join(directory, 'app.json'), app, {\n spaces: 2,\n });\n }\n\n PACKAGES_TO_REMOVE.forEach((name) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete devDependencies[name];\n });\n\n const PACKAGES_TO_ADD_DEV = {\n 'react-native-builder-bob': `^${config.versions.bob}`,\n };\n\n if (config.project.moduleConfig === 'nitro-modules') {\n const packagesToAddNitro = {\n 'react-native-nitro-modules': `^${config.versions.nitroModules}`,\n };\n Object.assign(dependencies, packagesToAddNitro);\n }\n\n Object.assign(devDependencies, PACKAGES_TO_ADD_DEV);\n\n if (config.example === 'expo') {\n const sdkVersion = dependencies.expo.split('.')[0].replace(/[^\\d]/, '');\n\n let bundledNativeModules: Record<string, string>;\n\n try {\n bundledNativeModules = await new Promise((resolve, reject) => {\n https\n .get(\n `https://raw.githubusercontent.com/expo/expo/sdk-${sdkVersion}/packages/expo/bundledNativeModules.json`,\n (res) => {\n let data = '';\n\n res.on('data', (chunk) => (data += chunk));\n res.on('end', () => {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n reject(e);\n }\n });\n }\n )\n .on('error', reject);\n });\n } catch (e) {\n bundledNativeModules = {};\n }\n\n Object.entries(PACKAGES_TO_ADD_WEB).forEach(([name, version]) => {\n dependencies[name] = bundledNativeModules[name] || version;\n });\n\n scripts.web = 'expo start --web';\n\n const app = await fs.readJSON(path.join(directory, 'app.json'));\n\n app.expo.android = app.expo.android || {};\n app.expo.android.package = `${config.project.package}.example`;\n app.expo.ios = app.expo.ios || {};\n app.expo.ios.bundleIdentifier = `${config.project.package}.example`;\n\n await fs.writeJSON(path.join(directory, 'app.json'), app, {\n spaces: 2,\n });\n }\n\n // Sort the deps by name to match behavior of package managers\n // This way the package.json doesn't get updated when installing deps\n for (const field of ['dependencies', 'devDependencies']) {\n if (pkg[field]) {\n pkg[field] = sortObjectKeys(pkg[field]);\n }\n }\n\n await fs.writeJSON(path.join(directory, 'package.json'), pkg, {\n spaces: 2,\n });\n\n if (config.example !== 'expo') {\n let gradleProperties = await fs.readFile(\n path.join(directory, 'android', 'gradle.properties'),\n 'utf8'\n );\n\n // Disable Jetifier.\n // Remove this when the app template is updated.\n gradleProperties = gradleProperties.replace(\n 'android.enableJetifier=true',\n 'android.enableJetifier=false'\n );\n\n // If the library is on new architecture, enable new arch for iOS and Android\n if (config.project.arch === 'new') {\n // iOS\n // Add ENV['RCT_NEW_ARCH_ENABLED'] = 1 on top of example/ios/Podfile\n const podfile = await fs.readFile(\n path.join(directory, 'ios', 'Podfile'),\n 'utf8'\n );\n\n await fs.writeFile(\n path.join(directory, 'ios', 'Podfile'),\n \"ENV['RCT_NEW_ARCH_ENABLED'] = '1'\\n\\n\" + podfile\n );\n\n // Android\n // Make sure newArchEnabled=true is present in android/gradle.properties\n if (gradleProperties.split('\\n').includes('#newArchEnabled=true')) {\n gradleProperties = gradleProperties.replace(\n '#newArchEnabled=true',\n 'newArchEnabled=true'\n );\n } else if (\n gradleProperties.split('\\n').includes('newArchEnabled=false')\n ) {\n gradleProperties = gradleProperties.replace(\n 'newArchEnabled=false',\n 'newArchEnabled=true'\n );\n } else if (\n !gradleProperties.split('\\n').includes('newArchEnabled=true')\n ) {\n gradleProperties += '\\nnewArchEnabled=true';\n }\n }\n\n await fs.writeFile(\n path.join(directory, 'android', 'gradle.properties'),\n gradleProperties\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateExampleApp.js","names":["_fsExtra","_interopRequireDefault","require","_path","_https","_spawn","_sortObjectKeys","e","__esModule","default","FILES_TO_DELETE","FILES_TO_MOVE","PACKAGES_TO_REMOVE","PACKAGES_TO_ADD_WEB","generateExampleApp","config","root","reactNativeVersion","directory","path","join","testAppArgs","project","name","vanillaArgs","package","expoArgs","args","example","spawn","env","process","npm_config_yes","file","fs","remove","pathExists","move","pkg","readJSON","slug","jest","scripts","dependencies","devDependencies","test","lint","SCRIPTS_TO_ADD","Object","assign","androidBuild","iosBuild","app","android","ios","bundleIdentifier","writeJSON","spaces","forEach","PACKAGES_TO_ADD_DEV","versions","bob","moduleConfig","packagesToAddNitro","nitroModules","sdkVersion","expo","split","replace","bundledNativeModules","Promise","resolve","reject","https","get","res","data","on","chunk","JSON","parse","entries","version","web","field","sortObjectKeys","gradleProperties","readFile","podfile","writeFile","includes"],"sources":["../../src/exampleApp/generateExampleApp.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\nimport https from 'https';\nimport { spawn } from '../utils/spawn';\nimport sortObjectKeys from '../utils/sortObjectKeys';\nimport type { TemplateConfiguration } from '../template';\n\nconst FILES_TO_DELETE = [\n '__tests__',\n '.buckconfig',\n '.eslintrc.js',\n '.flowconfig',\n '.git',\n '.gitignore',\n '.prettierrc.js',\n 'App.js',\n 'App.tsx',\n 'index.js',\n 'tsconfig.json',\n];\n\nconst FILES_TO_MOVE = ['.bundle', 'Gemfile'];\n\nconst PACKAGES_TO_REMOVE = [\n '@react-native/eslint-config',\n '@tsconfig/react-native',\n '@types/jest',\n '@types/react-test-renderer',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'babel-jest',\n 'eslint',\n 'jest',\n 'prettier',\n 'react-test-renderer',\n 'typescript',\n];\n\nconst PACKAGES_TO_ADD_WEB = {\n '@expo/metro-runtime': '~3.2.1',\n 'react-dom': '18.2.0',\n 'react-native-web': '~0.18.10',\n};\n\nexport default async function generateExampleApp({\n config,\n root,\n reactNativeVersion = 'latest',\n}: {\n config: TemplateConfiguration;\n root: string;\n reactNativeVersion?: string;\n}) {\n const directory = path.join(root, 'example');\n\n // `npx --package react-native-test-app@latest init --name ${projectName}Example --destination example --version ${reactNativeVersion}`\n const testAppArgs = [\n '--package',\n `react-native-test-app@latest`,\n 'init',\n '--name',\n `${config.project.name}Example`,\n `--destination`,\n directory,\n ...(reactNativeVersion !== 'latest'\n ? ['--version', reactNativeVersion]\n : []),\n '--platform',\n 'ios',\n '--platform',\n 'android',\n ];\n\n // `npx @react-native-community/cli init <projectName> --directory example --skip-install`\n const vanillaArgs = [\n `@react-native-community/cli`,\n 'init',\n `${config.project.name}Example`,\n '--package-name',\n `${config.project.package}.example`,\n '--directory',\n directory,\n '--version',\n reactNativeVersion,\n '--skip-install',\n '--pm',\n 'npm',\n ];\n\n // `npx create-expo-app example --no-install --template blank`\n const expoArgs = [\n 'create-expo-app@latest',\n directory,\n '--no-install',\n '--template',\n 'blank',\n ];\n\n let args: string[] = [];\n\n switch (config.example) {\n case 'vanilla':\n args = vanillaArgs;\n break;\n case 'test-app':\n args = testAppArgs;\n break;\n case 'expo':\n args = expoArgs;\n break;\n }\n\n await spawn('npx', args, {\n env: { ...process.env, npm_config_yes: 'true' },\n });\n\n // Remove unnecessary files and folders\n for (const file of FILES_TO_DELETE) {\n await fs.remove(path.join(directory, file));\n }\n\n // Move files to the root\n for (const file of FILES_TO_MOVE) {\n if (await fs.pathExists(path.join(directory, file))) {\n await fs.move(path.join(directory, file), path.join(root, file));\n }\n }\n\n // Patch the example app's package.json\n const pkg = await fs.readJSON(path.join(directory, 'package.json'));\n\n pkg.name = `${config.project.slug}-example`;\n\n // Remove Jest config for now\n delete pkg.jest;\n\n const { scripts, dependencies, devDependencies } = pkg;\n\n delete scripts.test;\n delete scripts.lint;\n\n const SCRIPTS_TO_ADD = {\n 'build:android':\n 'react-native build-android --extra-params \"--no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a\"',\n 'build:ios': `react-native build-ios --scheme ${config.project.name}Example --mode Debug --extra-params \"-sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO\"`,\n };\n\n if (config.example === 'vanilla') {\n Object.assign(scripts, SCRIPTS_TO_ADD);\n } else if (config.example === 'test-app') {\n // `react-native-test-app` doesn't bundle application by default in 'Release' mode and also `bundle` command doesn't create a directory.\n // `mkdist` script should be removed after stable React Native major contains this fix: https://github.com/facebook/react-native/pull/45182.\n\n const androidBuild = [\n 'npm run mkdist',\n 'react-native bundle --entry-file index.js --platform android --dev true --bundle-output dist/main.android.jsbundle --assets-dest dist',\n SCRIPTS_TO_ADD['build:android'],\n ].join(' && ');\n\n const iosBuild = [\n 'npm run mkdist',\n 'react-native bundle --entry-file index.js --platform ios --dev true --bundle-output dist/main.ios.jsbundle --assets-dest dist',\n SCRIPTS_TO_ADD['build:ios'],\n ].join(' && ');\n\n Object.assign(scripts, {\n 'build:android': androidBuild,\n 'build:ios': iosBuild,\n });\n\n const app = await fs.readJSON(path.join(directory, 'app.json'));\n\n app.android = app.android || {};\n app.android.package = `${config.project.package}.example`;\n app.ios = app.ios || {};\n app.ios.bundleIdentifier = `${config.project.package}.example`;\n\n await fs.writeJSON(path.join(directory, 'app.json'), app, {\n spaces: 2,\n });\n }\n\n PACKAGES_TO_REMOVE.forEach((name) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete devDependencies[name];\n });\n\n const PACKAGES_TO_ADD_DEV = {\n 'react-native-builder-bob': `^${config.versions.bob}`,\n };\n\n if (config.project.moduleConfig === 'nitro-modules') {\n const packagesToAddNitro = {\n 'react-native-nitro-modules': `^${config.versions.nitroModules}`,\n };\n Object.assign(dependencies, packagesToAddNitro);\n }\n\n Object.assign(devDependencies, PACKAGES_TO_ADD_DEV);\n\n if (config.example === 'expo') {\n const sdkVersion = dependencies.expo.split('.')[0].replace(/[^\\d]/, '');\n\n let bundledNativeModules: Record<string, string>;\n\n try {\n bundledNativeModules = await new Promise((resolve, reject) => {\n https\n .get(\n `https://raw.githubusercontent.com/expo/expo/sdk-${sdkVersion}/packages/expo/bundledNativeModules.json`,\n (res) => {\n let data = '';\n\n res.on('data', (chunk) => (data += chunk));\n res.on('end', () => {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n reject(e);\n }\n });\n }\n )\n .on('error', reject);\n });\n } catch (e) {\n bundledNativeModules = {};\n }\n\n Object.entries(PACKAGES_TO_ADD_WEB).forEach(([name, version]) => {\n dependencies[name] = bundledNativeModules[name] || version;\n });\n\n scripts.web = 'expo start --web';\n\n const app = await fs.readJSON(path.join(directory, 'app.json'));\n\n app.expo.android = app.expo.android || {};\n app.expo.android.package = `${config.project.package}.example`;\n app.expo.ios = app.expo.ios || {};\n app.expo.ios.bundleIdentifier = `${config.project.package}.example`;\n\n await fs.writeJSON(path.join(directory, 'app.json'), app, {\n spaces: 2,\n });\n }\n\n // Sort the deps by name to match behavior of package managers\n // This way the package.json doesn't get updated when installing deps\n for (const field of ['dependencies', 'devDependencies']) {\n if (pkg[field]) {\n pkg[field] = sortObjectKeys(pkg[field]);\n }\n }\n\n await fs.writeJSON(path.join(directory, 'package.json'), pkg, {\n spaces: 2,\n });\n\n if (config.example !== 'expo') {\n let gradleProperties = await fs.readFile(\n path.join(directory, 'android', 'gradle.properties'),\n 'utf8'\n );\n\n // Disable Jetifier.\n // Remove this when the app template is updated.\n gradleProperties = gradleProperties.replace(\n 'android.enableJetifier=true',\n 'android.enableJetifier=false'\n );\n\n // Enable new arch for iOS and Android\n // iOS\n // Add ENV['RCT_NEW_ARCH_ENABLED'] = 1 on top of example/ios/Podfile\n const podfile = await fs.readFile(\n path.join(directory, 'ios', 'Podfile'),\n 'utf8'\n );\n\n await fs.writeFile(\n path.join(directory, 'ios', 'Podfile'),\n \"ENV['RCT_NEW_ARCH_ENABLED'] = '1'\\n\\n\" + podfile\n );\n\n // Android\n // Make sure newArchEnabled=true is present in android/gradle.properties\n if (gradleProperties.split('\\n').includes('#newArchEnabled=true')) {\n gradleProperties = gradleProperties.replace(\n '#newArchEnabled=true',\n 'newArchEnabled=true'\n );\n } else if (gradleProperties.split('\\n').includes('newArchEnabled=false')) {\n gradleProperties = gradleProperties.replace(\n 'newArchEnabled=false',\n 'newArchEnabled=true'\n );\n } else if (!gradleProperties.split('\\n').includes('newArchEnabled=true')) {\n gradleProperties += '\\nnewArchEnabled=true';\n }\n\n await fs.writeFile(\n path.join(directory, 'android', 'gradle.properties'),\n gradleProperties\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/index.js CHANGED
@@ -5,7 +5,6 @@ var _kleur = _interopRequireDefault(require("kleur"));
5
5
  var _ora = _interopRequireDefault(require("ora"));
6
6
  var _path = _interopRequireDefault(require("path"));
7
7
  var _yargs = _interopRequireDefault(require("yargs"));
8
- var _addCodegenBuildScript = require("./exampleApp/addCodegenBuildScript");
9
8
  var _dependencies = require("./exampleApp/dependencies");
10
9
  var _generateExampleApp = _interopRequireDefault(require("./exampleApp/generateExampleApp"));
11
10
  var _inform = require("./inform");
@@ -15,8 +14,10 @@ var _assert = require("./utils/assert");
15
14
  var _initialCommit = require("./utils/initialCommit");
16
15
  var _prompt = require("./utils/prompt");
17
16
  var _resolveNpmPackageVersion = require("./utils/resolveNpmPackageVersion");
17
+ var _local = require("./utils/local");
18
+ var _packageManager = require("./utils/packageManager");
18
19
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
- const FALLBACK_BOB_VERSION = '0.40.4';
20
+ const FALLBACK_BOB_VERSION = '0.40.5';
20
21
  const FALLBACK_NITRO_MODULES_VERSION = '0.22.1';
21
22
  const SUPPORTED_REACT_NATIVE_VERSION = '0.78.2';
22
23
 
@@ -38,7 +39,7 @@ async function create(_argv) {
38
39
  // Prefetch bob version in background while asking questions
39
40
  const bobVersionPromise = (0, _resolveNpmPackageVersion.resolveNpmPackageVersion)('react-native-builder-bob', FALLBACK_BOB_VERSION);
40
41
  const nitroModulesVersionPromise = (0, _resolveNpmPackageVersion.resolveNpmPackageVersion)('react-native-nitro-modules', FALLBACK_NITRO_MODULES_VERSION);
41
- const local = await promptLocalLibrary(argv);
42
+ const local = await (0, _local.promptLocalLibrary)(argv);
42
43
  const folder = await promptPath(argv, local);
43
44
  await (0, _assert.assertNpxExists)();
44
45
  const basename = _path.default.basename(folder);
@@ -74,7 +75,7 @@ async function create(_argv) {
74
75
  if (config.example !== 'none') {
75
76
  spinner.text = 'Generating example app';
76
77
  await (0, _generateExampleApp.default)({
77
- destination: folder,
78
+ root: folder,
78
79
  reactNativeVersion: answers.reactNativeVersion,
79
80
  config
80
81
  });
@@ -83,40 +84,34 @@ async function create(_argv) {
83
84
  await (0, _template.applyTemplates)(answers, config, folder);
84
85
  const rootPackageJson = await _fsExtra.default.readJson(_path.default.join(folder, 'package.json'));
85
86
  if (config.example !== 'none') {
86
- await (0, _dependencies.alignDependencyVersionsWithExampleApp)(rootPackageJson, folder, config);
87
- }
88
- if (config.example === 'vanilla' && (config.project.moduleConfig === 'turbo-modules' || config.project.viewConfig === 'fabric-view')) {
89
- (0, _addCodegenBuildScript.addCodegenBuildScript)(folder);
87
+ await (0, _dependencies.alignDependencyVersionsWithExampleApp)(rootPackageJson, folder);
90
88
  }
91
89
  const libraryMetadata = (0, _input.createMetadata)(answers);
92
90
  rootPackageJson['create-react-native-library'] = libraryMetadata;
93
91
  await _fsExtra.default.writeJson(_path.default.join(folder, 'package.json'), rootPackageJson, {
94
92
  spaces: 2
95
93
  });
94
+ const printSuccessMessage = () => spinner.succeed(`Project created successfully at ${_kleur.default.yellow(_path.default.relative(process.cwd(), folder))}!\n`);
96
95
  if (!local) {
97
96
  await (0, _initialCommit.createInitialGitCommit)(folder);
97
+ printSuccessMessage();
98
+ (0, _inform.printNonLocalLibNextSteps)(config);
99
+ return;
98
100
  }
99
- spinner.succeed(`Project created successfully at ${_kleur.default.yellow(_path.default.relative(process.cwd(), folder))}!\n`);
100
- await (0, _inform.printNextSteps)(local, folder, config);
101
- }
102
- async function promptLocalLibrary(argv) {
103
- let local = false;
104
- if (typeof argv.local === 'boolean') {
105
- local = argv.local;
106
- } else {
107
- const hasPackageJson = await _fsExtra.default.pathExists(_path.default.join(process.cwd(), 'package.json'));
108
- if (hasPackageJson) {
109
- // If we're under a project with package.json, ask the user if they want to create a local library
110
- const answers = await (0, _prompt.prompt)({
111
- type: 'confirm',
112
- name: 'local',
113
- message: `Looks like you're under a project folder. Do you want to create a local library?`,
114
- initial: true
115
- });
116
- local = answers.local;
117
- }
101
+ const packageManager = await (0, _packageManager.determinePackageManager)();
102
+ let addedNitro = false;
103
+ if (config.project.moduleConfig === 'nitro-modules') {
104
+ addedNitro = await (0, _local.addNitroDependencyToLocalLibrary)(config);
118
105
  }
119
- return local;
106
+ const linkedLocalLibrary = await (0, _local.linkLocalLibrary)(config, folder, packageManager);
107
+ printSuccessMessage();
108
+ (0, _inform.printLocalLibNextSteps)({
109
+ config,
110
+ packageManager,
111
+ linkedLocalLibrary,
112
+ addedNitro,
113
+ folder
114
+ });
120
115
  }
121
116
  async function promptPath(argv, local) {
122
117
  let folder;
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_fsExtra","_interopRequireDefault","require","_kleur","_ora","_path","_yargs","_addCodegenBuildScript","_dependencies","_generateExampleApp","_inform","_input","_template","_assert","_initialCommit","_prompt","_resolveNpmPackageVersion","e","__esModule","default","FALLBACK_BOB_VERSION","FALLBACK_NITRO_MODULES_VERSION","SUPPORTED_REACT_NATIVE_VERSION","yargs","command","acceptedArgs","create","demandCommand","recommendCommands","fail","printErrorHelp","parserConfiguration","strict","argv","_argv","_","$0","bobVersionPromise","resolveNpmPackageVersion","nitroModulesVersionPromise","local","promptLocalLibrary","folder","promptPath","assertNpxExists","basename","path","questions","createQuestions","assertUserInput","promptAnswers","prompt","answers","reactNativeVersion","bobVersion","nitroModulesVersion","type","undefined","config","generateTemplateConfiguration","versions","bob","nitroModules","nitroCodegen","fs","mkdirp","printUsedRNVersion","spinner","ora","start","example","text","generateExampleApp","destination","applyTemplates","rootPackageJson","readJson","join","alignDependencyVersionsWithExampleApp","project","moduleConfig","viewConfig","addCodegenBuildScript","libraryMetadata","createMetadata","writeJson","spaces","createInitialGitCommit","succeed","kleur","yellow","relative","process","cwd","printNextSteps","hasPackageJson","pathExists","name","message","initial","includes","validate","input","pathExistsSync","Error","blue"],"sources":["../src/index.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport kleur from 'kleur';\nimport ora from 'ora';\nimport path from 'path';\nimport yargs from 'yargs';\nimport { addCodegenBuildScript } from './exampleApp/addCodegenBuildScript';\nimport { alignDependencyVersionsWithExampleApp } from './exampleApp/dependencies';\nimport generateExampleApp from './exampleApp/generateExampleApp';\nimport { printErrorHelp, printNextSteps, printUsedRNVersion } from './inform';\nimport {\n acceptedArgs,\n createMetadata,\n createQuestions,\n type Answers,\n type Args,\n} from './input';\nimport { applyTemplates, generateTemplateConfiguration } from './template';\nimport { assertNpxExists, assertUserInput } from './utils/assert';\nimport { createInitialGitCommit } from './utils/initialCommit';\nimport { prompt } from './utils/prompt';\nimport { resolveNpmPackageVersion } from './utils/resolveNpmPackageVersion';\n\nconst FALLBACK_BOB_VERSION = '0.40.4';\nconst FALLBACK_NITRO_MODULES_VERSION = '0.22.1';\nconst SUPPORTED_REACT_NATIVE_VERSION = '0.78.2';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\nyargs\n .command(\n '$0 [name]',\n 'create a react native library',\n acceptedArgs,\n // @ts-expect-error Some types are still incompatible\n create\n )\n .demandCommand()\n .recommendCommands()\n .fail(printErrorHelp)\n .parserConfiguration({\n // don't pass kebab-case args to handler.\n 'strip-dashed': true,\n })\n .strict().argv;\n\nasync function create(_argv: yargs.Arguments<Args>) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _, $0, ...argv } = _argv;\n\n // Prefetch bob version in background while asking questions\n const bobVersionPromise = resolveNpmPackageVersion(\n 'react-native-builder-bob',\n FALLBACK_BOB_VERSION\n );\n const nitroModulesVersionPromise = resolveNpmPackageVersion(\n 'react-native-nitro-modules',\n FALLBACK_NITRO_MODULES_VERSION\n );\n\n const local = await promptLocalLibrary(argv);\n const folder = await promptPath(argv, local);\n\n await assertNpxExists();\n\n const basename = path.basename(folder);\n\n const questions = await createQuestions({ basename, local });\n\n assertUserInput(questions, argv);\n\n const promptAnswers = await prompt(questions, argv);\n const answers: Answers = {\n ...promptAnswers,\n reactNativeVersion:\n promptAnswers.reactNativeVersion ?? SUPPORTED_REACT_NATIVE_VERSION,\n local,\n };\n\n assertUserInput(questions, answers);\n\n const bobVersion = await bobVersionPromise;\n\n const nitroModulesVersion =\n answers.type === 'nitro-module'\n ? await nitroModulesVersionPromise\n : undefined;\n\n const config = generateTemplateConfiguration({\n versions: {\n bob: bobVersion,\n nitroModules: nitroModulesVersion,\n // Nitro codegen's version is always the same as nitro modules version.\n nitroCodegen: nitroModulesVersion,\n },\n basename,\n answers,\n });\n\n await fs.mkdirp(folder);\n\n if (answers.reactNativeVersion !== SUPPORTED_REACT_NATIVE_VERSION) {\n printUsedRNVersion(answers.reactNativeVersion, config);\n }\n\n const spinner = ora().start();\n\n if (config.example !== 'none') {\n spinner.text = 'Generating example app';\n\n await generateExampleApp({\n destination: folder,\n reactNativeVersion: answers.reactNativeVersion,\n config,\n });\n }\n\n spinner.text = 'Copying files';\n\n await applyTemplates(answers, config, folder);\n\n const rootPackageJson = await fs.readJson(path.join(folder, 'package.json'));\n\n if (config.example !== 'none') {\n await alignDependencyVersionsWithExampleApp(\n rootPackageJson,\n folder,\n config\n );\n }\n\n if (\n config.example === 'vanilla' &&\n (config.project.moduleConfig === 'turbo-modules' ||\n config.project.viewConfig === 'fabric-view')\n ) {\n addCodegenBuildScript(folder);\n }\n\n const libraryMetadata = createMetadata(answers);\n\n rootPackageJson['create-react-native-library'] = libraryMetadata;\n\n await fs.writeJson(path.join(folder, 'package.json'), rootPackageJson, {\n spaces: 2,\n });\n\n if (!local) {\n await createInitialGitCommit(folder);\n }\n\n spinner.succeed(\n `Project created successfully at ${kleur.yellow(\n path.relative(process.cwd(), folder)\n )}!\\n`\n );\n\n await printNextSteps(local, folder, config);\n}\n\nasync function promptLocalLibrary(argv: Args) {\n let local = false;\n\n if (typeof argv.local === 'boolean') {\n local = argv.local;\n } else {\n const hasPackageJson = await fs.pathExists(\n path.join(process.cwd(), 'package.json')\n );\n\n if (hasPackageJson) {\n // If we're under a project with package.json, ask the user if they want to create a local library\n const answers = await prompt({\n type: 'confirm',\n name: 'local',\n message: `Looks like you're under a project folder. Do you want to create a local library?`,\n initial: true,\n });\n\n local = answers.local;\n }\n }\n\n return local;\n}\n\nasync function promptPath(argv: Args, local: boolean) {\n let folder: string;\n\n if (argv.name && !local) {\n folder = path.join(process.cwd(), argv.name);\n } else {\n const answers = await prompt({\n type: 'text',\n name: 'folder',\n message: `Where do you want to create the library?`,\n initial:\n local && argv.name && !argv.name.includes('/')\n ? `modules/${argv.name}`\n : argv.name,\n validate: (input) => {\n if (!input) {\n return 'Cannot be empty';\n }\n\n if (fs.pathExistsSync(path.join(process.cwd(), input))) {\n return 'Folder already exists';\n }\n\n return true;\n },\n });\n\n folder = path.join(process.cwd(), answers.folder);\n }\n\n if (await fs.pathExists(folder)) {\n throw new Error(\n `A folder already exists at ${kleur.blue(\n folder\n )}! Please specify another folder name or delete the existing one.`\n );\n }\n\n return folder;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_fsExtra","_interopRequireDefault","require","_kleur","_ora","_path","_yargs","_dependencies","_generateExampleApp","_inform","_input","_template","_assert","_initialCommit","_prompt","_resolveNpmPackageVersion","_local","_packageManager","e","__esModule","default","FALLBACK_BOB_VERSION","FALLBACK_NITRO_MODULES_VERSION","SUPPORTED_REACT_NATIVE_VERSION","yargs","command","acceptedArgs","create","demandCommand","recommendCommands","fail","printErrorHelp","parserConfiguration","strict","argv","_argv","_","$0","bobVersionPromise","resolveNpmPackageVersion","nitroModulesVersionPromise","local","promptLocalLibrary","folder","promptPath","assertNpxExists","basename","path","questions","createQuestions","assertUserInput","promptAnswers","prompt","answers","reactNativeVersion","bobVersion","nitroModulesVersion","type","undefined","config","generateTemplateConfiguration","versions","bob","nitroModules","nitroCodegen","fs","mkdirp","printUsedRNVersion","spinner","ora","start","example","text","generateExampleApp","root","applyTemplates","rootPackageJson","readJson","join","alignDependencyVersionsWithExampleApp","libraryMetadata","createMetadata","writeJson","spaces","printSuccessMessage","succeed","kleur","yellow","relative","process","cwd","createInitialGitCommit","printNonLocalLibNextSteps","packageManager","determinePackageManager","addedNitro","project","moduleConfig","addNitroDependencyToLocalLibrary","linkedLocalLibrary","linkLocalLibrary","printLocalLibNextSteps","name","message","initial","includes","validate","input","pathExistsSync","pathExists","Error","blue"],"sources":["../src/index.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport kleur from 'kleur';\nimport ora from 'ora';\nimport path from 'path';\nimport yargs from 'yargs';\nimport { alignDependencyVersionsWithExampleApp } from './exampleApp/dependencies';\nimport generateExampleApp from './exampleApp/generateExampleApp';\nimport {\n printErrorHelp,\n printLocalLibNextSteps,\n printNonLocalLibNextSteps,\n printUsedRNVersion,\n} from './inform';\nimport {\n acceptedArgs,\n createMetadata,\n createQuestions,\n type Answers,\n type Args,\n} from './input';\nimport { applyTemplates, generateTemplateConfiguration } from './template';\nimport { assertNpxExists, assertUserInput } from './utils/assert';\nimport { createInitialGitCommit } from './utils/initialCommit';\nimport { prompt } from './utils/prompt';\nimport { resolveNpmPackageVersion } from './utils/resolveNpmPackageVersion';\nimport {\n addNitroDependencyToLocalLibrary,\n linkLocalLibrary,\n promptLocalLibrary,\n} from './utils/local';\nimport { determinePackageManager } from './utils/packageManager';\n\nconst FALLBACK_BOB_VERSION = '0.40.5';\nconst FALLBACK_NITRO_MODULES_VERSION = '0.22.1';\nconst SUPPORTED_REACT_NATIVE_VERSION = '0.78.2';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\nyargs\n .command(\n '$0 [name]',\n 'create a react native library',\n acceptedArgs,\n // @ts-expect-error Some types are still incompatible\n create\n )\n .demandCommand()\n .recommendCommands()\n .fail(printErrorHelp)\n .parserConfiguration({\n // don't pass kebab-case args to handler.\n 'strip-dashed': true,\n })\n .strict().argv;\n\nasync function create(_argv: yargs.Arguments<Args>) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _, $0, ...argv } = _argv;\n\n // Prefetch bob version in background while asking questions\n const bobVersionPromise = resolveNpmPackageVersion(\n 'react-native-builder-bob',\n FALLBACK_BOB_VERSION\n );\n const nitroModulesVersionPromise = resolveNpmPackageVersion(\n 'react-native-nitro-modules',\n FALLBACK_NITRO_MODULES_VERSION\n );\n\n const local = await promptLocalLibrary(argv);\n const folder = await promptPath(argv, local);\n\n await assertNpxExists();\n\n const basename = path.basename(folder);\n\n const questions = await createQuestions({ basename, local });\n\n assertUserInput(questions, argv);\n\n const promptAnswers = await prompt(questions, argv);\n const answers: Answers = {\n ...promptAnswers,\n reactNativeVersion:\n promptAnswers.reactNativeVersion ?? SUPPORTED_REACT_NATIVE_VERSION,\n local,\n };\n\n assertUserInput(questions, answers);\n\n const bobVersion = await bobVersionPromise;\n\n const nitroModulesVersion =\n answers.type === 'nitro-module'\n ? await nitroModulesVersionPromise\n : undefined;\n\n const config = generateTemplateConfiguration({\n versions: {\n bob: bobVersion,\n nitroModules: nitroModulesVersion,\n // Nitro codegen's version is always the same as nitro modules version.\n nitroCodegen: nitroModulesVersion,\n },\n basename,\n answers,\n });\n\n await fs.mkdirp(folder);\n\n if (answers.reactNativeVersion !== SUPPORTED_REACT_NATIVE_VERSION) {\n printUsedRNVersion(answers.reactNativeVersion, config);\n }\n\n const spinner = ora().start();\n\n if (config.example !== 'none') {\n spinner.text = 'Generating example app';\n\n await generateExampleApp({\n root: folder,\n reactNativeVersion: answers.reactNativeVersion,\n config,\n });\n }\n\n spinner.text = 'Copying files';\n\n await applyTemplates(answers, config, folder);\n\n const rootPackageJson = await fs.readJson(path.join(folder, 'package.json'));\n\n if (config.example !== 'none') {\n await alignDependencyVersionsWithExampleApp(rootPackageJson, folder);\n }\n\n const libraryMetadata = createMetadata(answers);\n\n rootPackageJson['create-react-native-library'] = libraryMetadata;\n\n await fs.writeJson(path.join(folder, 'package.json'), rootPackageJson, {\n spaces: 2,\n });\n\n const printSuccessMessage = () =>\n spinner.succeed(\n `Project created successfully at ${kleur.yellow(\n path.relative(process.cwd(), folder)\n )}!\\n`\n );\n\n if (!local) {\n await createInitialGitCommit(folder);\n\n printSuccessMessage();\n\n printNonLocalLibNextSteps(config);\n return;\n }\n\n const packageManager = await determinePackageManager();\n\n let addedNitro = false;\n if (config.project.moduleConfig === 'nitro-modules') {\n addedNitro = await addNitroDependencyToLocalLibrary(config);\n }\n\n const linkedLocalLibrary = await linkLocalLibrary(\n config,\n folder,\n packageManager\n );\n\n printSuccessMessage();\n\n printLocalLibNextSteps({\n config,\n packageManager,\n linkedLocalLibrary,\n addedNitro,\n folder,\n });\n}\n\nasync function promptPath(argv: Args, local: boolean) {\n let folder: string;\n\n if (argv.name && !local) {\n folder = path.join(process.cwd(), argv.name);\n } else {\n const answers = await prompt({\n type: 'text',\n name: 'folder',\n message: `Where do you want to create the library?`,\n initial:\n local && argv.name && !argv.name.includes('/')\n ? `modules/${argv.name}`\n : argv.name,\n validate: (input) => {\n if (!input) {\n return 'Cannot be empty';\n }\n\n if (fs.pathExistsSync(path.join(process.cwd(), input))) {\n return 'Folder already exists';\n }\n\n return true;\n },\n });\n\n folder = path.join(process.cwd(), answers.folder);\n }\n\n if (await fs.pathExists(folder)) {\n throw new Error(\n `A folder already exists at ${kleur.blue(\n folder\n )}! Please specify another folder name or delete the existing one.`\n );\n }\n\n return folder;\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/inform.js CHANGED
@@ -4,69 +4,59 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.printErrorHelp = printErrorHelp;
7
- exports.printNextSteps = printNextSteps;
7
+ exports.printLocalLibNextSteps = printLocalLibNextSteps;
8
+ exports.printNonLocalLibNextSteps = printNonLocalLibNextSteps;
8
9
  exports.printUsedRNVersion = printUsedRNVersion;
9
10
  var _path = _interopRequireDefault(require("path"));
10
- var _fsExtra = _interopRequireDefault(require("fs-extra"));
11
11
  var _dedent = _interopRequireDefault(require("dedent"));
12
12
  var _kleur = _interopRequireDefault(require("kleur"));
13
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
- async function printNextSteps(local, folder, config) {
15
- if (local) {
16
- let linked;
17
- const packageManager = (await _fsExtra.default.pathExists(_path.default.join(process.cwd(), 'yarn.lock'))) ? 'yarn' : 'npm';
18
- const packageJsonPath = _path.default.join(process.cwd(), 'package.json');
19
- if (await _fsExtra.default.pathExists(packageJsonPath)) {
20
- const packageJson = await _fsExtra.default.readJSON(packageJsonPath);
21
- const isReactNativeProject = Boolean(packageJson.dependencies?.['react-native']);
22
- if (isReactNativeProject) {
23
- packageJson.dependencies = packageJson.dependencies || {};
24
- packageJson.dependencies[config.project.slug] = packageManager === 'yarn' ? `link:./${_path.default.relative(process.cwd(), folder)}` : `file:./${_path.default.relative(process.cwd(), folder)}`;
25
- await _fsExtra.default.writeJSON(packageJsonPath, packageJson, {
26
- spaces: 2
27
- });
28
- linked = true;
14
+ function printNonLocalLibNextSteps(config) {
15
+ const platforms = {
16
+ ios: {
17
+ name: 'iOS',
18
+ color: 'cyan'
19
+ },
20
+ android: {
21
+ name: 'Android',
22
+ color: 'green'
23
+ },
24
+ ...(config.example === 'expo' ? {
25
+ web: {
26
+ name: 'Web',
27
+ color: 'blue'
29
28
  }
30
- }
31
- console.log((0, _dedent.default)(`
32
- ${_kleur.default.magenta(`${_kleur.default.bold('Get started')} with the project`)}${_kleur.default.gray(':')}
33
-
34
- ${(linked ? `- Run ${_kleur.default.blue(`${packageManager} install`)} to link the library\n` : `- Link the library at ${_kleur.default.blue(_path.default.relative(process.cwd(), folder))} based on your project setup\n`) + `- Run ${_kleur.default.blue('pod install --project-directory=ios')} to install dependencies with CocoaPods\n` + `- Run ${_kleur.default.blue('npx react-native run-android')} or ${_kleur.default.blue('npx react-native run-ios')} to build and run the app\n` + `- Import from ${_kleur.default.blue(config.project.slug)} and use it in your app.`}
35
-
36
- ${_kleur.default.yellow(`Good luck!`)}
37
- `));
38
- } else {
39
- const platforms = {
40
- ios: {
41
- name: 'iOS',
42
- color: 'cyan'
43
- },
44
- android: {
45
- name: 'Android',
46
- color: 'green'
47
- },
48
- ...(config.example === 'expo' ? {
49
- web: {
50
- name: 'Web',
51
- color: 'blue'
52
- }
53
- } : null)
54
- };
55
- console.log((0, _dedent.default)(`
29
+ } : null)
30
+ };
31
+ console.log((0, _dedent.default)(`
56
32
  ${_kleur.default.magenta(`${_kleur.default.bold('Get started')} with the project`)}${_kleur.default.gray(':')}
57
33
 
58
34
  ${_kleur.default.gray('$')} yarn
59
35
  ${Object.entries(platforms).map(([script, {
60
- name,
61
- color
62
- }]) => `
36
+ name,
37
+ color
38
+ }]) => `
63
39
  ${_kleur.default[color](`Run the example app on ${_kleur.default.bold(name)}`)}${_kleur.default.gray(':')}
64
40
 
65
41
  ${_kleur.default.gray('$')} yarn example ${script}`).join('\n')}
66
42
 
67
43
  ${_kleur.default.yellow(`See ${_kleur.default.bold('CONTRIBUTING.md')} for more details. Good luck!`)}
68
44
  `));
69
- }
45
+ }
46
+ function printLocalLibNextSteps({
47
+ folder,
48
+ config,
49
+ linkedLocalLibrary,
50
+ addedNitro,
51
+ packageManager
52
+ }) {
53
+ console.log((0, _dedent.default)(`
54
+ ${_kleur.default.magenta(`${_kleur.default.bold('Get started')} with the project`)}${_kleur.default.gray(':')}
55
+
56
+ ${(linkedLocalLibrary ? `- Run ${_kleur.default.blue(`${packageManager} install`)} to link the library\n` : `- Link the library at ${_kleur.default.blue(_path.default.relative(process.cwd(), folder))} based on your project setup\n`) + (config.project.moduleConfig === 'nitro-modules' && !addedNitro ? `- Run ${_kleur.default.blue(`${packageManager} add react-native-nitro-modules`)} to install nitro modules \n` : '') + `- Run ${_kleur.default.blue('pod install --project-directory=ios')} to install dependencies with CocoaPods\n` + `- Run ${_kleur.default.blue('npx react-native run-android')} or ${_kleur.default.blue('npx react-native run-ios')} to build and run the app\n` + `- Import from ${_kleur.default.blue(config.project.slug)} and use it in your app.`}
57
+
58
+ ${_kleur.default.yellow(`Good luck!`)}
59
+ `));
70
60
  }
71
61
  function printErrorHelp(message, error) {
72
62
  console.log('\n');
package/lib/inform.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"inform.js","names":["_path","_interopRequireDefault","require","_fsExtra","_dedent","_kleur","e","__esModule","default","printNextSteps","local","folder","config","linked","packageManager","fs","pathExists","path","join","process","cwd","packageJsonPath","packageJson","readJSON","isReactNativeProject","Boolean","dependencies","project","slug","relative","writeJSON","spaces","console","log","dedent","kleur","magenta","bold","gray","blue","yellow","platforms","ios","name","color","android","example","web","Object","entries","map","script","printErrorHelp","message","error","red","exit","printUsedRNVersion","version","cyan","warn"],"sources":["../src/inform.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport dedent from 'dedent';\nimport type { TemplateConfiguration } from './template';\nimport kleur from 'kleur';\n\nexport async function printNextSteps(\n local: boolean,\n folder: string,\n config: TemplateConfiguration\n) {\n if (local) {\n let linked;\n\n const packageManager = (await fs.pathExists(\n path.join(process.cwd(), 'yarn.lock')\n ))\n ? 'yarn'\n : 'npm';\n\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n\n if (await fs.pathExists(packageJsonPath)) {\n const packageJson = await fs.readJSON(packageJsonPath);\n const isReactNativeProject = Boolean(\n packageJson.dependencies?.['react-native']\n );\n\n if (isReactNativeProject) {\n packageJson.dependencies = packageJson.dependencies || {};\n packageJson.dependencies[config.project.slug] =\n packageManager === 'yarn'\n ? `link:./${path.relative(process.cwd(), folder)}`\n : `file:./${path.relative(process.cwd(), folder)}`;\n\n await fs.writeJSON(packageJsonPath, packageJson, {\n spaces: 2,\n });\n\n linked = true;\n }\n }\n\n console.log(\n dedent(`\n ${kleur.magenta(\n `${kleur.bold('Get started')} with the project`\n )}${kleur.gray(':')}\n\n ${\n (linked\n ? `- Run ${kleur.blue(\n `${packageManager} install`\n )} to link the library\\n`\n : `- Link the library at ${kleur.blue(\n path.relative(process.cwd(), folder)\n )} based on your project setup\\n`) +\n `- Run ${kleur.blue(\n 'pod install --project-directory=ios'\n )} to install dependencies with CocoaPods\\n` +\n `- Run ${kleur.blue('npx react-native run-android')} or ${kleur.blue(\n 'npx react-native run-ios'\n )} to build and run the app\\n` +\n `- Import from ${kleur.blue(\n config.project.slug\n )} and use it in your app.`\n }\n\n ${kleur.yellow(`Good luck!`)}\n `)\n );\n } else {\n const platforms = {\n ios: { name: 'iOS', color: 'cyan' },\n android: { name: 'Android', color: 'green' },\n ...(config.example === 'expo'\n ? ({ web: { name: 'Web', color: 'blue' } } as const)\n : null),\n } as const;\n\n console.log(\n dedent(`\n ${kleur.magenta(\n `${kleur.bold('Get started')} with the project`\n )}${kleur.gray(':')}\n\n ${kleur.gray('$')} yarn\n ${Object.entries(platforms)\n .map(\n ([script, { name, color }]) => `\n ${kleur[color](`Run the example app on ${kleur.bold(name)}`)}${kleur.gray(\n ':'\n )}\n\n ${kleur.gray('$')} yarn example ${script}`\n )\n .join('\\n')}\n\n ${kleur.yellow(\n `See ${kleur.bold('CONTRIBUTING.md')} for more details. Good luck!`\n )}\n `)\n );\n }\n}\n\nexport function printErrorHelp(message: string, error: Error) {\n console.log('\\n');\n\n if (error) {\n console.log(kleur.red(error.message));\n throw error;\n }\n\n if (message) {\n console.log(kleur.red(message));\n } else {\n console.log(\n kleur.red(`An unknown error occurred. See '--help' for usage guide.`)\n );\n }\n\n process.exit(1);\n}\n\nexport function printUsedRNVersion(\n version: string,\n config: TemplateConfiguration\n) {\n if (config.example === 'vanilla') {\n console.log(\n `${kleur.blue('ℹ')} Using untested ${kleur.cyan(\n `react-native@${version}`\n )} for the example`\n );\n } else {\n console.warn(\n `${kleur.yellow(\n '⚠'\n )} Ignoring --react-native-version for unsupported example type: ${kleur.cyan(\n config.example\n )}`\n );\n }\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,IAAAG,MAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAA0B,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnB,eAAeG,cAAcA,CAClCC,KAAc,EACdC,MAAc,EACdC,MAA6B,EAC7B;EACA,IAAIF,KAAK,EAAE;IACT,IAAIG,MAAM;IAEV,MAAMC,cAAc,GAAG,CAAC,MAAMC,gBAAE,CAACC,UAAU,CACzCC,aAAI,CAACC,IAAI,CAACC,OAAO,CAACC,GAAG,CAAC,CAAC,EAAE,WAAW,CACtC,CAAC,IACG,MAAM,GACN,KAAK;IAET,MAAMC,eAAe,GAAGJ,aAAI,CAACC,IAAI,CAACC,OAAO,CAACC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC;IAEhE,IAAI,MAAML,gBAAE,CAACC,UAAU,CAACK,eAAe,CAAC,EAAE;MACxC,MAAMC,WAAW,GAAG,MAAMP,gBAAE,CAACQ,QAAQ,CAACF,eAAe,CAAC;MACtD,MAAMG,oBAAoB,GAAGC,OAAO,CAClCH,WAAW,CAACI,YAAY,GAAG,cAAc,CAC3C,CAAC;MAED,IAAIF,oBAAoB,EAAE;QACxBF,WAAW,CAACI,YAAY,GAAGJ,WAAW,CAACI,YAAY,IAAI,CAAC,CAAC;QACzDJ,WAAW,CAACI,YAAY,CAACd,MAAM,CAACe,OAAO,CAACC,IAAI,CAAC,GAC3Cd,cAAc,KAAK,MAAM,GACrB,UAAUG,aAAI,CAACY,QAAQ,CAACV,OAAO,CAACC,GAAG,CAAC,CAAC,EAAET,MAAM,CAAC,EAAE,GAChD,UAAUM,aAAI,CAACY,QAAQ,CAACV,OAAO,CAACC,GAAG,CAAC,CAAC,EAAET,MAAM,CAAC,EAAE;QAEtD,MAAMI,gBAAE,CAACe,SAAS,CAACT,eAAe,EAAEC,WAAW,EAAE;UAC/CS,MAAM,EAAE;QACV,CAAC,CAAC;QAEFlB,MAAM,GAAG,IAAI;MACf;IACF;IAEAmB,OAAO,CAACC,GAAG,CACT,IAAAC,eAAM,EAAC;AACb,QAAQC,cAAK,CAACC,OAAO,CACb,GAAGD,cAAK,CAACE,IAAI,CAAC,aAAa,CAAC,mBAC9B,CAAC,GAAGF,cAAK,CAACG,IAAI,CAAC,GAAG,CAAC;AACzB;AACA,QACQ,CAACzB,MAAM,GACH,SAASsB,cAAK,CAACI,IAAI,CACjB,GAAGzB,cAAc,UACnB,CAAC,wBAAwB,GACzB,yBAAyBqB,cAAK,CAACI,IAAI,CACjCtB,aAAI,CAACY,QAAQ,CAACV,OAAO,CAACC,GAAG,CAAC,CAAC,EAAET,MAAM,CACrC,CAAC,gCAAgC,IACrC,SAASwB,cAAK,CAACI,IAAI,CACjB,qCACF,CAAC,2CAA2C,GAC5C,SAASJ,cAAK,CAACI,IAAI,CAAC,8BAA8B,CAAC,OAAOJ,cAAK,CAACI,IAAI,CAClE,0BACF,CAAC,6BAA6B,GAC9B,iBAAiBJ,cAAK,CAACI,IAAI,CACzB3B,MAAM,CAACe,OAAO,CAACC,IACjB,CAAC,0BAA0B;AACnC;AACA,QACQO,cAAK,CAACK,MAAM,CAAC,YAAY,CAAC;AAClC,KAAK,CACD,CAAC;EACH,CAAC,MAAM;IACL,MAAMC,SAAS,GAAG;MAChBC,GAAG,EAAE;QAAEC,IAAI,EAAE,KAAK;QAAEC,KAAK,EAAE;MAAO,CAAC;MACnCC,OAAO,EAAE;QAAEF,IAAI,EAAE,SAAS;QAAEC,KAAK,EAAE;MAAQ,CAAC;MAC5C,IAAIhC,MAAM,CAACkC,OAAO,KAAK,MAAM,GACxB;QAAEC,GAAG,EAAE;UAAEJ,IAAI,EAAE,KAAK;UAAEC,KAAK,EAAE;QAAO;MAAE,CAAC,GACxC,IAAI;IACV,CAAU;IAEVZ,OAAO,CAACC,GAAG,CACT,IAAAC,eAAM,EAAC;AACb,QAAQC,cAAK,CAACC,OAAO,CACb,GAAGD,cAAK,CAACE,IAAI,CAAC,aAAa,CAAC,mBAC9B,CAAC,GAAGF,cAAK,CAACG,IAAI,CAAC,GAAG,CAAC;AACzB;AACA,UAAUH,cAAK,CAACG,IAAI,CAAC,GAAG,CAAC;AACzB,QAAQU,MAAM,CAACC,OAAO,CAACR,SAAS,CAAC,CACxBS,GAAG,CACF,CAAC,CAACC,MAAM,EAAE;MAAER,IAAI;MAAEC;IAAM,CAAC,CAAC,KAAK;AACzC,QAAQT,cAAK,CAACS,KAAK,CAAC,CAAC,0BAA0BT,cAAK,CAACE,IAAI,CAACM,IAAI,CAAC,EAAE,CAAC,GAAGR,cAAK,CAACG,IAAI,CACvE,GACF,CAAC;AACP;AACA,UAAUH,cAAK,CAACG,IAAI,CAAC,GAAG,CAAC,iBAAiBa,MAAM,EACxC,CAAC,CACAjC,IAAI,CAAC,IAAI,CAAC;AACnB;AACA,QAAQiB,cAAK,CAACK,MAAM,CACZ,OAAOL,cAAK,CAACE,IAAI,CAAC,iBAAiB,CAAC,+BACtC,CAAC;AACP,KAAK,CACD,CAAC;EACH;AACF;AAEO,SAASe,cAAcA,CAACC,OAAe,EAAEC,KAAY,EAAE;EAC5DtB,OAAO,CAACC,GAAG,CAAC,IAAI,CAAC;EAEjB,IAAIqB,KAAK,EAAE;IACTtB,OAAO,CAACC,GAAG,CAACE,cAAK,CAACoB,GAAG,CAACD,KAAK,CAACD,OAAO,CAAC,CAAC;IACrC,MAAMC,KAAK;EACb;EAEA,IAAID,OAAO,EAAE;IACXrB,OAAO,CAACC,GAAG,CAACE,cAAK,CAACoB,GAAG,CAACF,OAAO,CAAC,CAAC;EACjC,CAAC,MAAM;IACLrB,OAAO,CAACC,GAAG,CACTE,cAAK,CAACoB,GAAG,CAAC,0DAA0D,CACtE,CAAC;EACH;EAEApC,OAAO,CAACqC,IAAI,CAAC,CAAC,CAAC;AACjB;AAEO,SAASC,kBAAkBA,CAChCC,OAAe,EACf9C,MAA6B,EAC7B;EACA,IAAIA,MAAM,CAACkC,OAAO,KAAK,SAAS,EAAE;IAChCd,OAAO,CAACC,GAAG,CACT,GAAGE,cAAK,CAACI,IAAI,CAAC,GAAG,CAAC,mBAAmBJ,cAAK,CAACwB,IAAI,CAC7C,gBAAgBD,OAAO,EACzB,CAAC,kBACH,CAAC;EACH,CAAC,MAAM;IACL1B,OAAO,CAAC4B,IAAI,CACV,GAAGzB,cAAK,CAACK,MAAM,CACb,GACF,CAAC,kEAAkEL,cAAK,CAACwB,IAAI,CAC3E/C,MAAM,CAACkC,OACT,CAAC,EACH,CAAC;EACH;AACF","ignoreList":[]}
1
+ {"version":3,"file":"inform.js","names":["_path","_interopRequireDefault","require","_dedent","_kleur","e","__esModule","default","printNonLocalLibNextSteps","config","platforms","ios","name","color","android","example","web","console","log","dedent","kleur","magenta","bold","gray","Object","entries","map","script","join","yellow","printLocalLibNextSteps","folder","linkedLocalLibrary","addedNitro","packageManager","blue","path","relative","process","cwd","project","moduleConfig","slug","printErrorHelp","message","error","red","exit","printUsedRNVersion","version","cyan","warn"],"sources":["../src/inform.ts"],"sourcesContent":["import path from 'path';\nimport dedent from 'dedent';\nimport type { TemplateConfiguration } from './template';\nimport kleur from 'kleur';\n\nexport function printNonLocalLibNextSteps(config: TemplateConfiguration) {\n const platforms = {\n ios: { name: 'iOS', color: 'cyan' },\n android: { name: 'Android', color: 'green' },\n ...(config.example === 'expo'\n ? ({ web: { name: 'Web', color: 'blue' } } as const)\n : null),\n } as const;\n\n console.log(\n dedent(`\n ${kleur.magenta(\n `${kleur.bold('Get started')} with the project`\n )}${kleur.gray(':')}\n\n ${kleur.gray('$')} yarn\n ${Object.entries(platforms)\n .map(\n ([script, { name, color }]) => `\n ${kleur[color](`Run the example app on ${kleur.bold(name)}`)}${kleur.gray(\n ':'\n )}\n\n ${kleur.gray('$')} yarn example ${script}`\n )\n .join('\\n')}\n\n ${kleur.yellow(\n `See ${kleur.bold('CONTRIBUTING.md')} for more details. Good luck!`\n )}\n `)\n );\n}\n\nexport function printLocalLibNextSteps({\n folder,\n config,\n linkedLocalLibrary,\n addedNitro,\n packageManager,\n}: {\n folder: string;\n config: TemplateConfiguration;\n linkedLocalLibrary: boolean;\n addedNitro: boolean;\n packageManager: string;\n}) {\n console.log(\n dedent(`\n ${kleur.magenta(\n `${kleur.bold('Get started')} with the project`\n )}${kleur.gray(':')}\n\n ${\n (linkedLocalLibrary\n ? `- Run ${kleur.blue(\n `${packageManager} install`\n )} to link the library\\n`\n : `- Link the library at ${kleur.blue(\n path.relative(process.cwd(), folder)\n )} based on your project setup\\n`) +\n (config.project.moduleConfig === 'nitro-modules' && !addedNitro\n ? `- Run ${kleur.blue(\n `${packageManager} add react-native-nitro-modules`\n )} to install nitro modules \\n`\n : '') +\n `- Run ${kleur.blue(\n 'pod install --project-directory=ios'\n )} to install dependencies with CocoaPods\\n` +\n `- Run ${kleur.blue('npx react-native run-android')} or ${kleur.blue(\n 'npx react-native run-ios'\n )} to build and run the app\\n` +\n `- Import from ${kleur.blue(\n config.project.slug\n )} and use it in your app.`\n }\n\n ${kleur.yellow(`Good luck!`)}\n `)\n );\n}\n\nexport function printErrorHelp(message: string, error: Error) {\n console.log('\\n');\n\n if (error) {\n console.log(kleur.red(error.message));\n throw error;\n }\n\n if (message) {\n console.log(kleur.red(message));\n } else {\n console.log(\n kleur.red(`An unknown error occurred. See '--help' for usage guide.`)\n );\n }\n\n process.exit(1);\n}\n\nexport function printUsedRNVersion(\n version: string,\n config: TemplateConfiguration\n) {\n if (config.example === 'vanilla') {\n console.log(\n `${kleur.blue('ℹ')} Using untested ${kleur.cyan(\n `react-native@${version}`\n )} for the example`\n );\n } else {\n console.warn(\n `${kleur.yellow(\n '⚠'\n )} Ignoring --react-native-version for unsupported example type: ${kleur.cyan(\n config.example\n )}`\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/input.js CHANGED
@@ -14,15 +14,11 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
14
14
  const LANGUAGE_CHOICES = [{
15
15
  title: 'Kotlin & Swift',
16
16
  value: 'kotlin-swift',
17
- types: ['nitro-module', 'legacy-module', 'legacy-view']
17
+ types: ['nitro-module']
18
18
  }, {
19
19
  title: 'Kotlin & Objective-C',
20
20
  value: 'kotlin-objc',
21
- types: ['turbo-module', 'fabric-view', 'legacy-module', 'legacy-view']
22
- }, {
23
- title: 'C++ for Android & iOS',
24
- value: 'cpp',
25
- types: ['turbo-module', 'legacy-module']
21
+ types: ['turbo-module', 'fabric-view']
26
22
  }, {
27
23
  title: 'JavaScript for Android, iOS & Web',
28
24
  value: 'js',
@@ -58,14 +54,6 @@ const TYPE_CHOICES = [{
58
54
  title: 'Nitro module',
59
55
  value: 'nitro-module',
60
56
  description: 'type-safe, fast integration for native APIs to JS (experimental)'
61
- }, {
62
- title: 'Legacy Native module',
63
- value: 'legacy-module',
64
- description: 'bridge for native APIs to JS (old architecture)'
65
- }, {
66
- title: 'Legacy Native view',
67
- value: 'legacy-view',
68
- description: 'bridge for native views to JS (old architecture)'
69
57
  }, {
70
58
  title: 'JavaScript library',
71
59
  value: 'library',