create-react-native-library 0.47.1 → 0.48.1
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/exampleApp/dependencies.js +2 -2
- package/lib/exampleApp/dependencies.js.map +1 -1
- package/lib/exampleApp/generateExampleApp.js +27 -21
- package/lib/exampleApp/generateExampleApp.js.map +1 -1
- package/lib/index.js +14 -9
- package/lib/index.js.map +1 -1
- package/lib/input.js +8 -4
- package/lib/input.js.map +1 -1
- package/lib/template.js +36 -11
- package/lib/template.js.map +1 -1
- package/package.json +2 -2
- package/templates/common/$.github/workflows/ci.yml +10 -0
- package/templates/common/$.gitignore +3 -0
- package/templates/common/$package.json +32 -6
- package/templates/common/CONTRIBUTING.md +16 -0
- package/templates/common/README.md +10 -2
- package/templates/common-local/$package.json +2 -2
- package/templates/native-common/android/build.gradle +52 -6
- package/templates/native-common/{{%- project.identifier %}.podspec → {%- project.name %}.podspec } +7 -2
- package/templates/nitro-module/android/CMakeLists.txt +24 -0
- package/templates/nitro-module/android/src/main/cpp/cpp-adapter.cpp +6 -0
- package/templates/nitro-module/android/src/main/java/com/margelo/nitro/{%- project.package_dir %}/{%- project.name %}.kt +8 -0
- package/templates/nitro-module/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.kt +22 -0
- package/templates/nitro-module/ios/{%- project.name %}.swift +5 -0
- package/templates/nitro-module/nitro.json +17 -0
- package/templates/nitro-module/src/index.tsx +9 -0
- package/templates/nitro-module/src/{%- project.name %}.nitro.ts +6 -0
|
@@ -8,7 +8,7 @@ var _nodeAssert = _interopRequireDefault(require("node:assert"));
|
|
|
8
8
|
var _path = _interopRequireDefault(require("path"));
|
|
9
9
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
10
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
-
async function getDependencyVersionsFromExampleApp(folder,
|
|
11
|
+
async function getDependencyVersionsFromExampleApp(folder, config) {
|
|
12
12
|
const examplePackageJson = await _fsExtra.default.readJSON(_path.default.join(folder, 'example', 'package.json'));
|
|
13
13
|
const react = examplePackageJson.dependencies?.react;
|
|
14
14
|
(0, _nodeAssert.default)(react !== undefined, "The generated example app doesn't have React installed.");
|
|
@@ -18,7 +18,7 @@ async function getDependencyVersionsFromExampleApp(folder, exampleAppType) {
|
|
|
18
18
|
react,
|
|
19
19
|
'react-native': reactNative
|
|
20
20
|
};
|
|
21
|
-
if (
|
|
21
|
+
if (config.example === 'vanilla' && (config.project.moduleConfig === 'turbo-modules' || config.project.viewConfig === 'fabric-view')) {
|
|
22
22
|
// React Native doesn't provide the community CLI as a dependency.
|
|
23
23
|
// We have to get read the version from the example app and put to the root package json
|
|
24
24
|
const exampleCommunityCLIVersion = examplePackageJson.devDependencies['@react-native-community/cli'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","names":["_nodeAssert","_interopRequireDefault","require","_path","_fsExtra","e","__esModule","default","getDependencyVersionsFromExampleApp","folder","
|
|
1
|
+
{"version":3,"file":"dependencies.js","names":["_nodeAssert","_interopRequireDefault","require","_path","_fsExtra","e","__esModule","default","getDependencyVersionsFromExampleApp","folder","config","examplePackageJson","fs","readJSON","path","join","react","dependencies","assert","undefined","reactNative","devDependencies","example","project","moduleConfig","viewConfig","exampleCommunityCLIVersion"],"sources":["../../src/exampleApp/dependencies.ts"],"sourcesContent":["import assert from 'node:assert';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport type { TemplateConfiguration } from '../template';\n\nexport async function getDependencyVersionsFromExampleApp(\n folder: string,\n config: TemplateConfiguration\n) {\n const examplePackageJson = await fs.readJSON(\n path.join(folder, 'example', 'package.json')\n );\n\n const react: string = examplePackageJson.dependencies?.react;\n assert(\n react !== undefined,\n \"The generated example app doesn't have React installed.\"\n );\n const reactNative: string = examplePackageJson.dependencies?.['react-native'];\n assert(\n reactNative !== undefined,\n \"The generated example app doesn't have React Native installed.\"\n );\n\n const devDependencies: Record<string, string> = {\n react,\n 'react-native': reactNative,\n };\n\n if (\n config.example === 'vanilla' &&\n (config.project.moduleConfig === 'turbo-modules' ||\n config.project.viewConfig === 'fabric-view')\n ) {\n // React Native doesn't provide the community CLI as a dependency.\n // We have to get read the version from the example app and put to the root package json\n const exampleCommunityCLIVersion =\n examplePackageJson.devDependencies['@react-native-community/cli'];\n assert(\n exampleCommunityCLIVersion !== undefined,\n \"The generated example app doesn't have community CLI installed\"\n );\n\n devDependencies['@react-native-community/cli'] = exampleCommunityCLIVersion;\n }\n\n return {\n devDependencies,\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,QAAA,GAAAH,sBAAA,CAAAC,OAAA;AAA0B,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAGnB,eAAeG,mCAAmCA,CACvDC,MAAc,EACdC,MAA6B,EAC7B;EACA,MAAMC,kBAAkB,GAAG,MAAMC,gBAAE,CAACC,QAAQ,CAC1CC,aAAI,CAACC,IAAI,CAACN,MAAM,EAAE,SAAS,EAAE,cAAc,CAC7C,CAAC;EAED,MAAMO,KAAa,GAAGL,kBAAkB,CAACM,YAAY,EAAED,KAAK;EAC5D,IAAAE,mBAAM,EACJF,KAAK,KAAKG,SAAS,EACnB,yDACF,CAAC;EACD,MAAMC,WAAmB,GAAGT,kBAAkB,CAACM,YAAY,GAAG,cAAc,CAAC;EAC7E,IAAAC,mBAAM,EACJE,WAAW,KAAKD,SAAS,EACzB,gEACF,CAAC;EAED,MAAME,eAAuC,GAAG;IAC9CL,KAAK;IACL,cAAc,EAAEI;EAClB,CAAC;EAED,IACEV,MAAM,CAACY,OAAO,KAAK,SAAS,KAC3BZ,MAAM,CAACa,OAAO,CAACC,YAAY,KAAK,eAAe,IAC9Cd,MAAM,CAACa,OAAO,CAACE,UAAU,KAAK,aAAa,CAAC,EAC9C;IACA;IACA;IACA,MAAMC,0BAA0B,GAC9Bf,kBAAkB,CAACU,eAAe,CAAC,6BAA6B,CAAC;IACnE,IAAAH,mBAAM,EACJQ,0BAA0B,KAAKP,SAAS,EACxC,gEACF,CAAC;IAEDE,eAAe,CAAC,6BAA6B,CAAC,GAAGK,0BAA0B;EAC7E;EAEA,OAAO;IACLL;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -18,25 +18,22 @@ const PACKAGES_TO_ADD_WEB = {
|
|
|
18
18
|
'react-native-web': '~0.18.10'
|
|
19
19
|
};
|
|
20
20
|
async function generateExampleApp({
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
arch,
|
|
24
|
-
project,
|
|
25
|
-
bobVersion,
|
|
21
|
+
config,
|
|
22
|
+
destination,
|
|
26
23
|
reactNativeVersion = 'latest'
|
|
27
24
|
}) {
|
|
28
|
-
const directory = _path.default.join(
|
|
25
|
+
const directory = _path.default.join(destination, 'example');
|
|
29
26
|
|
|
30
27
|
// `npx --package react-native-test-app@latest init --name ${projectName}Example --destination example --version ${reactNativeVersion}`
|
|
31
|
-
const testAppArgs = ['--package', `react-native-test-app@latest`, 'init', '--name', `${project.name}Example`, `--destination`, directory, ...(reactNativeVersion !== 'latest' ? ['--version', reactNativeVersion] : []), '--platform', 'ios', '--platform', 'android'];
|
|
28
|
+
const testAppArgs = ['--package', `react-native-test-app@latest`, 'init', '--name', `${config.project.name}Example`, `--destination`, directory, ...(reactNativeVersion !== 'latest' ? ['--version', reactNativeVersion] : []), '--platform', 'ios', '--platform', 'android'];
|
|
32
29
|
|
|
33
30
|
// `npx @react-native-community/cli init <projectName> --directory example --skip-install`
|
|
34
|
-
const vanillaArgs = [`@react-native-community/cli`, 'init', `${project.name}Example`, '--package-name', `${project.package}.example`, '--directory', directory, '--version', reactNativeVersion, '--skip-install', '--pm', 'npm'];
|
|
31
|
+
const vanillaArgs = [`@react-native-community/cli`, 'init', `${config.project.name}Example`, '--package-name', `${config.project.package}.example`, '--directory', directory, '--version', reactNativeVersion, '--skip-install', '--pm', 'npm'];
|
|
35
32
|
|
|
36
33
|
// `npx create-expo-app example --no-install --template blank`
|
|
37
34
|
const expoArgs = ['create-expo-app@latest', directory, '--no-install', '--template', 'blank'];
|
|
38
35
|
let args = [];
|
|
39
|
-
switch (
|
|
36
|
+
switch (config.example) {
|
|
40
37
|
case 'vanilla':
|
|
41
38
|
args = vanillaArgs;
|
|
42
39
|
break;
|
|
@@ -61,7 +58,7 @@ async function generateExampleApp({
|
|
|
61
58
|
|
|
62
59
|
// Patch the example app's package.json
|
|
63
60
|
const pkg = await _fsExtra.default.readJSON(_path.default.join(directory, 'package.json'));
|
|
64
|
-
pkg.name = `${project.slug}-example`;
|
|
61
|
+
pkg.name = `${config.project.slug}-example`;
|
|
65
62
|
|
|
66
63
|
// Remove Jest config for now
|
|
67
64
|
delete pkg.jest;
|
|
@@ -74,11 +71,11 @@ async function generateExampleApp({
|
|
|
74
71
|
delete scripts.lint;
|
|
75
72
|
const SCRIPTS_TO_ADD = {
|
|
76
73
|
'build:android': 'react-native build-android --extra-params "--no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a"',
|
|
77
|
-
'build:ios': `react-native build-ios --scheme ${project.name}Example --mode Debug --extra-params "-sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO"`
|
|
74
|
+
'build:ios': `react-native build-ios --scheme ${config.project.name}Example --mode Debug --extra-params "-sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO"`
|
|
78
75
|
};
|
|
79
|
-
if (
|
|
76
|
+
if (config.example === 'vanilla') {
|
|
80
77
|
Object.assign(scripts, SCRIPTS_TO_ADD);
|
|
81
|
-
} else if (
|
|
78
|
+
} else if (config.example === 'test-app') {
|
|
82
79
|
// `react-native-test-app` doesn't bundle application by default in 'Release' mode and also `bundle` command doesn't create a directory.
|
|
83
80
|
// `mkdist` script should be removed after stable React Native major contains this fix: https://github.com/facebook/react-native/pull/45182.
|
|
84
81
|
|
|
@@ -90,9 +87,9 @@ async function generateExampleApp({
|
|
|
90
87
|
});
|
|
91
88
|
const app = await _fsExtra.default.readJSON(_path.default.join(directory, 'app.json'));
|
|
92
89
|
app.android = app.android || {};
|
|
93
|
-
app.android.package = `${project.package}.example`;
|
|
90
|
+
app.android.package = `${config.project.package}.example`;
|
|
94
91
|
app.ios = app.ios || {};
|
|
95
|
-
app.ios.bundleIdentifier = `${project.package}.example`;
|
|
92
|
+
app.ios.bundleIdentifier = `${config.project.package}.example`;
|
|
96
93
|
await _fsExtra.default.writeJSON(_path.default.join(directory, 'app.json'), app, {
|
|
97
94
|
spaces: 2
|
|
98
95
|
});
|
|
@@ -102,10 +99,16 @@ async function generateExampleApp({
|
|
|
102
99
|
delete devDependencies[name];
|
|
103
100
|
});
|
|
104
101
|
const PACKAGES_TO_ADD_DEV = {
|
|
105
|
-
'react-native-builder-bob': `^${
|
|
102
|
+
'react-native-builder-bob': `^${config.versions.bob}`
|
|
106
103
|
};
|
|
104
|
+
if (config.project.moduleConfig === 'nitro-modules') {
|
|
105
|
+
const packagesToAddNitro = {
|
|
106
|
+
'react-native-nitro-modules': `^${config.versions.nitroModules}`
|
|
107
|
+
};
|
|
108
|
+
Object.assign(dependencies, packagesToAddNitro);
|
|
109
|
+
}
|
|
107
110
|
Object.assign(devDependencies, PACKAGES_TO_ADD_DEV);
|
|
108
|
-
if (
|
|
111
|
+
if (config.example === 'expo') {
|
|
109
112
|
const sdkVersion = dependencies.expo.split('.')[0].replace(/[^\d]/, '');
|
|
110
113
|
let bundledNativeModules;
|
|
111
114
|
try {
|
|
@@ -131,13 +134,16 @@ async function generateExampleApp({
|
|
|
131
134
|
scripts.web = 'expo start --web';
|
|
132
135
|
const app = await _fsExtra.default.readJSON(_path.default.join(directory, 'app.json'));
|
|
133
136
|
app.expo.android = app.expo.android || {};
|
|
134
|
-
app.expo.android.package = `${project.package}.example`;
|
|
137
|
+
app.expo.android.package = `${config.project.package}.example`;
|
|
135
138
|
app.expo.ios = app.expo.ios || {};
|
|
136
|
-
app.expo.ios.bundleIdentifier = `${project.package}.example`;
|
|
139
|
+
app.expo.ios.bundleIdentifier = `${config.project.package}.example`;
|
|
137
140
|
await _fsExtra.default.writeJSON(_path.default.join(directory, 'app.json'), app, {
|
|
138
141
|
spaces: 2
|
|
139
142
|
});
|
|
140
143
|
}
|
|
144
|
+
|
|
145
|
+
// Sort the deps by name to match behavior of package managers
|
|
146
|
+
// This way the package.json doesn't get updated when installing deps
|
|
141
147
|
for (const field of ['dependencies', 'devDependencies']) {
|
|
142
148
|
if (pkg[field]) {
|
|
143
149
|
pkg[field] = (0, _sortObjectKeys.default)(pkg[field]);
|
|
@@ -146,7 +152,7 @@ async function generateExampleApp({
|
|
|
146
152
|
await _fsExtra.default.writeJSON(_path.default.join(directory, 'package.json'), pkg, {
|
|
147
153
|
spaces: 2
|
|
148
154
|
});
|
|
149
|
-
if (
|
|
155
|
+
if (config.example !== 'expo') {
|
|
150
156
|
let gradleProperties = await _fsExtra.default.readFile(_path.default.join(directory, 'android', 'gradle.properties'), 'utf8');
|
|
151
157
|
|
|
152
158
|
// Disable Jetifier.
|
|
@@ -154,7 +160,7 @@ async function generateExampleApp({
|
|
|
154
160
|
gradleProperties = gradleProperties.replace('android.enableJetifier=true', 'android.enableJetifier=false');
|
|
155
161
|
|
|
156
162
|
// If the library is on new architecture, enable new arch for iOS and Android
|
|
157
|
-
if (arch === 'new') {
|
|
163
|
+
if (config.project.arch === 'new') {
|
|
158
164
|
// iOS
|
|
159
165
|
// Add ENV['RCT_NEW_ARCH_ENABLED'] = 1 on top of example/ios/Podfile
|
|
160
166
|
const podfile = await _fsExtra.default.readFile(_path.default.join(directory, 'ios', 'Podfile'), 'utf8');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateExampleApp.js","names":["_fsExtra","_interopRequireDefault","require","_path","_https","_spawn","_sortObjectKeys","e","__esModule","default","FILES_TO_DELETE","PACKAGES_TO_REMOVE","PACKAGES_TO_ADD_WEB","generateExampleApp","type","dest","arch","project","bobVersion","reactNativeVersion","directory","path","join","testAppArgs","name","vanillaArgs","package","expoArgs","args","spawn","env","process","npm_config_yes","file","fs","remove","pkg","readJSON","slug","jest","scripts","dependencies","devDependencies","test","lint","SCRIPTS_TO_ADD","Object","assign","androidBuild","iosBuild","app","android","ios","bundleIdentifier","writeJSON","spaces","forEach","PACKAGES_TO_ADD_DEV","sdkVersion","expo","split","replace","bundledNativeModules","Promise","resolve","reject","https","get","res","data","on","chunk","JSON","parse","entries","version","web","field","sortObjectKeys","gradleProperties","readFile","podfile","writeFile","includes"],"sources":["../../src/exampleApp/generateExampleApp.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\nimport https from 'https';\nimport { spawn } from '../utils/spawn';\nimport sortObjectKeys from '../utils/sortObjectKeys';\nimport type { ExampleApp } from '../input';\n\nconst FILES_TO_DELETE = [\n '__tests__',\n '.buckconfig',\n '.eslintrc.js',\n '.flowconfig',\n '.git',\n '.gitignore',\n '.prettierrc.js',\n 'App.js',\n 'App.tsx',\n 'index.js',\n 'tsconfig.json',\n];\n\nconst PACKAGES_TO_REMOVE = [\n '@react-native/eslint-config',\n '@tsconfig/react-native',\n '@types/jest',\n '@types/react',\n '@types/react-test-renderer',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'babel-jest',\n 'eslint',\n 'jest',\n 'prettier',\n 'react-test-renderer',\n 'typescript',\n];\n\nconst PACKAGES_TO_ADD_WEB = {\n '@expo/metro-runtime': '~3.2.1',\n 'react-dom': '18.2.0',\n 'react-native-web': '~0.18.10',\n};\n\nexport default async function generateExampleApp({\n type,\n dest,\n arch,\n project,\n bobVersion,\n reactNativeVersion = 'latest',\n}: {\n type: ExampleApp;\n dest: string;\n arch: 'new' | 'legacy';\n project: {\n slug: string;\n name: string;\n package: string;\n };\n bobVersion: string;\n reactNativeVersion?: string;\n}) {\n const directory = path.join(dest, 'example');\n\n // `npx --package react-native-test-app@latest init --name ${projectName}Example --destination example --version ${reactNativeVersion}`\n const testAppArgs = [\n '--package',\n `react-native-test-app@latest`,\n 'init',\n '--name',\n `${project.name}Example`,\n `--destination`,\n directory,\n ...(reactNativeVersion !== 'latest'\n ? ['--version', reactNativeVersion]\n : []),\n '--platform',\n 'ios',\n '--platform',\n 'android',\n ];\n\n // `npx @react-native-community/cli init <projectName> --directory example --skip-install`\n const vanillaArgs = [\n `@react-native-community/cli`,\n 'init',\n `${project.name}Example`,\n '--package-name',\n `${project.package}.example`,\n '--directory',\n directory,\n '--version',\n reactNativeVersion,\n '--skip-install',\n '--pm',\n 'npm',\n ];\n\n // `npx create-expo-app example --no-install --template blank`\n const expoArgs = [\n 'create-expo-app@latest',\n directory,\n '--no-install',\n '--template',\n 'blank',\n ];\n\n let args: string[] = [];\n\n switch (type) {\n case 'vanilla':\n args = vanillaArgs;\n break;\n case 'test-app':\n args = testAppArgs;\n break;\n case 'expo':\n args = expoArgs;\n break;\n }\n\n await spawn('npx', args, {\n env: { ...process.env, npm_config_yes: 'true' },\n });\n\n // Remove unnecessary files and folders\n for (const file of FILES_TO_DELETE) {\n await fs.remove(path.join(directory, file));\n }\n\n // Patch the example app's package.json\n const pkg = await fs.readJSON(path.join(directory, 'package.json'));\n\n pkg.name = `${project.slug}-example`;\n\n // Remove Jest config for now\n delete pkg.jest;\n\n const { scripts, dependencies, devDependencies } = pkg;\n\n delete scripts.test;\n delete scripts.lint;\n\n const SCRIPTS_TO_ADD = {\n 'build:android':\n 'react-native build-android --extra-params \"--no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a\"',\n 'build:ios': `react-native build-ios --scheme ${project.name}Example --mode Debug --extra-params \"-sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO\"`,\n };\n\n if (type === 'vanilla') {\n Object.assign(scripts, SCRIPTS_TO_ADD);\n } else if (type === '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 = `${project.package}.example`;\n app.ios = app.ios || {};\n app.ios.bundleIdentifier = `${project.package}.example`;\n\n await fs.writeJSON(path.join(directory, 'app.json'), app, {\n spaces: 2,\n });\n }\n\n PACKAGES_TO_REMOVE.forEach((name) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete devDependencies[name];\n });\n\n const PACKAGES_TO_ADD_DEV = {\n 'react-native-builder-bob': `^${bobVersion}`,\n };\n\n Object.assign(devDependencies, PACKAGES_TO_ADD_DEV);\n\n if (type === 'expo') {\n const sdkVersion = dependencies.expo.split('.')[0].replace(/[^\\d]/, '');\n\n let bundledNativeModules: Record<string, string>;\n\n try {\n bundledNativeModules = await new Promise((resolve, reject) => {\n https\n .get(\n `https://raw.githubusercontent.com/expo/expo/sdk-${sdkVersion}/packages/expo/bundledNativeModules.json`,\n (res) => {\n let data = '';\n\n res.on('data', (chunk) => (data += chunk));\n res.on('end', () => {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n reject(e);\n }\n });\n }\n )\n .on('error', reject);\n });\n } catch (e) {\n bundledNativeModules = {};\n }\n\n Object.entries(PACKAGES_TO_ADD_WEB).forEach(([name, version]) => {\n dependencies[name] = bundledNativeModules[name] || version;\n });\n\n scripts.web = 'expo start --web';\n\n const app = await fs.readJSON(path.join(directory, 'app.json'));\n\n app.expo.android = app.expo.android || {};\n app.expo.android.package = `${project.package}.example`;\n app.expo.ios = app.expo.ios || {};\n app.expo.ios.bundleIdentifier = `${project.package}.example`;\n\n await fs.writeJSON(path.join(directory, 'app.json'), app, {\n spaces: 2,\n });\n }\n\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 (type !== 'expo') {\n let gradleProperties = await fs.readFile(\n path.join(directory, 'android', 'gradle.properties'),\n 'utf8'\n );\n\n // Disable Jetifier.\n // Remove this when the app template is updated.\n gradleProperties = gradleProperties.replace(\n 'android.enableJetifier=true',\n 'android.enableJetifier=false'\n );\n\n // If the library is on new architecture, enable new arch for iOS and Android\n if (arch === 'new') {\n // iOS\n // Add ENV['RCT_NEW_ARCH_ENABLED'] = 1 on top of example/ios/Podfile\n const podfile = await fs.readFile(\n path.join(directory, 'ios', 'Podfile'),\n 'utf8'\n );\n\n await fs.writeFile(\n path.join(directory, 'ios', 'Podfile'),\n \"ENV['RCT_NEW_ARCH_ENABLED'] = '1'\\n\\n\" + podfile\n );\n\n // Android\n // Make sure newArchEnabled=true is present in android/gradle.properties\n if (gradleProperties.split('\\n').includes('#newArchEnabled=true')) {\n gradleProperties = gradleProperties.replace(\n '#newArchEnabled=true',\n 'newArchEnabled=true'\n );\n } else if (\n gradleProperties.split('\\n').includes('newArchEnabled=false')\n ) {\n gradleProperties = gradleProperties.replace(\n 'newArchEnabled=false',\n 'newArchEnabled=true'\n );\n } else {\n gradleProperties += '\\nnewArchEnabled=true';\n }\n }\n\n await fs.writeFile(\n path.join(directory, 'android', 'gradle.properties'),\n gradleProperties\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"generateExampleApp.js","names":["_fsExtra","_interopRequireDefault","require","_path","_https","_spawn","_sortObjectKeys","e","__esModule","default","FILES_TO_DELETE","PACKAGES_TO_REMOVE","PACKAGES_TO_ADD_WEB","generateExampleApp","config","destination","reactNativeVersion","directory","path","join","testAppArgs","project","name","vanillaArgs","package","expoArgs","args","example","spawn","env","process","npm_config_yes","file","fs","remove","pkg","readJSON","slug","jest","scripts","dependencies","devDependencies","test","lint","SCRIPTS_TO_ADD","Object","assign","androidBuild","iosBuild","app","android","ios","bundleIdentifier","writeJSON","spaces","forEach","PACKAGES_TO_ADD_DEV","versions","bob","moduleConfig","packagesToAddNitro","nitroModules","sdkVersion","expo","split","replace","bundledNativeModules","Promise","resolve","reject","https","get","res","data","on","chunk","JSON","parse","entries","version","web","field","sortObjectKeys","gradleProperties","readFile","arch","podfile","writeFile","includes"],"sources":["../../src/exampleApp/generateExampleApp.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\nimport https from 'https';\nimport { spawn } from '../utils/spawn';\nimport sortObjectKeys from '../utils/sortObjectKeys';\nimport type { TemplateConfiguration } from '../template';\n\nconst FILES_TO_DELETE = [\n '__tests__',\n '.buckconfig',\n '.eslintrc.js',\n '.flowconfig',\n '.git',\n '.gitignore',\n '.prettierrc.js',\n 'App.js',\n 'App.tsx',\n 'index.js',\n 'tsconfig.json',\n];\n\nconst PACKAGES_TO_REMOVE = [\n '@react-native/eslint-config',\n '@tsconfig/react-native',\n '@types/jest',\n '@types/react',\n '@types/react-test-renderer',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'babel-jest',\n 'eslint',\n 'jest',\n 'prettier',\n 'react-test-renderer',\n 'typescript',\n];\n\nconst PACKAGES_TO_ADD_WEB = {\n '@expo/metro-runtime': '~3.2.1',\n 'react-dom': '18.2.0',\n 'react-native-web': '~0.18.10',\n};\n\nexport default async function generateExampleApp({\n config,\n destination,\n reactNativeVersion = 'latest',\n}: {\n config: TemplateConfiguration;\n destination: string;\n reactNativeVersion?: string;\n}) {\n const directory = path.join(destination, 'example');\n\n // `npx --package react-native-test-app@latest init --name ${projectName}Example --destination example --version ${reactNativeVersion}`\n const testAppArgs = [\n '--package',\n `react-native-test-app@latest`,\n 'init',\n '--name',\n `${config.project.name}Example`,\n `--destination`,\n directory,\n ...(reactNativeVersion !== 'latest'\n ? ['--version', reactNativeVersion]\n : []),\n '--platform',\n 'ios',\n '--platform',\n 'android',\n ];\n\n // `npx @react-native-community/cli init <projectName> --directory example --skip-install`\n const vanillaArgs = [\n `@react-native-community/cli`,\n 'init',\n `${config.project.name}Example`,\n '--package-name',\n `${config.project.package}.example`,\n '--directory',\n directory,\n '--version',\n reactNativeVersion,\n '--skip-install',\n '--pm',\n 'npm',\n ];\n\n // `npx create-expo-app example --no-install --template blank`\n const expoArgs = [\n 'create-expo-app@latest',\n directory,\n '--no-install',\n '--template',\n 'blank',\n ];\n\n let args: string[] = [];\n\n switch (config.example) {\n case 'vanilla':\n args = vanillaArgs;\n break;\n case 'test-app':\n args = testAppArgs;\n break;\n case 'expo':\n args = expoArgs;\n break;\n }\n\n await spawn('npx', args, {\n env: { ...process.env, npm_config_yes: 'true' },\n });\n\n // Remove unnecessary files and folders\n for (const file of FILES_TO_DELETE) {\n await fs.remove(path.join(directory, file));\n }\n\n // Patch the example app's package.json\n const pkg = await fs.readJSON(path.join(directory, 'package.json'));\n\n pkg.name = `${config.project.slug}-example`;\n\n // Remove Jest config for now\n delete pkg.jest;\n\n const { scripts, dependencies, devDependencies } = pkg;\n\n delete scripts.test;\n delete scripts.lint;\n\n const SCRIPTS_TO_ADD = {\n 'build:android':\n 'react-native build-android --extra-params \"--no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a\"',\n 'build:ios': `react-native build-ios --scheme ${config.project.name}Example --mode Debug --extra-params \"-sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO\"`,\n };\n\n if (config.example === 'vanilla') {\n Object.assign(scripts, SCRIPTS_TO_ADD);\n } else if (config.example === 'test-app') {\n // `react-native-test-app` doesn't bundle application by default in 'Release' mode and also `bundle` command doesn't create a directory.\n // `mkdist` script should be removed after stable React Native major contains this fix: https://github.com/facebook/react-native/pull/45182.\n\n const androidBuild = [\n 'npm run mkdist',\n 'react-native bundle --entry-file index.js --platform android --dev true --bundle-output dist/main.android.jsbundle --assets-dest dist',\n SCRIPTS_TO_ADD['build:android'],\n ].join(' && ');\n\n const iosBuild = [\n 'npm run mkdist',\n 'react-native bundle --entry-file index.js --platform ios --dev true --bundle-output dist/main.ios.jsbundle --assets-dest dist',\n SCRIPTS_TO_ADD['build:ios'],\n ].join(' && ');\n\n Object.assign(scripts, {\n 'build:android': androidBuild,\n 'build:ios': iosBuild,\n });\n\n const app = await fs.readJSON(path.join(directory, 'app.json'));\n\n app.android = app.android || {};\n app.android.package = `${config.project.package}.example`;\n app.ios = app.ios || {};\n app.ios.bundleIdentifier = `${config.project.package}.example`;\n\n await fs.writeJSON(path.join(directory, 'app.json'), app, {\n spaces: 2,\n });\n }\n\n PACKAGES_TO_REMOVE.forEach((name) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete devDependencies[name];\n });\n\n const PACKAGES_TO_ADD_DEV = {\n 'react-native-builder-bob': `^${config.versions.bob}`,\n };\n\n if (config.project.moduleConfig === 'nitro-modules') {\n const packagesToAddNitro = {\n 'react-native-nitro-modules': `^${config.versions.nitroModules}`,\n };\n Object.assign(dependencies, packagesToAddNitro);\n }\n\n Object.assign(devDependencies, PACKAGES_TO_ADD_DEV);\n\n if (config.example === 'expo') {\n const sdkVersion = dependencies.expo.split('.')[0].replace(/[^\\d]/, '');\n\n let bundledNativeModules: Record<string, string>;\n\n try {\n bundledNativeModules = await new Promise((resolve, reject) => {\n https\n .get(\n `https://raw.githubusercontent.com/expo/expo/sdk-${sdkVersion}/packages/expo/bundledNativeModules.json`,\n (res) => {\n let data = '';\n\n res.on('data', (chunk) => (data += chunk));\n res.on('end', () => {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n reject(e);\n }\n });\n }\n )\n .on('error', reject);\n });\n } catch (e) {\n bundledNativeModules = {};\n }\n\n Object.entries(PACKAGES_TO_ADD_WEB).forEach(([name, version]) => {\n dependencies[name] = bundledNativeModules[name] || version;\n });\n\n scripts.web = 'expo start --web';\n\n const app = await fs.readJSON(path.join(directory, 'app.json'));\n\n app.expo.android = app.expo.android || {};\n app.expo.android.package = `${config.project.package}.example`;\n app.expo.ios = app.expo.ios || {};\n app.expo.ios.bundleIdentifier = `${config.project.package}.example`;\n\n await fs.writeJSON(path.join(directory, 'app.json'), app, {\n spaces: 2,\n });\n }\n\n // Sort the deps by name to match behavior of package managers\n // This way the package.json doesn't get updated when installing deps\n for (const field of ['dependencies', 'devDependencies']) {\n if (pkg[field]) {\n pkg[field] = sortObjectKeys(pkg[field]);\n }\n }\n\n await fs.writeJSON(path.join(directory, 'package.json'), pkg, {\n spaces: 2,\n });\n\n if (config.example !== 'expo') {\n let gradleProperties = await fs.readFile(\n path.join(directory, 'android', 'gradle.properties'),\n 'utf8'\n );\n\n // Disable Jetifier.\n // Remove this when the app template is updated.\n gradleProperties = gradleProperties.replace(\n 'android.enableJetifier=true',\n 'android.enableJetifier=false'\n );\n\n // If the library is on new architecture, enable new arch for iOS and Android\n if (config.project.arch === 'new') {\n // iOS\n // Add ENV['RCT_NEW_ARCH_ENABLED'] = 1 on top of example/ios/Podfile\n const podfile = await fs.readFile(\n path.join(directory, 'ios', 'Podfile'),\n 'utf8'\n );\n\n await fs.writeFile(\n path.join(directory, 'ios', 'Podfile'),\n \"ENV['RCT_NEW_ARCH_ENABLED'] = '1'\\n\\n\" + podfile\n );\n\n // Android\n // Make sure newArchEnabled=true is present in android/gradle.properties\n if (gradleProperties.split('\\n').includes('#newArchEnabled=true')) {\n gradleProperties = gradleProperties.replace(\n '#newArchEnabled=true',\n 'newArchEnabled=true'\n );\n } else if (\n gradleProperties.split('\\n').includes('newArchEnabled=false')\n ) {\n gradleProperties = gradleProperties.replace(\n 'newArchEnabled=false',\n 'newArchEnabled=true'\n );\n } else {\n gradleProperties += '\\nnewArchEnabled=true';\n }\n }\n\n await fs.writeFile(\n path.join(directory, 'android', 'gradle.properties'),\n gradleProperties\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/index.js
CHANGED
|
@@ -17,6 +17,7 @@ var _dependencies = require("./exampleApp/dependencies");
|
|
|
17
17
|
var _inform = require("./inform");
|
|
18
18
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
19
|
const FALLBACK_BOB_VERSION = '0.36.0';
|
|
20
|
+
const FALLBACK_NITRO_MODULES_VERSION = '0.22.1';
|
|
20
21
|
_yargs.default.command('$0 [name]', 'create a react native library', _input.acceptedArgs,
|
|
21
22
|
// @ts-expect-error Some types are still incompatible
|
|
22
23
|
create).demandCommand().recommendCommands().fail(_inform.printErrorHelp).parserConfiguration({
|
|
@@ -33,6 +34,7 @@ async function create(_argv) {
|
|
|
33
34
|
|
|
34
35
|
// Prefetch bob version in background while asking questions
|
|
35
36
|
const bobVersionPromise = (0, _resolveNpmPackageVersion.resolveNpmPackageVersion)('react-native-builder-bob', FALLBACK_BOB_VERSION);
|
|
37
|
+
const nitroModulesVersionPromise = (0, _resolveNpmPackageVersion.resolveNpmPackageVersion)('react-native-nitro-modules', FALLBACK_NITRO_MODULES_VERSION);
|
|
36
38
|
const local = await promptLocalLibrary(argv);
|
|
37
39
|
const folder = await promptPath(argv, local);
|
|
38
40
|
await (0, _assert.assertNpxExists)();
|
|
@@ -49,8 +51,14 @@ async function create(_argv) {
|
|
|
49
51
|
};
|
|
50
52
|
(0, _assert.assertUserInput)(questions, answers);
|
|
51
53
|
const bobVersion = await bobVersionPromise;
|
|
54
|
+
const nitroModulesVersion = answers.type === 'nitro-module' ? await nitroModulesVersionPromise : undefined;
|
|
52
55
|
const config = (0, _template.generateTemplateConfiguration)({
|
|
53
|
-
|
|
56
|
+
versions: {
|
|
57
|
+
bob: bobVersion,
|
|
58
|
+
nitroModules: nitroModulesVersion,
|
|
59
|
+
// Nitro codegen's version is always the same as nitro modules version.
|
|
60
|
+
nitroCodegen: nitroModulesVersion
|
|
61
|
+
},
|
|
54
62
|
basename,
|
|
55
63
|
answers
|
|
56
64
|
});
|
|
@@ -62,12 +70,9 @@ async function create(_argv) {
|
|
|
62
70
|
if (config.example !== 'none') {
|
|
63
71
|
spinner.text = 'Generating example app';
|
|
64
72
|
await (0, _generateExampleApp.default)({
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
project: config.project,
|
|
69
|
-
bobVersion,
|
|
70
|
-
reactNativeVersion: answers.reactNativeVersion
|
|
73
|
+
destination: folder,
|
|
74
|
+
reactNativeVersion: answers.reactNativeVersion,
|
|
75
|
+
config
|
|
71
76
|
});
|
|
72
77
|
}
|
|
73
78
|
spinner.text = 'Copying files';
|
|
@@ -76,13 +81,13 @@ async function create(_argv) {
|
|
|
76
81
|
if (config.example !== 'none') {
|
|
77
82
|
const {
|
|
78
83
|
devDependencies
|
|
79
|
-
} = await (0, _dependencies.getDependencyVersionsFromExampleApp)(folder, config
|
|
84
|
+
} = await (0, _dependencies.getDependencyVersionsFromExampleApp)(folder, config);
|
|
80
85
|
rootPackageJson.devDependencies = rootPackageJson.devDependencies ? {
|
|
81
86
|
...rootPackageJson.devDependencies,
|
|
82
87
|
...devDependencies
|
|
83
88
|
} : devDependencies;
|
|
84
89
|
}
|
|
85
|
-
if (config.example === 'vanilla' && config.project.
|
|
90
|
+
if (config.example === 'vanilla' && (config.project.moduleConfig === 'turbo-modules' || config.project.viewConfig === 'fabric-view')) {
|
|
86
91
|
(0, _addCodegenBuildScript.addCodegenBuildScript)(folder);
|
|
87
92
|
}
|
|
88
93
|
const libraryMetadata = (0, _input.createMetadata)(answers);
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_path","_interopRequireDefault","require","_fsExtra","_kleur","_yargs","_ora","_prompt","_generateExampleApp","_addCodegenBuildScript","_initialCommit","_assert","_resolveNpmPackageVersion","_template","_input","_dependencies","_inform","e","__esModule","default","FALLBACK_BOB_VERSION","yargs","command","acceptedArgs","create","demandCommand","recommendCommands","fail","printErrorHelp","parserConfiguration","strict","argv","_argv","_","$0","bobVersionPromise","resolveNpmPackageVersion","local","promptLocalLibrary","folder","promptPath","assertNpxExists","basename","path","questions","createQuestions","assertUserInput","promptAnswers","prompt","answers","bobVersion","config","generateTemplateConfiguration","fs","mkdirp","reactNativeVersion","printUsedRNVersion","spinner","ora","start","example","text","generateExampleApp","type","dest","arch","project","applyTemplates","rootPackageJson","readJson","join","devDependencies","getDependencyVersionsFromExampleApp","addCodegenBuildScript","libraryMetadata","createMetadata","writeJson","spaces","createInitialGitCommit","succeed","kleur","yellow","relative","process","cwd","printNextSteps","hasPackageJson","pathExists","name","message","initial","includes","validate","input","pathExistsSync","console","log","blue","exit"],"sources":["../src/index.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport kleur from 'kleur';\nimport yargs from 'yargs';\nimport ora from 'ora';\nimport { prompt } from './utils/prompt';\nimport generateExampleApp from './exampleApp/generateExampleApp';\nimport { addCodegenBuildScript } from './exampleApp/addCodegenBuildScript';\nimport { createInitialGitCommit } from './utils/initialCommit';\nimport { assertUserInput, assertNpxExists } from './utils/assert';\nimport { resolveNpmPackageVersion } from './utils/resolveNpmPackageVersion';\nimport { applyTemplates, generateTemplateConfiguration } from './template';\nimport {\n createQuestions,\n createMetadata,\n type Answers,\n acceptedArgs,\n type Args,\n} from './input';\nimport { getDependencyVersionsFromExampleApp } from './exampleApp/dependencies';\nimport { printErrorHelp, printNextSteps, printUsedRNVersion } from './inform';\n\nconst FALLBACK_BOB_VERSION = '0.36.0';\n\nyargs\n .command(\n '$0 [name]',\n 'create a react native library',\n acceptedArgs,\n // @ts-expect-error Some types are still incompatible\n create\n )\n .demandCommand()\n .recommendCommands()\n .fail(printErrorHelp)\n .parserConfiguration({\n // don't pass kebab-case args to handler.\n 'strip-dashed': true,\n })\n .strict().argv;\n\nasync function create(_argv: yargs.Arguments<Args>) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _, $0, ...argv } = _argv;\n\n // Prefetch bob version in background while asking questions\n const bobVersionPromise = resolveNpmPackageVersion(\n 'react-native-builder-bob',\n FALLBACK_BOB_VERSION\n );\n\n const local = await promptLocalLibrary(argv);\n const folder = await promptPath(argv, local);\n\n await assertNpxExists();\n\n const basename = path.basename(folder);\n\n const questions = await createQuestions({ basename, local });\n\n assertUserInput(questions, argv);\n\n const promptAnswers = await prompt(questions, argv);\n const answers: Answers = {\n ...promptAnswers,\n local,\n };\n\n assertUserInput(questions, answers);\n\n const bobVersion = await bobVersionPromise;\n\n const config = generateTemplateConfiguration({\n bobVersion,\n basename,\n answers,\n });\n\n await fs.mkdirp(folder);\n\n if (answers.reactNativeVersion != null) {\n printUsedRNVersion(answers.reactNativeVersion, config);\n }\n\n const spinner = ora().start();\n\n if (config.example !== 'none') {\n spinner.text = 'Generating example app';\n\n await generateExampleApp({\n type: config.example,\n dest: folder,\n arch: config.project.arch,\n project: config.project,\n bobVersion,\n reactNativeVersion: answers.reactNativeVersion,\n });\n }\n\n spinner.text = 'Copying files';\n\n await applyTemplates(answers, config, folder);\n\n const rootPackageJson = await fs.readJson(path.join(folder, 'package.json'));\n\n if (config.example !== 'none') {\n const { devDependencies } = await getDependencyVersionsFromExampleApp(\n folder,\n config.example\n );\n\n rootPackageJson.devDependencies = rootPackageJson.devDependencies\n ? {\n ...rootPackageJson.devDependencies,\n ...devDependencies,\n }\n : devDependencies;\n }\n\n if (config.example === 'vanilla' && config.project.arch === 'new') {\n addCodegenBuildScript(folder);\n }\n\n const libraryMetadata = createMetadata(answers);\n\n rootPackageJson['create-react-native-library'] = libraryMetadata;\n\n await fs.writeJson(path.join(folder, 'package.json'), rootPackageJson, {\n spaces: 2,\n });\n\n if (!local) {\n await createInitialGitCommit(folder);\n }\n\n spinner.succeed(\n `Project created successfully at ${kleur.yellow(\n path.relative(process.cwd(), folder)\n )}!\\n`\n );\n\n await printNextSteps(local, folder, config);\n}\n\nasync function promptLocalLibrary(argv: Args) {\n let local = false;\n\n if (typeof argv.local === 'boolean') {\n local = argv.local;\n } else {\n const hasPackageJson = await fs.pathExists(\n path.join(process.cwd(), 'package.json')\n );\n\n if (hasPackageJson) {\n // If we're under a project with package.json, ask the user if they want to create a local library\n const answers = await prompt({\n type: 'confirm',\n name: 'local',\n message: `Looks like you're under a project folder. Do you want to create a local library?`,\n initial: true,\n });\n\n local = answers.local;\n }\n }\n\n return local;\n}\n\nasync function promptPath(argv: Args, local: boolean) {\n let folder: string;\n\n if (argv.name && !local) {\n folder = path.join(process.cwd(), argv.name);\n } else {\n const answers = await prompt({\n type: 'text',\n name: 'folder',\n message: `Where do you want to create the library?`,\n initial:\n local && argv.name && !argv.name.includes('/')\n ? `modules/${argv.name}`\n : argv.name,\n validate: (input) => {\n if (!input) {\n return 'Cannot be empty';\n }\n\n if (fs.pathExistsSync(path.join(process.cwd(), input))) {\n return 'Folder already exists';\n }\n\n return true;\n },\n });\n\n folder = path.join(process.cwd(), answers.folder);\n }\n\n if (await fs.pathExists(folder)) {\n console.log(\n `A folder already exists at ${kleur.blue(\n folder\n )}! Please specify another folder name or delete the existing one.`\n );\n\n process.exit(1);\n }\n\n return folder;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_path","_interopRequireDefault","require","_fsExtra","_kleur","_yargs","_ora","_prompt","_generateExampleApp","_addCodegenBuildScript","_initialCommit","_assert","_resolveNpmPackageVersion","_template","_input","_dependencies","_inform","e","__esModule","default","FALLBACK_BOB_VERSION","FALLBACK_NITRO_MODULES_VERSION","yargs","command","acceptedArgs","create","demandCommand","recommendCommands","fail","printErrorHelp","parserConfiguration","strict","argv","_argv","_","$0","bobVersionPromise","resolveNpmPackageVersion","nitroModulesVersionPromise","local","promptLocalLibrary","folder","promptPath","assertNpxExists","basename","path","questions","createQuestions","assertUserInput","promptAnswers","prompt","answers","bobVersion","nitroModulesVersion","type","undefined","config","generateTemplateConfiguration","versions","bob","nitroModules","nitroCodegen","fs","mkdirp","reactNativeVersion","printUsedRNVersion","spinner","ora","start","example","text","generateExampleApp","destination","applyTemplates","rootPackageJson","readJson","join","devDependencies","getDependencyVersionsFromExampleApp","project","moduleConfig","viewConfig","addCodegenBuildScript","libraryMetadata","createMetadata","writeJson","spaces","createInitialGitCommit","succeed","kleur","yellow","relative","process","cwd","printNextSteps","hasPackageJson","pathExists","name","message","initial","includes","validate","input","pathExistsSync","console","log","blue","exit"],"sources":["../src/index.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport kleur from 'kleur';\nimport yargs from 'yargs';\nimport ora from 'ora';\nimport { prompt } from './utils/prompt';\nimport generateExampleApp from './exampleApp/generateExampleApp';\nimport { addCodegenBuildScript } from './exampleApp/addCodegenBuildScript';\nimport { createInitialGitCommit } from './utils/initialCommit';\nimport { assertUserInput, assertNpxExists } from './utils/assert';\nimport { resolveNpmPackageVersion } from './utils/resolveNpmPackageVersion';\nimport { applyTemplates, generateTemplateConfiguration } from './template';\nimport {\n createQuestions,\n createMetadata,\n type Answers,\n acceptedArgs,\n type Args,\n} from './input';\nimport { getDependencyVersionsFromExampleApp } from './exampleApp/dependencies';\nimport { printErrorHelp, printNextSteps, printUsedRNVersion } from './inform';\n\nconst FALLBACK_BOB_VERSION = '0.36.0';\nconst FALLBACK_NITRO_MODULES_VERSION = '0.22.1';\n\nyargs\n .command(\n '$0 [name]',\n 'create a react native library',\n acceptedArgs,\n // @ts-expect-error Some types are still incompatible\n create\n )\n .demandCommand()\n .recommendCommands()\n .fail(printErrorHelp)\n .parserConfiguration({\n // don't pass kebab-case args to handler.\n 'strip-dashed': true,\n })\n .strict().argv;\n\nasync function create(_argv: yargs.Arguments<Args>) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _, $0, ...argv } = _argv;\n\n // Prefetch bob version in background while asking questions\n const bobVersionPromise = resolveNpmPackageVersion(\n 'react-native-builder-bob',\n FALLBACK_BOB_VERSION\n );\n const nitroModulesVersionPromise = resolveNpmPackageVersion(\n 'react-native-nitro-modules',\n FALLBACK_NITRO_MODULES_VERSION\n );\n\n const local = await promptLocalLibrary(argv);\n const folder = await promptPath(argv, local);\n\n await assertNpxExists();\n\n const basename = path.basename(folder);\n\n const questions = await createQuestions({ basename, local });\n\n assertUserInput(questions, argv);\n\n const promptAnswers = await prompt(questions, argv);\n const answers: Answers = {\n ...promptAnswers,\n local,\n };\n\n assertUserInput(questions, answers);\n\n const bobVersion = await bobVersionPromise;\n\n const nitroModulesVersion =\n answers.type === 'nitro-module'\n ? await nitroModulesVersionPromise\n : undefined;\n\n const config = generateTemplateConfiguration({\n versions: {\n bob: bobVersion,\n nitroModules: nitroModulesVersion,\n // Nitro codegen's version is always the same as nitro modules version.\n nitroCodegen: nitroModulesVersion,\n },\n basename,\n answers,\n });\n\n await fs.mkdirp(folder);\n\n if (answers.reactNativeVersion != null) {\n printUsedRNVersion(answers.reactNativeVersion, config);\n }\n\n const spinner = ora().start();\n\n if (config.example !== 'none') {\n spinner.text = 'Generating example app';\n\n await generateExampleApp({\n destination: folder,\n reactNativeVersion: answers.reactNativeVersion,\n config,\n });\n }\n\n spinner.text = 'Copying files';\n\n await applyTemplates(answers, config, folder);\n\n const rootPackageJson = await fs.readJson(path.join(folder, 'package.json'));\n\n if (config.example !== 'none') {\n const { devDependencies } = await getDependencyVersionsFromExampleApp(\n folder,\n config\n );\n\n rootPackageJson.devDependencies = rootPackageJson.devDependencies\n ? {\n ...rootPackageJson.devDependencies,\n ...devDependencies,\n }\n : devDependencies;\n }\n\n if (\n config.example === 'vanilla' &&\n (config.project.moduleConfig === 'turbo-modules' ||\n config.project.viewConfig === 'fabric-view')\n ) {\n addCodegenBuildScript(folder);\n }\n\n const libraryMetadata = createMetadata(answers);\n\n rootPackageJson['create-react-native-library'] = libraryMetadata;\n\n await fs.writeJson(path.join(folder, 'package.json'), rootPackageJson, {\n spaces: 2,\n });\n\n if (!local) {\n await createInitialGitCommit(folder);\n }\n\n spinner.succeed(\n `Project created successfully at ${kleur.yellow(\n path.relative(process.cwd(), folder)\n )}!\\n`\n );\n\n await printNextSteps(local, folder, config);\n}\n\nasync function promptLocalLibrary(argv: Args) {\n let local = false;\n\n if (typeof argv.local === 'boolean') {\n local = argv.local;\n } else {\n const hasPackageJson = await fs.pathExists(\n path.join(process.cwd(), 'package.json')\n );\n\n if (hasPackageJson) {\n // If we're under a project with package.json, ask the user if they want to create a local library\n const answers = await prompt({\n type: 'confirm',\n name: 'local',\n message: `Looks like you're under a project folder. Do you want to create a local library?`,\n initial: true,\n });\n\n local = answers.local;\n }\n }\n\n return local;\n}\n\nasync function promptPath(argv: Args, local: boolean) {\n let folder: string;\n\n if (argv.name && !local) {\n folder = path.join(process.cwd(), argv.name);\n } else {\n const answers = await prompt({\n type: 'text',\n name: 'folder',\n message: `Where do you want to create the library?`,\n initial:\n local && argv.name && !argv.name.includes('/')\n ? `modules/${argv.name}`\n : argv.name,\n validate: (input) => {\n if (!input) {\n return 'Cannot be empty';\n }\n\n if (fs.pathExistsSync(path.join(process.cwd(), input))) {\n return 'Folder already exists';\n }\n\n return true;\n },\n });\n\n folder = path.join(process.cwd(), answers.folder);\n }\n\n if (await fs.pathExists(folder)) {\n console.log(\n `A folder already exists at ${kleur.blue(\n folder\n )}! Please specify another folder name or delete the existing one.`\n );\n\n process.exit(1);\n }\n\n return folder;\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/input.js
CHANGED
|
@@ -12,13 +12,13 @@ var _package = require("../package.json");
|
|
|
12
12
|
var _spawn = require("./utils/spawn");
|
|
13
13
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
14
|
const LANGUAGE_CHOICES = [{
|
|
15
|
+
title: 'Kotlin & Swift',
|
|
16
|
+
value: 'kotlin-swift',
|
|
17
|
+
types: ['nitro-module', 'legacy-module', 'legacy-view']
|
|
18
|
+
}, {
|
|
15
19
|
title: 'Kotlin & Objective-C',
|
|
16
20
|
value: 'kotlin-objc',
|
|
17
21
|
types: ['turbo-module', 'fabric-view', 'legacy-module', 'legacy-view']
|
|
18
|
-
}, {
|
|
19
|
-
title: 'Kotlin & Swift',
|
|
20
|
-
value: 'kotlin-swift',
|
|
21
|
-
types: ['legacy-module', 'legacy-view']
|
|
22
22
|
}, {
|
|
23
23
|
title: 'C++ for Android & iOS',
|
|
24
24
|
value: 'cpp',
|
|
@@ -50,6 +50,10 @@ const TYPE_CHOICES = [{
|
|
|
50
50
|
title: 'Turbo module',
|
|
51
51
|
value: 'turbo-module',
|
|
52
52
|
description: 'integration for native APIs to JS'
|
|
53
|
+
}, {
|
|
54
|
+
title: 'Nitro module',
|
|
55
|
+
value: 'nitro-module',
|
|
56
|
+
description: 'type-safe, fast integration for native APIs to JS (experimental)'
|
|
53
57
|
}, {
|
|
54
58
|
title: 'Fabric view',
|
|
55
59
|
value: 'fabric-view',
|
package/lib/input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","names":["_githubUsername","_interopRequireDefault","require","_validateNpmPackageName","_package","_spawn","e","__esModule","default","LANGUAGE_CHOICES","title","value","types","EXAMPLE_CHOICES","description","disabled","process","env","CRNL_ENABLE_TEST_APP","filter","choice","TYPE_CHOICES","acceptedArgs","exports","slug","type","authorName","authorEmail","authorUrl","repoUrl","languages","choices","map","reactNativeVersion","local","example","createQuestions","basename","name","email","spawn","questions","message","initial","validateNpmPackage","validForNewPackages","test","undefined","validate","input","Boolean","previous","username","githubUsername","_","answers","replace","values","includes","createMetadata","ignoredAnswers","libraryMetadata","Object","fromEntries","entries","answer","version"],"sources":["../src/input.ts"],"sourcesContent":["import githubUsername from 'github-username';\nimport validateNpmPackage from 'validate-npm-package-name';\nimport type yargs from 'yargs';\nimport { version } from '../package.json';\nimport type { Question } from './utils/prompt';\nimport { spawn } from './utils/spawn';\n\nexport type ArgName =\n | 'slug'\n | 'description'\n | 'authorName'\n | 'authorEmail'\n | 'authorUrl'\n | 'repoUrl'\n | 'languages'\n | 'type'\n | 'local'\n | 'example'\n | 'reactNativeVersion';\n\nexport type ProjectLanguages = 'kotlin-objc' | 'kotlin-swift' | 'cpp' | 'js';\n\nexport type ProjectType =\n | 'turbo-module'\n | 'fabric-view'\n | 'legacy-module'\n | 'legacy-view'\n | 'library';\n\nconst LANGUAGE_CHOICES: {\n title: string;\n value: ProjectLanguages;\n types: ProjectType[];\n}[] = [\n {\n title: 'Kotlin & Objective-C',\n value: 'kotlin-objc',\n types: ['turbo-module', 'fabric-view', 'legacy-module', 'legacy-view'],\n },\n {\n title: 'Kotlin & Swift',\n value: 'kotlin-swift',\n types: ['legacy-module', 'legacy-view'],\n },\n {\n title: 'C++ for Android & iOS',\n value: 'cpp',\n types: ['turbo-module', 'legacy-module'],\n },\n {\n title: 'JavaScript for Android, iOS & Web',\n value: 'js',\n types: ['library'],\n },\n];\n\nconst EXAMPLE_CHOICES = (\n [\n {\n title: 'App with Community CLI',\n value: 'vanilla',\n description: \"provides access to app's native code\",\n disabled: false,\n },\n {\n title: 'React Native Test App by Microsoft',\n value: 'test-app',\n description: \"app's native code is abstracted away\",\n // The test app is disabled for now until proper\n // Codegen spec shipping is implemented\n disabled: !process.env.CRNL_ENABLE_TEST_APP,\n },\n {\n title: 'App with Expo CLI',\n value: 'expo',\n description: 'managed expo app with web support',\n disabled: false,\n },\n ] as const\n).filter((choice) => !choice.disabled);\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: 'Legacy Native module',\n value: 'legacy-module',\n description: 'bridge for native APIs to JS (old architecture)',\n },\n {\n title: 'Legacy Native view',\n value: 'legacy-view',\n description: 'bridge for native views to JS (old architecture)',\n },\n {\n title: 'JavaScript library',\n value: 'library',\n description: 'supports Expo Go and Web',\n },\n];\n\nexport const acceptedArgs: Record<ArgName, yargs.Options> = {\n slug: {\n description: 'Name of the npm package',\n type: 'string',\n },\n description: {\n description: 'Description of the npm package',\n type: 'string',\n },\n authorName: {\n description: 'Name of the package author',\n type: 'string',\n },\n authorEmail: {\n description: 'Email address of the package author',\n type: 'string',\n },\n authorUrl: {\n description: 'URL for the package author',\n type: 'string',\n },\n repoUrl: {\n description: 'URL for the repository',\n type: 'string',\n },\n languages: {\n description: 'Languages you want to use',\n choices: LANGUAGE_CHOICES.map(({ value }) => value),\n },\n type: {\n description: 'Type of library you want to develop',\n choices: TYPE_CHOICES.map(({ value }) => value),\n },\n reactNativeVersion: {\n description: 'Version of React Native to use, uses latest if not specified',\n type: 'string',\n },\n local: {\n description: 'Whether to create a local library',\n type: 'boolean',\n },\n example: {\n description: 'Type of the example app to create',\n type: 'string',\n choices: EXAMPLE_CHOICES.map(({ value }) => value),\n },\n} as const;\n\nexport type Args = Record<ArgName | 'name', string>;\nexport type SupportedArchitecture = 'new' | 'legacy';\nexport type ExampleApp = 'none' | 'test-app' | 'expo' | 'vanilla';\n\nexport type Answers = {\n name: string;\n slug: string;\n description: string;\n authorName: string;\n authorEmail: string;\n authorUrl: string;\n repoUrl: string;\n languages: ProjectLanguages;\n type: ProjectType;\n example: ExampleApp;\n reactNativeVersion?: string;\n local?: boolean;\n};\n\nexport async function createQuestions({\n basename,\n local,\n}: {\n basename: string;\n local: boolean;\n}) {\n let name, email;\n\n try {\n name = await spawn('git', ['config', '--get', 'user.name']);\n email = await spawn('git', ['config', '--get', 'user.email']);\n } catch (e) {\n // Ignore error\n }\n\n const questions: Question<keyof Answers>[] = [\n {\n type: 'text',\n name: 'slug',\n message: 'What is the name of the npm package?',\n initial: validateNpmPackage(basename).validForNewPackages\n ? /^(@|react-native)/.test(basename)\n ? basename\n : `react-native-${basename}`\n : undefined,\n validate: (input) =>\n validateNpmPackage(input).validForNewPackages ||\n 'Must be a valid npm package name',\n },\n {\n type: 'text',\n name: 'description',\n message: 'What is the description for the package?',\n validate: (input) => Boolean(input) || 'Cannot be empty',\n },\n {\n type: local ? null : 'text',\n name: 'authorName',\n message: 'What is the name of package author?',\n initial: name,\n validate: (input) => Boolean(input) || 'Cannot be empty',\n },\n {\n type: local ? null : 'text',\n name: 'authorEmail',\n message: 'What is the email address for the package author?',\n initial: email,\n validate: (input) =>\n /^\\S+@\\S+$/.test(input) || 'Must be a valid email address',\n },\n {\n type: local ? null : 'text',\n name: 'authorUrl',\n message: 'What is the URL for the package author?',\n // @ts-expect-error this is supported, but types are wrong\n initial: async (previous: string) => {\n try {\n const username = await githubUsername(previous);\n\n return `https://github.com/${username}`;\n } catch (e) {\n // Ignore error\n }\n\n return undefined;\n },\n validate: (input) => /^https?:\\/\\//.test(input) || 'Must be a valid URL',\n },\n {\n type: local ? null : 'text',\n name: 'repoUrl',\n message: 'What is the URL for the repository?',\n initial: (_: string, answers: Answers) => {\n if (/^https?:\\/\\/github.com\\/[^/]+/.test(answers.authorUrl)) {\n return `${answers.authorUrl}/${answers.slug\n .replace(/^@/, '')\n .replace(/\\//g, '-')}`;\n }\n\n return '';\n },\n validate: (input) => /^https?:\\/\\//.test(input) || 'Must be a valid URL',\n },\n {\n type: 'select',\n name: 'type',\n message: 'What type of library do you want to develop?',\n choices: TYPE_CHOICES,\n },\n {\n type: 'select',\n name: 'languages',\n message: 'Which languages do you want to use?',\n choices: (_, values) => {\n return LANGUAGE_CHOICES.filter((choice) => {\n if (choice.types) {\n return choice.types.includes(values.type);\n }\n\n return true;\n });\n },\n },\n {\n type: 'select',\n name: 'example',\n message: 'What type of example app do you want to create?',\n choices: (_, values) => {\n if (local) {\n return [\n {\n title: 'None',\n value: 'none',\n },\n ];\n }\n\n return EXAMPLE_CHOICES.filter((choice) => {\n if (values.type) {\n return values.type === 'library'\n ? choice.value === 'expo'\n : choice.value !== 'expo';\n }\n\n return true;\n });\n },\n },\n ];\n\n return questions;\n}\n\nexport function createMetadata(answers: Answers) {\n // Some of the passed args can already be derived from the generated package.json file.\n const ignoredAnswers: (keyof Answers)[] = [\n 'name',\n 'slug',\n 'description',\n 'authorName',\n 'authorEmail',\n 'authorUrl',\n 'repoUrl',\n 'example',\n 'reactNativeVersion',\n 'local',\n ];\n\n type AnswerEntries<T extends keyof Answers = keyof Answers> = [\n T,\n Answers[T],\n ][];\n\n const libraryMetadata = Object.fromEntries(\n (Object.entries(answers) as AnswerEntries).filter(\n ([answer]) => !ignoredAnswers.includes(answer)\n )\n );\n\n libraryMetadata.version = version;\n\n return libraryMetadata;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"input.js","names":["_githubUsername","_interopRequireDefault","require","_validateNpmPackageName","_package","_spawn","e","__esModule","default","LANGUAGE_CHOICES","title","value","types","EXAMPLE_CHOICES","description","disabled","process","env","CRNL_ENABLE_TEST_APP","filter","choice","TYPE_CHOICES","acceptedArgs","exports","slug","type","authorName","authorEmail","authorUrl","repoUrl","languages","choices","map","reactNativeVersion","local","example","createQuestions","basename","name","email","spawn","questions","message","initial","validateNpmPackage","validForNewPackages","test","undefined","validate","input","Boolean","previous","username","githubUsername","_","answers","replace","values","includes","createMetadata","ignoredAnswers","libraryMetadata","Object","fromEntries","entries","answer","version"],"sources":["../src/input.ts"],"sourcesContent":["import githubUsername from 'github-username';\nimport validateNpmPackage from 'validate-npm-package-name';\nimport type yargs from 'yargs';\nimport { version } from '../package.json';\nimport type { Question } from './utils/prompt';\nimport { spawn } from './utils/spawn';\n\nexport type ArgName =\n | 'slug'\n | 'description'\n | 'authorName'\n | 'authorEmail'\n | 'authorUrl'\n | 'repoUrl'\n | 'languages'\n | 'type'\n | 'local'\n | 'example'\n | 'reactNativeVersion';\n\nexport type ProjectLanguages = 'kotlin-objc' | 'kotlin-swift' | 'cpp' | 'js';\n\nexport type ProjectType =\n | 'turbo-module'\n | 'fabric-view'\n | 'legacy-module'\n | 'legacy-view'\n | 'nitro-module'\n | 'library';\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', 'legacy-module', 'legacy-view'],\n },\n {\n title: 'Kotlin & Objective-C',\n value: 'kotlin-objc',\n types: ['turbo-module', 'fabric-view', 'legacy-module', 'legacy-view'],\n },\n {\n title: 'C++ for Android & iOS',\n value: 'cpp',\n types: ['turbo-module', 'legacy-module'],\n },\n {\n title: 'JavaScript for Android, iOS & Web',\n value: 'js',\n types: ['library'],\n },\n];\n\nconst EXAMPLE_CHOICES = (\n [\n {\n title: 'App with Community CLI',\n value: 'vanilla',\n description: \"provides access to app's native code\",\n disabled: false,\n },\n {\n title: 'React Native Test App by Microsoft',\n value: 'test-app',\n description: \"app's native code is abstracted away\",\n // The test app is disabled for now until proper\n // Codegen spec shipping is implemented\n disabled: !process.env.CRNL_ENABLE_TEST_APP,\n },\n {\n title: 'App with Expo CLI',\n value: 'expo',\n description: 'managed expo app with web support',\n disabled: false,\n },\n ] as const\n).filter((choice) => !choice.disabled);\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: 'Nitro module',\n value: 'nitro-module',\n description:\n 'type-safe, fast integration for native APIs to JS (experimental)',\n },\n {\n title: 'Fabric view',\n value: 'fabric-view',\n description: 'integration for native views to JS',\n },\n {\n title: 'Legacy Native module',\n value: 'legacy-module',\n description: 'bridge for native APIs to JS (old architecture)',\n },\n {\n title: 'Legacy Native view',\n value: 'legacy-view',\n description: 'bridge for native views to JS (old architecture)',\n },\n {\n title: 'JavaScript library',\n value: 'library',\n description: 'supports Expo Go and Web',\n },\n];\n\nexport const acceptedArgs: Record<ArgName, yargs.Options> = {\n slug: {\n description: 'Name of the npm package',\n type: 'string',\n },\n description: {\n description: 'Description of the npm package',\n type: 'string',\n },\n authorName: {\n description: 'Name of the package author',\n type: 'string',\n },\n authorEmail: {\n description: 'Email address of the package author',\n type: 'string',\n },\n authorUrl: {\n description: 'URL for the package author',\n type: 'string',\n },\n repoUrl: {\n description: 'URL for the repository',\n type: 'string',\n },\n languages: {\n description: 'Languages you want to use',\n choices: LANGUAGE_CHOICES.map(({ value }) => value),\n },\n type: {\n description: 'Type of library you want to develop',\n choices: TYPE_CHOICES.map(({ value }) => value),\n },\n reactNativeVersion: {\n description: 'Version of React Native to use, uses latest if not specified',\n type: 'string',\n },\n local: {\n description: 'Whether to create a local library',\n type: 'boolean',\n },\n example: {\n description: 'Type of the example app to create',\n type: 'string',\n choices: EXAMPLE_CHOICES.map(({ value }) => value),\n },\n} as const;\n\nexport type Args = Record<ArgName | 'name', string>;\nexport type SupportedArchitecture = 'new' | 'legacy';\nexport type ExampleApp = 'none' | 'test-app' | 'expo' | 'vanilla';\n\nexport type Answers = {\n name: string;\n slug: string;\n description: string;\n authorName: string;\n authorEmail: string;\n authorUrl: string;\n repoUrl: string;\n languages: ProjectLanguages;\n type: ProjectType;\n example: ExampleApp;\n reactNativeVersion?: string;\n local?: boolean;\n};\n\nexport async function createQuestions({\n basename,\n local,\n}: {\n basename: string;\n local: boolean;\n}) {\n let name, email;\n\n try {\n name = await spawn('git', ['config', '--get', 'user.name']);\n email = await spawn('git', ['config', '--get', 'user.email']);\n } catch (e) {\n // Ignore error\n }\n\n const questions: Question<keyof Answers>[] = [\n {\n type: 'text',\n name: 'slug',\n message: 'What is the name of the npm package?',\n initial: validateNpmPackage(basename).validForNewPackages\n ? /^(@|react-native)/.test(basename)\n ? basename\n : `react-native-${basename}`\n : undefined,\n validate: (input) =>\n validateNpmPackage(input).validForNewPackages ||\n 'Must be a valid npm package name',\n },\n {\n type: 'text',\n name: 'description',\n message: 'What is the description for the package?',\n validate: (input) => Boolean(input) || 'Cannot be empty',\n },\n {\n type: local ? null : 'text',\n name: 'authorName',\n message: 'What is the name of package author?',\n initial: name,\n validate: (input) => Boolean(input) || 'Cannot be empty',\n },\n {\n type: local ? null : 'text',\n name: 'authorEmail',\n message: 'What is the email address for the package author?',\n initial: email,\n validate: (input) =>\n /^\\S+@\\S+$/.test(input) || 'Must be a valid email address',\n },\n {\n type: local ? null : 'text',\n name: 'authorUrl',\n message: 'What is the URL for the package author?',\n // @ts-expect-error this is supported, but types are wrong\n initial: async (previous: string) => {\n try {\n const username = await githubUsername(previous);\n\n return `https://github.com/${username}`;\n } catch (e) {\n // Ignore error\n }\n\n return undefined;\n },\n validate: (input) => /^https?:\\/\\//.test(input) || 'Must be a valid URL',\n },\n {\n type: local ? null : 'text',\n name: 'repoUrl',\n message: 'What is the URL for the repository?',\n initial: (_: string, answers: Answers) => {\n if (/^https?:\\/\\/github.com\\/[^/]+/.test(answers.authorUrl)) {\n return `${answers.authorUrl}/${answers.slug\n .replace(/^@/, '')\n .replace(/\\//g, '-')}`;\n }\n\n return '';\n },\n validate: (input) => /^https?:\\/\\//.test(input) || 'Must be a valid URL',\n },\n {\n type: 'select',\n name: 'type',\n message: 'What type of library do you want to develop?',\n choices: TYPE_CHOICES,\n },\n {\n type: 'select',\n name: 'languages',\n message: 'Which languages do you want to use?',\n choices: (_, values) => {\n return LANGUAGE_CHOICES.filter((choice) => {\n if (choice.types) {\n return choice.types.includes(values.type);\n }\n\n return true;\n });\n },\n },\n {\n type: 'select',\n name: 'example',\n message: 'What type of example app do you want to create?',\n choices: (_, values) => {\n if (local) {\n return [\n {\n title: 'None',\n value: 'none',\n },\n ];\n }\n\n return EXAMPLE_CHOICES.filter((choice) => {\n if (values.type) {\n return values.type === 'library'\n ? choice.value === 'expo'\n : choice.value !== 'expo';\n }\n\n return true;\n });\n },\n },\n ];\n\n return questions;\n}\n\nexport function createMetadata(answers: Answers) {\n // Some of the passed args can already be derived from the generated package.json file.\n const ignoredAnswers: (keyof Answers)[] = [\n 'name',\n 'slug',\n 'description',\n 'authorName',\n 'authorEmail',\n 'authorUrl',\n 'repoUrl',\n 'example',\n 'reactNativeVersion',\n 'local',\n ];\n\n type AnswerEntries<T extends keyof Answers = keyof Answers> = [\n T,\n Answers[T],\n ][];\n\n const libraryMetadata = Object.fromEntries(\n (Object.entries(answers) as AnswerEntries).filter(\n ([answer]) => !ignoredAnswers.includes(answer)\n )\n );\n\n libraryMetadata.version = version;\n\n return libraryMetadata;\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/template.js
CHANGED
|
@@ -28,7 +28,8 @@ const NATIVE_FILES = {
|
|
|
28
28
|
module_legacy: _path.default.resolve(__dirname, '../templates/native-library-legacy'),
|
|
29
29
|
module_new: _path.default.resolve(__dirname, '../templates/native-library-new'),
|
|
30
30
|
view_legacy: _path.default.resolve(__dirname, '../templates/native-view-legacy'),
|
|
31
|
-
view_new: _path.default.resolve(__dirname, '../templates/native-view-new')
|
|
31
|
+
view_new: _path.default.resolve(__dirname, '../templates/native-view-new'),
|
|
32
|
+
module_nitro: _path.default.resolve(__dirname, '../templates/nitro-module')
|
|
32
33
|
};
|
|
33
34
|
const OBJC_FILES = {
|
|
34
35
|
module_common: _path.default.resolve(__dirname, '../templates/objc-library'),
|
|
@@ -46,7 +47,7 @@ const SWIFT_FILES = {
|
|
|
46
47
|
view_legacy: _path.default.resolve(__dirname, '../templates/swift-view-legacy')
|
|
47
48
|
};
|
|
48
49
|
function generateTemplateConfiguration({
|
|
49
|
-
|
|
50
|
+
versions,
|
|
50
51
|
basename,
|
|
51
52
|
answers
|
|
52
53
|
}) {
|
|
@@ -65,9 +66,7 @@ function generateTemplateConfiguration({
|
|
|
65
66
|
// Create a package identifier with specified namespace when possible
|
|
66
67
|
const pack = `${namespace ? `${namespace}.` : ''}${project.replace(/[^a-z0-9]/g, '').toLowerCase()}`;
|
|
67
68
|
return {
|
|
68
|
-
|
|
69
|
-
version: bobVersion
|
|
70
|
-
},
|
|
69
|
+
versions,
|
|
71
70
|
project: {
|
|
72
71
|
slug,
|
|
73
72
|
description: answers.description,
|
|
@@ -84,8 +83,8 @@ function generateTemplateConfiguration({
|
|
|
84
83
|
arch,
|
|
85
84
|
cpp: languages === 'cpp',
|
|
86
85
|
swift: languages === 'kotlin-swift',
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
viewConfig: getViewConfig(type),
|
|
87
|
+
moduleConfig: getModuleConfig(type)
|
|
89
88
|
},
|
|
90
89
|
author: {
|
|
91
90
|
name: answers.authorName,
|
|
@@ -97,6 +96,28 @@ function generateTemplateConfiguration({
|
|
|
97
96
|
year: new Date().getFullYear()
|
|
98
97
|
};
|
|
99
98
|
}
|
|
99
|
+
function getModuleConfig(projectType) {
|
|
100
|
+
switch (projectType) {
|
|
101
|
+
case 'nitro-module':
|
|
102
|
+
return 'nitro-modules';
|
|
103
|
+
case 'turbo-module':
|
|
104
|
+
return 'turbo-modules';
|
|
105
|
+
case 'legacy-module':
|
|
106
|
+
return 'native-modules';
|
|
107
|
+
default:
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function getViewConfig(projectType) {
|
|
112
|
+
switch (projectType) {
|
|
113
|
+
case 'legacy-view':
|
|
114
|
+
return 'paper-view';
|
|
115
|
+
case 'fabric-view':
|
|
116
|
+
return 'fabric-view';
|
|
117
|
+
default:
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
100
121
|
async function applyTemplates(answers, config, folder) {
|
|
101
122
|
const {
|
|
102
123
|
local
|
|
@@ -107,7 +128,7 @@ async function applyTemplates(answers, config, folder) {
|
|
|
107
128
|
await applyTemplate(config, COMMON_FILES, folder);
|
|
108
129
|
if (config.example !== 'none') {
|
|
109
130
|
await applyTemplate(config, EXAMPLE_COMMON_FILES, folder);
|
|
110
|
-
if (config.project.
|
|
131
|
+
if (config.project.viewConfig !== null) {
|
|
111
132
|
await applyTemplate(config, EXAMPLE_VIEW_FILES, folder);
|
|
112
133
|
} else {
|
|
113
134
|
if (config.project.arch === 'legacy') {
|
|
@@ -126,7 +147,11 @@ async function applyTemplates(answers, config, folder) {
|
|
|
126
147
|
if (config.example !== 'none') {
|
|
127
148
|
await applyTemplate(config, NATIVE_COMMON_EXAMPLE_FILES, folder);
|
|
128
149
|
}
|
|
129
|
-
if (config.project.
|
|
150
|
+
if (config.project.moduleConfig === 'nitro-modules') {
|
|
151
|
+
await applyTemplate(config, NATIVE_FILES['module_nitro'], folder);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (config.project.moduleConfig !== null) {
|
|
130
155
|
await applyTemplate(config, NATIVE_FILES[`module_${config.project.arch}`], folder);
|
|
131
156
|
} else {
|
|
132
157
|
await applyTemplate(config, NATIVE_FILES[`view_${config.project.arch}`], folder);
|
|
@@ -134,13 +159,13 @@ async function applyTemplates(answers, config, folder) {
|
|
|
134
159
|
if (config.project.swift) {
|
|
135
160
|
await applyTemplate(config, SWIFT_FILES[`module_legacy`], folder);
|
|
136
161
|
} else {
|
|
137
|
-
if (config.project.
|
|
162
|
+
if (config.project.moduleConfig !== null) {
|
|
138
163
|
await applyTemplate(config, OBJC_FILES[`module_common`], folder);
|
|
139
164
|
} else {
|
|
140
165
|
await applyTemplate(config, OBJC_FILES[`view_${config.project.arch}`], folder);
|
|
141
166
|
}
|
|
142
167
|
}
|
|
143
|
-
const templateType = `${config.project.
|
|
168
|
+
const templateType = `${config.project.moduleConfig !== null ? 'module' : 'view'}_${config.project.arch}`;
|
|
144
169
|
await applyTemplate(config, KOTLIN_FILES[templateType], folder);
|
|
145
170
|
if (config.project.cpp) {
|
|
146
171
|
await applyTemplate(config, CPP_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_MODULE_LEGACY_FILES","EXAMPLE_MODULE_NEW_FILES","EXAMPLE_VIEW_FILES","JS_FILES","EXPO_FILES","CPP_FILES","NATIVE_COMMON_FILES","NATIVE_COMMON_EXAMPLE_FILES","NATIVE_FILES","module_legacy","module_new","view_legacy","view_new","OBJC_FILES","module_common","KOTLIN_FILES","SWIFT_FILES","generateTemplateConfiguration","bobVersion","basename","answers","slug","languages","type","arch","project","replace","namespace","startsWith","includes","split","toLowerCase","pack","bob","version","description","name","test","charAt","toUpperCase","_","$1","slice","package","package_dir","package_cpp","identifier","native","cpp","swift","view","endsWith","module","author","authorName","email","authorEmail","url","authorUrl","repo","repoUrl","example","year","Date","getFullYear","applyTemplates","config","folder","local","applyTemplate","templateType","fs","remove","join","source","destination","mkdirp","files","readdir","f","target","ejs","render","openDelimiter","closeDelimiter","file","stats","stat","isDirectory","some","r","content","readFile","writeFile","copyFile"],"sources":["../src/template.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport ejs from 'ejs';\nimport type { Answers, ExampleApp, SupportedArchitecture } from './input';\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 bob: {\n version: string;\n };\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 arch: SupportedArchitecture;\n cpp: boolean;\n swift: boolean;\n view: boolean;\n module: boolean;\n };\n author: {\n name: string;\n email: string;\n url: string;\n };\n repo: string;\n example: ExampleApp;\n year: number;\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_MODULE_LEGACY_FILES = path.resolve(\n __dirname,\n '../templates/example-module-legacy'\n);\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');\n\nconst JS_FILES = path.resolve(__dirname, '../templates/js-library');\nconst EXPO_FILES = path.resolve(__dirname, '../templates/expo-library');\nconst CPP_FILES = path.resolve(__dirname, '../templates/cpp-library');\nconst NATIVE_COMMON_FILES = path.resolve(\n __dirname,\n '../templates/native-common'\n);\nconst NATIVE_COMMON_EXAMPLE_FILES = path.resolve(\n __dirname,\n '../templates/native-common-example'\n);\n\nconst NATIVE_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/native-library-legacy'),\n module_new: path.resolve(__dirname, '../templates/native-library-new'),\n view_legacy: path.resolve(__dirname, '../templates/native-view-legacy'),\n view_new: path.resolve(__dirname, '../templates/native-view-new'),\n} as const;\n\nconst OBJC_FILES = {\n module_common: path.resolve(__dirname, '../templates/objc-library'),\n view_legacy: path.resolve(__dirname, '../templates/objc-view-legacy'),\n view_new: path.resolve(__dirname, '../templates/objc-view-new'),\n} as const;\n\nconst KOTLIN_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/kotlin-library-legacy'),\n module_new: path.resolve(__dirname, '../templates/kotlin-library-new'),\n view_legacy: path.resolve(__dirname, '../templates/kotlin-view-legacy'),\n view_new: path.resolve(__dirname, '../templates/kotlin-view-new'),\n} as const;\n\nconst SWIFT_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/swift-library-legacy'),\n view_legacy: path.resolve(__dirname, '../templates/swift-view-legacy'),\n} as const;\n\nexport function generateTemplateConfiguration({\n bobVersion,\n basename,\n answers,\n}: {\n bobVersion: string;\n basename: string;\n answers: Answers;\n}): TemplateConfiguration {\n const { slug, languages, type } = answers;\n\n const arch =\n type === 'legacy-module' || type === 'legacy-view' || type === 'library'\n ? 'legacy'\n : 'new';\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 bob: {\n version: bobVersion,\n },\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) => $1.toUpperCase())\n .slice(1)}`,\n package: pack,\n package_dir: pack.replace(/\\./g, '/'),\n package_cpp: pack.replace(/\\./g, '_'),\n identifier: slug.replace(/[^a-z0-9]+/g, '-').replace(/^-/, ''),\n native: languages !== 'js',\n arch,\n cpp: languages === 'cpp',\n swift: languages === 'kotlin-swift',\n view: answers.type.endsWith('-view'),\n module: answers.type.endsWith('-module'),\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 year: new Date().getFullYear(),\n };\n}\n\nexport async function applyTemplates(\n answers: Answers,\n config: TemplateConfiguration,\n folder: string\n) {\n const { local } = answers;\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 !== 'none') {\n await applyTemplate(config, EXAMPLE_COMMON_FILES, folder);\n\n if (config.project.view) {\n await applyTemplate(config, EXAMPLE_VIEW_FILES, folder);\n } else {\n if (config.project.arch === 'legacy') {\n await applyTemplate(config, EXAMPLE_MODULE_LEGACY_FILES, folder);\n } else {\n await applyTemplate(config, EXAMPLE_MODULE_NEW_FILES, folder);\n }\n }\n }\n }\n\n if (answers.languages === 'js') {\n await applyTemplate(config, JS_FILES, folder);\n await applyTemplate(config, EXPO_FILES, folder);\n } else {\n await applyTemplate(config, NATIVE_COMMON_FILES, folder);\n\n if (config.example !== 'none') {\n await applyTemplate(config, NATIVE_COMMON_EXAMPLE_FILES, folder);\n }\n\n if (config.project.module) {\n await applyTemplate(\n config,\n NATIVE_FILES[`module_${config.project.arch}`],\n folder\n );\n } else {\n await applyTemplate(\n config,\n NATIVE_FILES[`view_${config.project.arch}`],\n folder\n );\n }\n\n if (config.project.swift) {\n await applyTemplate(config, SWIFT_FILES[`module_legacy`], folder);\n } else {\n if (config.project.module) {\n await applyTemplate(config, OBJC_FILES[`module_common`], folder);\n } else {\n await applyTemplate(\n config,\n OBJC_FILES[`view_${config.project.arch}`],\n folder\n );\n }\n }\n\n const templateType = `${config.project.module ? 'module' : 'view'}_${\n config.project.arch\n }` as const;\n\n await applyTemplate(config, KOTLIN_FILES[templateType], folder);\n\n if (config.project.cpp) {\n await applyTemplate(config, CPP_FILES, folder);\n await fs.remove(path.join(folder, 'ios', `${config.project.name}.m`));\n }\n }\n}\n\n/**\n * This copies the template files and renders them via ejs\n */\nasync 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 const target = path.join(\n destination,\n ejs.render(f.replace(/^\\$/, ''), config, {\n openDelimiter: '{',\n closeDelimiter: '}',\n })\n );\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 await fs.writeFile(target, ejs.render(content, config));\n } else {\n await fs.copyFile(file, target);\n }\n }\n}\n"],"mappings":"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","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_MODULE_LEGACY_FILES","EXAMPLE_MODULE_NEW_FILES","EXAMPLE_VIEW_FILES","JS_FILES","EXPO_FILES","CPP_FILES","NATIVE_COMMON_FILES","NATIVE_COMMON_EXAMPLE_FILES","NATIVE_FILES","module_legacy","module_new","view_legacy","view_new","module_nitro","OBJC_FILES","module_common","KOTLIN_FILES","SWIFT_FILES","generateTemplateConfiguration","versions","basename","answers","slug","languages","type","arch","project","replace","namespace","startsWith","includes","split","toLowerCase","pack","description","name","test","charAt","toUpperCase","_","$1","slice","package","package_dir","package_cpp","identifier","native","cpp","swift","viewConfig","getViewConfig","moduleConfig","getModuleConfig","author","authorName","email","authorEmail","url","authorUrl","repo","repoUrl","example","year","Date","getFullYear","projectType","applyTemplates","config","folder","local","applyTemplate","templateType","fs","remove","join","source","destination","mkdirp","files","readdir","f","target","ejs","render","openDelimiter","closeDelimiter","file","stats","stat","isDirectory","some","r","content","readFile","writeFile","copyFile"],"sources":["../src/template.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport ejs from 'ejs';\nimport type {\n Answers,\n ExampleApp,\n ProjectType,\n SupportedArchitecture,\n} from './input';\n\nexport type TemplateVersions = {\n bob: string;\n nitroModules?: string;\n nitroCodegen?: string;\n};\n\nexport type ModuleConfig =\n | 'native-modules'\n | 'turbo-modules'\n | 'nitro-modules'\n | null;\n\nexport type ViewConfig = 'paper-view' | 'fabric-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 arch: SupportedArchitecture;\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 repo: string;\n example: ExampleApp;\n year: number;\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_MODULE_LEGACY_FILES = path.resolve(\n __dirname,\n '../templates/example-module-legacy'\n);\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');\n\nconst JS_FILES = path.resolve(__dirname, '../templates/js-library');\nconst EXPO_FILES = path.resolve(__dirname, '../templates/expo-library');\nconst CPP_FILES = path.resolve(__dirname, '../templates/cpp-library');\nconst NATIVE_COMMON_FILES = path.resolve(\n __dirname,\n '../templates/native-common'\n);\nconst NATIVE_COMMON_EXAMPLE_FILES = path.resolve(\n __dirname,\n '../templates/native-common-example'\n);\n\nconst NATIVE_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/native-library-legacy'),\n module_new: path.resolve(__dirname, '../templates/native-library-new'),\n view_legacy: path.resolve(__dirname, '../templates/native-view-legacy'),\n view_new: path.resolve(__dirname, '../templates/native-view-new'),\n module_nitro: path.resolve(__dirname, '../templates/nitro-module'),\n} as const;\n\nconst OBJC_FILES = {\n module_common: path.resolve(__dirname, '../templates/objc-library'),\n view_legacy: path.resolve(__dirname, '../templates/objc-view-legacy'),\n view_new: path.resolve(__dirname, '../templates/objc-view-new'),\n} as const;\n\nconst KOTLIN_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/kotlin-library-legacy'),\n module_new: path.resolve(__dirname, '../templates/kotlin-library-new'),\n view_legacy: path.resolve(__dirname, '../templates/kotlin-view-legacy'),\n view_new: path.resolve(__dirname, '../templates/kotlin-view-new'),\n} as const;\n\nconst SWIFT_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/swift-library-legacy'),\n view_legacy: path.resolve(__dirname, '../templates/swift-view-legacy'),\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 arch =\n type === 'legacy-module' || type === 'legacy-view' || type === 'library'\n ? 'legacy'\n : 'new';\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) => $1.toUpperCase())\n .slice(1)}`,\n package: pack,\n package_dir: pack.replace(/\\./g, '/'),\n package_cpp: pack.replace(/\\./g, '_'),\n identifier: slug.replace(/[^a-z0-9]+/g, '-').replace(/^-/, ''),\n native: languages !== 'js',\n arch,\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 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 'legacy-module':\n return 'native-modules';\n default:\n return null;\n }\n}\n\nfunction getViewConfig(projectType: ProjectType): ViewConfig {\n switch (projectType) {\n case 'legacy-view':\n return 'paper-view';\n case 'fabric-view':\n return 'fabric-view';\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 if (local) {\n await applyTemplate(config, COMMON_LOCAL_FILES, folder);\n } else {\n await applyTemplate(config, COMMON_FILES, folder);\n\n if (config.example !== 'none') {\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 if (config.project.arch === 'legacy') {\n await applyTemplate(config, EXAMPLE_MODULE_LEGACY_FILES, folder);\n } else {\n await applyTemplate(config, EXAMPLE_MODULE_NEW_FILES, folder);\n }\n }\n }\n }\n\n if (answers.languages === 'js') {\n await applyTemplate(config, JS_FILES, folder);\n await applyTemplate(config, EXPO_FILES, folder);\n } else {\n await applyTemplate(config, NATIVE_COMMON_FILES, folder);\n\n if (config.example !== 'none') {\n await applyTemplate(config, NATIVE_COMMON_EXAMPLE_FILES, folder);\n }\n\n if (config.project.moduleConfig === 'nitro-modules') {\n await applyTemplate(config, NATIVE_FILES['module_nitro'], folder);\n return;\n }\n\n if (config.project.moduleConfig !== null) {\n await applyTemplate(\n config,\n NATIVE_FILES[`module_${config.project.arch}`],\n folder\n );\n } else {\n await applyTemplate(\n config,\n NATIVE_FILES[`view_${config.project.arch}`],\n folder\n );\n }\n\n if (config.project.swift) {\n await applyTemplate(config, SWIFT_FILES[`module_legacy`], folder);\n } else {\n if (config.project.moduleConfig !== null) {\n await applyTemplate(config, OBJC_FILES[`module_common`], folder);\n } else {\n await applyTemplate(\n config,\n OBJC_FILES[`view_${config.project.arch}`],\n folder\n );\n }\n }\n\n const templateType = `${\n config.project.moduleConfig !== null ? 'module' : 'view'\n }_${config.project.arch}` as const;\n\n await applyTemplate(config, KOTLIN_FILES[templateType], folder);\n\n if (config.project.cpp) {\n await applyTemplate(config, CPP_FILES, folder);\n await fs.remove(path.join(folder, 'ios', `${config.project.name}.m`));\n }\n }\n}\n\n/**\n * This copies the template files and renders them via ejs\n */\nasync 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 const target = path.join(\n destination,\n ejs.render(f.replace(/^\\$/, ''), config, {\n openDelimiter: '{',\n closeDelimiter: '}',\n })\n );\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 await fs.writeFile(target, ejs.render(content, config));\n } else {\n await fs.copyFile(file, target);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-react-native-library",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.48.1",
|
|
4
4
|
"description": "CLI to scaffold React Native libraries",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
@@ -65,5 +65,5 @@
|
|
|
65
65
|
"@types/validate-npm-package-name": "^3.0.3",
|
|
66
66
|
"@types/yargs": "^17.0.10"
|
|
67
67
|
},
|
|
68
|
-
"gitHead": "
|
|
68
|
+
"gitHead": "1fde128943f2cfb09a43dc4cc1302341515be51a"
|
|
69
69
|
}
|
|
@@ -61,6 +61,11 @@ jobs:
|
|
|
61
61
|
|
|
62
62
|
- name: Setup
|
|
63
63
|
uses: ./.github/actions/setup
|
|
64
|
+
<% if (project.moduleConfig === 'nitro-modules') { -%>
|
|
65
|
+
|
|
66
|
+
- name: Generate nitrogen code
|
|
67
|
+
run: yarn nitrogen
|
|
68
|
+
<% } -%>
|
|
64
69
|
|
|
65
70
|
- name: Cache turborepo for Android
|
|
66
71
|
uses: actions/cache@v4
|
|
@@ -117,6 +122,11 @@ jobs:
|
|
|
117
122
|
|
|
118
123
|
- name: Setup
|
|
119
124
|
uses: ./.github/actions/setup
|
|
125
|
+
<% if (project.moduleConfig === 'nitro-modules') { -%>
|
|
126
|
+
|
|
127
|
+
- name: Generate nitrogen code
|
|
128
|
+
run: yarn nitrogen
|
|
129
|
+
<% } -%>
|
|
120
130
|
|
|
121
131
|
- name: Cache turborepo for iOS
|
|
122
132
|
uses: actions/cache@v4
|
|
@@ -23,6 +23,9 @@
|
|
|
23
23
|
"android",
|
|
24
24
|
"ios",
|
|
25
25
|
"cpp",
|
|
26
|
+
<% if (project.moduleConfig === "nitro-modules") { -%>
|
|
27
|
+
"nitrogen",
|
|
28
|
+
<% } -%>
|
|
26
29
|
"*.podspec",
|
|
27
30
|
"react-native.config.js",
|
|
28
31
|
"!ios/build",
|
|
@@ -49,6 +52,9 @@
|
|
|
49
52
|
"clean": "del-cli lib",
|
|
50
53
|
<% } -%>
|
|
51
54
|
"prepare": "bob build",
|
|
55
|
+
<% if (project.moduleConfig === 'nitro-modules') { -%>
|
|
56
|
+
"nitrogen": "nitro-codegen",
|
|
57
|
+
<% } -%>
|
|
52
58
|
"release": "release-it"
|
|
53
59
|
},
|
|
54
60
|
"keywords": [
|
|
@@ -72,7 +78,7 @@
|
|
|
72
78
|
"devDependencies": {
|
|
73
79
|
"@commitlint/config-conventional": "^17.0.2",
|
|
74
80
|
"@evilmartians/lefthook": "^1.5.0",
|
|
75
|
-
<% if (example === 'vanilla') { -%>
|
|
81
|
+
<% if (example === 'vanilla' && (project.moduleConfig === 'turbo-modules' || project.viewConfig === 'fabric-view')) { -%>
|
|
76
82
|
"@react-native-community/cli": "15.0.0-alpha.2",
|
|
77
83
|
<% } -%>
|
|
78
84
|
"@react-native/eslint-config": "^0.73.1",
|
|
@@ -85,10 +91,16 @@
|
|
|
85
91
|
"eslint-config-prettier": "^9.0.0",
|
|
86
92
|
"eslint-plugin-prettier": "^5.0.1",
|
|
87
93
|
"jest": "^29.7.0",
|
|
94
|
+
<% if (project.moduleConfig === 'nitro-modules') { -%>
|
|
95
|
+
"nitro-codegen": "^<%- versions.nitroCodegen %>",
|
|
96
|
+
<% } -%>
|
|
88
97
|
"prettier": "^3.0.3",
|
|
89
98
|
"react": "17.0.2",
|
|
90
99
|
"react-native": "0.73.0",
|
|
91
|
-
"react-native-builder-bob": "^<%- bob
|
|
100
|
+
"react-native-builder-bob": "^<%- versions.bob %>",
|
|
101
|
+
<% if (project.moduleConfig === 'nitro-modules') { -%>
|
|
102
|
+
"react-native-nitro-modules": "^<%- versions.nitroModules %>",
|
|
103
|
+
<% } -%>
|
|
92
104
|
"release-it": "^17.10.0",
|
|
93
105
|
<% if (example !== 'expo') { -%>
|
|
94
106
|
"turbo": "^1.10.7",
|
|
@@ -100,7 +112,12 @@
|
|
|
100
112
|
},
|
|
101
113
|
"peerDependencies": {
|
|
102
114
|
"react": "*",
|
|
115
|
+
<% if (project.moduleConfig === 'nitro-modules') { -%>
|
|
116
|
+
"react-native": "*",
|
|
117
|
+
"react-native-nitro-modules": "^<%- versions.nitroModules %>"
|
|
118
|
+
<% } else { -%>
|
|
103
119
|
"react-native": "*"
|
|
120
|
+
<% } -%>
|
|
104
121
|
},
|
|
105
122
|
<% if (example !== 'none') { -%>
|
|
106
123
|
"workspaces": [
|
|
@@ -172,7 +189,16 @@
|
|
|
172
189
|
"source": "src",
|
|
173
190
|
"output": "lib",
|
|
174
191
|
"targets": [
|
|
175
|
-
<% if (project.
|
|
192
|
+
<% if (project.moduleConfig === "nitro-modules") { -%>
|
|
193
|
+
[
|
|
194
|
+
"custom",
|
|
195
|
+
{
|
|
196
|
+
"script": "nitrogen",
|
|
197
|
+
"clean": "nitrogen/"
|
|
198
|
+
}
|
|
199
|
+
],
|
|
200
|
+
<% } -%>
|
|
201
|
+
<% if (project.moduleConfig === 'turbo-modules' || project.viewConfig === 'fabric-view') { -%>
|
|
176
202
|
"codegen",
|
|
177
203
|
<% } -%>
|
|
178
204
|
[
|
|
@@ -194,11 +220,11 @@
|
|
|
194
220
|
}
|
|
195
221
|
]
|
|
196
222
|
]
|
|
197
|
-
<% if (project.
|
|
223
|
+
<% if (project.moduleConfig === 'turbo-modules' || project.viewConfig === 'fabric-view') { -%>
|
|
198
224
|
},
|
|
199
225
|
"codegenConfig": {
|
|
200
|
-
"name": "RN<%- project.name -%><%- project.
|
|
201
|
-
"type": "<%- project.
|
|
226
|
+
"name": "RN<%- project.name -%><%- project.viewConfig !== null ? 'View': '' -%>Spec",
|
|
227
|
+
"type": "<%- project.viewConfig !== null ? 'components': 'modules' -%>",
|
|
202
228
|
"jsSrcsDir": "src",
|
|
203
229
|
"outputDir": {
|
|
204
230
|
"ios": "ios/generated",
|
|
@@ -18,6 +18,22 @@ yarn
|
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
> Since the project relies on Yarn workspaces, you cannot use [`npm`](https://github.com/npm/cli) for development.
|
|
21
|
+
<% if (project.moduleConfig === 'nitro-modules') { -%>
|
|
22
|
+
|
|
23
|
+
This project uses Nitro Modules. If you're not familiar with how Nitro works, make sure to check the [Nitro Modules Docs](https://nitro.margelo.com/).
|
|
24
|
+
|
|
25
|
+
You need to run [Nitrogen](https://nitro.margelo.com/docs/nitrogen) to generate the boilerplate code required for this project. The example app will not build without this step.
|
|
26
|
+
|
|
27
|
+
Run **Nitrogen** in following cases:
|
|
28
|
+
- When you make changes to any `*.nitro.ts` files.
|
|
29
|
+
- When running the project for the first time (since the generated files are not committed to the repository).
|
|
30
|
+
|
|
31
|
+
To invoke **Nitrogen**, use the following command:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
yarn nitrogen
|
|
35
|
+
```
|
|
36
|
+
<% } -%>
|
|
21
37
|
|
|
22
38
|
The [example app](/example/) demonstrates usage of the library. You need to run it to test any changes you make.
|
|
23
39
|
|
|
@@ -4,13 +4,21 @@
|
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
|
+
<% if (project.moduleConfig === 'nitro-modules') { -%>
|
|
8
|
+
```sh
|
|
9
|
+
npm install <%- project.slug %> react-native-nitro-modules
|
|
10
|
+
|
|
11
|
+
> `react-native-nitro-modules` is required as this library relies on [Nitro Modules](https://nitro.margelo.com/).
|
|
12
|
+
```
|
|
13
|
+
<% } else { -%>
|
|
7
14
|
```sh
|
|
8
15
|
npm install <%- project.slug %>
|
|
9
16
|
```
|
|
17
|
+
<% } -%>
|
|
10
18
|
|
|
11
19
|
## Usage
|
|
12
20
|
|
|
13
|
-
<% if (project.
|
|
21
|
+
<% if (project.viewConfig !== null) { -%>
|
|
14
22
|
|
|
15
23
|
```js
|
|
16
24
|
import { <%- project.name -%>View } from "<%- project.slug -%>";
|
|
@@ -20,7 +28,7 @@ import { <%- project.name -%>View } from "<%- project.slug -%>";
|
|
|
20
28
|
<<%- project.name -%>View color="tomato" />
|
|
21
29
|
```
|
|
22
30
|
|
|
23
|
-
<% } else if (project.
|
|
31
|
+
<% } else if (project.moduleConfig === 'nitro-modules' || project.moduleConfig === 'turbo-modules') { -%>
|
|
24
32
|
|
|
25
33
|
```js
|
|
26
34
|
import { multiply } from '<%- project.slug -%>';
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
"main": "src/index",
|
|
6
6
|
<% if (project.arch === 'new') { -%>
|
|
7
7
|
"codegenConfig": {
|
|
8
|
-
"name": "RN<%- project.name -%><%- project.
|
|
9
|
-
"type": <%- project.
|
|
8
|
+
"name": "RN<%- project.name -%><%- project.viewConfig !== null ? 'View': '' -%>Spec",
|
|
9
|
+
"type": <%- project.viewConfig !== null ? '"components"': '"modules"' %>,
|
|
10
10
|
"jsSrcsDir": "src"
|
|
11
11
|
},
|
|
12
12
|
<% } -%>
|
|
@@ -15,7 +15,7 @@ buildscript {
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
<% if (project.cpp) { -%>
|
|
18
|
+
<% if (project.cpp || project.moduleConfig === 'nitro-modules') { -%>
|
|
19
19
|
def reactNativeArchitectures() {
|
|
20
20
|
def value = rootProject.getProperties().get("reactNativeArchitectures")
|
|
21
21
|
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
|
|
@@ -28,6 +28,9 @@ def isNewArchitectureEnabled() {
|
|
|
28
28
|
|
|
29
29
|
apply plugin: "com.android.library"
|
|
30
30
|
apply plugin: "kotlin-android"
|
|
31
|
+
<% if (project.moduleConfig === 'nitro-modules') { -%>
|
|
32
|
+
apply from: '../nitrogen/generated/android/<%- project.package_cpp -%>+autolinking.gradle'
|
|
33
|
+
<% } -%>
|
|
31
34
|
|
|
32
35
|
if (isNewArchitectureEnabled()) {
|
|
33
36
|
apply plugin: "com.facebook.react"
|
|
@@ -48,7 +51,11 @@ def supportsNamespace() {
|
|
|
48
51
|
|
|
49
52
|
android {
|
|
50
53
|
if (supportsNamespace()) {
|
|
54
|
+
<% if (project.moduleConfig === 'nitro-modules') { -%>
|
|
55
|
+
namespace "com.margelo.nitro.<%- project.package -%>"
|
|
56
|
+
<% } else { -%>
|
|
51
57
|
namespace "com.<%- project.package -%>"
|
|
58
|
+
<% } -%>
|
|
52
59
|
|
|
53
60
|
sourceSets {
|
|
54
61
|
main {
|
|
@@ -68,17 +75,27 @@ android {
|
|
|
68
75
|
<% if (project.arch === "new") { -%>
|
|
69
76
|
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
|
|
70
77
|
<% } -%>
|
|
78
|
+
<% if (project.cpp || project.moduleConfig === 'nitro-modules') { -%>
|
|
71
79
|
|
|
72
|
-
<% if (project.cpp) { -%>
|
|
73
80
|
externalNativeBuild {
|
|
74
81
|
cmake {
|
|
75
|
-
cppFlags "-
|
|
82
|
+
cppFlags "-frtti -fexceptions -Wall -fstack-protector-all"
|
|
83
|
+
arguments "-DANDROID_STL=c++_shared"
|
|
76
84
|
abiFilters (*reactNativeArchitectures())
|
|
85
|
+
|
|
86
|
+
buildTypes {
|
|
87
|
+
debug {
|
|
88
|
+
cppFlags "-O1 -g"
|
|
89
|
+
}
|
|
90
|
+
release {
|
|
91
|
+
cppFlags "-O2"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
77
94
|
}
|
|
78
95
|
}
|
|
79
96
|
<% } -%>
|
|
80
97
|
}
|
|
81
|
-
<% if (project.cpp) { -%>
|
|
98
|
+
<% if (project.cpp || project.moduleConfig === 'nitro-modules') { -%>
|
|
82
99
|
|
|
83
100
|
externalNativeBuild {
|
|
84
101
|
cmake {
|
|
@@ -86,10 +103,36 @@ android {
|
|
|
86
103
|
}
|
|
87
104
|
}
|
|
88
105
|
<% } -%>
|
|
106
|
+
<% if (project.moduleConfig === 'nitro-modules') { -%>
|
|
107
|
+
|
|
108
|
+
packagingOptions {
|
|
109
|
+
excludes = [
|
|
110
|
+
"META-INF",
|
|
111
|
+
"META-INF/**",
|
|
112
|
+
"**/libc++_shared.so",
|
|
113
|
+
"**/libfbjni.so",
|
|
114
|
+
"**/libjsi.so",
|
|
115
|
+
"**/libfolly_json.so",
|
|
116
|
+
"**/libfolly_runtime.so",
|
|
117
|
+
"**/libglog.so",
|
|
118
|
+
"**/libhermes.so",
|
|
119
|
+
"**/libhermes-executor-debug.so",
|
|
120
|
+
"**/libhermes_executor.so",
|
|
121
|
+
"**/libreactnative.so",
|
|
122
|
+
"**/libreactnativejni.so",
|
|
123
|
+
"**/libturbomodulejsijni.so",
|
|
124
|
+
"**/libreact_nativemodule_core.so",
|
|
125
|
+
"**/libjscexecutor.so"
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
<% } -%>
|
|
89
129
|
<% if (project.arch === "new") { -%>
|
|
90
130
|
|
|
91
131
|
buildFeatures {
|
|
92
132
|
buildConfig true
|
|
133
|
+
<% if (project.moduleConfig === 'nitro-modules') { -%>
|
|
134
|
+
prefab true
|
|
135
|
+
<% } -%>
|
|
93
136
|
}
|
|
94
137
|
<% } -%>
|
|
95
138
|
|
|
@@ -132,13 +175,16 @@ def kotlin_version = getExtOrDefault("kotlinVersion")
|
|
|
132
175
|
dependencies {
|
|
133
176
|
implementation "com.facebook.react:react-android"
|
|
134
177
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
178
|
+
<% if (project.moduleConfig === 'nitro-modules') { -%>
|
|
179
|
+
implementation project(":react-native-nitro-modules")
|
|
180
|
+
<% } -%>
|
|
135
181
|
}
|
|
136
182
|
|
|
137
|
-
<% if (project.
|
|
183
|
+
<% if (project.moduleConfig === "turbo-modules" || project.viewConfig === "fabric-view") { -%>
|
|
138
184
|
if (isNewArchitectureEnabled()) {
|
|
139
185
|
react {
|
|
140
186
|
jsRootDir = file("../src/")
|
|
141
|
-
libraryName = "<%- project.
|
|
187
|
+
libraryName = "<%- project.viewConfig !== null ? project.name + 'View' : project.name -%>"
|
|
142
188
|
codegenJavaPackageName = "com.<%- project.package -%>"
|
|
143
189
|
}
|
|
144
190
|
}
|
package/templates/native-common/{{%- project.identifier %}.podspec → {%- project.name %}.podspec }
RENAMED
|
@@ -4,7 +4,7 @@ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
|
|
4
4
|
folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
|
|
5
5
|
|
|
6
6
|
Pod::Spec.new do |s|
|
|
7
|
-
s.name = "<%- project.
|
|
7
|
+
s.name = "<%- project.name -%>"
|
|
8
8
|
s.version = package["version"]
|
|
9
9
|
s.summary = package["description"]
|
|
10
10
|
s.homepage = package["homepage"]
|
|
@@ -24,6 +24,11 @@ Pod::Spec.new do |s|
|
|
|
24
24
|
<% } else { -%>
|
|
25
25
|
s.source_files = "ios/**/*.{h,m,mm}"
|
|
26
26
|
<% } -%>
|
|
27
|
+
<% if (project.moduleConfig === "nitro-modules") { -%>
|
|
28
|
+
|
|
29
|
+
load 'nitrogen/generated/ios/<%- project.name -%>+autolinking.rb'
|
|
30
|
+
add_nitrogen_files(s)
|
|
31
|
+
<% } -%>
|
|
27
32
|
|
|
28
33
|
# Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
|
|
29
34
|
# See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.
|
|
@@ -40,7 +45,7 @@ Pod::Spec.new do |s|
|
|
|
40
45
|
"OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1",
|
|
41
46
|
"CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
|
|
42
47
|
}
|
|
43
|
-
<% if (project.
|
|
48
|
+
<% if (project.viewConfig !== null) { -%>
|
|
44
49
|
s.dependency "React-RCTFabric"
|
|
45
50
|
<% } -%>
|
|
46
51
|
s.dependency "React-Codegen"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
project(<%- project.package_cpp -%>)
|
|
2
|
+
cmake_minimum_required(VERSION 3.9.0)
|
|
3
|
+
|
|
4
|
+
set(PACKAGE_NAME <%- project.package_cpp -%>)
|
|
5
|
+
set(CMAKE_VERBOSE_MAKEFILE ON)
|
|
6
|
+
set(CMAKE_CXX_STANDARD 20)
|
|
7
|
+
|
|
8
|
+
# Define C++ library and add all sources
|
|
9
|
+
add_library(${PACKAGE_NAME} SHARED src/main/cpp/cpp-adapter.cpp)
|
|
10
|
+
|
|
11
|
+
# Add Nitrogen specs :)
|
|
12
|
+
include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/<%- project.package_cpp -%>+autolinking.cmake)
|
|
13
|
+
|
|
14
|
+
# Set up local includes
|
|
15
|
+
include_directories("src/main/cpp" "../cpp")
|
|
16
|
+
|
|
17
|
+
find_library(LOG_LIB log)
|
|
18
|
+
|
|
19
|
+
# Link all libraries together
|
|
20
|
+
target_link_libraries(
|
|
21
|
+
${PACKAGE_NAME}
|
|
22
|
+
${LOG_LIB}
|
|
23
|
+
android # <-- Android core
|
|
24
|
+
)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
package com.<%- project.package %>
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.TurboReactPackage
|
|
4
|
+
import com.facebook.react.bridge.NativeModule
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
7
|
+
|
|
8
|
+
class <%- project.name -%>Package : TurboReactPackage() {
|
|
9
|
+
override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
|
|
10
|
+
return null
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
|
|
14
|
+
return ReactModuleInfoProvider { HashMap() }
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
companion object {
|
|
18
|
+
init {
|
|
19
|
+
System.loadLibrary("<%- project.package_cpp -%>")
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cxxNamespace": ["<%- project.package_cpp -%>"],
|
|
3
|
+
"ios": {
|
|
4
|
+
"iosModuleName": "<%- project.name -%>"
|
|
5
|
+
},
|
|
6
|
+
"android": {
|
|
7
|
+
"androidNamespace": <%- JSON.stringify(project.package.split('.')) -%>,
|
|
8
|
+
"androidCxxLibName": "<%- project.package_cpp -%>"
|
|
9
|
+
},
|
|
10
|
+
"autolinking": {
|
|
11
|
+
"<%- project.name -%>": {
|
|
12
|
+
"swift": "<%- project.name -%>",
|
|
13
|
+
"kotlin": "<%- project.name -%>"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"ignorePaths": ["node_modules"]
|
|
17
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { NitroModules } from 'react-native-nitro-modules';
|
|
2
|
+
import type { <%- project.name -%> } from './<%- project.name -%>.nitro';
|
|
3
|
+
|
|
4
|
+
const <%- project.name -%>HybridObject =
|
|
5
|
+
NitroModules.createHybridObject<<%- project.name -%>>('<%- project.name -%>');
|
|
6
|
+
|
|
7
|
+
export function multiply(a: number, b: number): number {
|
|
8
|
+
return <%- project.name -%>HybridObject.multiply(a, b);
|
|
9
|
+
}
|