create-react-native-library 0.57.0 → 0.57.2

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.
@@ -89,7 +89,10 @@ async function generateExampleApp({
89
89
  } = pkg;
90
90
  delete scripts.test;
91
91
  delete scripts.lint;
92
- const SCRIPTS_TO_ADD = {
92
+ const SCRIPTS_TO_ADD = config.example === 'expo' ? {
93
+ 'build:ios': `xcodebuild ONLY_ACTIVE_ARCH=YES -workspace ios/${config.project.name}Example.xcworkspace -UseNewBuildSystem=YES -scheme ${config.project.name}Example -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build -quiet`,
94
+ 'build:android': 'cd android && ./gradlew assembleDebug -DtestBuildType=debug -Dorg.gradle.jvmargs=-Xmx4g'
95
+ } : {
93
96
  'build:android': 'react-native build-android --extra-params "--no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a"',
94
97
  'build:ios': `react-native build-ios --mode Debug`
95
98
  };
@@ -122,7 +125,7 @@ async function generateExampleApp({
122
125
  });
123
126
  const PACKAGES_TO_ADD_DEV = {
124
127
  'react-native-builder-bob': `^${config.versions.bob}`,
125
- 'react-native-monorepo-config': `^0.3.1`
128
+ 'react-native-monorepo-config': `^0.3.3`
126
129
  };
127
130
  if (config.project.moduleConfig === 'nitro-modules' || config.project.viewConfig === 'nitro-view') {
128
131
  const packagesToAddNitro = {
@@ -1 +1 @@
1
- {"version":3,"file":"generateExampleApp.js","names":["_fsExtra","_interopRequireDefault","require","_getLatestVersion","_https","_path","_sortObjectKeys","_spawn","_dedent","e","__esModule","default","FILES_TO_DELETE","PACKAGES_TO_REMOVE","PACKAGES_TO_ADD_EXPO_WEB","PACKAGES_TO_ADD_DEV_EXPO_NATIVE","generateExampleApp","config","root","reactNativeVersion","directory","path","join","args","example","project","name","package","matchedReactNativeVersion","test","getLatestVersion","range","Error","undefined","spawn","env","process","npm_config_yes","file","fs","remove","pkg","readJSON","slug","jest","scripts","dependencies","devDependencies","lint","SCRIPTS_TO_ADD","Object","assign","androidBuild","iosBuild","app","android","ios","bundleIdentifier","writeJSON","spaces","forEach","PACKAGES_TO_ADD_DEV","versions","bob","moduleConfig","viewConfig","packagesToAddNitro","nitro","sdkVersion","expo","split","replace","bundledNativeModules","Promise","resolve","reject","https","get","res","data","on","chunk","JSON","parse","native","entries","version","start","web","writeFile","dedent","field","sortObjectKeys","gradleProperties","readFile","podfile","includes"],"sources":["../../src/exampleApp/generateExampleApp.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport getLatestVersion from 'get-latest-version';\nimport https from 'https';\nimport path from 'path';\nimport type { TemplateConfiguration } from '../template';\nimport sortObjectKeys from '../utils/sortObjectKeys';\nimport { spawn } from '../utils/spawn';\nimport dedent from 'dedent';\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 '@react-native/new-app-screen',\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 'react-native-safe-area-context',\n];\n\nconst PACKAGES_TO_ADD_EXPO_WEB = {\n '@expo/metro-runtime': '~5.0.4',\n 'react-dom': '19.1.0',\n 'react-native-web': '~0.21.1',\n};\n\nconst PACKAGES_TO_ADD_DEV_EXPO_NATIVE = {\n 'expo-dev-client': '~5.0.3',\n};\n\nexport default async function generateExampleApp({\n config,\n root,\n reactNativeVersion = 'latest',\n}: {\n config: TemplateConfiguration;\n root: string;\n reactNativeVersion: string | undefined;\n}) {\n const directory = path.join(root, 'example');\n\n let args: string[] = [];\n\n switch (config.example) {\n case 'vanilla':\n // `npx @react-native-community/cli init <projectName> --directory example --skip-install`\n args = [\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 '--skip-git-init',\n '--pm',\n 'npm',\n ];\n break;\n case 'test-app':\n {\n // Test App requires React Native version to be a semver version\n const matchedReactNativeVersion = /(\\d+\\.\\d+[-.0-9a-z]*)/.test(\n reactNativeVersion\n )\n ? reactNativeVersion\n : await getLatestVersion('react-native', {\n range: reactNativeVersion,\n });\n\n if (!matchedReactNativeVersion) {\n throw new Error(\n `Could not find a matching version for react-native: ${reactNativeVersion}`\n );\n }\n\n // `npx --package react-native-test-app@latest init --name ${projectName}Example --destination example --version ${reactNativeVersion}`\n args = [\n '--package',\n `react-native-test-app@latest`,\n 'init',\n '--name',\n `${config.project.name}Example`,\n `--destination`,\n directory,\n '--version',\n matchedReactNativeVersion,\n '--platform',\n 'ios',\n '--platform',\n 'android',\n ];\n }\n break;\n case 'expo':\n // `npx create-expo-app example --no-install --template blank`\n args = [\n 'create-expo-app@latest',\n directory,\n '--no-install',\n '--template',\n 'blank',\n ];\n break;\n case undefined:\n case null: {\n // Do nothing\n }\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 // Make sure we have at least empty objects\n // Otherwise generation will fails if package doesn't contain these fields\n pkg.scripts = pkg.scripts || {};\n pkg.dependencies = pkg.dependencies || {};\n pkg.devDependencies = pkg.devDependencies || {};\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 --mode Debug`,\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 // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete dependencies[name];\n });\n\n const PACKAGES_TO_ADD_DEV = {\n 'react-native-builder-bob': `^${config.versions.bob}`,\n 'react-native-monorepo-config': `^0.3.1`,\n };\n\n if (\n config.project.moduleConfig === 'nitro-modules' ||\n config.project.viewConfig === 'nitro-view'\n ) {\n const packagesToAddNitro = {\n 'react-native-nitro-modules': `^${config.versions.nitro || 'latest'}`,\n };\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: string = dependencies.expo\n .split('.')[0]\n .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: string) => (data += chunk));\n res.on('end', () => {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(e);\n }\n });\n }\n )\n .on('error', reject);\n });\n } catch (e) {\n bundledNativeModules = {};\n }\n\n if (config.project.native) {\n Object.entries(PACKAGES_TO_ADD_DEV_EXPO_NATIVE).forEach(\n ([name, version]) => {\n devDependencies[name] = bundledNativeModules[name] || version;\n }\n );\n\n scripts.start = 'expo start --dev-client';\n scripts.android = 'expo run:android';\n scripts.ios = 'expo run:ios';\n\n delete scripts.web;\n\n await fs.writeFile(\n path.join(directory, '.gitignore'),\n dedent`\n # These folders are generated with prebuild (CNG)\n android/\n ios/\n `\n );\n } else {\n Object.entries(PACKAGES_TO_ADD_EXPO_WEB).forEach(([name, version]) => {\n dependencies[name] = bundledNativeModules[name] || version;\n });\n\n scripts.web = 'expo start --web';\n }\n\n const app = await fs.readJSON(path.join(directory, 'app.json'));\n\n app.expo.name = `${config.project.name} Example`;\n app.expo.slug = `${config.project.slug}-example`;\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":[]}
1
+ {"version":3,"file":"generateExampleApp.js","names":["_fsExtra","_interopRequireDefault","require","_getLatestVersion","_https","_path","_sortObjectKeys","_spawn","_dedent","e","__esModule","default","FILES_TO_DELETE","PACKAGES_TO_REMOVE","PACKAGES_TO_ADD_EXPO_WEB","PACKAGES_TO_ADD_DEV_EXPO_NATIVE","generateExampleApp","config","root","reactNativeVersion","directory","path","join","args","example","project","name","package","matchedReactNativeVersion","test","getLatestVersion","range","Error","undefined","spawn","env","process","npm_config_yes","file","fs","remove","pkg","readJSON","slug","jest","scripts","dependencies","devDependencies","lint","SCRIPTS_TO_ADD","Object","assign","androidBuild","iosBuild","app","android","ios","bundleIdentifier","writeJSON","spaces","forEach","PACKAGES_TO_ADD_DEV","versions","bob","moduleConfig","viewConfig","packagesToAddNitro","nitro","sdkVersion","expo","split","replace","bundledNativeModules","Promise","resolve","reject","https","get","res","data","on","chunk","JSON","parse","native","entries","version","start","web","writeFile","dedent","field","sortObjectKeys","gradleProperties","readFile","podfile","includes"],"sources":["../../src/exampleApp/generateExampleApp.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport getLatestVersion from 'get-latest-version';\nimport https from 'https';\nimport path from 'path';\nimport type { TemplateConfiguration } from '../template';\nimport sortObjectKeys from '../utils/sortObjectKeys';\nimport { spawn } from '../utils/spawn';\nimport dedent from 'dedent';\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 '@react-native/new-app-screen',\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 'react-native-safe-area-context',\n];\n\nconst PACKAGES_TO_ADD_EXPO_WEB = {\n '@expo/metro-runtime': '~5.0.4',\n 'react-dom': '19.1.0',\n 'react-native-web': '~0.21.1',\n};\n\nconst PACKAGES_TO_ADD_DEV_EXPO_NATIVE = {\n 'expo-dev-client': '~5.0.3',\n};\n\nexport default async function generateExampleApp({\n config,\n root,\n reactNativeVersion = 'latest',\n}: {\n config: TemplateConfiguration;\n root: string;\n reactNativeVersion: string | undefined;\n}) {\n const directory = path.join(root, 'example');\n\n let args: string[] = [];\n\n switch (config.example) {\n case 'vanilla':\n // `npx @react-native-community/cli init <projectName> --directory example --skip-install`\n args = [\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 '--skip-git-init',\n '--pm',\n 'npm',\n ];\n break;\n case 'test-app':\n {\n // Test App requires React Native version to be a semver version\n const matchedReactNativeVersion = /(\\d+\\.\\d+[-.0-9a-z]*)/.test(\n reactNativeVersion\n )\n ? reactNativeVersion\n : await getLatestVersion('react-native', {\n range: reactNativeVersion,\n });\n\n if (!matchedReactNativeVersion) {\n throw new Error(\n `Could not find a matching version for react-native: ${reactNativeVersion}`\n );\n }\n\n // `npx --package react-native-test-app@latest init --name ${projectName}Example --destination example --version ${reactNativeVersion}`\n args = [\n '--package',\n `react-native-test-app@latest`,\n 'init',\n '--name',\n `${config.project.name}Example`,\n `--destination`,\n directory,\n '--version',\n matchedReactNativeVersion,\n '--platform',\n 'ios',\n '--platform',\n 'android',\n ];\n }\n break;\n case 'expo':\n // `npx create-expo-app example --no-install --template blank`\n args = [\n 'create-expo-app@latest',\n directory,\n '--no-install',\n '--template',\n 'blank',\n ];\n break;\n case undefined:\n case null: {\n // Do nothing\n }\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 // Make sure we have at least empty objects\n // Otherwise generation will fails if package doesn't contain these fields\n pkg.scripts = pkg.scripts || {};\n pkg.dependencies = pkg.dependencies || {};\n pkg.devDependencies = pkg.devDependencies || {};\n\n const { scripts, dependencies, devDependencies } = pkg;\n\n delete scripts.test;\n delete scripts.lint;\n\n const SCRIPTS_TO_ADD =\n config.example === 'expo'\n ? {\n 'build:ios': `xcodebuild ONLY_ACTIVE_ARCH=YES -workspace ios/${config.project.name}Example.xcworkspace -UseNewBuildSystem=YES -scheme ${config.project.name}Example -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build -quiet`,\n 'build:android':\n 'cd android && ./gradlew assembleDebug -DtestBuildType=debug -Dorg.gradle.jvmargs=-Xmx4g',\n }\n : {\n 'build:android':\n 'react-native build-android --extra-params \"--no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a\"',\n 'build:ios': `react-native build-ios --mode Debug`,\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 // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete dependencies[name];\n });\n\n const PACKAGES_TO_ADD_DEV = {\n 'react-native-builder-bob': `^${config.versions.bob}`,\n 'react-native-monorepo-config': `^0.3.3`,\n };\n\n if (\n config.project.moduleConfig === 'nitro-modules' ||\n config.project.viewConfig === 'nitro-view'\n ) {\n const packagesToAddNitro = {\n 'react-native-nitro-modules': `^${config.versions.nitro || 'latest'}`,\n };\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: string = dependencies.expo\n .split('.')[0]\n .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: string) => (data += chunk));\n res.on('end', () => {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(e);\n }\n });\n }\n )\n .on('error', reject);\n });\n } catch (e) {\n bundledNativeModules = {};\n }\n\n if (config.project.native) {\n Object.entries(PACKAGES_TO_ADD_DEV_EXPO_NATIVE).forEach(\n ([name, version]) => {\n devDependencies[name] = bundledNativeModules[name] || version;\n }\n );\n\n scripts.start = 'expo start --dev-client';\n scripts.android = 'expo run:android';\n scripts.ios = 'expo run:ios';\n\n delete scripts.web;\n\n await fs.writeFile(\n path.join(directory, '.gitignore'),\n dedent`\n # These folders are generated with prebuild (CNG)\n android/\n ios/\n `\n );\n } else {\n Object.entries(PACKAGES_TO_ADD_EXPO_WEB).forEach(([name, version]) => {\n dependencies[name] = bundledNativeModules[name] || version;\n });\n\n scripts.web = 'expo start --web';\n }\n\n const app = await fs.readJSON(path.join(directory, 'app.json'));\n\n app.expo.name = `${config.project.name} Example`;\n app.expo.slug = `${config.project.slug}-example`;\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":[]}
@@ -109,8 +109,7 @@ const TURBOREPO = {
109
109
  devDependencies: {
110
110
  turbo: '^2.5.6'
111
111
  }
112
- },
113
- condition: config => config.example !== 'expo'
112
+ }
114
113
  };
115
114
  const AVAILABLE_TOOLS = exports.AVAILABLE_TOOLS = {
116
115
  'eslint': ESLINT,
@@ -1 +1 @@
1
- {"version":3,"file":"configureTools.js","names":["_fsExtra","_interopRequireDefault","require","_nodePath","_template","_sortObjectKeys","_constants","e","__esModule","default","ESLINT","name","description","package","scripts","lint","prettier","quoteProps","singleQuote","tabWidth","trailingComma","useTabs","devDependencies","SUPPORTED_REACT_NATIVE_VERSION","LEFTHOOK","commitlint","extends","RELEASE_IT","release","git","commitMessage","tagName","npm","publish","github","plugins","preset","JEST","test","jest","modulePathIgnorePatterns","TURBOREPO","turbo","condition","config","example","AVAILABLE_TOOLS","exports","REQUIRED_TOOLS","turborepo","ALL_TOOLS","configureTools","tools","root","packageJson","key","Object","keys","Error","join","tool","files","path","resolve","__dirname","fs","existsSync","applyTemplate","value","entries","Array","isArray","sortObjectKeys","String"],"sources":["../../src/utils/configureTools.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'node:path';\nimport { applyTemplate, type TemplateConfiguration } from '../template';\nimport sortObjectKeys from './sortObjectKeys';\nimport { SUPPORTED_REACT_NATIVE_VERSION } from '../constants';\n\ntype Tool = {\n name: string;\n description: string;\n package: Record<string, unknown>;\n condition?: (config: TemplateConfiguration) => boolean;\n};\n\ntype Options = {\n tools: string[];\n root: string;\n packageJson: Record<string, unknown>;\n config: TemplateConfiguration;\n};\n\nconst ESLINT = {\n name: 'ESLint with Prettier',\n description: 'Lint and format code',\n package: {\n scripts: {\n lint: 'eslint \"**/*.{js,ts,tsx}\"',\n },\n prettier: {\n quoteProps: 'consistent',\n singleQuote: true,\n tabWidth: 2,\n trailingComma: 'es5',\n useTabs: false,\n },\n devDependencies: {\n '@eslint/compat': '^1.3.2',\n '@eslint/eslintrc': '^3.3.1',\n '@eslint/js': '^9.35.0',\n '@react-native/eslint-config': SUPPORTED_REACT_NATIVE_VERSION,\n 'eslint-config-prettier': '^10.1.8',\n 'eslint-plugin-prettier': '^5.5.4',\n 'eslint': '^9.35.0',\n 'prettier': '^2.8.8',\n },\n },\n};\n\nconst LEFTHOOK = {\n name: 'Lefthook with Commitlint',\n description: 'Manage Git hooks and lint commit messages',\n package: {\n commitlint: {\n extends: ['@commitlint/config-conventional'],\n },\n devDependencies: {\n '@commitlint/config-conventional': '^19.8.1',\n 'commitlint': '^19.8.1',\n 'lefthook': '^2.0.3',\n },\n },\n};\n\nconst RELEASE_IT = {\n name: 'Release It',\n description: 'Automate versioning and package publishing tasks',\n package: {\n 'scripts': {\n release: 'release-it --only-version',\n },\n 'release-it': {\n git: {\n // eslint-disable-next-line no-template-curly-in-string\n commitMessage: 'chore: release ${version}',\n // eslint-disable-next-line no-template-curly-in-string\n tagName: 'v${version}',\n },\n npm: {\n publish: true,\n },\n github: {\n release: true,\n },\n plugins: {\n '@release-it/conventional-changelog': {\n preset: {\n name: 'angular',\n },\n },\n },\n },\n 'devDependencies': {\n 'release-it': '^19.0.4',\n '@release-it/conventional-changelog': '^10.0.1',\n },\n },\n};\n\nconst JEST = {\n name: 'Jest',\n description: 'Test JavaScript and TypeScript code',\n package: {\n scripts: {\n test: 'jest',\n },\n jest: {\n preset: 'react-native',\n modulePathIgnorePatterns: [\n '<rootDir>/example/node_modules',\n '<rootDir>/lib/',\n ],\n },\n devDependencies: {\n '@types/jest': '^29.5.14',\n 'jest': '^29.7.0',\n },\n },\n};\n\nconst TURBOREPO = {\n name: 'Turborepo',\n description: 'Cache build outputs on CI',\n package: {\n devDependencies: {\n turbo: '^2.5.6',\n },\n },\n condition: (config: TemplateConfiguration) => config.example !== 'expo',\n};\n\nexport const AVAILABLE_TOOLS = {\n 'eslint': ESLINT,\n 'jest': JEST,\n 'lefthook': LEFTHOOK,\n 'release-it': RELEASE_IT,\n} as const satisfies Record<string, Tool>;\n\nconst REQUIRED_TOOLS = {\n turborepo: TURBOREPO,\n} as const satisfies Record<string, Tool>;\n\nconst ALL_TOOLS = {\n ...AVAILABLE_TOOLS,\n ...REQUIRED_TOOLS,\n} as const;\n\nexport async function configureTools({\n tools,\n config,\n root,\n packageJson,\n}: Options) {\n for (const key of [\n ...tools,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n ...(Object.keys(REQUIRED_TOOLS) as (keyof typeof REQUIRED_TOOLS)[]),\n ]) {\n if (!(key in ALL_TOOLS)) {\n throw new Error(\n `Invalid tool '${key}'. Available tools are: ${Object.keys(\n AVAILABLE_TOOLS\n ).join(', ')}.`\n );\n }\n\n // @ts-expect-error: We checked the key above\n const tool: Tool = ALL_TOOLS[key];\n\n if (tool.condition && !tool.condition(config)) {\n continue;\n }\n\n const files = path.resolve(__dirname, `../../templates/tools/${key}`);\n\n if (fs.existsSync(files)) {\n await applyTemplate(config, files, root);\n }\n\n for (const [key, value] of Object.entries(tool.package)) {\n if (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value)\n ) {\n if (typeof packageJson[key] === 'object' || packageJson[key] == null) {\n packageJson[key] = {\n ...packageJson[key],\n ...value,\n };\n\n if (\n key === 'dependencies' ||\n key === 'devDependencies' ||\n key === 'peerDependencies'\n ) {\n // @ts-expect-error: We know they are objects here\n packageJson[key] = sortObjectKeys(packageJson[key]);\n }\n } else {\n throw new Error(\n `Cannot merge '${key}' field because it is not an object (got '${String(packageJson[key])}').`\n );\n }\n } else {\n packageJson[key] = value;\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"configureTools.js","names":["_fsExtra","_interopRequireDefault","require","_nodePath","_template","_sortObjectKeys","_constants","e","__esModule","default","ESLINT","name","description","package","scripts","lint","prettier","quoteProps","singleQuote","tabWidth","trailingComma","useTabs","devDependencies","SUPPORTED_REACT_NATIVE_VERSION","LEFTHOOK","commitlint","extends","RELEASE_IT","release","git","commitMessage","tagName","npm","publish","github","plugins","preset","JEST","test","jest","modulePathIgnorePatterns","TURBOREPO","turbo","AVAILABLE_TOOLS","exports","REQUIRED_TOOLS","turborepo","ALL_TOOLS","configureTools","tools","config","root","packageJson","key","Object","keys","Error","join","tool","condition","files","path","resolve","__dirname","fs","existsSync","applyTemplate","value","entries","Array","isArray","sortObjectKeys","String"],"sources":["../../src/utils/configureTools.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'node:path';\nimport { applyTemplate, type TemplateConfiguration } from '../template';\nimport sortObjectKeys from './sortObjectKeys';\nimport { SUPPORTED_REACT_NATIVE_VERSION } from '../constants';\n\ntype Tool = {\n name: string;\n description: string;\n package: Record<string, unknown>;\n condition?: (config: TemplateConfiguration) => boolean;\n};\n\ntype Options = {\n tools: string[];\n root: string;\n packageJson: Record<string, unknown>;\n config: TemplateConfiguration;\n};\n\nconst ESLINT = {\n name: 'ESLint with Prettier',\n description: 'Lint and format code',\n package: {\n scripts: {\n lint: 'eslint \"**/*.{js,ts,tsx}\"',\n },\n prettier: {\n quoteProps: 'consistent',\n singleQuote: true,\n tabWidth: 2,\n trailingComma: 'es5',\n useTabs: false,\n },\n devDependencies: {\n '@eslint/compat': '^1.3.2',\n '@eslint/eslintrc': '^3.3.1',\n '@eslint/js': '^9.35.0',\n '@react-native/eslint-config': SUPPORTED_REACT_NATIVE_VERSION,\n 'eslint-config-prettier': '^10.1.8',\n 'eslint-plugin-prettier': '^5.5.4',\n 'eslint': '^9.35.0',\n 'prettier': '^2.8.8',\n },\n },\n};\n\nconst LEFTHOOK = {\n name: 'Lefthook with Commitlint',\n description: 'Manage Git hooks and lint commit messages',\n package: {\n commitlint: {\n extends: ['@commitlint/config-conventional'],\n },\n devDependencies: {\n '@commitlint/config-conventional': '^19.8.1',\n 'commitlint': '^19.8.1',\n 'lefthook': '^2.0.3',\n },\n },\n};\n\nconst RELEASE_IT = {\n name: 'Release It',\n description: 'Automate versioning and package publishing tasks',\n package: {\n 'scripts': {\n release: 'release-it --only-version',\n },\n 'release-it': {\n git: {\n // eslint-disable-next-line no-template-curly-in-string\n commitMessage: 'chore: release ${version}',\n // eslint-disable-next-line no-template-curly-in-string\n tagName: 'v${version}',\n },\n npm: {\n publish: true,\n },\n github: {\n release: true,\n },\n plugins: {\n '@release-it/conventional-changelog': {\n preset: {\n name: 'angular',\n },\n },\n },\n },\n 'devDependencies': {\n 'release-it': '^19.0.4',\n '@release-it/conventional-changelog': '^10.0.1',\n },\n },\n};\n\nconst JEST = {\n name: 'Jest',\n description: 'Test JavaScript and TypeScript code',\n package: {\n scripts: {\n test: 'jest',\n },\n jest: {\n preset: 'react-native',\n modulePathIgnorePatterns: [\n '<rootDir>/example/node_modules',\n '<rootDir>/lib/',\n ],\n },\n devDependencies: {\n '@types/jest': '^29.5.14',\n 'jest': '^29.7.0',\n },\n },\n};\n\nconst TURBOREPO = {\n name: 'Turborepo',\n description: 'Cache build outputs on CI',\n package: {\n devDependencies: {\n turbo: '^2.5.6',\n },\n },\n};\n\nexport const AVAILABLE_TOOLS = {\n 'eslint': ESLINT,\n 'jest': JEST,\n 'lefthook': LEFTHOOK,\n 'release-it': RELEASE_IT,\n} as const satisfies Record<string, Tool>;\n\nconst REQUIRED_TOOLS = {\n turborepo: TURBOREPO,\n} as const satisfies Record<string, Tool>;\n\nconst ALL_TOOLS = {\n ...AVAILABLE_TOOLS,\n ...REQUIRED_TOOLS,\n} as const;\n\nexport async function configureTools({\n tools,\n config,\n root,\n packageJson,\n}: Options) {\n for (const key of [\n ...tools,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n ...(Object.keys(REQUIRED_TOOLS) as (keyof typeof REQUIRED_TOOLS)[]),\n ]) {\n if (!(key in ALL_TOOLS)) {\n throw new Error(\n `Invalid tool '${key}'. Available tools are: ${Object.keys(\n AVAILABLE_TOOLS\n ).join(', ')}.`\n );\n }\n\n // @ts-expect-error: We checked the key above\n const tool: Tool = ALL_TOOLS[key];\n\n if (tool.condition && !tool.condition(config)) {\n continue;\n }\n\n const files = path.resolve(__dirname, `../../templates/tools/${key}`);\n\n if (fs.existsSync(files)) {\n await applyTemplate(config, files, root);\n }\n\n for (const [key, value] of Object.entries(tool.package)) {\n if (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value)\n ) {\n if (typeof packageJson[key] === 'object' || packageJson[key] == null) {\n packageJson[key] = {\n ...packageJson[key],\n ...value,\n };\n\n if (\n key === 'dependencies' ||\n key === 'devDependencies' ||\n key === 'peerDependencies'\n ) {\n // @ts-expect-error: We know they are objects here\n packageJson[key] = sortObjectKeys(packageJson[key]);\n }\n } else {\n throw new Error(\n `Cannot merge '${key}' field because it is not an object (got '${String(packageJson[key])}').`\n );\n }\n } else {\n packageJson[key] = value;\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-react-native-library",
3
- "version": "0.57.0",
3
+ "version": "0.57.2",
4
4
  "description": "CLI to scaffold React Native libraries",
5
5
  "keywords": [
6
6
  "react-native",
@@ -63,5 +63,5 @@
63
63
  "@types/fs-extra": "^9.0.13",
64
64
  "@types/validate-npm-package-name": "^3.0.3"
65
65
  },
66
- "gitHead": "177d9c1fbbf904d0b0e416781d76a62e336ee1b9"
66
+ "gitHead": "f3868e68e5e1457d762960c697249582a150c52a"
67
67
  }
@@ -33,6 +33,7 @@ jobs:
33
33
  - name: Typecheck files
34
34
  run: yarn typecheck
35
35
 
36
+ <% if (tools.includes('jest')) { -%>
36
37
  test:
37
38
  runs-on: ubuntu-latest
38
39
 
@@ -45,6 +46,7 @@ jobs:
45
46
 
46
47
  - name: Run unit tests
47
48
  run: yarn test --maxWorkers=2 --coverage
49
+ <% } -%>
48
50
 
49
51
  build-library:
50
52
  runs-on: ubuntu-latest
@@ -106,6 +108,13 @@ jobs:
106
108
  run: |
107
109
  /bin/bash -c "yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses > /dev/null"
108
110
 
111
+ <% if (example === 'expo') { -%>
112
+ - name: Prebuild expo app for iOS
113
+ if: env.turbo_cache_hit != 1
114
+ run: |
115
+ yarn example expo prebuild --platform android
116
+ <% } -%>
117
+
109
118
  - name: Cache Gradle
110
119
  if: env.turbo_cache_hit != 1
111
120
  uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
@@ -166,6 +175,12 @@ jobs:
166
175
  with:
167
176
  xcode-version: ${{ env.XCODE_VERSION }}
168
177
 
178
+ <% if (example === 'expo') { -%>
179
+ - name: Prebuild expo app for iOS
180
+ if: env.turbo_cache_hit != 1
181
+ run: |
182
+ yarn example expo prebuild --platform ios
183
+ <% } else { -%>
169
184
  - name: Install cocoapods
170
185
  if: env.turbo_cache_hit != 1 && steps.cocoapods-cache.outputs.cache-hit != 'true'
171
186
  run: |
@@ -173,6 +188,7 @@ jobs:
173
188
  bundle install
174
189
  bundle exec pod repo update --verbose
175
190
  bundle exec pod install --project-directory=ios
191
+ <% } -%>
176
192
 
177
193
  - name: Build example for iOS
178
194
  run: |
@@ -16,18 +16,16 @@ class <%- project.name -%>Package : BaseReactPackage() {
16
16
  }
17
17
  }
18
18
 
19
- override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
20
- return ReactModuleInfoProvider {
21
- val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
22
- moduleInfos[<%- project.name -%>Module.NAME] = ReactModuleInfo(
23
- <%- project.name -%>Module.NAME,
24
- <%- project.name -%>Module.NAME,
25
- false, // canOverrideExistingModule
26
- false, // needsEagerInit
27
- false, // isCxxModule
28
- true // isTurboModule
19
+ override fun getReactModuleInfoProvider() = ReactModuleInfoProvider {
20
+ mapOf(
21
+ <%- project.name -%>Module.NAME to ReactModuleInfo(
22
+ name = <%- project.name -%>Module.NAME,
23
+ className = <%- project.name -%>Module.NAME,
24
+ canOverrideExistingModule = false,
25
+ needsEagerInit = false,
26
+ isCxxModule = false,
27
+ isTurboModule = true
29
28
  )
30
- moduleInfos
31
- }
29
+ )
32
30
  }
33
31
  }
@@ -13,5 +13,5 @@ class <%- project.name -%>ViewPackage : BaseReactPackage() {
13
13
 
14
14
  override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? = null
15
15
 
16
- override fun getReactModuleInfoProvider(): ReactModuleInfoProvider = ReactModuleInfoProvider { emptyMap() }
16
+ override fun getReactModuleInfoProvider() = ReactModuleInfoProvider { emptyMap() }
17
17
  }