create-react-native-library 0.55.0 → 0.55.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,4 +10,4 @@ npx create-react-native-library@latest react-native-awesome-library
10
10
 
11
11
  This will ask you few questions about your project and generate a new project in a folder named `awesome-library`.
12
12
 
13
- See more details on the [documentation website](https://callstack.github.io/react-native-builder-bob/create).
13
+ See more details on the [documentation website](https://oss.callstack.com/react-native-builder-bob/create).
@@ -48,7 +48,8 @@ async function generateExampleApp({
48
48
  // `npx create-expo-app example --no-install --template blank`
49
49
  args = ['create-expo-app@latest', directory, '--no-install', '--template', 'blank'];
50
50
  break;
51
- case 'none':
51
+ case undefined:
52
+ case null:
52
53
  {
53
54
  // Do nothing
54
55
  }
@@ -117,7 +118,7 @@ async function generateExampleApp({
117
118
  });
118
119
  const PACKAGES_TO_ADD_DEV = {
119
120
  'react-native-builder-bob': `^${config.versions.bob}`,
120
- 'react-native-monorepo-config': `^0.1.9`
121
+ 'react-native-monorepo-config': `^0.3.1`
121
122
  };
122
123
  if (config.project.moduleConfig === 'nitro-modules' || config.project.viewConfig === 'nitro-view') {
123
124
  const packagesToAddNitro = {
@@ -1 +1 @@
1
- {"version":3,"file":"generateExampleApp.js","names":["_fsExtra","_interopRequireDefault","require","_getLatestVersion","_https","_path","_sortObjectKeys","_spawn","e","__esModule","default","FILES_TO_DELETE","PACKAGES_TO_REMOVE","PACKAGES_TO_ADD_WEB","generateExampleApp","config","root","reactNativeVersion","directory","path","join","args","example","project","name","package","matchedReactNativeVersion","test","getLatestVersion","range","Error","spawn","env","process","npm_config_yes","file","fs","remove","pkg","readJSON","slug","jest","scripts","dependencies","devDependencies","lint","SCRIPTS_TO_ADD","Object","assign","androidBuild","iosBuild","app","android","ios","bundleIdentifier","writeJSON","spaces","forEach","PACKAGES_TO_ADD_DEV","versions","bob","moduleConfig","viewConfig","packagesToAddNitro","nitro","sdkVersion","expo","split","replace","bundledNativeModules","Promise","resolve","reject","https","get","res","data","on","chunk","JSON","parse","entries","version","web","field","sortObjectKeys","gradleProperties","readFile","podfile","writeFile","includes"],"sources":["../../src/exampleApp/generateExampleApp.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport getLatestVersion from 'get-latest-version';\nimport https from 'https';\nimport path from 'path';\nimport type { TemplateConfiguration } from '../template';\nimport sortObjectKeys from '../utils/sortObjectKeys';\nimport { spawn } from '../utils/spawn';\n\nconst FILES_TO_DELETE = [\n '__tests__',\n '.buckconfig',\n '.eslintrc.js',\n '.flowconfig',\n '.git',\n '.gitignore',\n '.prettierrc.js',\n 'App.js',\n 'App.tsx',\n 'index.js',\n 'tsconfig.json',\n];\n\nconst PACKAGES_TO_REMOVE = [\n '@react-native/eslint-config',\n '@react-native/new-app-screen',\n '@tsconfig/react-native',\n '@types/jest',\n '@types/react-test-renderer',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'babel-jest',\n 'eslint',\n 'jest',\n 'prettier',\n 'react-test-renderer',\n 'typescript',\n 'react-native-safe-area-context',\n];\n\nconst PACKAGES_TO_ADD_WEB = {\n '@expo/metro-runtime': '~5.0.4',\n 'react-dom': '19.1.0',\n 'react-native-web': '~0.21.1',\n};\n\nexport default async function generateExampleApp({\n config,\n root,\n reactNativeVersion = 'latest',\n}: {\n config: TemplateConfiguration;\n root: string;\n reactNativeVersion?: string;\n}) {\n const directory = path.join(root, 'example');\n\n let args: string[] = [];\n\n switch (config.example) {\n case 'vanilla':\n // `npx @react-native-community/cli init <projectName> --directory example --skip-install`\n args = [\n `@react-native-community/cli`,\n 'init',\n `${config.project.name}Example`,\n '--package-name',\n `${config.project.package}.example`,\n '--directory',\n directory,\n '--version',\n reactNativeVersion,\n '--skip-install',\n '--skip-git-init',\n '--pm',\n 'npm',\n ];\n break;\n case 'test-app':\n {\n // Test App requires React Native version to be a semver version\n const matchedReactNativeVersion = /(\\d+\\.\\d+[-.0-9a-z]*)/.test(\n reactNativeVersion\n )\n ? reactNativeVersion\n : await getLatestVersion('react-native', {\n range: reactNativeVersion,\n });\n\n if (!matchedReactNativeVersion) {\n throw new Error(\n `Could not find a matching version for react-native: ${reactNativeVersion}`\n );\n }\n\n // `npx --package react-native-test-app@latest init --name ${projectName}Example --destination example --version ${reactNativeVersion}`\n args = [\n '--package',\n `react-native-test-app@latest`,\n 'init',\n '--name',\n `${config.project.name}Example`,\n `--destination`,\n directory,\n '--version',\n matchedReactNativeVersion,\n '--platform',\n 'ios',\n '--platform',\n 'android',\n ];\n }\n break;\n case 'expo':\n // `npx create-expo-app example --no-install --template blank`\n args = [\n 'create-expo-app@latest',\n directory,\n '--no-install',\n '--template',\n 'blank',\n ];\n break;\n case 'none': {\n // Do nothing\n }\n }\n\n await spawn('npx', args, {\n env: { ...process.env, npm_config_yes: 'true' },\n });\n\n // Remove unnecessary files and folders\n for (const file of FILES_TO_DELETE) {\n await fs.remove(path.join(directory, file));\n }\n\n // Patch the example app's package.json\n const pkg = await fs.readJSON(path.join(directory, 'package.json'));\n\n pkg.name = `${config.project.slug}-example`;\n\n // Remove Jest config for now\n delete pkg.jest;\n\n // Make sure we have at least empty objects\n // Otherwise generation will fails if package doesn't contain these fields\n pkg.scripts = pkg.scripts || {};\n pkg.dependencies = pkg.dependencies || {};\n pkg.devDependencies = pkg.devDependencies || {};\n\n const { scripts, dependencies, devDependencies } = pkg;\n\n delete scripts.test;\n delete scripts.lint;\n\n const SCRIPTS_TO_ADD = {\n 'build:android':\n 'react-native build-android --extra-params \"--no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a\"',\n 'build:ios': `react-native build-ios --mode Debug`,\n };\n\n if (config.example === 'vanilla') {\n Object.assign(scripts, SCRIPTS_TO_ADD);\n } else if (config.example === 'test-app') {\n // `react-native-test-app` doesn't bundle application by default in 'Release' mode and also `bundle` command doesn't create a directory.\n // `mkdist` script should be removed after stable React Native major contains this fix: https://github.com/facebook/react-native/pull/45182.\n\n const androidBuild = [\n 'npm run mkdist',\n 'react-native bundle --entry-file index.js --platform android --dev true --bundle-output dist/main.android.jsbundle --assets-dest dist',\n SCRIPTS_TO_ADD['build:android'],\n ].join(' && ');\n\n const iosBuild = [\n 'npm run mkdist',\n 'react-native bundle --entry-file index.js --platform ios --dev true --bundle-output dist/main.ios.jsbundle --assets-dest dist',\n SCRIPTS_TO_ADD['build:ios'],\n ].join(' && ');\n\n Object.assign(scripts, {\n 'build:android': androidBuild,\n 'build:ios': iosBuild,\n });\n\n const app = await fs.readJSON(path.join(directory, 'app.json'));\n\n app.android = app.android || {};\n app.android.package = `${config.project.package}.example`;\n app.ios = app.ios || {};\n app.ios.bundleIdentifier = `${config.project.package}.example`;\n\n await fs.writeJSON(path.join(directory, 'app.json'), app, {\n spaces: 2,\n });\n }\n\n PACKAGES_TO_REMOVE.forEach((name) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete devDependencies[name];\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete dependencies[name];\n });\n\n const PACKAGES_TO_ADD_DEV = {\n 'react-native-builder-bob': `^${config.versions.bob}`,\n 'react-native-monorepo-config': `^0.1.9`,\n };\n\n if (\n config.project.moduleConfig === 'nitro-modules' ||\n config.project.viewConfig === 'nitro-view'\n ) {\n const packagesToAddNitro = {\n 'react-native-nitro-modules': `^${config.versions.nitro || 'latest'}`,\n };\n\n Object.assign(dependencies, packagesToAddNitro);\n }\n\n Object.assign(devDependencies, PACKAGES_TO_ADD_DEV);\n\n if (config.example === 'expo') {\n const sdkVersion: string = dependencies.expo\n .split('.')[0]\n .replace(/[^\\d]/, '');\n\n let bundledNativeModules: Record<string, string>;\n\n try {\n bundledNativeModules = await new Promise((resolve, reject) => {\n https\n .get(\n `https://raw.githubusercontent.com/expo/expo/sdk-${sdkVersion}/packages/expo/bundledNativeModules.json`,\n (res) => {\n let data = '';\n\n res.on('data', (chunk: string) => (data += chunk));\n res.on('end', () => {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(e);\n }\n });\n }\n )\n .on('error', reject);\n });\n } catch (e) {\n bundledNativeModules = {};\n }\n\n Object.entries(PACKAGES_TO_ADD_WEB).forEach(([name, version]) => {\n dependencies[name] = bundledNativeModules[name] || version;\n });\n\n scripts.web = 'expo start --web';\n\n const app = await fs.readJSON(path.join(directory, 'app.json'));\n\n app.expo.android = app.expo.android || {};\n app.expo.android.package = `${config.project.package}.example`;\n app.expo.ios = app.expo.ios || {};\n app.expo.ios.bundleIdentifier = `${config.project.package}.example`;\n\n await fs.writeJSON(path.join(directory, 'app.json'), app, {\n spaces: 2,\n });\n }\n\n // Sort the deps by name to match behavior of package managers\n // This way the package.json doesn't get updated when installing deps\n for (const field of ['dependencies', 'devDependencies']) {\n if (pkg[field]) {\n pkg[field] = sortObjectKeys(pkg[field]);\n }\n }\n\n await fs.writeJSON(path.join(directory, 'package.json'), pkg, {\n spaces: 2,\n });\n\n if (config.example !== 'expo') {\n let gradleProperties = await fs.readFile(\n path.join(directory, 'android', 'gradle.properties'),\n 'utf8'\n );\n\n // Disable Jetifier.\n // Remove this when the app template is updated.\n gradleProperties = gradleProperties.replace(\n 'android.enableJetifier=true',\n 'android.enableJetifier=false'\n );\n\n // Enable new arch for iOS and Android\n // iOS\n // Add ENV['RCT_NEW_ARCH_ENABLED'] = 1 on top of example/ios/Podfile\n const podfile = await fs.readFile(\n path.join(directory, 'ios', 'Podfile'),\n 'utf8'\n );\n\n await fs.writeFile(\n path.join(directory, 'ios', 'Podfile'),\n \"ENV['RCT_NEW_ARCH_ENABLED'] = '1'\\n\\n\" + podfile\n );\n\n // Android\n // Make sure newArchEnabled=true is present in android/gradle.properties\n if (gradleProperties.split('\\n').includes('#newArchEnabled=true')) {\n gradleProperties = gradleProperties.replace(\n '#newArchEnabled=true',\n 'newArchEnabled=true'\n );\n } else if (gradleProperties.split('\\n').includes('newArchEnabled=false')) {\n gradleProperties = gradleProperties.replace(\n 'newArchEnabled=false',\n 'newArchEnabled=true'\n );\n } else if (!gradleProperties.split('\\n').includes('newArchEnabled=true')) {\n gradleProperties += '\\nnewArchEnabled=true';\n }\n\n await fs.writeFile(\n path.join(directory, 'android', 'gradle.properties'),\n gradleProperties\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateExampleApp.js","names":["_fsExtra","_interopRequireDefault","require","_getLatestVersion","_https","_path","_sortObjectKeys","_spawn","e","__esModule","default","FILES_TO_DELETE","PACKAGES_TO_REMOVE","PACKAGES_TO_ADD_WEB","generateExampleApp","config","root","reactNativeVersion","directory","path","join","args","example","project","name","package","matchedReactNativeVersion","test","getLatestVersion","range","Error","undefined","spawn","env","process","npm_config_yes","file","fs","remove","pkg","readJSON","slug","jest","scripts","dependencies","devDependencies","lint","SCRIPTS_TO_ADD","Object","assign","androidBuild","iosBuild","app","android","ios","bundleIdentifier","writeJSON","spaces","forEach","PACKAGES_TO_ADD_DEV","versions","bob","moduleConfig","viewConfig","packagesToAddNitro","nitro","sdkVersion","expo","split","replace","bundledNativeModules","Promise","resolve","reject","https","get","res","data","on","chunk","JSON","parse","entries","version","web","field","sortObjectKeys","gradleProperties","readFile","podfile","writeFile","includes"],"sources":["../../src/exampleApp/generateExampleApp.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport getLatestVersion from 'get-latest-version';\nimport https from 'https';\nimport path from 'path';\nimport type { TemplateConfiguration } from '../template';\nimport sortObjectKeys from '../utils/sortObjectKeys';\nimport { spawn } from '../utils/spawn';\n\nconst FILES_TO_DELETE = [\n '__tests__',\n '.buckconfig',\n '.eslintrc.js',\n '.flowconfig',\n '.git',\n '.gitignore',\n '.prettierrc.js',\n 'App.js',\n 'App.tsx',\n 'index.js',\n 'tsconfig.json',\n];\n\nconst PACKAGES_TO_REMOVE = [\n '@react-native/eslint-config',\n '@react-native/new-app-screen',\n '@tsconfig/react-native',\n '@types/jest',\n '@types/react-test-renderer',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'babel-jest',\n 'eslint',\n 'jest',\n 'prettier',\n 'react-test-renderer',\n 'typescript',\n 'react-native-safe-area-context',\n];\n\nconst PACKAGES_TO_ADD_WEB = {\n '@expo/metro-runtime': '~5.0.4',\n 'react-dom': '19.1.0',\n 'react-native-web': '~0.21.1',\n};\n\nexport default async function generateExampleApp({\n config,\n root,\n reactNativeVersion = 'latest',\n}: {\n config: TemplateConfiguration;\n root: string;\n reactNativeVersion?: string;\n}) {\n const directory = path.join(root, 'example');\n\n let args: string[] = [];\n\n switch (config.example) {\n case 'vanilla':\n // `npx @react-native-community/cli init <projectName> --directory example --skip-install`\n args = [\n `@react-native-community/cli`,\n 'init',\n `${config.project.name}Example`,\n '--package-name',\n `${config.project.package}.example`,\n '--directory',\n directory,\n '--version',\n reactNativeVersion,\n '--skip-install',\n '--skip-git-init',\n '--pm',\n 'npm',\n ];\n break;\n case 'test-app':\n {\n // Test App requires React Native version to be a semver version\n const matchedReactNativeVersion = /(\\d+\\.\\d+[-.0-9a-z]*)/.test(\n reactNativeVersion\n )\n ? reactNativeVersion\n : await getLatestVersion('react-native', {\n range: reactNativeVersion,\n });\n\n if (!matchedReactNativeVersion) {\n throw new Error(\n `Could not find a matching version for react-native: ${reactNativeVersion}`\n );\n }\n\n // `npx --package react-native-test-app@latest init --name ${projectName}Example --destination example --version ${reactNativeVersion}`\n args = [\n '--package',\n `react-native-test-app@latest`,\n 'init',\n '--name',\n `${config.project.name}Example`,\n `--destination`,\n directory,\n '--version',\n matchedReactNativeVersion,\n '--platform',\n 'ios',\n '--platform',\n 'android',\n ];\n }\n break;\n case 'expo':\n // `npx create-expo-app example --no-install --template blank`\n args = [\n 'create-expo-app@latest',\n directory,\n '--no-install',\n '--template',\n 'blank',\n ];\n break;\n case undefined:\n case null: {\n // Do nothing\n }\n }\n\n await spawn('npx', args, {\n env: { ...process.env, npm_config_yes: 'true' },\n });\n\n // Remove unnecessary files and folders\n for (const file of FILES_TO_DELETE) {\n await fs.remove(path.join(directory, file));\n }\n\n // Patch the example app's package.json\n const pkg = await fs.readJSON(path.join(directory, 'package.json'));\n\n pkg.name = `${config.project.slug}-example`;\n\n // Remove Jest config for now\n delete pkg.jest;\n\n // Make sure we have at least empty objects\n // Otherwise generation will fails if package doesn't contain these fields\n pkg.scripts = pkg.scripts || {};\n pkg.dependencies = pkg.dependencies || {};\n pkg.devDependencies = pkg.devDependencies || {};\n\n const { scripts, dependencies, devDependencies } = pkg;\n\n delete scripts.test;\n delete scripts.lint;\n\n const SCRIPTS_TO_ADD = {\n 'build:android':\n 'react-native build-android --extra-params \"--no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a\"',\n 'build:ios': `react-native build-ios --mode Debug`,\n };\n\n if (config.example === 'vanilla') {\n Object.assign(scripts, SCRIPTS_TO_ADD);\n } else if (config.example === 'test-app') {\n // `react-native-test-app` doesn't bundle application by default in 'Release' mode and also `bundle` command doesn't create a directory.\n // `mkdist` script should be removed after stable React Native major contains this fix: https://github.com/facebook/react-native/pull/45182.\n\n const androidBuild = [\n 'npm run mkdist',\n 'react-native bundle --entry-file index.js --platform android --dev true --bundle-output dist/main.android.jsbundle --assets-dest dist',\n SCRIPTS_TO_ADD['build:android'],\n ].join(' && ');\n\n const iosBuild = [\n 'npm run mkdist',\n 'react-native bundle --entry-file index.js --platform ios --dev true --bundle-output dist/main.ios.jsbundle --assets-dest dist',\n SCRIPTS_TO_ADD['build:ios'],\n ].join(' && ');\n\n Object.assign(scripts, {\n 'build:android': androidBuild,\n 'build:ios': iosBuild,\n });\n\n const app = await fs.readJSON(path.join(directory, 'app.json'));\n\n app.android = app.android || {};\n app.android.package = `${config.project.package}.example`;\n app.ios = app.ios || {};\n app.ios.bundleIdentifier = `${config.project.package}.example`;\n\n await fs.writeJSON(path.join(directory, 'app.json'), app, {\n spaces: 2,\n });\n }\n\n PACKAGES_TO_REMOVE.forEach((name) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete devDependencies[name];\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete dependencies[name];\n });\n\n const PACKAGES_TO_ADD_DEV = {\n 'react-native-builder-bob': `^${config.versions.bob}`,\n 'react-native-monorepo-config': `^0.3.1`,\n };\n\n if (\n config.project.moduleConfig === 'nitro-modules' ||\n config.project.viewConfig === 'nitro-view'\n ) {\n const packagesToAddNitro = {\n 'react-native-nitro-modules': `^${config.versions.nitro || 'latest'}`,\n };\n\n Object.assign(dependencies, packagesToAddNitro);\n }\n\n Object.assign(devDependencies, PACKAGES_TO_ADD_DEV);\n\n if (config.example === 'expo') {\n const sdkVersion: string = dependencies.expo\n .split('.')[0]\n .replace(/[^\\d]/, '');\n\n let bundledNativeModules: Record<string, string>;\n\n try {\n bundledNativeModules = await new Promise((resolve, reject) => {\n https\n .get(\n `https://raw.githubusercontent.com/expo/expo/sdk-${sdkVersion}/packages/expo/bundledNativeModules.json`,\n (res) => {\n let data = '';\n\n res.on('data', (chunk: string) => (data += chunk));\n res.on('end', () => {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(e);\n }\n });\n }\n )\n .on('error', reject);\n });\n } catch (e) {\n bundledNativeModules = {};\n }\n\n Object.entries(PACKAGES_TO_ADD_WEB).forEach(([name, version]) => {\n dependencies[name] = bundledNativeModules[name] || version;\n });\n\n scripts.web = 'expo start --web';\n\n const app = await fs.readJSON(path.join(directory, 'app.json'));\n\n app.expo.android = app.expo.android || {};\n app.expo.android.package = `${config.project.package}.example`;\n app.expo.ios = app.expo.ios || {};\n app.expo.ios.bundleIdentifier = `${config.project.package}.example`;\n\n await fs.writeJSON(path.join(directory, 'app.json'), app, {\n spaces: 2,\n });\n }\n\n // Sort the deps by name to match behavior of package managers\n // This way the package.json doesn't get updated when installing deps\n for (const field of ['dependencies', 'devDependencies']) {\n if (pkg[field]) {\n pkg[field] = sortObjectKeys(pkg[field]);\n }\n }\n\n await fs.writeJSON(path.join(directory, 'package.json'), pkg, {\n spaces: 2,\n });\n\n if (config.example !== 'expo') {\n let gradleProperties = await fs.readFile(\n path.join(directory, 'android', 'gradle.properties'),\n 'utf8'\n );\n\n // Disable Jetifier.\n // Remove this when the app template is updated.\n gradleProperties = gradleProperties.replace(\n 'android.enableJetifier=true',\n 'android.enableJetifier=false'\n );\n\n // Enable new arch for iOS and Android\n // iOS\n // Add ENV['RCT_NEW_ARCH_ENABLED'] = 1 on top of example/ios/Podfile\n const podfile = await fs.readFile(\n path.join(directory, 'ios', 'Podfile'),\n 'utf8'\n );\n\n await fs.writeFile(\n path.join(directory, 'ios', 'Podfile'),\n \"ENV['RCT_NEW_ARCH_ENABLED'] = '1'\\n\\n\" + podfile\n );\n\n // Android\n // Make sure newArchEnabled=true is present in android/gradle.properties\n if (gradleProperties.split('\\n').includes('#newArchEnabled=true')) {\n gradleProperties = gradleProperties.replace(\n '#newArchEnabled=true',\n 'newArchEnabled=true'\n );\n } else if (gradleProperties.split('\\n').includes('newArchEnabled=false')) {\n gradleProperties = gradleProperties.replace(\n 'newArchEnabled=false',\n 'newArchEnabled=true'\n );\n } else if (!gradleProperties.split('\\n').includes('newArchEnabled=true')) {\n gradleProperties += '\\nnewArchEnabled=true';\n }\n\n await fs.writeFile(\n path.join(directory, 'android', 'gradle.properties'),\n gradleProperties\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/index.js CHANGED
@@ -1,45 +1,39 @@
1
1
  "use strict";
2
2
 
3
+ var _package = _interopRequireDefault(require("../package.json"));
3
4
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
4
5
  var _kleur = _interopRequireDefault(require("kleur"));
5
6
  var _ora = _interopRequireDefault(require("ora"));
6
7
  var _path = _interopRequireDefault(require("path"));
7
- var _yargs = _interopRequireDefault(require("yargs"));
8
8
  var _constants = require("./constants");
9
9
  var _dependencies = require("./exampleApp/dependencies");
10
10
  var _generateExampleApp = _interopRequireDefault(require("./exampleApp/generateExampleApp"));
11
11
  var _inform = require("./inform");
12
- var _input = require("./input");
12
+ var _prompt = require("./prompt");
13
13
  var _template = require("./template");
14
14
  var _assert = require("./utils/assert");
15
+ var _configureTools = require("./utils/configureTools");
15
16
  var _initialCommit = require("./utils/initialCommit");
16
17
  var _local = require("./utils/local");
17
18
  var _packageManager = require("./utils/packageManager");
18
- var _prompt = require("./utils/prompt");
19
19
  var _resolveNpmPackageVersion = require("./utils/resolveNpmPackageVersion");
20
- var _helpers = require("yargs/helpers");
21
- var _configureTools = require("./utils/configureTools");
20
+ var _createMetadata = require("./utils/createMetadata");
22
21
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
- void (0, _yargs.default)((0, _helpers.hideBin)(process.argv)).command('$0 [name]', 'create a react native library', _input.acceptedArgs, create).demandCommand().recommendCommands().fail(_inform.printErrorHelp).parserConfiguration({
24
- // don't pass kebab-case args to handler.
25
- 'strip-dashed': true
26
- }).parse();
27
- async function create(_argv) {
28
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
29
- const {
30
- _,
31
- $0,
32
- ...argv
33
- } = _argv;
34
-
22
+ async function create() {
35
23
  // Prefetch bob version in background while asking questions
36
24
  const bobVersionPromise = (0, _resolveNpmPackageVersion.resolveNpmPackageVersion)('react-native-builder-bob', _constants.FALLBACK_BOB_VERSION);
37
25
  const nitroModulesVersionPromise = (0, _resolveNpmPackageVersion.resolveNpmPackageVersion)('react-native-nitro-modules', _constants.FALLBACK_NITRO_MODULES_VERSION);
38
26
  await (0, _assert.assertNpxExists)();
39
- const questions = await (0, _input.createQuestions)(argv);
40
- const answers = await (0, _prompt.prompt)(questions, argv, {
41
- interactive: argv.interactive
27
+ const answers = await _prompt.prompt.show({
28
+ name: _package.default.name,
29
+ version: _package.default.version,
30
+ description: _package.default.description
42
31
  });
32
+ if (answers == null) {
33
+ process.exit(0);
34
+ }
35
+ console.log(''); // Empty new line after prompts
36
+
43
37
  const bobVersion = await bobVersionPromise;
44
38
  const nitroModulesVersion = answers.type === 'nitro-module' || answers.type === 'nitro-view' ? await nitroModulesVersionPromise : undefined;
45
39
  const config = (0, _template.generateTemplateConfiguration)({
@@ -56,7 +50,7 @@ async function create(_argv) {
56
50
  (0, _inform.printUsedRNVersion)(answers.reactNativeVersion, config);
57
51
  }
58
52
  const spinner = (0, _ora.default)().start();
59
- if (config.example !== 'none') {
53
+ if (config.example != null) {
60
54
  spinner.text = 'Generating example app';
61
55
  await (0, _generateExampleApp.default)({
62
56
  root: folder,
@@ -67,7 +61,7 @@ async function create(_argv) {
67
61
  spinner.text = 'Copying files';
68
62
  await (0, _template.applyTemplates)(answers, config, folder);
69
63
  const rootPackageJson = await _fsExtra.default.readJson(_path.default.join(folder, 'package.json'));
70
- if (config.example !== 'none') {
64
+ if (config.example != null) {
71
65
  await (0, _dependencies.alignDependencyVersionsWithExampleApp)(rootPackageJson, folder);
72
66
  }
73
67
  if (!answers.local && answers.tools.length > 0) {
@@ -79,7 +73,7 @@ async function create(_argv) {
79
73
  packageJson: rootPackageJson
80
74
  });
81
75
  }
82
- const libraryMetadata = (0, _input.createMetadata)(answers);
76
+ const libraryMetadata = (0, _createMetadata.createMetadata)(answers);
83
77
  rootPackageJson['create-react-native-library'] = libraryMetadata;
84
78
  await _fsExtra.default.writeJson(_path.default.join(folder, 'package.json'), rootPackageJson, {
85
79
  spaces: 2
@@ -122,4 +116,10 @@ async function create(_argv) {
122
116
  (0, _inform.printNonLocalLibNextSteps)(config);
123
117
  }
124
118
  }
119
+ create().catch(e => {
120
+ console.log('\n');
121
+ console.log(_kleur.default.red('× An error occurred while creating the project.\n'));
122
+ console.error(e);
123
+ process.exit(1);
124
+ });
125
125
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_fsExtra","_interopRequireDefault","require","_kleur","_ora","_path","_yargs","_constants","_dependencies","_generateExampleApp","_inform","_input","_template","_assert","_initialCommit","_local","_packageManager","_prompt","_resolveNpmPackageVersion","_helpers","_configureTools","e","__esModule","default","yargs","hideBin","process","argv","command","acceptedArgs","create","demandCommand","recommendCommands","fail","printErrorHelp","parserConfiguration","parse","_argv","_","$0","bobVersionPromise","resolveNpmPackageVersion","FALLBACK_BOB_VERSION","nitroModulesVersionPromise","FALLBACK_NITRO_MODULES_VERSION","assertNpxExists","questions","createQuestions","answers","prompt","interactive","bobVersion","nitroModulesVersion","type","undefined","config","generateTemplateConfiguration","versions","bob","nitro","basename","path","name","directory","folder","resolve","cwd","fs","mkdirp","reactNativeVersion","SUPPORTED_REACT_NATIVE_VERSION","printUsedRNVersion","spinner","ora","start","example","text","generateExampleApp","root","applyTemplates","rootPackageJson","readJson","join","alignDependencyVersionsWithExampleApp","local","tools","length","configureTools","packageJson","libraryMetadata","createMetadata","writeJson","spaces","printSuccessMessage","succeed","kleur","yellow","relative","packageManager","determinePackageManager","addedNitro","project","moduleConfig","addNitroDependencyToLocalLibrary","linkedLocalLibrary","linkLocalLibrary","printLocalLibNextSteps","abortController","AbortController","Promise","race","createInitialGitCommit","signal","_resolve","reject","setTimeout","error","Error","abort","message","warn","printNonLocalLibNextSteps"],"sources":["../src/index.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport kleur from 'kleur';\nimport ora from 'ora';\nimport path from 'path';\nimport yargs from 'yargs';\nimport {\n FALLBACK_BOB_VERSION,\n FALLBACK_NITRO_MODULES_VERSION,\n SUPPORTED_REACT_NATIVE_VERSION,\n} from './constants';\nimport { alignDependencyVersionsWithExampleApp } from './exampleApp/dependencies';\nimport generateExampleApp from './exampleApp/generateExampleApp';\nimport {\n printErrorHelp,\n printLocalLibNextSteps,\n printNonLocalLibNextSteps,\n printUsedRNVersion,\n} from './inform';\nimport {\n acceptedArgs,\n createMetadata,\n createQuestions,\n type Answers,\n} from './input';\nimport { applyTemplates, generateTemplateConfiguration } from './template';\nimport { assertNpxExists } from './utils/assert';\nimport { createInitialGitCommit } from './utils/initialCommit';\nimport {\n addNitroDependencyToLocalLibrary,\n linkLocalLibrary,\n} from './utils/local';\nimport { determinePackageManager } from './utils/packageManager';\nimport { prompt } from './utils/prompt';\nimport { resolveNpmPackageVersion } from './utils/resolveNpmPackageVersion';\nimport { hideBin } from 'yargs/helpers';\nimport { configureTools } from './utils/configureTools';\n\ntype Args = Partial<Answers> & {\n $0: string;\n [key: string]: unknown;\n};\n\nvoid yargs(hideBin(process.argv))\n .command('$0 [name]', 'create a react native library', acceptedArgs, create)\n .demandCommand()\n .recommendCommands()\n .fail(printErrorHelp)\n .parserConfiguration({\n // don't pass kebab-case args to handler.\n 'strip-dashed': true,\n })\n .parse();\n\nasync function create(_argv: 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 await assertNpxExists();\n\n const questions = await createQuestions(argv);\n\n const answers = await prompt<Answers, typeof argv>(questions, argv, {\n interactive: argv.interactive,\n });\n\n const bobVersion = await bobVersionPromise;\n const nitroModulesVersion =\n answers.type === 'nitro-module' || answers.type === 'nitro-view'\n ? await nitroModulesVersionPromise\n : undefined;\n\n const config = generateTemplateConfiguration({\n versions: {\n bob: bobVersion,\n nitro: nitroModulesVersion,\n },\n basename: path.basename(answers.name ?? answers.directory),\n answers,\n });\n\n const folder = path.resolve(process.cwd(), answers.directory);\n\n await fs.mkdirp(folder);\n\n if (\n answers.reactNativeVersion != null &&\n answers.reactNativeVersion !== SUPPORTED_REACT_NATIVE_VERSION\n ) {\n printUsedRNVersion(answers.reactNativeVersion, config);\n }\n\n const spinner = ora().start();\n\n if (config.example !== 'none') {\n spinner.text = 'Generating example app';\n\n await generateExampleApp({\n root: folder,\n reactNativeVersion: answers.reactNativeVersion,\n config,\n });\n }\n\n spinner.text = 'Copying files';\n\n await applyTemplates(answers, config, folder);\n\n const rootPackageJson = await fs.readJson(path.join(folder, 'package.json'));\n\n if (config.example !== 'none') {\n await alignDependencyVersionsWithExampleApp(rootPackageJson, folder);\n }\n\n if (!answers.local && answers.tools.length > 0) {\n spinner.text = 'Configuring tools';\n\n await configureTools({\n tools: answers.tools,\n config,\n root: folder,\n packageJson: rootPackageJson,\n });\n }\n\n const libraryMetadata = createMetadata(answers);\n\n rootPackageJson['create-react-native-library'] = libraryMetadata;\n\n await fs.writeJson(path.join(folder, 'package.json'), rootPackageJson, {\n spaces: 2,\n });\n\n const printSuccessMessage = () =>\n spinner.succeed(\n `Project created successfully at ${kleur.yellow(\n path.relative(process.cwd(), folder)\n )}!\\n`\n );\n\n if (answers.local) {\n const packageManager = await determinePackageManager();\n\n let addedNitro = false;\n\n if (config.project.moduleConfig === 'nitro-modules') {\n addedNitro = await addNitroDependencyToLocalLibrary(config);\n }\n\n const linkedLocalLibrary = await linkLocalLibrary(\n config,\n folder,\n packageManager\n );\n\n printSuccessMessage();\n\n printLocalLibNextSteps({\n config,\n packageManager,\n linkedLocalLibrary,\n addedNitro,\n folder,\n });\n } else {\n spinner.text = 'Initializing git repository';\n\n try {\n const abortController = new AbortController();\n\n // Creating git repository can get stuck in some cases,\n // e.g. if git asks for ssh passphrase.\n // We abort it after a timeout so that this doesn't hang forever.\n await Promise.race([\n createInitialGitCommit(folder, abortController.signal),\n new Promise<void>((_resolve, reject) => {\n setTimeout(() => {\n const error = new Error('Creating git repository took too long');\n\n abortController.abort(error.message);\n reject(error);\n }, 5000);\n }),\n ]);\n } catch (error) {\n spinner.warn('Failed to create git repository');\n }\n\n printSuccessMessage();\n\n printNonLocalLibNextSteps(config);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_package","_interopRequireDefault","require","_fsExtra","_kleur","_ora","_path","_constants","_dependencies","_generateExampleApp","_inform","_prompt","_template","_assert","_configureTools","_initialCommit","_local","_packageManager","_resolveNpmPackageVersion","_createMetadata","e","__esModule","default","create","bobVersionPromise","resolveNpmPackageVersion","FALLBACK_BOB_VERSION","nitroModulesVersionPromise","FALLBACK_NITRO_MODULES_VERSION","assertNpxExists","answers","prompt","show","name","pak","version","description","process","exit","console","log","bobVersion","nitroModulesVersion","type","undefined","config","generateTemplateConfiguration","versions","bob","nitro","basename","path","directory","folder","resolve","cwd","fs","mkdirp","reactNativeVersion","SUPPORTED_REACT_NATIVE_VERSION","printUsedRNVersion","spinner","ora","start","example","text","generateExampleApp","root","applyTemplates","rootPackageJson","readJson","join","alignDependencyVersionsWithExampleApp","local","tools","length","configureTools","packageJson","libraryMetadata","createMetadata","writeJson","spaces","printSuccessMessage","succeed","kleur","yellow","relative","packageManager","determinePackageManager","addedNitro","project","moduleConfig","addNitroDependencyToLocalLibrary","linkedLocalLibrary","linkLocalLibrary","printLocalLibNextSteps","abortController","AbortController","Promise","race","createInitialGitCommit","signal","_resolve","reject","setTimeout","error","Error","abort","message","warn","printNonLocalLibNextSteps","catch","red"],"sources":["../src/index.ts"],"sourcesContent":["import pak from '../package.json';\nimport fs from 'fs-extra';\nimport kleur from 'kleur';\nimport ora from 'ora';\nimport path from 'path';\nimport {\n FALLBACK_BOB_VERSION,\n FALLBACK_NITRO_MODULES_VERSION,\n SUPPORTED_REACT_NATIVE_VERSION,\n} from './constants';\nimport { alignDependencyVersionsWithExampleApp } from './exampleApp/dependencies';\nimport generateExampleApp from './exampleApp/generateExampleApp';\nimport {\n printLocalLibNextSteps,\n printNonLocalLibNextSteps,\n printUsedRNVersion,\n} from './inform';\nimport { prompt } from './prompt';\nimport { applyTemplates, generateTemplateConfiguration } from './template';\nimport { assertNpxExists } from './utils/assert';\nimport { configureTools } from './utils/configureTools';\nimport { createInitialGitCommit } from './utils/initialCommit';\nimport {\n addNitroDependencyToLocalLibrary,\n linkLocalLibrary,\n} from './utils/local';\nimport { determinePackageManager } from './utils/packageManager';\nimport { resolveNpmPackageVersion } from './utils/resolveNpmPackageVersion';\nimport { createMetadata } from './utils/createMetadata';\n\nasync function create() {\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 await assertNpxExists();\n\n const answers = await prompt.show({\n name: pak.name,\n version: pak.version,\n description: pak.description,\n });\n\n if (answers == null) {\n process.exit(0);\n }\n\n console.log(''); // Empty new line after prompts\n\n const bobVersion = await bobVersionPromise;\n const nitroModulesVersion =\n answers.type === 'nitro-module' || answers.type === 'nitro-view'\n ? await nitroModulesVersionPromise\n : undefined;\n\n const config = generateTemplateConfiguration({\n versions: {\n bob: bobVersion,\n nitro: nitroModulesVersion,\n },\n basename: path.basename(answers.name ?? answers.directory),\n answers,\n });\n\n const folder = path.resolve(process.cwd(), answers.directory);\n\n await fs.mkdirp(folder);\n\n if (\n answers.reactNativeVersion != null &&\n answers.reactNativeVersion !== SUPPORTED_REACT_NATIVE_VERSION\n ) {\n printUsedRNVersion(answers.reactNativeVersion, config);\n }\n\n const spinner = ora().start();\n\n if (config.example != null) {\n spinner.text = 'Generating example app';\n\n await generateExampleApp({\n root: folder,\n reactNativeVersion: answers.reactNativeVersion,\n config,\n });\n }\n\n spinner.text = 'Copying files';\n\n await applyTemplates(answers, config, folder);\n\n const rootPackageJson = await fs.readJson(path.join(folder, 'package.json'));\n\n if (config.example != null) {\n await alignDependencyVersionsWithExampleApp(rootPackageJson, folder);\n }\n\n if (!answers.local && answers.tools.length > 0) {\n spinner.text = 'Configuring tools';\n\n await configureTools({\n tools: answers.tools,\n config,\n root: folder,\n packageJson: rootPackageJson,\n });\n }\n\n const libraryMetadata = createMetadata(answers);\n\n rootPackageJson['create-react-native-library'] = libraryMetadata;\n\n await fs.writeJson(path.join(folder, 'package.json'), rootPackageJson, {\n spaces: 2,\n });\n\n const printSuccessMessage = () =>\n spinner.succeed(\n `Project created successfully at ${kleur.yellow(\n path.relative(process.cwd(), folder)\n )}!\\n`\n );\n\n if (answers.local) {\n const packageManager = await determinePackageManager();\n\n let addedNitro = false;\n\n if (config.project.moduleConfig === 'nitro-modules') {\n addedNitro = await addNitroDependencyToLocalLibrary(config);\n }\n\n const linkedLocalLibrary = await linkLocalLibrary(\n config,\n folder,\n packageManager\n );\n\n printSuccessMessage();\n\n printLocalLibNextSteps({\n config,\n packageManager,\n linkedLocalLibrary,\n addedNitro,\n folder,\n });\n } else {\n spinner.text = 'Initializing git repository';\n\n try {\n const abortController = new AbortController();\n\n // Creating git repository can get stuck in some cases,\n // e.g. if git asks for ssh passphrase.\n // We abort it after a timeout so that this doesn't hang forever.\n await Promise.race([\n createInitialGitCommit(folder, abortController.signal),\n new Promise<void>((_resolve, reject) => {\n setTimeout(() => {\n const error = new Error('Creating git repository took too long');\n\n abortController.abort(error.message);\n reject(error);\n }, 5000);\n }),\n ]);\n } catch (error) {\n spinner.warn('Failed to create git repository');\n }\n\n printSuccessMessage();\n\n printNonLocalLibNextSteps(config);\n }\n}\n\ncreate().catch((e: unknown) => {\n console.log('\\n');\n console.log(kleur.red('× An error occurred while creating the project.\\n'));\n console.error(e);\n\n process.exit(1);\n});\n"],"mappings":"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","ignoreList":[]}
package/lib/inform.js CHANGED
@@ -73,8 +73,10 @@ function printErrorHelp(message, error) {
73
73
  function printUsedRNVersion(version, config) {
74
74
  if (config.example === 'vanilla' || config.example === 'test-app') {
75
75
  console.log(`${_kleur.default.blue('ℹ')} Using untested ${_kleur.default.cyan(`react-native@${version}`)} for the example`);
76
- } else {
76
+ } else if (config.example != null) {
77
77
  console.warn(`${_kleur.default.yellow('⚠')} Ignoring --react-native-version for unsupported example type: ${_kleur.default.cyan(config.example)}`);
78
+ } else {
79
+ console.warn(`${_kleur.default.yellow('⚠')} Ignoring --react-native-version for library without example app`);
78
80
  }
79
81
  }
80
82
  //# sourceMappingURL=inform.js.map
package/lib/inform.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"inform.js","names":["_path","_interopRequireDefault","require","_dedent","_kleur","e","__esModule","default","printNonLocalLibNextSteps","config","platforms","ios","name","color","android","example","web","console","log","dedent","kleur","magenta","bold","gray","Object","entries","map","script","join","yellow","printLocalLibNextSteps","folder","linkedLocalLibrary","addedNitro","packageManager","blue","path","relative","process","cwd","project","moduleConfig","slug","printErrorHelp","message","error","printUsedRNVersion","version","cyan","warn"],"sources":["../src/inform.ts"],"sourcesContent":["import path from 'path';\nimport dedent from 'dedent';\nimport type { TemplateConfiguration } from './template';\nimport kleur from 'kleur';\n\nexport function printNonLocalLibNextSteps(config: TemplateConfiguration) {\n const platforms = {\n ios: { name: 'iOS', color: 'cyan' },\n android: { name: 'Android', color: 'green' },\n ...(config.example === 'expo'\n ? ({ web: { name: 'Web', color: 'blue' } } as const)\n : null),\n } as const;\n\n console.log(\n dedent(`\n ${kleur.magenta(\n `${kleur.bold('Get started')} with the project`\n )}${kleur.gray(':')}\n\n ${kleur.gray('$')} yarn\n ${Object.entries(platforms)\n .map(\n ([script, { name, color }]) => `\n ${kleur[color](`Run the example app on ${kleur.bold(name)}`)}${kleur.gray(\n ':'\n )}\n\n ${kleur.gray('$')} yarn example ${script}`\n )\n .join('\\n')}\n\n ${kleur.yellow(\n `See ${kleur.bold('CONTRIBUTING.md')} for more details. Good luck!`\n )}\n `)\n );\n}\n\nexport function printLocalLibNextSteps({\n folder,\n config,\n linkedLocalLibrary,\n addedNitro,\n packageManager,\n}: {\n folder: string;\n config: TemplateConfiguration;\n linkedLocalLibrary: boolean;\n addedNitro: boolean;\n packageManager: string;\n}) {\n console.log(\n dedent(`\n ${kleur.magenta(\n `${kleur.bold('Get started')} with the project`\n )}${kleur.gray(':')}\n\n ${\n (linkedLocalLibrary\n ? `- Run ${kleur.blue(\n `${packageManager} install`\n )} to link the library\\n`\n : `- Link the library at ${kleur.blue(\n path.relative(process.cwd(), folder)\n )} based on your project setup\\n`) +\n (config.project.moduleConfig === 'nitro-modules' && !addedNitro\n ? `- Run ${kleur.blue(\n `${packageManager} add react-native-nitro-modules`\n )} to install nitro modules \\n`\n : '') +\n `- Run ${kleur.blue(\n 'pod install --project-directory=ios'\n )} to install dependencies with CocoaPods\\n` +\n `- Run ${kleur.blue('npx react-native run-android')} or ${kleur.blue(\n 'npx react-native run-ios'\n )} to build and run the app\\n` +\n `- Import from ${kleur.blue(\n config.project.slug\n )} and use it in your app.`\n }\n\n ${kleur.yellow(`Good luck!`)}\n `)\n );\n}\n\nexport function printErrorHelp(message: string, error: Error) {\n console.log('\\n');\n\n if (message) {\n console.log(message);\n } else {\n console.log(\n `An unknown error occurred. See ${kleur.blue('--help')} for usage guide.`\n );\n }\n\n if (error) {\n console.log('\\n');\n\n throw error;\n }\n}\n\nexport function printUsedRNVersion(\n version: string,\n config: TemplateConfiguration\n) {\n if (config.example === 'vanilla' || config.example === 'test-app') {\n console.log(\n `${kleur.blue('ℹ')} Using untested ${kleur.cyan(\n `react-native@${version}`\n )} for the example`\n );\n } else {\n console.warn(\n `${kleur.yellow(\n '⚠'\n )} Ignoring --react-native-version for unsupported example type: ${kleur.cyan(\n config.example\n )}`\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"inform.js","names":["_path","_interopRequireDefault","require","_dedent","_kleur","e","__esModule","default","printNonLocalLibNextSteps","config","platforms","ios","name","color","android","example","web","console","log","dedent","kleur","magenta","bold","gray","Object","entries","map","script","join","yellow","printLocalLibNextSteps","folder","linkedLocalLibrary","addedNitro","packageManager","blue","path","relative","process","cwd","project","moduleConfig","slug","printErrorHelp","message","error","printUsedRNVersion","version","cyan","warn"],"sources":["../src/inform.ts"],"sourcesContent":["import path from 'path';\nimport dedent from 'dedent';\nimport type { TemplateConfiguration } from './template';\nimport kleur from 'kleur';\n\nexport function printNonLocalLibNextSteps(config: TemplateConfiguration) {\n const platforms = {\n ios: { name: 'iOS', color: 'cyan' },\n android: { name: 'Android', color: 'green' },\n ...(config.example === 'expo'\n ? ({ web: { name: 'Web', color: 'blue' } } as const)\n : null),\n } as const;\n\n console.log(\n dedent(`\n ${kleur.magenta(\n `${kleur.bold('Get started')} with the project`\n )}${kleur.gray(':')}\n\n ${kleur.gray('$')} yarn\n ${Object.entries(platforms)\n .map(\n ([script, { name, color }]) => `\n ${kleur[color](`Run the example app on ${kleur.bold(name)}`)}${kleur.gray(\n ':'\n )}\n\n ${kleur.gray('$')} yarn example ${script}`\n )\n .join('\\n')}\n\n ${kleur.yellow(\n `See ${kleur.bold('CONTRIBUTING.md')} for more details. Good luck!`\n )}\n `)\n );\n}\n\nexport function printLocalLibNextSteps({\n folder,\n config,\n linkedLocalLibrary,\n addedNitro,\n packageManager,\n}: {\n folder: string;\n config: TemplateConfiguration;\n linkedLocalLibrary: boolean;\n addedNitro: boolean;\n packageManager: string;\n}) {\n console.log(\n dedent(`\n ${kleur.magenta(\n `${kleur.bold('Get started')} with the project`\n )}${kleur.gray(':')}\n\n ${\n (linkedLocalLibrary\n ? `- Run ${kleur.blue(\n `${packageManager} install`\n )} to link the library\\n`\n : `- Link the library at ${kleur.blue(\n path.relative(process.cwd(), folder)\n )} based on your project setup\\n`) +\n (config.project.moduleConfig === 'nitro-modules' && !addedNitro\n ? `- Run ${kleur.blue(\n `${packageManager} add react-native-nitro-modules`\n )} to install nitro modules \\n`\n : '') +\n `- Run ${kleur.blue(\n 'pod install --project-directory=ios'\n )} to install dependencies with CocoaPods\\n` +\n `- Run ${kleur.blue('npx react-native run-android')} or ${kleur.blue(\n 'npx react-native run-ios'\n )} to build and run the app\\n` +\n `- Import from ${kleur.blue(\n config.project.slug\n )} and use it in your app.`\n }\n\n ${kleur.yellow(`Good luck!`)}\n `)\n );\n}\n\nexport function printErrorHelp(message: string, error: Error) {\n console.log('\\n');\n\n if (message) {\n console.log(message);\n } else {\n console.log(\n `An unknown error occurred. See ${kleur.blue('--help')} for usage guide.`\n );\n }\n\n if (error) {\n console.log('\\n');\n\n throw error;\n }\n}\n\nexport function printUsedRNVersion(\n version: string,\n config: TemplateConfiguration\n) {\n if (config.example === 'vanilla' || config.example === 'test-app') {\n console.log(\n `${kleur.blue('ℹ')} Using untested ${kleur.cyan(\n `react-native@${version}`\n )} for the example`\n );\n } else if (config.example != null) {\n console.warn(\n `${kleur.yellow(\n '⚠'\n )} Ignoring --react-native-version for unsupported example type: ${kleur.cyan(\n config.example\n )}`\n );\n } else {\n console.warn(\n `${kleur.yellow(\n '⚠'\n )} Ignoring --react-native-version for library without example app`\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/prompt.js ADDED
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.prompt = void 0;
7
+ var _nodeFs = _interopRequireDefault(require("node:fs"));
8
+ var _nodePath = _interopRequireDefault(require("node:path"));
9
+ var _pigment = require("pigment");
10
+ var _validateNpmPackageName = _interopRequireDefault(require("validate-npm-package-name"));
11
+ var _spawn = require("./utils/spawn");
12
+ var _githubUsername = _interopRequireDefault(require("github-username"));
13
+ var _configureTools = require("./utils/configureTools");
14
+ var _constants = require("./constants");
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
+ const TYPE_CHOICES = [{
17
+ title: 'Turbo module',
18
+ value: 'turbo-module',
19
+ description: 'Integration for native APIs to JS'
20
+ }, {
21
+ title: 'Fabric view',
22
+ value: 'fabric-view',
23
+ description: 'Integration for native views to JS'
24
+ }, {
25
+ title: 'Nitro module',
26
+ value: 'nitro-module',
27
+ description: 'Type-safe, fast integration for native APIs to JS'
28
+ }, {
29
+ title: 'Nitro view',
30
+ value: 'nitro-view',
31
+ description: 'Integration for native views to JS using nitro'
32
+ }, {
33
+ title: 'JavaScript library',
34
+ value: 'library',
35
+ description: 'Plain JavaScript library with Web support'
36
+ }];
37
+ const LANGUAGE_CHOICES = [{
38
+ title: 'Kotlin & Swift',
39
+ value: 'kotlin-swift',
40
+ types: ['nitro-module', 'nitro-view']
41
+ }, {
42
+ title: 'Kotlin & Objective-C',
43
+ value: 'kotlin-objc',
44
+ types: ['turbo-module', 'fabric-view']
45
+ }, {
46
+ title: 'JavaScript for Android, iOS & Web',
47
+ value: 'js',
48
+ types: ['library']
49
+ }];
50
+ const EXAMPLE_CHOICES = [{
51
+ title: 'App with Community CLI',
52
+ value: 'vanilla',
53
+ description: "Provides access to app's native code",
54
+ disabled: false
55
+ }, {
56
+ title: 'Test App by Microsoft',
57
+ value: 'test-app',
58
+ description: "App's native code is abstracted away",
59
+ // Test App currently doesn't work with React Native 0.79.2
60
+ // due to missing `Gemfile` in the template
61
+ disabled: !process.env.CRNL_ENABLE_TEST_APP
62
+ }, {
63
+ title: 'App with Expo CLI',
64
+ value: 'expo',
65
+ description: 'Managed expo app with web support',
66
+ disabled: false
67
+ }].filter(choice => !choice.disabled);
68
+ const validateDirectory = input => {
69
+ if (!input) {
70
+ return 'Cannot be empty';
71
+ }
72
+ const targetPath = _nodePath.default.join(process.cwd(), input);
73
+ if (!_nodeFs.default.existsSync(targetPath)) {
74
+ return true;
75
+ }
76
+ const stat = _nodeFs.default.statSync(targetPath);
77
+ if (!stat.isDirectory()) {
78
+ return 'Path exists and is not a directory';
79
+ }
80
+ const files = _nodeFs.default.readdirSync(targetPath);
81
+ const isEmpty = files.length === 0 || files.length === 1 && files[0] === '.git';
82
+ if (!isEmpty) {
83
+ return 'Directory already exists and is not empty';
84
+ }
85
+ return true;
86
+ };
87
+ const getGitConfig = async key => {
88
+ try {
89
+ const value = await (0, _spawn.spawn)('git', ['config', '--get', key]);
90
+ return value.trim();
91
+ } catch {
92
+ return undefined;
93
+ }
94
+ };
95
+ const isInPackage = () => {
96
+ try {
97
+ const stat = _nodeFs.default.statSync(_nodePath.default.resolve(process.cwd(), 'package.json'));
98
+ return stat.isFile();
99
+ } catch {
100
+ return false;
101
+ }
102
+ };
103
+ const prompt = exports.prompt = (0, _pigment.create)(['[name]'], {
104
+ local: {
105
+ type: 'confirm',
106
+ description: 'Whether to create a local library',
107
+ message: `Looks like you're under a project folder. Do you want to create a local library?`,
108
+ default: isInPackage,
109
+ skip: () => !isInPackage()
110
+ },
111
+ directory: {
112
+ type: 'text',
113
+ description: 'Directory to create the library at',
114
+ message: 'Where do you want to create the library?',
115
+ default: () => {
116
+ const answers = prompt.read();
117
+ if (answers.name == null) {
118
+ return undefined;
119
+ }
120
+ if (answers.local && !answers.name?.includes(_nodePath.default.sep)) {
121
+ return _nodePath.default.join('modules', answers.name);
122
+ }
123
+ return answers.name;
124
+ },
125
+ validate: validateDirectory,
126
+ skip: () => {
127
+ const answers = prompt.read();
128
+ if (answers.name && !answers.local && validateDirectory(answers.name) === true) {
129
+ return true;
130
+ }
131
+ return false;
132
+ }
133
+ },
134
+ slug: {
135
+ type: 'text',
136
+ description: 'Name of the npm package',
137
+ message: 'What do you want to name the npm package?',
138
+ default: () => {
139
+ const answers = prompt.read();
140
+ const value = typeof answers.directory === 'string' ? answers.directory : answers.name;
141
+ if (typeof value !== 'string') {
142
+ return undefined;
143
+ }
144
+ const basename = _nodePath.default.basename(value);
145
+ if ((0, _validateNpmPackageName.default)(basename).validForNewPackages) {
146
+ if (/^(@|react-native)/.test(basename)) {
147
+ return basename;
148
+ }
149
+ return `react-native-${basename}`;
150
+ }
151
+ return undefined;
152
+ },
153
+ validate: input => (0, _validateNpmPackageName.default)(input).validForNewPackages || 'Must be a valid npm package name',
154
+ required: true
155
+ },
156
+ description: {
157
+ type: 'text',
158
+ description: 'Description of the npm package',
159
+ message: 'How would you describe the package?',
160
+ validate: input => Boolean(input) || 'Cannot be empty',
161
+ required: true
162
+ },
163
+ authorName: {
164
+ type: 'text',
165
+ description: 'Name of the package author',
166
+ message: 'What is the name of the package author?',
167
+ default: async () => getGitConfig('user.name'),
168
+ validate: input => Boolean(input) || 'Cannot be empty',
169
+ skip: () => prompt.read().local === true
170
+ },
171
+ authorEmail: {
172
+ type: 'text',
173
+ description: 'Email address of the package author',
174
+ message: 'What is the email address of the package author?',
175
+ default: async () => getGitConfig('user.email'),
176
+ validate: input => /^\S+@\S+$/.test(input) || 'Must be a valid email address',
177
+ skip: () => prompt.read().local === true
178
+ },
179
+ authorUrl: {
180
+ type: 'text',
181
+ description: 'Profile URL of the package author',
182
+ message: 'What is the profile URL for the package author?',
183
+ default: async () => {
184
+ const answers = prompt.read();
185
+ if (typeof answers.authorEmail !== 'string') {
186
+ return undefined;
187
+ }
188
+ try {
189
+ const username = await (0, _githubUsername.default)(answers.authorEmail);
190
+ if (username) {
191
+ return `https://github.com/${username}`;
192
+ }
193
+ } catch (e) {
194
+ // Ignore error
195
+ }
196
+ return undefined;
197
+ },
198
+ validate: input => /^https?:\/\//.test(input) || 'Must be a valid URL',
199
+ skip: () => prompt.read().local === true
200
+ },
201
+ repoUrl: {
202
+ type: 'text',
203
+ description: 'Repository URL of the package',
204
+ message: 'What is the repository URL for the package?',
205
+ default: () => {
206
+ const answers = prompt.read();
207
+ if (typeof answers.authorUrl === 'string' && typeof answers.slug === 'string' && /^https?:\/\/github.com\/[^/]+/.test(answers.authorUrl)) {
208
+ return `${answers.authorUrl}/${answers.slug.replace(/^@/, '').replace(/\//g, '-')}`;
209
+ }
210
+ return undefined;
211
+ },
212
+ validate: input => /^https?:\/\//.test(input) || 'Must be a valid URL',
213
+ skip: () => prompt.read().local === true
214
+ },
215
+ type: {
216
+ type: 'select',
217
+ description: 'Type of library you want to develop',
218
+ message: 'What type of library do you want to develop?',
219
+ choices: TYPE_CHOICES,
220
+ required: true
221
+ },
222
+ languages: {
223
+ type: 'select',
224
+ description: 'Languages to use for native code',
225
+ message: 'Which language do you want to use for native code?',
226
+ choices: LANGUAGE_CHOICES.map(choice => ({
227
+ title: choice.title,
228
+ value: choice.value,
229
+ skip: () => {
230
+ const answers = prompt.read();
231
+ if (typeof answers.type === 'string') {
232
+ return !choice.types.includes(answers.type);
233
+ }
234
+ return false;
235
+ }
236
+ })),
237
+ required: true
238
+ },
239
+ example: {
240
+ type: 'select',
241
+ description: 'Type of the example app to create',
242
+ message: 'What type of example app do you want to create?',
243
+ choices: EXAMPLE_CHOICES.map(choice => ({
244
+ title: choice.title,
245
+ value: choice.value,
246
+ description: choice.description,
247
+ skip: () => {
248
+ const answers = prompt.read();
249
+ if (typeof answers.type === 'string') {
250
+ return answers.type === 'library' ? choice.value !== 'expo' : choice.value === 'expo';
251
+ }
252
+ return false;
253
+ }
254
+ })),
255
+ required: true,
256
+ skip: () => {
257
+ const answers = prompt.read();
258
+ return answers.local === true;
259
+ }
260
+ },
261
+ tools: {
262
+ type: 'multiselect',
263
+ description: 'Additional tools to configure',
264
+ message: 'Which tools do you want to configure?',
265
+ choices: Object.entries(_configureTools.AVAILABLE_TOOLS).map(([key, tool]) => ({
266
+ value: key,
267
+ title: tool.name,
268
+ description: tool.description
269
+ })),
270
+ default: Object.keys(_configureTools.AVAILABLE_TOOLS),
271
+ required: true,
272
+ skip: () => {
273
+ const answers = prompt.read();
274
+ return answers.local === true;
275
+ }
276
+ },
277
+ reactNativeVersion: {
278
+ type: 'text',
279
+ description: 'Version of React Native to use in the example app',
280
+ message: 'Which version of React Native do you want to use in the example app?',
281
+ default: _constants.SUPPORTED_REACT_NATIVE_VERSION,
282
+ validate: input => input === 'latest' || /^\d+\.\d+\.\d+(-.+)?$/.test(input) || 'Must be a valid semver version',
283
+ skip: true
284
+ }
285
+ });
286
+ //# sourceMappingURL=prompt.js.map