create-react-native-library 0.59.2 → 0.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/constants.js +1 -1
- package/lib/constants.js.map +1 -1
- package/lib/exampleApp/dependencies.js +4 -0
- package/lib/exampleApp/dependencies.js.map +1 -1
- package/lib/exampleApp/generateExampleApp.js +2 -22
- package/lib/exampleApp/generateExampleApp.js.map +1 -1
- package/lib/prompt.js +16 -1
- package/lib/prompt.js.map +1 -1
- package/lib/template.js +21 -0
- package/lib/template.js.map +1 -1
- package/package.json +2 -2
- package/templates/common/$.github/workflows/ci.yml +10 -0
- package/templates/common/$.nvmrc +1 -1
- package/templates/common/$package.json +18 -4
- package/templates/common/CONTRIBUTING.md +15 -0
- package/templates/cpp-library/android/CMakeLists.txt +30 -0
- package/templates/cpp-library/cpp/{%- project.name %}Impl.cpp +18 -0
- package/templates/cpp-library/cpp/{%- project.name %}Impl.h +17 -0
- package/templates/cpp-library/ios/OnLoad.mm +22 -0
- package/templates/cpp-library/react-native.config.js +15 -0
- package/templates/cpp-library/{%- project.name %}.podspec +20 -0
- package/templates/tools/eslint/~package.json +1 -1
- package/templates/tools/jest/~package.json +2 -1
package/lib/constants.js
CHANGED
|
@@ -7,5 +7,5 @@ exports.SUPPORTED_REACT_NATIVE_VERSION = exports.SUPPORTED_MONOREPO_CONFIG_VERSI
|
|
|
7
7
|
const FALLBACK_BOB_VERSION = exports.FALLBACK_BOB_VERSION = '0.41.0';
|
|
8
8
|
const FALLBACK_NITRO_MODULES_VERSION = exports.FALLBACK_NITRO_MODULES_VERSION = '0.35.3';
|
|
9
9
|
const SUPPORTED_MONOREPO_CONFIG_VERSION = exports.SUPPORTED_MONOREPO_CONFIG_VERSION = '0.3.3';
|
|
10
|
-
const SUPPORTED_REACT_NATIVE_VERSION = exports.SUPPORTED_REACT_NATIVE_VERSION = '0.
|
|
10
|
+
const SUPPORTED_REACT_NATIVE_VERSION = exports.SUPPORTED_REACT_NATIVE_VERSION = '0.85.0';
|
|
11
11
|
//# sourceMappingURL=constants.js.map
|
package/lib/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":["FALLBACK_BOB_VERSION","exports","FALLBACK_NITRO_MODULES_VERSION","SUPPORTED_MONOREPO_CONFIG_VERSION","SUPPORTED_REACT_NATIVE_VERSION"],"sources":["../src/constants.ts"],"sourcesContent":["export const FALLBACK_BOB_VERSION = '0.41.0';\nexport const FALLBACK_NITRO_MODULES_VERSION = '0.35.3';\nexport const SUPPORTED_MONOREPO_CONFIG_VERSION = '0.3.3';\nexport const SUPPORTED_REACT_NATIVE_VERSION = '0.
|
|
1
|
+
{"version":3,"file":"constants.js","names":["FALLBACK_BOB_VERSION","exports","FALLBACK_NITRO_MODULES_VERSION","SUPPORTED_MONOREPO_CONFIG_VERSION","SUPPORTED_REACT_NATIVE_VERSION"],"sources":["../src/constants.ts"],"sourcesContent":["export const FALLBACK_BOB_VERSION = '0.41.0';\nexport const FALLBACK_NITRO_MODULES_VERSION = '0.35.3';\nexport const SUPPORTED_MONOREPO_CONFIG_VERSION = '0.3.3';\nexport const SUPPORTED_REACT_NATIVE_VERSION = '0.85.0';\n"],"mappings":";;;;;;AAAO,MAAMA,oBAAoB,GAAAC,OAAA,CAAAD,oBAAA,GAAG,QAAQ;AACrC,MAAME,8BAA8B,GAAAD,OAAA,CAAAC,8BAAA,GAAG,QAAQ;AAC/C,MAAMC,iCAAiC,GAAAF,OAAA,CAAAE,iCAAA,GAAG,OAAO;AACjD,MAAMC,8BAA8B,GAAAH,OAAA,CAAAG,8BAAA,GAAG,QAAQ","ignoreList":[]}
|
|
@@ -11,6 +11,10 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
11
11
|
async function alignDependencyVersionsWithExampleApp(pkg, folder) {
|
|
12
12
|
const examplePackageJson = await _fsExtra.default.readJSON(_path.default.join(folder, 'example', 'package.json'));
|
|
13
13
|
const PACKAGES_TO_COPY = ['react', 'react-native', '@types/react', '@react-native/babel-preset'];
|
|
14
|
+
const usesCodegen = pkg['react-native-builder-bob']?.targets?.some(target => Array.isArray(target) ? target[0] === 'codegen' : target === 'codegen') ?? false;
|
|
15
|
+
if (usesCodegen) {
|
|
16
|
+
PACKAGES_TO_COPY.push('@react-native-community/cli');
|
|
17
|
+
}
|
|
14
18
|
const devDependencies = {};
|
|
15
19
|
PACKAGES_TO_COPY.forEach(name => {
|
|
16
20
|
if (name) {
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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","usesCodegen","targets","some","target","Array","isArray","push","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 'react-native-builder-bob'?: {\n targets?: (string | [string, unknown])[];\n };\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 usesCodegen =\n pkg['react-native-builder-bob']?.targets?.some((target) =>\n Array.isArray(target) ? target[0] === 'codegen' : target === 'codegen'\n ) ?? false;\n\n if (usesCodegen) {\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;AACA,IAAAE,eAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAqD,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAS9C,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,WAAW,GACfR,GAAG,CAAC,0BAA0B,CAAC,EAAES,OAAO,EAAEC,IAAI,CAAEC,MAAM,IACpDC,KAAK,CAACC,OAAO,CAACF,MAAM,CAAC,GAAGA,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,GAAGA,MAAM,KAAK,SAC/D,CAAC,IAAI,KAAK;EAEZ,IAAIH,WAAW,EAAE;IACfD,gBAAgB,CAACO,IAAI,CAAC,6BAA6B,CAAC;EACtD;EAEA,MAAMC,eAAuC,GAAG,CAAC,CAAC;EAElDR,gBAAgB,CAACS,OAAO,CAAEC,IAAI,IAAK;IACjC,IAAIA,IAAI,EAAE;MACR,MAAMC,OAAO,GACXhB,kBAAkB,CAACiB,YAAY,GAAGF,IAAI,CAAC,IACvCf,kBAAkB,CAACa,eAAe,GAAGE,IAAI,CAAC;MAE5C,IAAIC,OAAO,IAAI,IAAI,EAAE;QACnBH,eAAe,CAACE,IAAI,CAAC,GAAGC,OAAO;MACjC,CAAC,MAAM,IAAIlB,GAAG,CAACe,eAAe,GAAGE,IAAI,CAAC,IAAI,IAAI,EAAE;QAC9C,MAAM,IAAIG,KAAK,CACb,8BAA8BH,IAAI,uBACpC,CAAC;MACH;IACF;EACF,CAAC,CAAC;EAEFjB,GAAG,CAAC,iBAAiB,CAAC,GAAG,IAAAqB,uBAAc,EAAC;IACtC,GAAGrB,GAAG,CAAC,iBAAiB,CAAC;IACzB,GAAGe;EACL,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -201,29 +201,9 @@ async function generateExampleApp({
|
|
|
201
201
|
await _fsExtra.default.writeJSON(_path.default.join(directory, 'package.json'), pkg, {
|
|
202
202
|
spaces: 2
|
|
203
203
|
});
|
|
204
|
-
if (config.example
|
|
205
|
-
let gradleProperties = await _fsExtra.default.readFile(_path.default.join(directory, 'android', 'gradle.properties'), 'utf8');
|
|
206
|
-
|
|
207
|
-
// Disable Jetifier.
|
|
208
|
-
// Remove this when the app template is updated.
|
|
209
|
-
gradleProperties = gradleProperties.replace('android.enableJetifier=true', 'android.enableJetifier=false');
|
|
210
|
-
|
|
211
|
-
// Enable new arch for iOS and Android
|
|
212
|
-
// iOS
|
|
213
|
-
// Add ENV['RCT_NEW_ARCH_ENABLED'] = 1 on top of example/ios/Podfile
|
|
204
|
+
if (config.example === 'vanilla' && config.project.cpp) {
|
|
214
205
|
const podfile = await _fsExtra.default.readFile(_path.default.join(directory, 'ios', 'Podfile'), 'utf8');
|
|
215
|
-
await _fsExtra.default.writeFile(_path.default.join(directory, 'ios', 'Podfile'), "ENV['
|
|
216
|
-
|
|
217
|
-
// Android
|
|
218
|
-
// Make sure newArchEnabled=true is present in android/gradle.properties
|
|
219
|
-
if (gradleProperties.split('\n').includes('#newArchEnabled=true')) {
|
|
220
|
-
gradleProperties = gradleProperties.replace('#newArchEnabled=true', 'newArchEnabled=true');
|
|
221
|
-
} else if (gradleProperties.split('\n').includes('newArchEnabled=false')) {
|
|
222
|
-
gradleProperties = gradleProperties.replace('newArchEnabled=false', 'newArchEnabled=true');
|
|
223
|
-
} else if (!gradleProperties.split('\n').includes('newArchEnabled=true')) {
|
|
224
|
-
gradleProperties += '\nnewArchEnabled=true';
|
|
225
|
-
}
|
|
226
|
-
await _fsExtra.default.writeFile(_path.default.join(directory, 'android', 'gradle.properties'), gradleProperties);
|
|
206
|
+
await _fsExtra.default.writeFile(_path.default.join(directory, 'ios', 'Podfile'), "ENV['RCT_USE_RN_DEP'] = '1' # Needed to make iOS build work for C++ module\n\n" + podfile);
|
|
227
207
|
}
|
|
228
208
|
}
|
|
229
209
|
//# sourceMappingURL=generateExampleApp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateExampleApp.js","names":["_dedent","_interopRequireDefault","require","_fsExtra","_getLatestVersion","_https","_path","_constants","_sortObjectKeys","_spawn","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","SUPPORTED_MONOREPO_CONFIG_VERSION","moduleConfig","viewConfig","packagesToAddNitro","nitro","sdkVersion","expo","split","replace","bundledNativeModules","Promise","resolve","reject","https","get","res","data","on","chunk","JSON","parse","native","entries","version","start","writeFile","dedent","reactVersion","react","web","field","sortObjectKeys","gradleProperties","readFile","podfile","includes"],"sources":["../../src/exampleApp/generateExampleApp.ts"],"sourcesContent":["import dedent from 'dedent';\nimport fs from 'fs-extra';\nimport { getLatestVersion } from 'get-latest-version';\nimport https from 'https';\nimport path from 'path';\nimport { SUPPORTED_MONOREPO_CONFIG_VERSION } from '../constants';\nimport type { TemplateConfiguration } from '../template';\nimport sortObjectKeys from '../utils/sortObjectKeys';\nimport { spawn } from '../utils/spawn';\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-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 != null) {\n Object.assign(scripts, SCRIPTS_TO_ADD);\n }\n\n 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': `^${SUPPORTED_MONOREPO_CONFIG_VERSION}`,\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 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 }\n\n const reactVersion = dependencies.react ?? devDependencies.react;\n\n if (typeof reactVersion !== 'string') {\n throw new Error(\"Couldn't find the package 'react' in the example app.\");\n }\n\n Object.entries(PACKAGES_TO_ADD_EXPO_WEB).forEach(([name, version]) => {\n dependencies[name] = bundledNativeModules[name] || version;\n });\n\n dependencies['react-dom'] = reactVersion;\n scripts.web = 'expo start --web';\n scripts['build:web'] = 'expo export --platform web';\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":["_dedent","_interopRequireDefault","require","_fsExtra","_getLatestVersion","_https","_path","_constants","_sortObjectKeys","_spawn","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","SUPPORTED_MONOREPO_CONFIG_VERSION","moduleConfig","viewConfig","packagesToAddNitro","nitro","sdkVersion","expo","split","replace","bundledNativeModules","Promise","resolve","reject","https","get","res","data","on","chunk","JSON","parse","native","entries","version","start","writeFile","dedent","reactVersion","react","web","field","sortObjectKeys","cpp","podfile","readFile"],"sources":["../../src/exampleApp/generateExampleApp.ts"],"sourcesContent":["import dedent from 'dedent';\nimport fs from 'fs-extra';\nimport { getLatestVersion } from 'get-latest-version';\nimport https from 'https';\nimport path from 'path';\nimport { SUPPORTED_MONOREPO_CONFIG_VERSION } from '../constants';\nimport type { TemplateConfiguration } from '../template';\nimport sortObjectKeys from '../utils/sortObjectKeys';\nimport { spawn } from '../utils/spawn';\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-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 != null) {\n Object.assign(scripts, SCRIPTS_TO_ADD);\n }\n\n 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': `^${SUPPORTED_MONOREPO_CONFIG_VERSION}`,\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 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 }\n\n const reactVersion = dependencies.react ?? devDependencies.react;\n\n if (typeof reactVersion !== 'string') {\n throw new Error(\"Couldn't find the package 'react' in the example app.\");\n }\n\n Object.entries(PACKAGES_TO_ADD_EXPO_WEB).forEach(([name, version]) => {\n dependencies[name] = bundledNativeModules[name] || version;\n });\n\n dependencies['react-dom'] = reactVersion;\n scripts.web = 'expo start --web';\n scripts['build:web'] = 'expo export --platform web';\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 === 'vanilla' && config.project.cpp) {\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_USE_RN_DEP'] = '1' # Needed to make iOS build work for C++ module\\n\\n\" +\n podfile\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/prompt.js
CHANGED
|
@@ -42,6 +42,10 @@ const LANGUAGE_CHOICES = [{
|
|
|
42
42
|
title: 'Kotlin & Objective-C',
|
|
43
43
|
value: 'kotlin-objc',
|
|
44
44
|
types: ['turbo-module', 'fabric-view']
|
|
45
|
+
}, {
|
|
46
|
+
title: 'C++ (Experimental)',
|
|
47
|
+
value: 'cpp',
|
|
48
|
+
types: ['turbo-module']
|
|
45
49
|
}, {
|
|
46
50
|
title: 'JavaScript for Android, iOS & Web',
|
|
47
51
|
value: 'js',
|
|
@@ -221,8 +225,12 @@ const prompt = exports.prompt = (0, _pigment.create)(['[name]'], {
|
|
|
221
225
|
choices: LANGUAGE_CHOICES.map(choice => ({
|
|
222
226
|
title: choice.title,
|
|
223
227
|
value: choice.value,
|
|
228
|
+
description: choice.description,
|
|
224
229
|
skip: () => {
|
|
225
230
|
const answers = prompt.read();
|
|
231
|
+
if (choice.value === 'cpp' && answers.local === true) {
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
226
234
|
if (typeof answers.type === 'string') {
|
|
227
235
|
return !choice.types.includes(answers.type);
|
|
228
236
|
}
|
|
@@ -238,7 +246,14 @@ const prompt = exports.prompt = (0, _pigment.create)(['[name]'], {
|
|
|
238
246
|
choices: EXAMPLE_CHOICES.map(choice => ({
|
|
239
247
|
title: choice.title,
|
|
240
248
|
value: choice.value,
|
|
241
|
-
description: choice.description
|
|
249
|
+
description: choice.description,
|
|
250
|
+
skip: () => {
|
|
251
|
+
const answers = prompt.read();
|
|
252
|
+
if (answers.languages === 'cpp') {
|
|
253
|
+
return choice.value !== 'vanilla';
|
|
254
|
+
}
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
242
257
|
})),
|
|
243
258
|
required: true,
|
|
244
259
|
skip: () => {
|
package/lib/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","names":["_nodeFs","_interopRequireDefault","require","_nodePath","_pigment","_validateNpmPackageName","_spawn","_githubUsername","_configureTools","_constants","e","__esModule","default","TYPE_CHOICES","title","value","description","LANGUAGE_CHOICES","types","EXAMPLE_CHOICES","validateDirectory","input","targetPath","path","join","process","cwd","fs","existsSync","stat","statSync","isDirectory","files","readdirSync","isEmpty","length","getGitConfig","key","spawn","trim","undefined","isInPackage","resolve","isFile","prompt","exports","create","local","type","message","skip","directory","answers","read","name","includes","sep","validate","slug","basename","validateNpmPackage","validForNewPackages","test","required","Boolean","authorName","authorEmail","authorUrl","username","githubUsername","repoUrl","replace","choices","languages","map","choice","example","tools","Object","entries","AVAILABLE_TOOLS","tool","condition","filter","reactNativeVersion","SUPPORTED_REACT_NATIVE_VERSION"],"sources":["../src/prompt.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { create } from 'pigment';\nimport validateNpmPackage from 'validate-npm-package-name';\nimport { spawn } from './utils/spawn';\nimport githubUsername from 'github-username';\nimport { AVAILABLE_TOOLS } from './utils/configureTools';\nimport { SUPPORTED_REACT_NATIVE_VERSION } from './constants';\n\nexport type Answers = NonNullable<Awaited<ReturnType<typeof prompt.show>>>;\n\nexport type ExampleApp = 'test-app' | 'expo' | 'vanilla' | undefined;\n\nexport type ProjectLanguages = 'kotlin-objc' | 'kotlin-swift' | 'js';\n\nexport type ProjectType =\n | 'turbo-module'\n | 'fabric-view'\n | 'nitro-module'\n | 'nitro-view'\n | 'library';\n\nconst TYPE_CHOICES: {\n title: string;\n value: ProjectType;\n description: string;\n}[] = [\n {\n title: 'Turbo module',\n value: 'turbo-module',\n description: 'Integration for native APIs to JS',\n },\n {\n title: 'Fabric view',\n value: 'fabric-view',\n description: 'Integration for native views to JS',\n },\n {\n title: 'Nitro module',\n value: 'nitro-module',\n description: 'Type-safe, fast integration for native APIs to JS',\n },\n {\n title: 'Nitro view',\n value: 'nitro-view',\n description: 'Integration for native views to JS using nitro',\n },\n {\n title: 'JavaScript library',\n value: 'library',\n description: 'Plain JavaScript library with Web support',\n },\n];\n\nconst LANGUAGE_CHOICES: {\n title: string;\n value: ProjectLanguages;\n types: ProjectType[];\n}[] = [\n {\n title: 'Kotlin & Swift',\n value: 'kotlin-swift',\n types: ['nitro-module', 'nitro-view'],\n },\n {\n title: 'Kotlin & Objective-C',\n value: 'kotlin-objc',\n types: ['turbo-module', 'fabric-view'],\n },\n {\n title: 'JavaScript for Android, iOS & Web',\n value: 'js',\n types: ['library'],\n },\n];\n\nconst EXAMPLE_CHOICES = [\n {\n title: 'App with Community CLI',\n value: 'vanilla',\n description: 'Classic React Native app with native code access',\n },\n {\n title: 'App with Expo CLI',\n value: 'expo',\n description: 'Managed Expo app for easier upgrades',\n },\n {\n title: 'Test App by Microsoft',\n value: 'test-app',\n description: \"Test app with app's native code abstracted\",\n },\n] as const;\n\nconst validateDirectory = (input: string) => {\n if (!input) {\n return 'Cannot be empty';\n }\n\n const targetPath = path.join(process.cwd(), input);\n\n if (!fs.existsSync(targetPath)) {\n return true;\n }\n\n const stat = fs.statSync(targetPath);\n\n if (!stat.isDirectory()) {\n return 'Path exists and is not a directory';\n }\n\n const files = fs.readdirSync(targetPath);\n\n const isEmpty =\n files.length === 0 || (files.length === 1 && files[0] === '.git');\n\n if (!isEmpty) {\n return 'Directory already exists and is not empty';\n }\n\n return true;\n};\n\nconst getGitConfig = async (key: string): Promise<string | undefined> => {\n try {\n const value: string = await spawn('git', ['config', '--get', key]);\n\n return value.trim();\n } catch {\n return undefined;\n }\n};\n\nconst isInPackage = (): boolean => {\n try {\n const stat = fs.statSync(path.resolve(process.cwd(), 'package.json'));\n\n return stat.isFile();\n } catch {\n return false;\n }\n};\n\nexport const prompt = create(['[name]'], {\n local: {\n type: 'confirm',\n description: 'Whether to create a local library',\n message: `Looks like you're under a project folder. Do you want to create a local library?`,\n default: isInPackage,\n skip: () => !isInPackage(),\n },\n directory: {\n type: 'text',\n description: 'Directory to create the library at',\n message: 'Where do you want to create the library?',\n default: (): string | undefined => {\n const answers = prompt.read();\n\n if (answers.name == null) {\n return undefined;\n }\n\n if (answers.local && !answers.name?.includes(path.sep)) {\n return path.join('modules', answers.name);\n }\n\n return answers.name;\n },\n validate: validateDirectory,\n skip: () => {\n const answers = prompt.read();\n\n if (\n answers.name &&\n !answers.local &&\n validateDirectory(answers.name) === true\n ) {\n return true;\n }\n\n return false;\n },\n },\n slug: {\n type: 'text',\n description: 'Name of the npm package',\n message: 'What do you want to name the npm package?',\n default: (): string | undefined => {\n const answers = prompt.read();\n const value =\n typeof answers.directory === 'string'\n ? answers.directory\n : answers.name;\n\n if (typeof value !== 'string') {\n return undefined;\n }\n\n const basename = path.basename(value);\n\n if (validateNpmPackage(basename).validForNewPackages) {\n if (/^(@|react-native)/.test(basename)) {\n return basename;\n }\n\n return `react-native-${basename}`;\n }\n\n return undefined;\n },\n validate: (input) =>\n validateNpmPackage(input).validForNewPackages ||\n 'Must be a valid npm package name',\n required: true,\n },\n description: {\n type: 'text',\n description: 'Description of the npm package',\n message: 'How would you describe the package?',\n validate: (input) => Boolean(input) || 'Cannot be empty',\n required: true,\n },\n authorName: {\n type: 'text',\n description: 'Name of the package author',\n message: 'What is the name of the package author?',\n default: async () => getGitConfig('user.name'),\n validate: (input) => Boolean(input) || 'Cannot be empty',\n skip: (): boolean => prompt.read().local === true,\n },\n authorEmail: {\n type: 'text',\n description: 'Email address of the package author',\n message: 'What is the email address of the package author?',\n default: async () => getGitConfig('user.email'),\n validate: (input) =>\n /^\\S+@\\S+$/.test(input) || 'Must be a valid email address',\n skip: (): boolean => prompt.read().local === true,\n },\n authorUrl: {\n type: 'text',\n description: 'Profile URL of the package author',\n message: 'What is the profile URL for the package author?',\n default: async () => {\n const answers = prompt.read();\n\n if (typeof answers.authorEmail !== 'string') {\n return undefined;\n }\n\n try {\n const username = await githubUsername(answers.authorEmail);\n\n if (username) {\n return `https://github.com/${username}`;\n }\n } catch (e) {\n // Ignore error\n }\n\n return undefined;\n },\n validate: (input) => /^https?:\\/\\//.test(input) || 'Must be a valid URL',\n skip: (): boolean => prompt.read().local === true,\n },\n repoUrl: {\n type: 'text',\n description: 'Repository URL of the package',\n message: 'What is the repository URL for the package?',\n default: (): string | undefined => {\n const answers = prompt.read();\n\n if (\n typeof answers.authorUrl === 'string' &&\n typeof answers.slug === 'string' &&\n /^https?:\\/\\/github.com\\/[^/]+/.test(answers.authorUrl)\n ) {\n return `${answers.authorUrl}/${answers.slug\n .replace(/^@/, '')\n .replace(/\\//g, '-')}`;\n }\n\n return undefined;\n },\n validate: (input) => /^https?:\\/\\//.test(input) || 'Must be a valid URL',\n skip: (): boolean => prompt.read().local === true,\n },\n type: {\n type: 'select',\n description: 'Type of library you want to develop',\n message: 'What type of library do you want to develop?',\n choices: TYPE_CHOICES,\n required: true,\n },\n languages: {\n type: 'select',\n description: 'Languages to use for native code',\n message: 'Which language do you want to use for native code?',\n choices: LANGUAGE_CHOICES.map((choice) => ({\n title: choice.title,\n value: choice.value,\n skip: (): boolean => {\n const answers = prompt.read();\n\n if (typeof answers.type === 'string') {\n return !choice.types.includes(answers.type);\n }\n\n return false;\n },\n })),\n required: true,\n },\n example: {\n type: 'select',\n description: 'Type of the example app to create',\n message: 'What type of example app do you want to create?',\n choices: EXAMPLE_CHOICES.map((choice) => ({\n title: choice.title,\n value: choice.value,\n description: choice.description,\n })),\n required: true,\n skip: (): boolean => {\n const answers = prompt.read();\n\n return answers.local === true;\n },\n },\n tools: {\n type: 'multiselect',\n description: 'Additional tools to configure',\n message: 'Which tools do you want to configure?',\n choices: Object.entries(AVAILABLE_TOOLS).map(([key, tool]) => ({\n value: key,\n title: tool.name,\n description: tool.description,\n skip: (): boolean => {\n if ('condition' in tool && tool.condition) {\n return !tool.condition({ example: prompt.read().example });\n }\n\n return false;\n },\n })),\n default: (): string[] => {\n const answers = prompt.read();\n\n return Object.entries(AVAILABLE_TOOLS)\n .filter(([, tool]) => {\n if ('condition' in tool && tool.condition) {\n return tool.condition({ example: answers.example });\n }\n\n return true;\n })\n .map(([key]) => key);\n },\n required: true,\n skip: (): boolean => {\n const answers = prompt.read();\n\n return answers.local === true;\n },\n },\n reactNativeVersion: {\n type: 'text',\n description: 'Version of React Native to use in the example app',\n message:\n 'Which version of React Native do you want to use in the example app?',\n default: SUPPORTED_REACT_NATIVE_VERSION,\n validate: (input) =>\n input === 'latest' ||\n /^\\d+\\.\\d+\\.\\d+(-.+)?$/.test(input) ||\n 'Must be a valid semver version',\n skip: true,\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"prompt.js","names":["_nodeFs","_interopRequireDefault","require","_nodePath","_pigment","_validateNpmPackageName","_spawn","_githubUsername","_configureTools","_constants","e","__esModule","default","TYPE_CHOICES","title","value","description","LANGUAGE_CHOICES","types","EXAMPLE_CHOICES","validateDirectory","input","targetPath","path","join","process","cwd","fs","existsSync","stat","statSync","isDirectory","files","readdirSync","isEmpty","length","getGitConfig","key","spawn","trim","undefined","isInPackage","resolve","isFile","prompt","exports","create","local","type","message","skip","directory","answers","read","name","includes","sep","validate","slug","basename","validateNpmPackage","validForNewPackages","test","required","Boolean","authorName","authorEmail","authorUrl","username","githubUsername","repoUrl","replace","choices","languages","map","choice","example","tools","Object","entries","AVAILABLE_TOOLS","tool","condition","filter","reactNativeVersion","SUPPORTED_REACT_NATIVE_VERSION"],"sources":["../src/prompt.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { create } from 'pigment';\nimport validateNpmPackage from 'validate-npm-package-name';\nimport { spawn } from './utils/spawn';\nimport githubUsername from 'github-username';\nimport { AVAILABLE_TOOLS } from './utils/configureTools';\nimport { SUPPORTED_REACT_NATIVE_VERSION } from './constants';\n\nexport type Answers = NonNullable<Awaited<ReturnType<typeof prompt.show>>>;\n\nexport type ExampleApp = 'test-app' | 'expo' | 'vanilla' | undefined;\n\nexport type ProjectLanguages = 'kotlin-objc' | 'kotlin-swift' | 'cpp' | 'js';\n\nexport type ProjectType =\n | 'turbo-module'\n | 'fabric-view'\n | 'nitro-module'\n | 'nitro-view'\n | 'library';\n\nconst TYPE_CHOICES: {\n title: string;\n value: ProjectType;\n description: string;\n}[] = [\n {\n title: 'Turbo module',\n value: 'turbo-module',\n description: 'Integration for native APIs to JS',\n },\n {\n title: 'Fabric view',\n value: 'fabric-view',\n description: 'Integration for native views to JS',\n },\n {\n title: 'Nitro module',\n value: 'nitro-module',\n description: 'Type-safe, fast integration for native APIs to JS',\n },\n {\n title: 'Nitro view',\n value: 'nitro-view',\n description: 'Integration for native views to JS using nitro',\n },\n {\n title: 'JavaScript library',\n value: 'library',\n description: 'Plain JavaScript library with Web support',\n },\n];\n\nconst LANGUAGE_CHOICES: {\n title: string;\n value: ProjectLanguages;\n types: ProjectType[];\n description?: string;\n}[] = [\n {\n title: 'Kotlin & Swift',\n value: 'kotlin-swift',\n types: ['nitro-module', 'nitro-view'],\n },\n {\n title: 'Kotlin & Objective-C',\n value: 'kotlin-objc',\n types: ['turbo-module', 'fabric-view'],\n },\n {\n title: 'C++ (Experimental)',\n value: 'cpp',\n types: ['turbo-module'],\n },\n {\n title: 'JavaScript for Android, iOS & Web',\n value: 'js',\n types: ['library'],\n },\n];\n\nconst EXAMPLE_CHOICES = [\n {\n title: 'App with Community CLI',\n value: 'vanilla',\n description: 'Classic React Native app with native code access',\n },\n {\n title: 'App with Expo CLI',\n value: 'expo',\n description: 'Managed Expo app for easier upgrades',\n },\n {\n title: 'Test App by Microsoft',\n value: 'test-app',\n description: \"Test app with app's native code abstracted\",\n },\n] as const;\n\nconst validateDirectory = (input: string) => {\n if (!input) {\n return 'Cannot be empty';\n }\n\n const targetPath = path.join(process.cwd(), input);\n\n if (!fs.existsSync(targetPath)) {\n return true;\n }\n\n const stat = fs.statSync(targetPath);\n\n if (!stat.isDirectory()) {\n return 'Path exists and is not a directory';\n }\n\n const files = fs.readdirSync(targetPath);\n\n const isEmpty =\n files.length === 0 || (files.length === 1 && files[0] === '.git');\n\n if (!isEmpty) {\n return 'Directory already exists and is not empty';\n }\n\n return true;\n};\n\nconst getGitConfig = async (key: string): Promise<string | undefined> => {\n try {\n const value: string = await spawn('git', ['config', '--get', key]);\n\n return value.trim();\n } catch {\n return undefined;\n }\n};\n\nconst isInPackage = (): boolean => {\n try {\n const stat = fs.statSync(path.resolve(process.cwd(), 'package.json'));\n\n return stat.isFile();\n } catch {\n return false;\n }\n};\n\nexport const prompt = create(['[name]'], {\n local: {\n type: 'confirm',\n description: 'Whether to create a local library',\n message: `Looks like you're under a project folder. Do you want to create a local library?`,\n default: isInPackage,\n skip: () => !isInPackage(),\n },\n directory: {\n type: 'text',\n description: 'Directory to create the library at',\n message: 'Where do you want to create the library?',\n default: (): string | undefined => {\n const answers = prompt.read();\n\n if (answers.name == null) {\n return undefined;\n }\n\n if (answers.local && !answers.name?.includes(path.sep)) {\n return path.join('modules', answers.name);\n }\n\n return answers.name;\n },\n validate: validateDirectory,\n skip: () => {\n const answers = prompt.read();\n\n if (\n answers.name &&\n !answers.local &&\n validateDirectory(answers.name) === true\n ) {\n return true;\n }\n\n return false;\n },\n },\n slug: {\n type: 'text',\n description: 'Name of the npm package',\n message: 'What do you want to name the npm package?',\n default: (): string | undefined => {\n const answers = prompt.read();\n const value =\n typeof answers.directory === 'string'\n ? answers.directory\n : answers.name;\n\n if (typeof value !== 'string') {\n return undefined;\n }\n\n const basename = path.basename(value);\n\n if (validateNpmPackage(basename).validForNewPackages) {\n if (/^(@|react-native)/.test(basename)) {\n return basename;\n }\n\n return `react-native-${basename}`;\n }\n\n return undefined;\n },\n validate: (input) =>\n validateNpmPackage(input).validForNewPackages ||\n 'Must be a valid npm package name',\n required: true,\n },\n description: {\n type: 'text',\n description: 'Description of the npm package',\n message: 'How would you describe the package?',\n validate: (input) => Boolean(input) || 'Cannot be empty',\n required: true,\n },\n authorName: {\n type: 'text',\n description: 'Name of the package author',\n message: 'What is the name of the package author?',\n default: async () => getGitConfig('user.name'),\n validate: (input) => Boolean(input) || 'Cannot be empty',\n skip: (): boolean => prompt.read().local === true,\n },\n authorEmail: {\n type: 'text',\n description: 'Email address of the package author',\n message: 'What is the email address of the package author?',\n default: async () => getGitConfig('user.email'),\n validate: (input) =>\n /^\\S+@\\S+$/.test(input) || 'Must be a valid email address',\n skip: (): boolean => prompt.read().local === true,\n },\n authorUrl: {\n type: 'text',\n description: 'Profile URL of the package author',\n message: 'What is the profile URL for the package author?',\n default: async () => {\n const answers = prompt.read();\n\n if (typeof answers.authorEmail !== 'string') {\n return undefined;\n }\n\n try {\n const username = await githubUsername(answers.authorEmail);\n\n if (username) {\n return `https://github.com/${username}`;\n }\n } catch (e) {\n // Ignore error\n }\n\n return undefined;\n },\n validate: (input) => /^https?:\\/\\//.test(input) || 'Must be a valid URL',\n skip: (): boolean => prompt.read().local === true,\n },\n repoUrl: {\n type: 'text',\n description: 'Repository URL of the package',\n message: 'What is the repository URL for the package?',\n default: (): string | undefined => {\n const answers = prompt.read();\n\n if (\n typeof answers.authorUrl === 'string' &&\n typeof answers.slug === 'string' &&\n /^https?:\\/\\/github.com\\/[^/]+/.test(answers.authorUrl)\n ) {\n return `${answers.authorUrl}/${answers.slug\n .replace(/^@/, '')\n .replace(/\\//g, '-')}`;\n }\n\n return undefined;\n },\n validate: (input) => /^https?:\\/\\//.test(input) || 'Must be a valid URL',\n skip: (): boolean => prompt.read().local === true,\n },\n type: {\n type: 'select',\n description: 'Type of library you want to develop',\n message: 'What type of library do you want to develop?',\n choices: TYPE_CHOICES,\n required: true,\n },\n languages: {\n type: 'select',\n description: 'Languages to use for native code',\n message: 'Which language do you want to use for native code?',\n choices: LANGUAGE_CHOICES.map((choice) => ({\n title: choice.title,\n value: choice.value,\n description: choice.description,\n skip: (): boolean => {\n const answers = prompt.read();\n\n if (choice.value === 'cpp' && answers.local === true) {\n return true;\n }\n\n if (typeof answers.type === 'string') {\n return !choice.types.includes(answers.type);\n }\n\n return false;\n },\n })),\n required: true,\n },\n example: {\n type: 'select',\n description: 'Type of the example app to create',\n message: 'What type of example app do you want to create?',\n choices: EXAMPLE_CHOICES.map((choice) => ({\n title: choice.title,\n value: choice.value,\n description: choice.description,\n skip: (): boolean => {\n const answers = prompt.read();\n\n if (answers.languages === 'cpp') {\n return choice.value !== 'vanilla';\n }\n\n return false;\n },\n })),\n required: true,\n skip: (): boolean => {\n const answers = prompt.read();\n\n return answers.local === true;\n },\n },\n tools: {\n type: 'multiselect',\n description: 'Additional tools to configure',\n message: 'Which tools do you want to configure?',\n choices: Object.entries(AVAILABLE_TOOLS).map(([key, tool]) => ({\n value: key,\n title: tool.name,\n description: tool.description,\n skip: (): boolean => {\n if ('condition' in tool && tool.condition) {\n return !tool.condition({ example: prompt.read().example });\n }\n\n return false;\n },\n })),\n default: (): string[] => {\n const answers = prompt.read();\n\n return Object.entries(AVAILABLE_TOOLS)\n .filter(([, tool]) => {\n if ('condition' in tool && tool.condition) {\n return tool.condition({ example: answers.example });\n }\n\n return true;\n })\n .map(([key]) => key);\n },\n required: true,\n skip: (): boolean => {\n const answers = prompt.read();\n\n return answers.local === true;\n },\n },\n reactNativeVersion: {\n type: 'text',\n description: 'Version of React Native to use in the example app',\n message:\n 'Which version of React Native do you want to use in the example app?',\n default: SUPPORTED_REACT_NATIVE_VERSION,\n validate: (input) =>\n input === 'latest' ||\n /^\\d+\\.\\d+\\.\\d+(-.+)?$/.test(input) ||\n 'Must be a valid semver version',\n skip: true,\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
package/lib/template.js
CHANGED
|
@@ -26,6 +26,7 @@ const JS_VIEW_FILES = _path.default.resolve(__dirname, '../templates/js-view');
|
|
|
26
26
|
const NATIVE_COMMON_FILES = _path.default.resolve(__dirname, '../templates/native-common');
|
|
27
27
|
const EXAMPLE_NATIVE_COMMON_FILES = _path.default.resolve(__dirname, '../templates/example-native-common');
|
|
28
28
|
const NITRO_COMMON_FILES = _path.default.resolve(__dirname, '../templates/nitro-common');
|
|
29
|
+
const CPP_FILES = _path.default.resolve(__dirname, '../templates/cpp-library');
|
|
29
30
|
const NATIVE_FILES = {
|
|
30
31
|
module_new: _path.default.resolve(__dirname, '../templates/native-library-new'),
|
|
31
32
|
view_new: _path.default.resolve(__dirname, '../templates/native-view-new'),
|
|
@@ -73,6 +74,7 @@ function generateTemplateConfiguration({
|
|
|
73
74
|
package_cpp: pack.replace(/\./g, '_'),
|
|
74
75
|
identifier: slug.replace(/[^a-z0-9]+/g, '-').replace(/^-/, ''),
|
|
75
76
|
native: languages !== 'js',
|
|
77
|
+
cpp: languages === 'cpp',
|
|
76
78
|
swift: languages === 'kotlin-swift',
|
|
77
79
|
viewConfig: getViewConfig(type),
|
|
78
80
|
moduleConfig: getModuleConfig(type)
|
|
@@ -140,6 +142,25 @@ async function applyTemplates(answers, config, folder) {
|
|
|
140
142
|
}
|
|
141
143
|
}
|
|
142
144
|
} else {
|
|
145
|
+
if (answers.languages === 'cpp') {
|
|
146
|
+
if (config.example === 'expo') {
|
|
147
|
+
await applyTemplate(config, EXAMPLE_EXPO_FILES, folder);
|
|
148
|
+
if (config.project.native) {
|
|
149
|
+
await applyTemplate(config, EXAMPLE_NATIVE_COMMON_FILES, folder);
|
|
150
|
+
}
|
|
151
|
+
} else if (config.example != null) {
|
|
152
|
+
await applyTemplate(config, EXAMPLE_BARE_FILES, folder);
|
|
153
|
+
if (config.project.native) {
|
|
154
|
+
await applyTemplate(config, EXAMPLE_NATIVE_COMMON_FILES, folder);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
await applyTemplate(config, NATIVE_FILES['module_new'], folder);
|
|
158
|
+
await applyTemplate(config, CPP_FILES, folder);
|
|
159
|
+
if (config.example === 'expo' || config.tools.includes('vite')) {
|
|
160
|
+
await applyTemplate(config, JS_FILES, folder);
|
|
161
|
+
}
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
143
164
|
await applyTemplate(config, NATIVE_COMMON_FILES, folder);
|
|
144
165
|
if (config.example === 'expo') {
|
|
145
166
|
await applyTemplate(config, EXAMPLE_EXPO_FILES, folder);
|
package/lib/template.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","names":["_path","_interopRequireDefault","require","_fsExtra","_ejs","e","__esModule","default","BINARIES","COMMON_FILES","path","resolve","__dirname","COMMON_LOCAL_FILES","EXAMPLE_COMMON_FILES","EXAMPLE_BARE_FILES","EXAMPLE_MODULE_NEW_FILES","EXAMPLE_VIEW_FILES","EXAMPLE_EXPO_FILES","JS_FILES","JS_VIEW_FILES","NATIVE_COMMON_FILES","EXAMPLE_NATIVE_COMMON_FILES","NITRO_COMMON_FILES","NATIVE_FILES","module_new","view_new","module_nitro","view_nitro","OBJC_FILES","module_common","KOTLIN_FILES","generateTemplateConfiguration","versions","basename","answers","slug","languages","type","project","replace","namespace","startsWith","includes","split","toLowerCase","pack","description","name","test","charAt","toUpperCase","_","$1","slice","package","package_dir","sep","package_cpp","identifier","native","swift","viewConfig","getViewConfig","moduleConfig","getModuleConfig","author","authorName","email","authorEmail","url","authorUrl","repo","repoUrl","example","tools","year","Date","getFullYear","projectType","applyTemplates","config","folder","local","applyTemplate","templateType","source","destination","fs","mkdirp","files","readdir","f","ejs","render","openDelimiter","closeDelimiter","Error","cause","target","join","file","stats","stat","isDirectory","some","r","content","readFile","result","writeFile","copyFile"],"sources":["../src/template.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport ejs from 'ejs';\nimport type { Answers, ExampleApp, ProjectType } from './prompt';\n\nexport type TemplateVersions = {\n bob: string;\n nitro: string | undefined;\n};\n\nexport type ModuleConfig =\n | 'native-modules'\n | 'turbo-modules'\n | 'nitro-modules'\n | null;\n\nexport type ViewConfig = 'paper-view' | 'fabric-view' | 'nitro-view' | null;\n\n// Please think at least 5 times before introducing a new config key\n// You can just reuse the existing ones most of the time\nexport type TemplateConfiguration = {\n versions: TemplateVersions;\n project: {\n slug: string;\n description: string;\n name: string;\n package: string;\n package_dir: string;\n package_cpp: string;\n identifier: string;\n native: boolean;\n swift: boolean;\n viewConfig: ViewConfig;\n moduleConfig: ModuleConfig;\n };\n author: {\n name: string;\n email: string;\n url: string;\n };\n /** Git repo URL */\n repo: string;\n example: ExampleApp;\n year: number;\n tools: string[];\n};\n\nconst BINARIES = [\n /(gradlew|\\.(jar|keystore|png|jpg|gif))$/,\n /\\$\\.yarn(?![a-z])/,\n];\n\nconst COMMON_FILES = path.resolve(__dirname, '../templates/common');\nconst COMMON_LOCAL_FILES = path.resolve(__dirname, '../templates/common-local');\nconst EXAMPLE_COMMON_FILES = path.resolve(\n __dirname,\n '../templates/example-common'\n);\nconst EXAMPLE_BARE_FILES = path.resolve(__dirname, '../templates/example-bare');\nconst EXAMPLE_MODULE_NEW_FILES = path.resolve(\n __dirname,\n '../templates/example-module-new'\n);\nconst EXAMPLE_VIEW_FILES = path.resolve(__dirname, '../templates/example-view');\nconst EXAMPLE_EXPO_FILES = path.resolve(__dirname, '../templates/example-expo');\n\nconst JS_FILES = path.resolve(__dirname, '../templates/js-library');\nconst JS_VIEW_FILES = path.resolve(__dirname, '../templates/js-view');\nconst NATIVE_COMMON_FILES = path.resolve(\n __dirname,\n '../templates/native-common'\n);\nconst EXAMPLE_NATIVE_COMMON_FILES = path.resolve(\n __dirname,\n '../templates/example-native-common'\n);\nconst NITRO_COMMON_FILES = path.resolve(__dirname, '../templates/nitro-common');\n\nconst NATIVE_FILES = {\n module_new: path.resolve(__dirname, '../templates/native-library-new'),\n view_new: path.resolve(__dirname, '../templates/native-view-new'),\n module_nitro: path.resolve(__dirname, '../templates/nitro-module'),\n view_nitro: path.resolve(__dirname, '../templates/nitro-view'),\n} as const;\n\nconst OBJC_FILES = {\n module_common: path.resolve(__dirname, '../templates/objc-library'),\n view_new: path.resolve(__dirname, '../templates/objc-view-new'),\n} as const;\n\nconst KOTLIN_FILES = {\n module_new: path.resolve(__dirname, '../templates/kotlin-library-new'),\n view_new: path.resolve(__dirname, '../templates/kotlin-view-new'),\n} as const;\n\nexport function generateTemplateConfiguration({\n versions,\n basename,\n answers,\n}: {\n versions: TemplateVersions;\n basename: string;\n answers: Answers;\n}): TemplateConfiguration {\n const { slug, languages, type } = answers;\n\n const project = slug.replace(/^(react-native-|@[^/]+\\/)/, '');\n let namespace: string | undefined;\n\n if (slug.startsWith('@') && slug.includes('/')) {\n namespace = slug\n .split('/')[0]\n ?.replace(/[^a-z0-9]/g, '')\n .toLowerCase();\n }\n\n // Create a package identifier with specified namespace when possible\n const pack = `${namespace ? `${namespace}.` : ''}${project\n .replace(/[^a-z0-9]/g, '')\n .toLowerCase()}`;\n\n return {\n versions,\n project: {\n slug,\n description: answers.description,\n name:\n /^[A-Z]/.test(basename) && /^[a-z0-9]+$/i.test(basename)\n ? // If the project name is already in PascalCase, use it as-is\n basename\n : // Otherwise, convert it to PascalCase and remove any non-alphanumeric characters\n `${project.charAt(0).toUpperCase()}${project\n .replace(/[^a-z0-9](\\w)/g, (_, $1: string) => $1.toUpperCase())\n .slice(1)}`,\n package: pack,\n package_dir: pack.replace(/\\./g, path.sep),\n package_cpp: pack.replace(/\\./g, '_'),\n identifier: slug.replace(/[^a-z0-9]+/g, '-').replace(/^-/, ''),\n native: languages !== 'js',\n swift: languages === 'kotlin-swift',\n viewConfig: getViewConfig(type),\n moduleConfig: getModuleConfig(type),\n },\n author: {\n name: answers.authorName,\n email: answers.authorEmail,\n url: answers.authorUrl,\n },\n repo: answers.repoUrl,\n example: answers.example,\n tools: answers.tools,\n year: new Date().getFullYear(),\n };\n}\n\nfunction getModuleConfig(projectType: ProjectType): ModuleConfig {\n switch (projectType) {\n case 'nitro-module':\n return 'nitro-modules';\n case 'turbo-module':\n return 'turbo-modules';\n case 'fabric-view':\n case 'library':\n case 'nitro-view':\n return null;\n }\n}\n\nfunction getViewConfig(projectType: ProjectType): ViewConfig {\n switch (projectType) {\n case 'fabric-view':\n return 'fabric-view';\n case 'nitro-view':\n return 'nitro-view';\n case 'nitro-module':\n case 'turbo-module':\n case 'library':\n default:\n return null;\n }\n}\n\nexport async function applyTemplates(\n answers: Answers,\n config: TemplateConfiguration,\n folder: string\n) {\n const { local } = answers;\n\n if (local) {\n await applyTemplate(config, COMMON_LOCAL_FILES, folder);\n } else {\n await applyTemplate(config, COMMON_FILES, folder);\n\n if (config.example != null) {\n await applyTemplate(config, EXAMPLE_COMMON_FILES, folder);\n\n if (config.project.viewConfig !== null) {\n await applyTemplate(config, EXAMPLE_VIEW_FILES, folder);\n } else {\n await applyTemplate(config, EXAMPLE_MODULE_NEW_FILES, folder);\n }\n }\n }\n\n if (answers.languages === 'js') {\n await applyTemplate(config, JS_FILES, folder);\n\n if (config.example != null) {\n if (config.example === 'expo') {\n await applyTemplate(config, EXAMPLE_EXPO_FILES, folder);\n } else {\n await applyTemplate(config, EXAMPLE_BARE_FILES, folder);\n }\n }\n } else {\n await applyTemplate(config, NATIVE_COMMON_FILES, folder);\n\n if (config.example === 'expo') {\n await applyTemplate(config, EXAMPLE_EXPO_FILES, folder);\n\n if (config.project.native) {\n await applyTemplate(config, EXAMPLE_NATIVE_COMMON_FILES, folder);\n }\n } else if (config.example != null) {\n await applyTemplate(config, EXAMPLE_BARE_FILES, folder);\n\n if (config.project.native) {\n await applyTemplate(config, EXAMPLE_NATIVE_COMMON_FILES, folder);\n }\n }\n\n if (config.project.moduleConfig === 'nitro-modules') {\n await applyTemplate(config, NITRO_COMMON_FILES, folder);\n await applyTemplate(config, NATIVE_FILES['module_nitro'], folder);\n\n if (config.example === 'expo' || config.tools.includes('vite')) {\n await applyTemplate(config, JS_FILES, folder);\n }\n\n return;\n }\n\n if (config.project.viewConfig === 'nitro-view') {\n await applyTemplate(config, NITRO_COMMON_FILES, folder);\n await applyTemplate(config, NATIVE_FILES['view_nitro'], folder);\n\n if (config.example === 'expo' || config.tools.includes('vite')) {\n await applyTemplate(config, JS_VIEW_FILES, folder);\n }\n\n return;\n }\n\n if (config.project.moduleConfig !== null) {\n await applyTemplate(config, NATIVE_FILES[`module_new`], folder);\n } else {\n await applyTemplate(config, NATIVE_FILES[`view_new`], folder);\n }\n\n if (config.project.moduleConfig !== null) {\n await applyTemplate(config, OBJC_FILES[`module_common`], folder);\n } else {\n await applyTemplate(config, OBJC_FILES[`view_new`], folder);\n }\n\n const templateType = `${\n config.project.moduleConfig !== null ? 'module' : 'view'\n }_new` as const;\n\n await applyTemplate(config, KOTLIN_FILES[templateType], folder);\n\n if (config.example === 'expo' || config.tools.includes('vite')) {\n if (config.project.viewConfig !== null) {\n await applyTemplate(config, JS_VIEW_FILES, folder);\n } else {\n await applyTemplate(config, JS_FILES, folder);\n }\n }\n }\n}\n\n/**\n * This copies the template files and renders them via ejs\n */\nexport async function applyTemplate(\n config: TemplateConfiguration,\n source: string,\n destination: string\n) {\n await fs.mkdirp(destination);\n\n const files = await fs.readdir(source);\n\n for (const f of files) {\n if (f.startsWith('~')) {\n continue;\n }\n\n let name;\n\n try {\n name = ejs.render(f.replace(/^\\$/, ''), config, {\n openDelimiter: '{',\n closeDelimiter: '}',\n });\n } catch (e) {\n throw new Error(`Failed to render template file name: ${f}`, {\n cause: e,\n });\n }\n\n const target = path.join(destination, name);\n\n const file = path.join(source, f);\n const stats = await fs.stat(file);\n\n if (stats.isDirectory()) {\n await applyTemplate(config, file, target);\n } else if (!BINARIES.some((r) => r.test(file))) {\n const content = await fs.readFile(file, 'utf8');\n\n let result;\n\n try {\n result = ejs\n .render(content, config)\n // Make sure that line endings are 'lf' (Unix style)\n .replace(/\\r\\n/g, '\\n');\n } catch (e) {\n throw new Error(`Failed to render template file content: ${f}`, {\n cause: e,\n });\n }\n\n await fs.writeFile(target, result);\n } else {\n await fs.copyFile(file, target);\n }\n }\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,IAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAsB,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAgBtB;AACA;;AA4BA,MAAMG,QAAQ,GAAG,CACf,yCAAyC,EACzC,mBAAmB,CACpB;AAED,MAAMC,YAAY,GAAGC,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,qBAAqB,CAAC;AACnE,MAAMC,kBAAkB,GAAGH,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,2BAA2B,CAAC;AAC/E,MAAME,oBAAoB,GAAGJ,aAAI,CAACC,OAAO,CACvCC,SAAS,EACT,6BACF,CAAC;AACD,MAAMG,kBAAkB,GAAGL,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,2BAA2B,CAAC;AAC/E,MAAMI,wBAAwB,GAAGN,aAAI,CAACC,OAAO,CAC3CC,SAAS,EACT,iCACF,CAAC;AACD,MAAMK,kBAAkB,GAAGP,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,2BAA2B,CAAC;AAC/E,MAAMM,kBAAkB,GAAGR,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,2BAA2B,CAAC;AAE/E,MAAMO,QAAQ,GAAGT,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,yBAAyB,CAAC;AACnE,MAAMQ,aAAa,GAAGV,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,sBAAsB,CAAC;AACrE,MAAMS,mBAAmB,GAAGX,aAAI,CAACC,OAAO,CACtCC,SAAS,EACT,4BACF,CAAC;AACD,MAAMU,2BAA2B,GAAGZ,aAAI,CAACC,OAAO,CAC9CC,SAAS,EACT,oCACF,CAAC;AACD,MAAMW,kBAAkB,GAAGb,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,2BAA2B,CAAC;AAE/E,MAAMY,YAAY,GAAG;EACnBC,UAAU,EAAEf,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,iCAAiC,CAAC;EACtEc,QAAQ,EAAEhB,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,8BAA8B,CAAC;EACjEe,YAAY,EAAEjB,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,2BAA2B,CAAC;EAClEgB,UAAU,EAAElB,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,yBAAyB;AAC/D,CAAU;AAEV,MAAMiB,UAAU,GAAG;EACjBC,aAAa,EAAEpB,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,2BAA2B,CAAC;EACnEc,QAAQ,EAAEhB,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,4BAA4B;AAChE,CAAU;AAEV,MAAMmB,YAAY,GAAG;EACnBN,UAAU,EAAEf,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,iCAAiC,CAAC;EACtEc,QAAQ,EAAEhB,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,8BAA8B;AAClE,CAAU;AAEH,SAASoB,6BAA6BA,CAAC;EAC5CC,QAAQ;EACRC,QAAQ;EACRC;AAKF,CAAC,EAAyB;EACxB,MAAM;IAAEC,IAAI;IAAEC,SAAS;IAAEC;EAAK,CAAC,GAAGH,OAAO;EAEzC,MAAMI,OAAO,GAAGH,IAAI,CAACI,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;EAC7D,IAAIC,SAA6B;EAEjC,IAAIL,IAAI,CAACM,UAAU,CAAC,GAAG,CAAC,IAAIN,IAAI,CAACO,QAAQ,CAAC,GAAG,CAAC,EAAE;IAC9CF,SAAS,GAAGL,IAAI,CACbQ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACZJ,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAC1BK,WAAW,CAAC,CAAC;EAClB;;EAEA;EACA,MAAMC,IAAI,GAAG,GAAGL,SAAS,GAAG,GAAGA,SAAS,GAAG,GAAG,EAAE,GAAGF,OAAO,CACvDC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CACzBK,WAAW,CAAC,CAAC,EAAE;EAElB,OAAO;IACLZ,QAAQ;IACRM,OAAO,EAAE;MACPH,IAAI;MACJW,WAAW,EAAEZ,OAAO,CAACY,WAAW;MAChCC,IAAI,EACF,QAAQ,CAACC,IAAI,CAACf,QAAQ,CAAC,IAAI,cAAc,CAACe,IAAI,CAACf,QAAQ,CAAC;MACpD;MACAA,QAAQ;MACR;MACA,GAAGK,OAAO,CAACW,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGZ,OAAO,CACzCC,OAAO,CAAC,gBAAgB,EAAE,CAACY,CAAC,EAAEC,EAAU,KAAKA,EAAE,CAACF,WAAW,CAAC,CAAC,CAAC,CAC9DG,KAAK,CAAC,CAAC,CAAC,EAAE;MACnBC,OAAO,EAAET,IAAI;MACbU,WAAW,EAAEV,IAAI,CAACN,OAAO,CAAC,KAAK,EAAE9B,aAAI,CAAC+C,GAAG,CAAC;MAC1CC,WAAW,EAAEZ,IAAI,CAACN,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;MACrCmB,UAAU,EAAEvB,IAAI,CAACI,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;MAC9DoB,MAAM,EAAEvB,SAAS,KAAK,IAAI;MAC1BwB,KAAK,EAAExB,SAAS,KAAK,cAAc;MACnCyB,UAAU,EAAEC,aAAa,CAACzB,IAAI,CAAC;MAC/B0B,YAAY,EAAEC,eAAe,CAAC3B,IAAI;IACpC,CAAC;IACD4B,MAAM,EAAE;MACNlB,IAAI,EAAEb,OAAO,CAACgC,UAAU;MACxBC,KAAK,EAAEjC,OAAO,CAACkC,WAAW;MAC1BC,GAAG,EAAEnC,OAAO,CAACoC;IACf,CAAC;IACDC,IAAI,EAAErC,OAAO,CAACsC,OAAO;IACrBC,OAAO,EAAEvC,OAAO,CAACuC,OAAO;IACxBC,KAAK,EAAExC,OAAO,CAACwC,KAAK;IACpBC,IAAI,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC;EAC/B,CAAC;AACH;AAEA,SAASb,eAAeA,CAACc,WAAwB,EAAgB;EAC/D,QAAQA,WAAW;IACjB,KAAK,cAAc;MACjB,OAAO,eAAe;IACxB,KAAK,cAAc;MACjB,OAAO,eAAe;IACxB,KAAK,aAAa;IAClB,KAAK,SAAS;IACd,KAAK,YAAY;MACf,OAAO,IAAI;EACf;AACF;AAEA,SAAShB,aAAaA,CAACgB,WAAwB,EAAc;EAC3D,QAAQA,WAAW;IACjB,KAAK,aAAa;MAChB,OAAO,aAAa;IACtB,KAAK,YAAY;MACf,OAAO,YAAY;IACrB,KAAK,cAAc;IACnB,KAAK,cAAc;IACnB,KAAK,SAAS;IACd;MACE,OAAO,IAAI;EACf;AACF;AAEO,eAAeC,cAAcA,CAClC7C,OAAgB,EAChB8C,MAA6B,EAC7BC,MAAc,EACd;EACA,MAAM;IAAEC;EAAM,CAAC,GAAGhD,OAAO;EAEzB,IAAIgD,KAAK,EAAE;IACT,MAAMC,aAAa,CAACH,MAAM,EAAEpE,kBAAkB,EAAEqE,MAAM,CAAC;EACzD,CAAC,MAAM;IACL,MAAME,aAAa,CAACH,MAAM,EAAExE,YAAY,EAAEyE,MAAM,CAAC;IAEjD,IAAID,MAAM,CAACP,OAAO,IAAI,IAAI,EAAE;MAC1B,MAAMU,aAAa,CAACH,MAAM,EAAEnE,oBAAoB,EAAEoE,MAAM,CAAC;MAEzD,IAAID,MAAM,CAAC1C,OAAO,CAACuB,UAAU,KAAK,IAAI,EAAE;QACtC,MAAMsB,aAAa,CAACH,MAAM,EAAEhE,kBAAkB,EAAEiE,MAAM,CAAC;MACzD,CAAC,MAAM;QACL,MAAME,aAAa,CAACH,MAAM,EAAEjE,wBAAwB,EAAEkE,MAAM,CAAC;MAC/D;IACF;EACF;EAEA,IAAI/C,OAAO,CAACE,SAAS,KAAK,IAAI,EAAE;IAC9B,MAAM+C,aAAa,CAACH,MAAM,EAAE9D,QAAQ,EAAE+D,MAAM,CAAC;IAE7C,IAAID,MAAM,CAACP,OAAO,IAAI,IAAI,EAAE;MAC1B,IAAIO,MAAM,CAACP,OAAO,KAAK,MAAM,EAAE;QAC7B,MAAMU,aAAa,CAACH,MAAM,EAAE/D,kBAAkB,EAAEgE,MAAM,CAAC;MACzD,CAAC,MAAM;QACL,MAAME,aAAa,CAACH,MAAM,EAAElE,kBAAkB,EAAEmE,MAAM,CAAC;MACzD;IACF;EACF,CAAC,MAAM;IACL,MAAME,aAAa,CAACH,MAAM,EAAE5D,mBAAmB,EAAE6D,MAAM,CAAC;IAExD,IAAID,MAAM,CAACP,OAAO,KAAK,MAAM,EAAE;MAC7B,MAAMU,aAAa,CAACH,MAAM,EAAE/D,kBAAkB,EAAEgE,MAAM,CAAC;MAEvD,IAAID,MAAM,CAAC1C,OAAO,CAACqB,MAAM,EAAE;QACzB,MAAMwB,aAAa,CAACH,MAAM,EAAE3D,2BAA2B,EAAE4D,MAAM,CAAC;MAClE;IACF,CAAC,MAAM,IAAID,MAAM,CAACP,OAAO,IAAI,IAAI,EAAE;MACjC,MAAMU,aAAa,CAACH,MAAM,EAAElE,kBAAkB,EAAEmE,MAAM,CAAC;MAEvD,IAAID,MAAM,CAAC1C,OAAO,CAACqB,MAAM,EAAE;QACzB,MAAMwB,aAAa,CAACH,MAAM,EAAE3D,2BAA2B,EAAE4D,MAAM,CAAC;MAClE;IACF;IAEA,IAAID,MAAM,CAAC1C,OAAO,CAACyB,YAAY,KAAK,eAAe,EAAE;MACnD,MAAMoB,aAAa,CAACH,MAAM,EAAE1D,kBAAkB,EAAE2D,MAAM,CAAC;MACvD,MAAME,aAAa,CAACH,MAAM,EAAEzD,YAAY,CAAC,cAAc,CAAC,EAAE0D,MAAM,CAAC;MAEjE,IAAID,MAAM,CAACP,OAAO,KAAK,MAAM,IAAIO,MAAM,CAACN,KAAK,CAAChC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC9D,MAAMyC,aAAa,CAACH,MAAM,EAAE9D,QAAQ,EAAE+D,MAAM,CAAC;MAC/C;MAEA;IACF;IAEA,IAAID,MAAM,CAAC1C,OAAO,CAACuB,UAAU,KAAK,YAAY,EAAE;MAC9C,MAAMsB,aAAa,CAACH,MAAM,EAAE1D,kBAAkB,EAAE2D,MAAM,CAAC;MACvD,MAAME,aAAa,CAACH,MAAM,EAAEzD,YAAY,CAAC,YAAY,CAAC,EAAE0D,MAAM,CAAC;MAE/D,IAAID,MAAM,CAACP,OAAO,KAAK,MAAM,IAAIO,MAAM,CAACN,KAAK,CAAChC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC9D,MAAMyC,aAAa,CAACH,MAAM,EAAE7D,aAAa,EAAE8D,MAAM,CAAC;MACpD;MAEA;IACF;IAEA,IAAID,MAAM,CAAC1C,OAAO,CAACyB,YAAY,KAAK,IAAI,EAAE;MACxC,MAAMoB,aAAa,CAACH,MAAM,EAAEzD,YAAY,CAAC,YAAY,CAAC,EAAE0D,MAAM,CAAC;IACjE,CAAC,MAAM;MACL,MAAME,aAAa,CAACH,MAAM,EAAEzD,YAAY,CAAC,UAAU,CAAC,EAAE0D,MAAM,CAAC;IAC/D;IAEA,IAAID,MAAM,CAAC1C,OAAO,CAACyB,YAAY,KAAK,IAAI,EAAE;MACxC,MAAMoB,aAAa,CAACH,MAAM,EAAEpD,UAAU,CAAC,eAAe,CAAC,EAAEqD,MAAM,CAAC;IAClE,CAAC,MAAM;MACL,MAAME,aAAa,CAACH,MAAM,EAAEpD,UAAU,CAAC,UAAU,CAAC,EAAEqD,MAAM,CAAC;IAC7D;IAEA,MAAMG,YAAY,GAAG,GACnBJ,MAAM,CAAC1C,OAAO,CAACyB,YAAY,KAAK,IAAI,GAAG,QAAQ,GAAG,MAAM,MAC3C;IAEf,MAAMoB,aAAa,CAACH,MAAM,EAAElD,YAAY,CAACsD,YAAY,CAAC,EAAEH,MAAM,CAAC;IAE/D,IAAID,MAAM,CAACP,OAAO,KAAK,MAAM,IAAIO,MAAM,CAACN,KAAK,CAAChC,QAAQ,CAAC,MAAM,CAAC,EAAE;MAC9D,IAAIsC,MAAM,CAAC1C,OAAO,CAACuB,UAAU,KAAK,IAAI,EAAE;QACtC,MAAMsB,aAAa,CAACH,MAAM,EAAE7D,aAAa,EAAE8D,MAAM,CAAC;MACpD,CAAC,MAAM;QACL,MAAME,aAAa,CAACH,MAAM,EAAE9D,QAAQ,EAAE+D,MAAM,CAAC;MAC/C;IACF;EACF;AACF;;AAEA;AACA;AACA;AACO,eAAeE,aAAaA,CACjCH,MAA6B,EAC7BK,MAAc,EACdC,WAAmB,EACnB;EACA,MAAMC,gBAAE,CAACC,MAAM,CAACF,WAAW,CAAC;EAE5B,MAAMG,KAAK,GAAG,MAAMF,gBAAE,CAACG,OAAO,CAACL,MAAM,CAAC;EAEtC,KAAK,MAAMM,CAAC,IAAIF,KAAK,EAAE;IACrB,IAAIE,CAAC,CAAClD,UAAU,CAAC,GAAG,CAAC,EAAE;MACrB;IACF;IAEA,IAAIM,IAAI;IAER,IAAI;MACFA,IAAI,GAAG6C,YAAG,CAACC,MAAM,CAACF,CAAC,CAACpD,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAEyC,MAAM,EAAE;QAC9Cc,aAAa,EAAE,GAAG;QAClBC,cAAc,EAAE;MAClB,CAAC,CAAC;IACJ,CAAC,CAAC,OAAO3F,CAAC,EAAE;MACV,MAAM,IAAI4F,KAAK,CAAC,wCAAwCL,CAAC,EAAE,EAAE;QAC3DM,KAAK,EAAE7F;MACT,CAAC,CAAC;IACJ;IAEA,MAAM8F,MAAM,GAAGzF,aAAI,CAAC0F,IAAI,CAACb,WAAW,EAAEvC,IAAI,CAAC;IAE3C,MAAMqD,IAAI,GAAG3F,aAAI,CAAC0F,IAAI,CAACd,MAAM,EAAEM,CAAC,CAAC;IACjC,MAAMU,KAAK,GAAG,MAAMd,gBAAE,CAACe,IAAI,CAACF,IAAI,CAAC;IAEjC,IAAIC,KAAK,CAACE,WAAW,CAAC,CAAC,EAAE;MACvB,MAAMpB,aAAa,CAACH,MAAM,EAAEoB,IAAI,EAAEF,MAAM,CAAC;IAC3C,CAAC,MAAM,IAAI,CAAC3F,QAAQ,CAACiG,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACzD,IAAI,CAACoD,IAAI,CAAC,CAAC,EAAE;MAC9C,MAAMM,OAAO,GAAG,MAAMnB,gBAAE,CAACoB,QAAQ,CAACP,IAAI,EAAE,MAAM,CAAC;MAE/C,IAAIQ,MAAM;MAEV,IAAI;QACFA,MAAM,GAAGhB,YAAG,CACTC,MAAM,CAACa,OAAO,EAAE1B,MAAM;QACvB;QAAA,CACCzC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;MAC3B,CAAC,CAAC,OAAOnC,CAAC,EAAE;QACV,MAAM,IAAI4F,KAAK,CAAC,2CAA2CL,CAAC,EAAE,EAAE;UAC9DM,KAAK,EAAE7F;QACT,CAAC,CAAC;MACJ;MAEA,MAAMmF,gBAAE,CAACsB,SAAS,CAACX,MAAM,EAAEU,MAAM,CAAC;IACpC,CAAC,MAAM;MACL,MAAMrB,gBAAE,CAACuB,QAAQ,CAACV,IAAI,EAAEF,MAAM,CAAC;IACjC;EACF;AACF","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"template.js","names":["_path","_interopRequireDefault","require","_fsExtra","_ejs","e","__esModule","default","BINARIES","COMMON_FILES","path","resolve","__dirname","COMMON_LOCAL_FILES","EXAMPLE_COMMON_FILES","EXAMPLE_BARE_FILES","EXAMPLE_MODULE_NEW_FILES","EXAMPLE_VIEW_FILES","EXAMPLE_EXPO_FILES","JS_FILES","JS_VIEW_FILES","NATIVE_COMMON_FILES","EXAMPLE_NATIVE_COMMON_FILES","NITRO_COMMON_FILES","CPP_FILES","NATIVE_FILES","module_new","view_new","module_nitro","view_nitro","OBJC_FILES","module_common","KOTLIN_FILES","generateTemplateConfiguration","versions","basename","answers","slug","languages","type","project","replace","namespace","startsWith","includes","split","toLowerCase","pack","description","name","test","charAt","toUpperCase","_","$1","slice","package","package_dir","sep","package_cpp","identifier","native","cpp","swift","viewConfig","getViewConfig","moduleConfig","getModuleConfig","author","authorName","email","authorEmail","url","authorUrl","repo","repoUrl","example","tools","year","Date","getFullYear","projectType","applyTemplates","config","folder","local","applyTemplate","templateType","source","destination","fs","mkdirp","files","readdir","f","ejs","render","openDelimiter","closeDelimiter","Error","cause","target","join","file","stats","stat","isDirectory","some","r","content","readFile","result","writeFile","copyFile"],"sources":["../src/template.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport ejs from 'ejs';\nimport type { Answers, ExampleApp, ProjectType } from './prompt';\n\nexport type TemplateVersions = {\n bob: string;\n nitro: string | undefined;\n};\n\nexport type ModuleConfig =\n | 'native-modules'\n | 'turbo-modules'\n | 'nitro-modules'\n | null;\n\nexport type ViewConfig = 'paper-view' | 'fabric-view' | 'nitro-view' | null;\n\n// Please think at least 5 times before introducing a new config key\n// You can just reuse the existing ones most of the time\nexport type TemplateConfiguration = {\n versions: TemplateVersions;\n project: {\n slug: string;\n description: string;\n name: string;\n package: string;\n package_dir: string;\n package_cpp: string;\n identifier: string;\n native: boolean;\n cpp: boolean;\n swift: boolean;\n viewConfig: ViewConfig;\n moduleConfig: ModuleConfig;\n };\n author: {\n name: string;\n email: string;\n url: string;\n };\n /** Git repo URL */\n repo: string;\n example: ExampleApp;\n year: number;\n tools: string[];\n};\n\nconst BINARIES = [\n /(gradlew|\\.(jar|keystore|png|jpg|gif))$/,\n /\\$\\.yarn(?![a-z])/,\n];\n\nconst COMMON_FILES = path.resolve(__dirname, '../templates/common');\nconst COMMON_LOCAL_FILES = path.resolve(__dirname, '../templates/common-local');\nconst EXAMPLE_COMMON_FILES = path.resolve(\n __dirname,\n '../templates/example-common'\n);\nconst EXAMPLE_BARE_FILES = path.resolve(__dirname, '../templates/example-bare');\nconst EXAMPLE_MODULE_NEW_FILES = path.resolve(\n __dirname,\n '../templates/example-module-new'\n);\nconst EXAMPLE_VIEW_FILES = path.resolve(__dirname, '../templates/example-view');\nconst EXAMPLE_EXPO_FILES = path.resolve(__dirname, '../templates/example-expo');\n\nconst JS_FILES = path.resolve(__dirname, '../templates/js-library');\nconst JS_VIEW_FILES = path.resolve(__dirname, '../templates/js-view');\nconst NATIVE_COMMON_FILES = path.resolve(\n __dirname,\n '../templates/native-common'\n);\nconst EXAMPLE_NATIVE_COMMON_FILES = path.resolve(\n __dirname,\n '../templates/example-native-common'\n);\nconst NITRO_COMMON_FILES = path.resolve(__dirname, '../templates/nitro-common');\nconst CPP_FILES = path.resolve(__dirname, '../templates/cpp-library');\n\nconst NATIVE_FILES = {\n module_new: path.resolve(__dirname, '../templates/native-library-new'),\n view_new: path.resolve(__dirname, '../templates/native-view-new'),\n module_nitro: path.resolve(__dirname, '../templates/nitro-module'),\n view_nitro: path.resolve(__dirname, '../templates/nitro-view'),\n} as const;\n\nconst OBJC_FILES = {\n module_common: path.resolve(__dirname, '../templates/objc-library'),\n view_new: path.resolve(__dirname, '../templates/objc-view-new'),\n} as const;\n\nconst KOTLIN_FILES = {\n module_new: path.resolve(__dirname, '../templates/kotlin-library-new'),\n view_new: path.resolve(__dirname, '../templates/kotlin-view-new'),\n} as const;\n\nexport function generateTemplateConfiguration({\n versions,\n basename,\n answers,\n}: {\n versions: TemplateVersions;\n basename: string;\n answers: Answers;\n}): TemplateConfiguration {\n const { slug, languages, type } = answers;\n\n const project = slug.replace(/^(react-native-|@[^/]+\\/)/, '');\n let namespace: string | undefined;\n\n if (slug.startsWith('@') && slug.includes('/')) {\n namespace = slug\n .split('/')[0]\n ?.replace(/[^a-z0-9]/g, '')\n .toLowerCase();\n }\n\n // Create a package identifier with specified namespace when possible\n const pack = `${namespace ? `${namespace}.` : ''}${project\n .replace(/[^a-z0-9]/g, '')\n .toLowerCase()}`;\n\n return {\n versions,\n project: {\n slug,\n description: answers.description,\n name:\n /^[A-Z]/.test(basename) && /^[a-z0-9]+$/i.test(basename)\n ? // If the project name is already in PascalCase, use it as-is\n basename\n : // Otherwise, convert it to PascalCase and remove any non-alphanumeric characters\n `${project.charAt(0).toUpperCase()}${project\n .replace(/[^a-z0-9](\\w)/g, (_, $1: string) => $1.toUpperCase())\n .slice(1)}`,\n package: pack,\n package_dir: pack.replace(/\\./g, path.sep),\n package_cpp: pack.replace(/\\./g, '_'),\n identifier: slug.replace(/[^a-z0-9]+/g, '-').replace(/^-/, ''),\n native: languages !== 'js',\n cpp: languages === 'cpp',\n swift: languages === 'kotlin-swift',\n viewConfig: getViewConfig(type),\n moduleConfig: getModuleConfig(type),\n },\n author: {\n name: answers.authorName,\n email: answers.authorEmail,\n url: answers.authorUrl,\n },\n repo: answers.repoUrl,\n example: answers.example,\n tools: answers.tools,\n year: new Date().getFullYear(),\n };\n}\n\nfunction getModuleConfig(projectType: ProjectType): ModuleConfig {\n switch (projectType) {\n case 'nitro-module':\n return 'nitro-modules';\n case 'turbo-module':\n return 'turbo-modules';\n case 'fabric-view':\n case 'library':\n case 'nitro-view':\n return null;\n }\n}\n\nfunction getViewConfig(projectType: ProjectType): ViewConfig {\n switch (projectType) {\n case 'fabric-view':\n return 'fabric-view';\n case 'nitro-view':\n return 'nitro-view';\n case 'nitro-module':\n case 'turbo-module':\n case 'library':\n default:\n return null;\n }\n}\n\nexport async function applyTemplates(\n answers: Answers,\n config: TemplateConfiguration,\n folder: string\n) {\n const { local } = answers;\n\n if (local) {\n await applyTemplate(config, COMMON_LOCAL_FILES, folder);\n } else {\n await applyTemplate(config, COMMON_FILES, folder);\n\n if (config.example != null) {\n await applyTemplate(config, EXAMPLE_COMMON_FILES, folder);\n\n if (config.project.viewConfig !== null) {\n await applyTemplate(config, EXAMPLE_VIEW_FILES, folder);\n } else {\n await applyTemplate(config, EXAMPLE_MODULE_NEW_FILES, folder);\n }\n }\n }\n\n if (answers.languages === 'js') {\n await applyTemplate(config, JS_FILES, folder);\n\n if (config.example != null) {\n if (config.example === 'expo') {\n await applyTemplate(config, EXAMPLE_EXPO_FILES, folder);\n } else {\n await applyTemplate(config, EXAMPLE_BARE_FILES, folder);\n }\n }\n } else {\n if (answers.languages === 'cpp') {\n if (config.example === 'expo') {\n await applyTemplate(config, EXAMPLE_EXPO_FILES, folder);\n\n if (config.project.native) {\n await applyTemplate(config, EXAMPLE_NATIVE_COMMON_FILES, folder);\n }\n } else if (config.example != null) {\n await applyTemplate(config, EXAMPLE_BARE_FILES, folder);\n\n if (config.project.native) {\n await applyTemplate(config, EXAMPLE_NATIVE_COMMON_FILES, folder);\n }\n }\n\n await applyTemplate(config, NATIVE_FILES['module_new'], folder);\n await applyTemplate(config, CPP_FILES, folder);\n\n if (config.example === 'expo' || config.tools.includes('vite')) {\n await applyTemplate(config, JS_FILES, folder);\n }\n\n return;\n }\n\n await applyTemplate(config, NATIVE_COMMON_FILES, folder);\n\n if (config.example === 'expo') {\n await applyTemplate(config, EXAMPLE_EXPO_FILES, folder);\n\n if (config.project.native) {\n await applyTemplate(config, EXAMPLE_NATIVE_COMMON_FILES, folder);\n }\n } else if (config.example != null) {\n await applyTemplate(config, EXAMPLE_BARE_FILES, folder);\n\n if (config.project.native) {\n await applyTemplate(config, EXAMPLE_NATIVE_COMMON_FILES, folder);\n }\n }\n\n if (config.project.moduleConfig === 'nitro-modules') {\n await applyTemplate(config, NITRO_COMMON_FILES, folder);\n await applyTemplate(config, NATIVE_FILES['module_nitro'], folder);\n\n if (config.example === 'expo' || config.tools.includes('vite')) {\n await applyTemplate(config, JS_FILES, folder);\n }\n\n return;\n }\n\n if (config.project.viewConfig === 'nitro-view') {\n await applyTemplate(config, NITRO_COMMON_FILES, folder);\n await applyTemplate(config, NATIVE_FILES['view_nitro'], folder);\n\n if (config.example === 'expo' || config.tools.includes('vite')) {\n await applyTemplate(config, JS_VIEW_FILES, folder);\n }\n\n return;\n }\n\n if (config.project.moduleConfig !== null) {\n await applyTemplate(config, NATIVE_FILES[`module_new`], folder);\n } else {\n await applyTemplate(config, NATIVE_FILES[`view_new`], folder);\n }\n\n if (config.project.moduleConfig !== null) {\n await applyTemplate(config, OBJC_FILES[`module_common`], folder);\n } else {\n await applyTemplate(config, OBJC_FILES[`view_new`], folder);\n }\n\n const templateType = `${\n config.project.moduleConfig !== null ? 'module' : 'view'\n }_new` as const;\n\n await applyTemplate(config, KOTLIN_FILES[templateType], folder);\n\n if (config.example === 'expo' || config.tools.includes('vite')) {\n if (config.project.viewConfig !== null) {\n await applyTemplate(config, JS_VIEW_FILES, folder);\n } else {\n await applyTemplate(config, JS_FILES, folder);\n }\n }\n }\n}\n\n/**\n * This copies the template files and renders them via ejs\n */\nexport async function applyTemplate(\n config: TemplateConfiguration,\n source: string,\n destination: string\n) {\n await fs.mkdirp(destination);\n\n const files = await fs.readdir(source);\n\n for (const f of files) {\n if (f.startsWith('~')) {\n continue;\n }\n\n let name;\n\n try {\n name = ejs.render(f.replace(/^\\$/, ''), config, {\n openDelimiter: '{',\n closeDelimiter: '}',\n });\n } catch (e) {\n throw new Error(`Failed to render template file name: ${f}`, {\n cause: e,\n });\n }\n\n const target = path.join(destination, name);\n\n const file = path.join(source, f);\n const stats = await fs.stat(file);\n\n if (stats.isDirectory()) {\n await applyTemplate(config, file, target);\n } else if (!BINARIES.some((r) => r.test(file))) {\n const content = await fs.readFile(file, 'utf8');\n\n let result;\n\n try {\n result = ejs\n .render(content, config)\n // Make sure that line endings are 'lf' (Unix style)\n .replace(/\\r\\n/g, '\\n');\n } catch (e) {\n throw new Error(`Failed to render template file content: ${f}`, {\n cause: e,\n });\n }\n\n await fs.writeFile(target, result);\n } else {\n await fs.copyFile(file, target);\n }\n }\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,IAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAsB,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAgBtB;AACA;;AA6BA,MAAMG,QAAQ,GAAG,CACf,yCAAyC,EACzC,mBAAmB,CACpB;AAED,MAAMC,YAAY,GAAGC,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,qBAAqB,CAAC;AACnE,MAAMC,kBAAkB,GAAGH,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,2BAA2B,CAAC;AAC/E,MAAME,oBAAoB,GAAGJ,aAAI,CAACC,OAAO,CACvCC,SAAS,EACT,6BACF,CAAC;AACD,MAAMG,kBAAkB,GAAGL,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,2BAA2B,CAAC;AAC/E,MAAMI,wBAAwB,GAAGN,aAAI,CAACC,OAAO,CAC3CC,SAAS,EACT,iCACF,CAAC;AACD,MAAMK,kBAAkB,GAAGP,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,2BAA2B,CAAC;AAC/E,MAAMM,kBAAkB,GAAGR,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,2BAA2B,CAAC;AAE/E,MAAMO,QAAQ,GAAGT,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,yBAAyB,CAAC;AACnE,MAAMQ,aAAa,GAAGV,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,sBAAsB,CAAC;AACrE,MAAMS,mBAAmB,GAAGX,aAAI,CAACC,OAAO,CACtCC,SAAS,EACT,4BACF,CAAC;AACD,MAAMU,2BAA2B,GAAGZ,aAAI,CAACC,OAAO,CAC9CC,SAAS,EACT,oCACF,CAAC;AACD,MAAMW,kBAAkB,GAAGb,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,2BAA2B,CAAC;AAC/E,MAAMY,SAAS,GAAGd,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,0BAA0B,CAAC;AAErE,MAAMa,YAAY,GAAG;EACnBC,UAAU,EAAEhB,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,iCAAiC,CAAC;EACtEe,QAAQ,EAAEjB,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,8BAA8B,CAAC;EACjEgB,YAAY,EAAElB,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,2BAA2B,CAAC;EAClEiB,UAAU,EAAEnB,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,yBAAyB;AAC/D,CAAU;AAEV,MAAMkB,UAAU,GAAG;EACjBC,aAAa,EAAErB,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,2BAA2B,CAAC;EACnEe,QAAQ,EAAEjB,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,4BAA4B;AAChE,CAAU;AAEV,MAAMoB,YAAY,GAAG;EACnBN,UAAU,EAAEhB,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,iCAAiC,CAAC;EACtEe,QAAQ,EAAEjB,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,8BAA8B;AAClE,CAAU;AAEH,SAASqB,6BAA6BA,CAAC;EAC5CC,QAAQ;EACRC,QAAQ;EACRC;AAKF,CAAC,EAAyB;EACxB,MAAM;IAAEC,IAAI;IAAEC,SAAS;IAAEC;EAAK,CAAC,GAAGH,OAAO;EAEzC,MAAMI,OAAO,GAAGH,IAAI,CAACI,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;EAC7D,IAAIC,SAA6B;EAEjC,IAAIL,IAAI,CAACM,UAAU,CAAC,GAAG,CAAC,IAAIN,IAAI,CAACO,QAAQ,CAAC,GAAG,CAAC,EAAE;IAC9CF,SAAS,GAAGL,IAAI,CACbQ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACZJ,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAC1BK,WAAW,CAAC,CAAC;EAClB;;EAEA;EACA,MAAMC,IAAI,GAAG,GAAGL,SAAS,GAAG,GAAGA,SAAS,GAAG,GAAG,EAAE,GAAGF,OAAO,CACvDC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CACzBK,WAAW,CAAC,CAAC,EAAE;EAElB,OAAO;IACLZ,QAAQ;IACRM,OAAO,EAAE;MACPH,IAAI;MACJW,WAAW,EAAEZ,OAAO,CAACY,WAAW;MAChCC,IAAI,EACF,QAAQ,CAACC,IAAI,CAACf,QAAQ,CAAC,IAAI,cAAc,CAACe,IAAI,CAACf,QAAQ,CAAC;MACpD;MACAA,QAAQ;MACR;MACA,GAAGK,OAAO,CAACW,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGZ,OAAO,CACzCC,OAAO,CAAC,gBAAgB,EAAE,CAACY,CAAC,EAAEC,EAAU,KAAKA,EAAE,CAACF,WAAW,CAAC,CAAC,CAAC,CAC9DG,KAAK,CAAC,CAAC,CAAC,EAAE;MACnBC,OAAO,EAAET,IAAI;MACbU,WAAW,EAAEV,IAAI,CAACN,OAAO,CAAC,KAAK,EAAE/B,aAAI,CAACgD,GAAG,CAAC;MAC1CC,WAAW,EAAEZ,IAAI,CAACN,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;MACrCmB,UAAU,EAAEvB,IAAI,CAACI,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;MAC9DoB,MAAM,EAAEvB,SAAS,KAAK,IAAI;MAC1BwB,GAAG,EAAExB,SAAS,KAAK,KAAK;MACxByB,KAAK,EAAEzB,SAAS,KAAK,cAAc;MACnC0B,UAAU,EAAEC,aAAa,CAAC1B,IAAI,CAAC;MAC/B2B,YAAY,EAAEC,eAAe,CAAC5B,IAAI;IACpC,CAAC;IACD6B,MAAM,EAAE;MACNnB,IAAI,EAAEb,OAAO,CAACiC,UAAU;MACxBC,KAAK,EAAElC,OAAO,CAACmC,WAAW;MAC1BC,GAAG,EAAEpC,OAAO,CAACqC;IACf,CAAC;IACDC,IAAI,EAAEtC,OAAO,CAACuC,OAAO;IACrBC,OAAO,EAAExC,OAAO,CAACwC,OAAO;IACxBC,KAAK,EAAEzC,OAAO,CAACyC,KAAK;IACpBC,IAAI,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC;EAC/B,CAAC;AACH;AAEA,SAASb,eAAeA,CAACc,WAAwB,EAAgB;EAC/D,QAAQA,WAAW;IACjB,KAAK,cAAc;MACjB,OAAO,eAAe;IACxB,KAAK,cAAc;MACjB,OAAO,eAAe;IACxB,KAAK,aAAa;IAClB,KAAK,SAAS;IACd,KAAK,YAAY;MACf,OAAO,IAAI;EACf;AACF;AAEA,SAAShB,aAAaA,CAACgB,WAAwB,EAAc;EAC3D,QAAQA,WAAW;IACjB,KAAK,aAAa;MAChB,OAAO,aAAa;IACtB,KAAK,YAAY;MACf,OAAO,YAAY;IACrB,KAAK,cAAc;IACnB,KAAK,cAAc;IACnB,KAAK,SAAS;IACd;MACE,OAAO,IAAI;EACf;AACF;AAEO,eAAeC,cAAcA,CAClC9C,OAAgB,EAChB+C,MAA6B,EAC7BC,MAAc,EACd;EACA,MAAM;IAAEC;EAAM,CAAC,GAAGjD,OAAO;EAEzB,IAAIiD,KAAK,EAAE;IACT,MAAMC,aAAa,CAACH,MAAM,EAAEtE,kBAAkB,EAAEuE,MAAM,CAAC;EACzD,CAAC,MAAM;IACL,MAAME,aAAa,CAACH,MAAM,EAAE1E,YAAY,EAAE2E,MAAM,CAAC;IAEjD,IAAID,MAAM,CAACP,OAAO,IAAI,IAAI,EAAE;MAC1B,MAAMU,aAAa,CAACH,MAAM,EAAErE,oBAAoB,EAAEsE,MAAM,CAAC;MAEzD,IAAID,MAAM,CAAC3C,OAAO,CAACwB,UAAU,KAAK,IAAI,EAAE;QACtC,MAAMsB,aAAa,CAACH,MAAM,EAAElE,kBAAkB,EAAEmE,MAAM,CAAC;MACzD,CAAC,MAAM;QACL,MAAME,aAAa,CAACH,MAAM,EAAEnE,wBAAwB,EAAEoE,MAAM,CAAC;MAC/D;IACF;EACF;EAEA,IAAIhD,OAAO,CAACE,SAAS,KAAK,IAAI,EAAE;IAC9B,MAAMgD,aAAa,CAACH,MAAM,EAAEhE,QAAQ,EAAEiE,MAAM,CAAC;IAE7C,IAAID,MAAM,CAACP,OAAO,IAAI,IAAI,EAAE;MAC1B,IAAIO,MAAM,CAACP,OAAO,KAAK,MAAM,EAAE;QAC7B,MAAMU,aAAa,CAACH,MAAM,EAAEjE,kBAAkB,EAAEkE,MAAM,CAAC;MACzD,CAAC,MAAM;QACL,MAAME,aAAa,CAACH,MAAM,EAAEpE,kBAAkB,EAAEqE,MAAM,CAAC;MACzD;IACF;EACF,CAAC,MAAM;IACL,IAAIhD,OAAO,CAACE,SAAS,KAAK,KAAK,EAAE;MAC/B,IAAI6C,MAAM,CAACP,OAAO,KAAK,MAAM,EAAE;QAC7B,MAAMU,aAAa,CAACH,MAAM,EAAEjE,kBAAkB,EAAEkE,MAAM,CAAC;QAEvD,IAAID,MAAM,CAAC3C,OAAO,CAACqB,MAAM,EAAE;UACzB,MAAMyB,aAAa,CAACH,MAAM,EAAE7D,2BAA2B,EAAE8D,MAAM,CAAC;QAClE;MACF,CAAC,MAAM,IAAID,MAAM,CAACP,OAAO,IAAI,IAAI,EAAE;QACjC,MAAMU,aAAa,CAACH,MAAM,EAAEpE,kBAAkB,EAAEqE,MAAM,CAAC;QAEvD,IAAID,MAAM,CAAC3C,OAAO,CAACqB,MAAM,EAAE;UACzB,MAAMyB,aAAa,CAACH,MAAM,EAAE7D,2BAA2B,EAAE8D,MAAM,CAAC;QAClE;MACF;MAEA,MAAME,aAAa,CAACH,MAAM,EAAE1D,YAAY,CAAC,YAAY,CAAC,EAAE2D,MAAM,CAAC;MAC/D,MAAME,aAAa,CAACH,MAAM,EAAE3D,SAAS,EAAE4D,MAAM,CAAC;MAE9C,IAAID,MAAM,CAACP,OAAO,KAAK,MAAM,IAAIO,MAAM,CAACN,KAAK,CAACjC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC9D,MAAM0C,aAAa,CAACH,MAAM,EAAEhE,QAAQ,EAAEiE,MAAM,CAAC;MAC/C;MAEA;IACF;IAEA,MAAME,aAAa,CAACH,MAAM,EAAE9D,mBAAmB,EAAE+D,MAAM,CAAC;IAExD,IAAID,MAAM,CAACP,OAAO,KAAK,MAAM,EAAE;MAC7B,MAAMU,aAAa,CAACH,MAAM,EAAEjE,kBAAkB,EAAEkE,MAAM,CAAC;MAEvD,IAAID,MAAM,CAAC3C,OAAO,CAACqB,MAAM,EAAE;QACzB,MAAMyB,aAAa,CAACH,MAAM,EAAE7D,2BAA2B,EAAE8D,MAAM,CAAC;MAClE;IACF,CAAC,MAAM,IAAID,MAAM,CAACP,OAAO,IAAI,IAAI,EAAE;MACjC,MAAMU,aAAa,CAACH,MAAM,EAAEpE,kBAAkB,EAAEqE,MAAM,CAAC;MAEvD,IAAID,MAAM,CAAC3C,OAAO,CAACqB,MAAM,EAAE;QACzB,MAAMyB,aAAa,CAACH,MAAM,EAAE7D,2BAA2B,EAAE8D,MAAM,CAAC;MAClE;IACF;IAEA,IAAID,MAAM,CAAC3C,OAAO,CAAC0B,YAAY,KAAK,eAAe,EAAE;MACnD,MAAMoB,aAAa,CAACH,MAAM,EAAE5D,kBAAkB,EAAE6D,MAAM,CAAC;MACvD,MAAME,aAAa,CAACH,MAAM,EAAE1D,YAAY,CAAC,cAAc,CAAC,EAAE2D,MAAM,CAAC;MAEjE,IAAID,MAAM,CAACP,OAAO,KAAK,MAAM,IAAIO,MAAM,CAACN,KAAK,CAACjC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC9D,MAAM0C,aAAa,CAACH,MAAM,EAAEhE,QAAQ,EAAEiE,MAAM,CAAC;MAC/C;MAEA;IACF;IAEA,IAAID,MAAM,CAAC3C,OAAO,CAACwB,UAAU,KAAK,YAAY,EAAE;MAC9C,MAAMsB,aAAa,CAACH,MAAM,EAAE5D,kBAAkB,EAAE6D,MAAM,CAAC;MACvD,MAAME,aAAa,CAACH,MAAM,EAAE1D,YAAY,CAAC,YAAY,CAAC,EAAE2D,MAAM,CAAC;MAE/D,IAAID,MAAM,CAACP,OAAO,KAAK,MAAM,IAAIO,MAAM,CAACN,KAAK,CAACjC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC9D,MAAM0C,aAAa,CAACH,MAAM,EAAE/D,aAAa,EAAEgE,MAAM,CAAC;MACpD;MAEA;IACF;IAEA,IAAID,MAAM,CAAC3C,OAAO,CAAC0B,YAAY,KAAK,IAAI,EAAE;MACxC,MAAMoB,aAAa,CAACH,MAAM,EAAE1D,YAAY,CAAC,YAAY,CAAC,EAAE2D,MAAM,CAAC;IACjE,CAAC,MAAM;MACL,MAAME,aAAa,CAACH,MAAM,EAAE1D,YAAY,CAAC,UAAU,CAAC,EAAE2D,MAAM,CAAC;IAC/D;IAEA,IAAID,MAAM,CAAC3C,OAAO,CAAC0B,YAAY,KAAK,IAAI,EAAE;MACxC,MAAMoB,aAAa,CAACH,MAAM,EAAErD,UAAU,CAAC,eAAe,CAAC,EAAEsD,MAAM,CAAC;IAClE,CAAC,MAAM;MACL,MAAME,aAAa,CAACH,MAAM,EAAErD,UAAU,CAAC,UAAU,CAAC,EAAEsD,MAAM,CAAC;IAC7D;IAEA,MAAMG,YAAY,GAAG,GACnBJ,MAAM,CAAC3C,OAAO,CAAC0B,YAAY,KAAK,IAAI,GAAG,QAAQ,GAAG,MAAM,MAC3C;IAEf,MAAMoB,aAAa,CAACH,MAAM,EAAEnD,YAAY,CAACuD,YAAY,CAAC,EAAEH,MAAM,CAAC;IAE/D,IAAID,MAAM,CAACP,OAAO,KAAK,MAAM,IAAIO,MAAM,CAACN,KAAK,CAACjC,QAAQ,CAAC,MAAM,CAAC,EAAE;MAC9D,IAAIuC,MAAM,CAAC3C,OAAO,CAACwB,UAAU,KAAK,IAAI,EAAE;QACtC,MAAMsB,aAAa,CAACH,MAAM,EAAE/D,aAAa,EAAEgE,MAAM,CAAC;MACpD,CAAC,MAAM;QACL,MAAME,aAAa,CAACH,MAAM,EAAEhE,QAAQ,EAAEiE,MAAM,CAAC;MAC/C;IACF;EACF;AACF;;AAEA;AACA;AACA;AACO,eAAeE,aAAaA,CACjCH,MAA6B,EAC7BK,MAAc,EACdC,WAAmB,EACnB;EACA,MAAMC,gBAAE,CAACC,MAAM,CAACF,WAAW,CAAC;EAE5B,MAAMG,KAAK,GAAG,MAAMF,gBAAE,CAACG,OAAO,CAACL,MAAM,CAAC;EAEtC,KAAK,MAAMM,CAAC,IAAIF,KAAK,EAAE;IACrB,IAAIE,CAAC,CAACnD,UAAU,CAAC,GAAG,CAAC,EAAE;MACrB;IACF;IAEA,IAAIM,IAAI;IAER,IAAI;MACFA,IAAI,GAAG8C,YAAG,CAACC,MAAM,CAACF,CAAC,CAACrD,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE0C,MAAM,EAAE;QAC9Cc,aAAa,EAAE,GAAG;QAClBC,cAAc,EAAE;MAClB,CAAC,CAAC;IACJ,CAAC,CAAC,OAAO7F,CAAC,EAAE;MACV,MAAM,IAAI8F,KAAK,CAAC,wCAAwCL,CAAC,EAAE,EAAE;QAC3DM,KAAK,EAAE/F;MACT,CAAC,CAAC;IACJ;IAEA,MAAMgG,MAAM,GAAG3F,aAAI,CAAC4F,IAAI,CAACb,WAAW,EAAExC,IAAI,CAAC;IAE3C,MAAMsD,IAAI,GAAG7F,aAAI,CAAC4F,IAAI,CAACd,MAAM,EAAEM,CAAC,CAAC;IACjC,MAAMU,KAAK,GAAG,MAAMd,gBAAE,CAACe,IAAI,CAACF,IAAI,CAAC;IAEjC,IAAIC,KAAK,CAACE,WAAW,CAAC,CAAC,EAAE;MACvB,MAAMpB,aAAa,CAACH,MAAM,EAAEoB,IAAI,EAAEF,MAAM,CAAC;IAC3C,CAAC,MAAM,IAAI,CAAC7F,QAAQ,CAACmG,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAAC1D,IAAI,CAACqD,IAAI,CAAC,CAAC,EAAE;MAC9C,MAAMM,OAAO,GAAG,MAAMnB,gBAAE,CAACoB,QAAQ,CAACP,IAAI,EAAE,MAAM,CAAC;MAE/C,IAAIQ,MAAM;MAEV,IAAI;QACFA,MAAM,GAAGhB,YAAG,CACTC,MAAM,CAACa,OAAO,EAAE1B,MAAM;QACvB;QAAA,CACC1C,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;MAC3B,CAAC,CAAC,OAAOpC,CAAC,EAAE;QACV,MAAM,IAAI8F,KAAK,CAAC,2CAA2CL,CAAC,EAAE,EAAE;UAC9DM,KAAK,EAAE/F;QACT,CAAC,CAAC;MACJ;MAEA,MAAMqF,gBAAE,CAACsB,SAAS,CAACX,MAAM,EAAEU,MAAM,CAAC;IACpC,CAAC,MAAM;MACL,MAAMrB,gBAAE,CAACuB,QAAQ,CAACV,IAAI,EAAEF,MAAM,CAAC;IACjC;EACF;AACF","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-react-native-library",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.61.0",
|
|
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": "^11.0.4",
|
|
64
64
|
"@types/validate-npm-package-name": "^4.0.2"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "affd1b7af7755a350364a44ba5e26ca2164c2099"
|
|
67
67
|
}
|
|
@@ -79,6 +79,11 @@ jobs:
|
|
|
79
79
|
- name: Generate nitrogen code
|
|
80
80
|
run: yarn nitrogen
|
|
81
81
|
<% } -%>
|
|
82
|
+
<% if (project.cpp) { -%>
|
|
83
|
+
|
|
84
|
+
- name: Generate codegen native code
|
|
85
|
+
run: yarn bob build --target codegen
|
|
86
|
+
<% } -%>
|
|
82
87
|
|
|
83
88
|
- name: Cache turborepo for Android
|
|
84
89
|
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
|
@@ -152,6 +157,11 @@ jobs:
|
|
|
152
157
|
- name: Generate nitrogen code
|
|
153
158
|
run: yarn nitrogen
|
|
154
159
|
<% } -%>
|
|
160
|
+
<% if (project.cpp) { -%>
|
|
161
|
+
|
|
162
|
+
- name: Generate codegen native code
|
|
163
|
+
run: yarn bob build --target codegen
|
|
164
|
+
<% } -%>
|
|
155
165
|
|
|
156
166
|
- name: Cache turborepo for iOS
|
|
157
167
|
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
package/templates/common/$.nvmrc
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
v24.13.0
|
|
@@ -69,14 +69,17 @@
|
|
|
69
69
|
"registry": "https://registry.npmjs.org/"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
|
-
|
|
72
|
+
<% if (project.cpp) { -%>
|
|
73
|
+
"@react-native-community/cli": "^20.1.2",
|
|
74
|
+
<% } -%>
|
|
75
|
+
"@react-native/babel-preset": "0.85.0",
|
|
73
76
|
"@types/react": "^19.2.0",
|
|
74
77
|
"del-cli": "^7.0.0",
|
|
75
78
|
<% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
|
|
76
79
|
"nitrogen": "^<%- versions.nitro %>",
|
|
77
80
|
<% } -%>
|
|
78
|
-
"react": "19.2.
|
|
79
|
-
"react-native": "0.
|
|
81
|
+
"react": "19.2.3",
|
|
82
|
+
"react-native": "0.85.0",
|
|
80
83
|
"react-native-builder-bob": "^<%- versions.bob %>",
|
|
81
84
|
<% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
|
|
82
85
|
"react-native-nitro-modules": "^<%- versions.nitro %>",
|
|
@@ -122,7 +125,9 @@
|
|
|
122
125
|
{
|
|
123
126
|
"project": "tsconfig.build.json"
|
|
124
127
|
}
|
|
125
|
-
]
|
|
128
|
+
]<% if (project.cpp) { -%>,
|
|
129
|
+
"codegen"
|
|
130
|
+
<% } -%>
|
|
126
131
|
]
|
|
127
132
|
<% if (project.moduleConfig === 'turbo-modules' || project.viewConfig === 'fabric-view') { -%>
|
|
128
133
|
},
|
|
@@ -130,6 +135,12 @@
|
|
|
130
135
|
"name": "<%- project.name -%><%- project.viewConfig !== null ? 'View': '' -%>Spec",
|
|
131
136
|
"type": "<%- project.viewConfig !== null ? 'all': 'modules' -%>",
|
|
132
137
|
"jsSrcsDir": "src",
|
|
138
|
+
<% if (project.cpp) { -%>
|
|
139
|
+
"outputDir": {
|
|
140
|
+
"ios": "ios/generated",
|
|
141
|
+
"android": "android/generated"
|
|
142
|
+
},
|
|
143
|
+
<% } -%>
|
|
133
144
|
"android": {
|
|
134
145
|
"javaPackageName": "com.<%- project.package %>"
|
|
135
146
|
<% if (project.viewConfig === 'fabric-view') { -%>
|
|
@@ -142,6 +153,9 @@
|
|
|
142
153
|
}
|
|
143
154
|
<% } -%>
|
|
144
155
|
}
|
|
156
|
+
<% if (project.cpp) { -%>,
|
|
157
|
+
"includesGeneratedCode": true
|
|
158
|
+
<% } -%>
|
|
145
159
|
<% } -%>
|
|
146
160
|
}
|
|
147
161
|
}
|
|
@@ -37,6 +37,21 @@ To invoke **Nitrogen**, use the following command:
|
|
|
37
37
|
yarn nitrogen
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
+
<% } -%>
|
|
41
|
+
<% if (project.cpp) { -%>
|
|
42
|
+
You need to run React Native Codegen to generate the native scaffolding for the C++ Turbo Module. The example app will not build without these generated files.
|
|
43
|
+
|
|
44
|
+
Run **Codegen** in following cases:
|
|
45
|
+
|
|
46
|
+
- When you make changes to `src/Native<%- project.name -%>.ts`.
|
|
47
|
+
- When running the project for the first time (since the generated files are not committed to the repository).
|
|
48
|
+
|
|
49
|
+
To invoke **Codegen**, use the following command:
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
yarn bob build --target codegen
|
|
53
|
+
```
|
|
54
|
+
|
|
40
55
|
<% } -%>
|
|
41
56
|
The [example app](/example/) demonstrates usage of the library. You need to run it to test any changes you make.
|
|
42
57
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.4.1)
|
|
2
|
+
project(<%- project.name -%>)
|
|
3
|
+
|
|
4
|
+
set (CMAKE_VERBOSE_MAKEFILE ON)
|
|
5
|
+
|
|
6
|
+
add_library(
|
|
7
|
+
<%- project.identifier -%>
|
|
8
|
+
STATIC
|
|
9
|
+
../cpp/<%- project.name -%>Impl.cpp
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
set_target_properties(
|
|
13
|
+
<%- project.identifier -%> PROPERTIES
|
|
14
|
+
CXX_STANDARD 20
|
|
15
|
+
CXX_STANDARD_REQUIRED ON
|
|
16
|
+
CXX_EXTENSIONS OFF
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
target_include_directories(
|
|
20
|
+
<%- project.identifier -%>
|
|
21
|
+
PUBLIC
|
|
22
|
+
../cpp
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
target_link_libraries(
|
|
26
|
+
<%- project.identifier -%>
|
|
27
|
+
jsi
|
|
28
|
+
reactnative
|
|
29
|
+
react_codegen_<%- project.name -%>Spec
|
|
30
|
+
)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#include "<%- project.name -%>Impl.h"
|
|
2
|
+
|
|
3
|
+
namespace facebook::react {
|
|
4
|
+
|
|
5
|
+
<%- project.name -%>Impl::<%- project.name -%>Impl(
|
|
6
|
+
std::shared_ptr<CallInvoker> jsInvoker
|
|
7
|
+
)
|
|
8
|
+
: Native<%- project.name -%>CxxSpec(std::move(jsInvoker)) {}
|
|
9
|
+
|
|
10
|
+
double <%- project.name -%>Impl::multiply(
|
|
11
|
+
jsi::Runtime& rt,
|
|
12
|
+
double a,
|
|
13
|
+
double b
|
|
14
|
+
) {
|
|
15
|
+
return a * b;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <<%- project.name -%>SpecJSI.h>
|
|
4
|
+
|
|
5
|
+
#include <memory>
|
|
6
|
+
|
|
7
|
+
namespace facebook::react {
|
|
8
|
+
|
|
9
|
+
class <%- project.name -%>Impl
|
|
10
|
+
: public Native<%- project.name -%>CxxSpec<<%- project.name -%>Impl> {
|
|
11
|
+
public:
|
|
12
|
+
<%- project.name -%>Impl(std::shared_ptr<CallInvoker> jsInvoker);
|
|
13
|
+
|
|
14
|
+
double multiply(jsi::Runtime& rt, double a, double b);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
#import "<%- project.name -%>Impl.h"
|
|
3
|
+
#import <ReactCommon/CxxTurboModuleUtils.h>
|
|
4
|
+
|
|
5
|
+
@interface <%- project.name -%>OnLoad : NSObject
|
|
6
|
+
@end
|
|
7
|
+
|
|
8
|
+
@implementation <%- project.name -%>OnLoad
|
|
9
|
+
|
|
10
|
+
using namespace facebook::react;
|
|
11
|
+
|
|
12
|
+
+ (void)load
|
|
13
|
+
{
|
|
14
|
+
registerCxxModuleToGlobalModuleMap(
|
|
15
|
+
std::string(<%- project.name -%>Impl::kModuleName),
|
|
16
|
+
[](std::shared_ptr<CallInvoker> jsInvoker) {
|
|
17
|
+
return std::make_shared<<%- project.name -%>Impl>(jsInvoker);
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @type {import('@react-native-community/cli-types').UserDependencyConfig}
|
|
3
|
+
*/
|
|
4
|
+
module.exports = {
|
|
5
|
+
dependency: {
|
|
6
|
+
platforms: {
|
|
7
|
+
android: {
|
|
8
|
+
cmakeListsPath: 'generated/jni/CMakeLists.txt',
|
|
9
|
+
cxxModuleCMakeListsModuleName: '<%- project.identifier -%>',
|
|
10
|
+
cxxModuleCMakeListsPath: 'CMakeLists.txt',
|
|
11
|
+
cxxModuleHeaderName: '<%- project.name -%>Impl',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
|
|
3
|
+
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
|
4
|
+
|
|
5
|
+
Pod::Spec.new do |s|
|
|
6
|
+
s.name = "<%- project.name -%>"
|
|
7
|
+
s.version = package["version"]
|
|
8
|
+
s.summary = package["description"]
|
|
9
|
+
s.homepage = package["homepage"]
|
|
10
|
+
s.license = package["license"]
|
|
11
|
+
s.authors = package["author"]
|
|
12
|
+
|
|
13
|
+
s.platforms = { :ios => min_ios_version_supported }
|
|
14
|
+
s.source = { :git => "<%- repo -%>.git", :tag => "#{s.version}" }
|
|
15
|
+
|
|
16
|
+
s.source_files = "ios/**/*.{h,m,mm}", "cpp/**/*.{hpp,cpp,c,h}", "ios/generated/*.{h,cpp,mm}"
|
|
17
|
+
s.private_header_files = "ios/**/*.h"
|
|
18
|
+
|
|
19
|
+
install_modules_dependencies(s)
|
|
20
|
+
end
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"@eslint/compat": "^2.0.3",
|
|
14
14
|
"@eslint/eslintrc": "^3.3.5",
|
|
15
15
|
"@eslint/js": "^10.0.1",
|
|
16
|
-
"@react-native/eslint-config": "0.
|
|
16
|
+
"@react-native/eslint-config": "0.85.0",
|
|
17
17
|
"eslint": "^9.39.4",
|
|
18
18
|
"eslint-config-prettier": "^10.1.8",
|
|
19
19
|
"eslint-plugin-ft-flow": "^3.0.11",
|
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
"test": "jest"
|
|
4
4
|
},
|
|
5
5
|
"jest": {
|
|
6
|
-
"preset": "react-native",
|
|
6
|
+
"preset": "@react-native/jest-preset",
|
|
7
7
|
"modulePathIgnorePatterns": [
|
|
8
8
|
"<rootDir>/example/node_modules",
|
|
9
9
|
"<rootDir>/lib/"
|
|
10
10
|
]
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
|
+
"@react-native/jest-preset": "0.85.0",
|
|
13
14
|
"@jest/globals": "^30.0.0",
|
|
14
15
|
"jest": "^30.3.0"
|
|
15
16
|
}
|