create-react-native-library 0.49.10 → 0.50.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.
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SUPPORTED_REACT_NATIVE_VERSION = exports.FALLBACK_NITRO_MODULES_VERSION = exports.FALLBACK_BOB_VERSION = void 0;
7
+ const FALLBACK_BOB_VERSION = exports.FALLBACK_BOB_VERSION = '0.40.8';
8
+ const FALLBACK_NITRO_MODULES_VERSION = exports.FALLBACK_NITRO_MODULES_VERSION = '0.22.1';
9
+ const SUPPORTED_REACT_NATIVE_VERSION = exports.SUPPORTED_REACT_NATIVE_VERSION = '0.78.2';
10
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","names":["FALLBACK_BOB_VERSION","exports","FALLBACK_NITRO_MODULES_VERSION","SUPPORTED_REACT_NATIVE_VERSION"],"sources":["../src/constants.ts"],"sourcesContent":["export const FALLBACK_BOB_VERSION = '0.40.8';\nexport const FALLBACK_NITRO_MODULES_VERSION = '0.22.1';\nexport const SUPPORTED_REACT_NATIVE_VERSION = '0.78.2';\n"],"mappings":";;;;;;AAAO,MAAMA,oBAAoB,GAAAC,OAAA,CAAAD,oBAAA,GAAG,QAAQ;AACrC,MAAME,8BAA8B,GAAAD,OAAA,CAAAC,8BAAA,GAAG,QAAQ;AAC/C,MAAMC,8BAA8B,GAAAF,OAAA,CAAAE,8BAAA,GAAG,QAAQ","ignoreList":[]}
package/lib/index.js CHANGED
@@ -5,6 +5,7 @@ var _kleur = _interopRequireDefault(require("kleur"));
5
5
  var _ora = _interopRequireDefault(require("ora"));
6
6
  var _path = _interopRequireDefault(require("path"));
7
7
  var _yargs = _interopRequireDefault(require("yargs"));
8
+ var _constants = require("./constants");
8
9
  var _dependencies = require("./exampleApp/dependencies");
9
10
  var _generateExampleApp = _interopRequireDefault(require("./exampleApp/generateExampleApp"));
10
11
  var _inform = require("./inform");
@@ -12,19 +13,13 @@ var _input = require("./input");
12
13
  var _template = require("./template");
13
14
  var _assert = require("./utils/assert");
14
15
  var _initialCommit = require("./utils/initialCommit");
15
- var _prompt = require("./utils/prompt");
16
- var _resolveNpmPackageVersion = require("./utils/resolveNpmPackageVersion");
17
16
  var _local = require("./utils/local");
18
17
  var _packageManager = require("./utils/packageManager");
18
+ var _prompt = require("./utils/prompt");
19
+ var _resolveNpmPackageVersion = require("./utils/resolveNpmPackageVersion");
19
20
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
- const FALLBACK_BOB_VERSION = '0.40.5';
21
- const FALLBACK_NITRO_MODULES_VERSION = '0.22.1';
22
- const SUPPORTED_REACT_NATIVE_VERSION = '0.78.2';
23
-
24
21
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions
25
- _yargs.default.command('$0 [name]', 'create a react native library', _input.acceptedArgs,
26
- // @ts-expect-error Some types are still incompatible
27
- create).demandCommand().recommendCommands().fail(_inform.printErrorHelp).parserConfiguration({
22
+ _yargs.default.command('$0 [name]', 'create a react native library', _input.acceptedArgs, create).demandCommand().recommendCommands().fail(_inform.printErrorHelp).parserConfiguration({
28
23
  // don't pass kebab-case args to handler.
29
24
  'strip-dashed': true
30
25
  }).strict().argv;
@@ -37,24 +32,13 @@ async function create(_argv) {
37
32
  } = _argv;
38
33
 
39
34
  // Prefetch bob version in background while asking questions
40
- const bobVersionPromise = (0, _resolveNpmPackageVersion.resolveNpmPackageVersion)('react-native-builder-bob', FALLBACK_BOB_VERSION);
41
- const nitroModulesVersionPromise = (0, _resolveNpmPackageVersion.resolveNpmPackageVersion)('react-native-nitro-modules', FALLBACK_NITRO_MODULES_VERSION);
42
- const local = await (0, _local.promptLocalLibrary)(argv);
43
- const folder = await promptPath(argv, local);
35
+ const bobVersionPromise = (0, _resolveNpmPackageVersion.resolveNpmPackageVersion)('react-native-builder-bob', _constants.FALLBACK_BOB_VERSION);
36
+ const nitroModulesVersionPromise = (0, _resolveNpmPackageVersion.resolveNpmPackageVersion)('react-native-nitro-modules', _constants.FALLBACK_NITRO_MODULES_VERSION);
44
37
  await (0, _assert.assertNpxExists)();
45
- const basename = _path.default.basename(folder);
46
- const questions = await (0, _input.createQuestions)({
47
- basename,
48
- local
38
+ const questions = await (0, _input.createQuestions)(argv);
39
+ const answers = await (0, _prompt.prompt)(questions, argv, {
40
+ interactive: argv.interactive
49
41
  });
50
- (0, _assert.assertUserInput)(questions, argv);
51
- const promptAnswers = await (0, _prompt.prompt)(questions, argv);
52
- const answers = {
53
- ...promptAnswers,
54
- reactNativeVersion: promptAnswers.reactNativeVersion ?? SUPPORTED_REACT_NATIVE_VERSION,
55
- local
56
- };
57
- (0, _assert.assertUserInput)(questions, answers);
58
42
  const bobVersion = await bobVersionPromise;
59
43
  const nitroModulesVersion = answers.type === 'nitro-module' ? await nitroModulesVersionPromise : undefined;
60
44
  const config = (0, _template.generateTemplateConfiguration)({
@@ -64,11 +48,12 @@ async function create(_argv) {
64
48
  // Nitro codegen's version is always the same as nitro modules version.
65
49
  nitroCodegen: nitroModulesVersion
66
50
  },
67
- basename,
51
+ basename: _path.default.basename(answers.name ?? answers.directory),
68
52
  answers
69
53
  });
54
+ const folder = _path.default.resolve(process.cwd(), answers.directory);
70
55
  await _fsExtra.default.mkdirp(folder);
71
- if (answers.reactNativeVersion !== SUPPORTED_REACT_NATIVE_VERSION) {
56
+ if (answers.reactNativeVersion !== _constants.SUPPORTED_REACT_NATIVE_VERSION) {
72
57
  (0, _inform.printUsedRNVersion)(answers.reactNativeVersion, config);
73
58
  }
74
59
  const spinner = (0, _ora.default)().start();
@@ -92,52 +77,25 @@ async function create(_argv) {
92
77
  spaces: 2
93
78
  });
94
79
  const printSuccessMessage = () => spinner.succeed(`Project created successfully at ${_kleur.default.yellow(_path.default.relative(process.cwd(), folder))}!\n`);
95
- if (!local) {
80
+ if (answers.local) {
81
+ const packageManager = await (0, _packageManager.determinePackageManager)();
82
+ let addedNitro = false;
83
+ if (config.project.moduleConfig === 'nitro-modules') {
84
+ addedNitro = await (0, _local.addNitroDependencyToLocalLibrary)(config);
85
+ }
86
+ const linkedLocalLibrary = await (0, _local.linkLocalLibrary)(config, folder, packageManager);
87
+ printSuccessMessage();
88
+ (0, _inform.printLocalLibNextSteps)({
89
+ config,
90
+ packageManager,
91
+ linkedLocalLibrary,
92
+ addedNitro,
93
+ folder
94
+ });
95
+ } else {
96
96
  await (0, _initialCommit.createInitialGitCommit)(folder);
97
97
  printSuccessMessage();
98
98
  (0, _inform.printNonLocalLibNextSteps)(config);
99
- return;
100
- }
101
- const packageManager = await (0, _packageManager.determinePackageManager)();
102
- let addedNitro = false;
103
- if (config.project.moduleConfig === 'nitro-modules') {
104
- addedNitro = await (0, _local.addNitroDependencyToLocalLibrary)(config);
105
- }
106
- const linkedLocalLibrary = await (0, _local.linkLocalLibrary)(config, folder, packageManager);
107
- printSuccessMessage();
108
- (0, _inform.printLocalLibNextSteps)({
109
- config,
110
- packageManager,
111
- linkedLocalLibrary,
112
- addedNitro,
113
- folder
114
- });
115
- }
116
- async function promptPath(argv, local) {
117
- let folder;
118
- if (argv.name && !local) {
119
- folder = _path.default.join(process.cwd(), argv.name);
120
- } else {
121
- const answers = await (0, _prompt.prompt)({
122
- type: 'text',
123
- name: 'folder',
124
- message: `Where do you want to create the library?`,
125
- initial: local && argv.name && !argv.name.includes('/') ? `modules/${argv.name}` : argv.name,
126
- validate: input => {
127
- if (!input) {
128
- return 'Cannot be empty';
129
- }
130
- if (_fsExtra.default.pathExistsSync(_path.default.join(process.cwd(), input))) {
131
- return 'Folder already exists';
132
- }
133
- return true;
134
- }
135
- });
136
- folder = _path.default.join(process.cwd(), answers.folder);
137
- }
138
- if (await _fsExtra.default.pathExists(folder)) {
139
- throw new Error(`A folder already exists at ${_kleur.default.blue(folder)}! Please specify another folder name or delete the existing one.`);
140
99
  }
141
- return folder;
142
100
  }
143
101
  //# 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","_dependencies","_generateExampleApp","_inform","_input","_template","_assert","_initialCommit","_prompt","_resolveNpmPackageVersion","_local","_packageManager","e","__esModule","default","FALLBACK_BOB_VERSION","FALLBACK_NITRO_MODULES_VERSION","SUPPORTED_REACT_NATIVE_VERSION","yargs","command","acceptedArgs","create","demandCommand","recommendCommands","fail","printErrorHelp","parserConfiguration","strict","argv","_argv","_","$0","bobVersionPromise","resolveNpmPackageVersion","nitroModulesVersionPromise","local","promptLocalLibrary","folder","promptPath","assertNpxExists","basename","path","questions","createQuestions","assertUserInput","promptAnswers","prompt","answers","reactNativeVersion","bobVersion","nitroModulesVersion","type","undefined","config","generateTemplateConfiguration","versions","bob","nitroModules","nitroCodegen","fs","mkdirp","printUsedRNVersion","spinner","ora","start","example","text","generateExampleApp","root","applyTemplates","rootPackageJson","readJson","join","alignDependencyVersionsWithExampleApp","libraryMetadata","createMetadata","writeJson","spaces","printSuccessMessage","succeed","kleur","yellow","relative","process","cwd","createInitialGitCommit","printNonLocalLibNextSteps","packageManager","determinePackageManager","addedNitro","project","moduleConfig","addNitroDependencyToLocalLibrary","linkedLocalLibrary","linkLocalLibrary","printLocalLibNextSteps","name","message","initial","includes","validate","input","pathExistsSync","pathExists","Error","blue"],"sources":["../src/index.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport kleur from 'kleur';\nimport ora from 'ora';\nimport path from 'path';\nimport yargs from 'yargs';\nimport { alignDependencyVersionsWithExampleApp } from './exampleApp/dependencies';\nimport generateExampleApp from './exampleApp/generateExampleApp';\nimport {\n printErrorHelp,\n printLocalLibNextSteps,\n printNonLocalLibNextSteps,\n printUsedRNVersion,\n} from './inform';\nimport {\n acceptedArgs,\n createMetadata,\n createQuestions,\n type Answers,\n type Args,\n} from './input';\nimport { applyTemplates, generateTemplateConfiguration } from './template';\nimport { assertNpxExists, assertUserInput } from './utils/assert';\nimport { createInitialGitCommit } from './utils/initialCommit';\nimport { prompt } from './utils/prompt';\nimport { resolveNpmPackageVersion } from './utils/resolveNpmPackageVersion';\nimport {\n addNitroDependencyToLocalLibrary,\n linkLocalLibrary,\n promptLocalLibrary,\n} from './utils/local';\nimport { determinePackageManager } from './utils/packageManager';\n\nconst FALLBACK_BOB_VERSION = '0.40.5';\nconst FALLBACK_NITRO_MODULES_VERSION = '0.22.1';\nconst SUPPORTED_REACT_NATIVE_VERSION = '0.78.2';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\nyargs\n .command(\n '$0 [name]',\n 'create a react native library',\n acceptedArgs,\n // @ts-expect-error Some types are still incompatible\n create\n )\n .demandCommand()\n .recommendCommands()\n .fail(printErrorHelp)\n .parserConfiguration({\n // don't pass kebab-case args to handler.\n 'strip-dashed': true,\n })\n .strict().argv;\n\nasync function create(_argv: yargs.Arguments<Args>) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _, $0, ...argv } = _argv;\n\n // Prefetch bob version in background while asking questions\n const bobVersionPromise = resolveNpmPackageVersion(\n 'react-native-builder-bob',\n FALLBACK_BOB_VERSION\n );\n const nitroModulesVersionPromise = resolveNpmPackageVersion(\n 'react-native-nitro-modules',\n FALLBACK_NITRO_MODULES_VERSION\n );\n\n const local = await promptLocalLibrary(argv);\n const folder = await promptPath(argv, local);\n\n await assertNpxExists();\n\n const basename = path.basename(folder);\n\n const questions = await createQuestions({ basename, local });\n\n assertUserInput(questions, argv);\n\n const promptAnswers = await prompt(questions, argv);\n const answers: Answers = {\n ...promptAnswers,\n reactNativeVersion:\n promptAnswers.reactNativeVersion ?? SUPPORTED_REACT_NATIVE_VERSION,\n local,\n };\n\n assertUserInput(questions, answers);\n\n const bobVersion = await bobVersionPromise;\n\n const nitroModulesVersion =\n answers.type === 'nitro-module'\n ? await nitroModulesVersionPromise\n : undefined;\n\n const config = generateTemplateConfiguration({\n versions: {\n bob: bobVersion,\n nitroModules: nitroModulesVersion,\n // Nitro codegen's version is always the same as nitro modules version.\n nitroCodegen: nitroModulesVersion,\n },\n basename,\n answers,\n });\n\n await fs.mkdirp(folder);\n\n if (answers.reactNativeVersion !== SUPPORTED_REACT_NATIVE_VERSION) {\n printUsedRNVersion(answers.reactNativeVersion, config);\n }\n\n const spinner = ora().start();\n\n if (config.example !== 'none') {\n spinner.text = 'Generating example app';\n\n await generateExampleApp({\n root: folder,\n reactNativeVersion: answers.reactNativeVersion,\n config,\n });\n }\n\n spinner.text = 'Copying files';\n\n await applyTemplates(answers, config, folder);\n\n const rootPackageJson = await fs.readJson(path.join(folder, 'package.json'));\n\n if (config.example !== 'none') {\n await alignDependencyVersionsWithExampleApp(rootPackageJson, folder);\n }\n\n const libraryMetadata = createMetadata(answers);\n\n rootPackageJson['create-react-native-library'] = libraryMetadata;\n\n await fs.writeJson(path.join(folder, 'package.json'), rootPackageJson, {\n spaces: 2,\n });\n\n const printSuccessMessage = () =>\n spinner.succeed(\n `Project created successfully at ${kleur.yellow(\n path.relative(process.cwd(), folder)\n )}!\\n`\n );\n\n if (!local) {\n await createInitialGitCommit(folder);\n\n printSuccessMessage();\n\n printNonLocalLibNextSteps(config);\n return;\n }\n\n const packageManager = await determinePackageManager();\n\n let addedNitro = false;\n if (config.project.moduleConfig === 'nitro-modules') {\n addedNitro = await addNitroDependencyToLocalLibrary(config);\n }\n\n const linkedLocalLibrary = await linkLocalLibrary(\n config,\n folder,\n packageManager\n );\n\n printSuccessMessage();\n\n printLocalLibNextSteps({\n config,\n packageManager,\n linkedLocalLibrary,\n addedNitro,\n folder,\n });\n}\n\nasync function promptPath(argv: Args, local: boolean) {\n let folder: string;\n\n if (argv.name && !local) {\n folder = path.join(process.cwd(), argv.name);\n } else {\n const answers = await prompt({\n type: 'text',\n name: 'folder',\n message: `Where do you want to create the library?`,\n initial:\n local && argv.name && !argv.name.includes('/')\n ? `modules/${argv.name}`\n : argv.name,\n validate: (input) => {\n if (!input) {\n return 'Cannot be empty';\n }\n\n if (fs.pathExistsSync(path.join(process.cwd(), input))) {\n return 'Folder already exists';\n }\n\n return true;\n },\n });\n\n folder = path.join(process.cwd(), answers.folder);\n }\n\n if (await fs.pathExists(folder)) {\n throw new Error(\n `A folder already exists at ${kleur.blue(\n folder\n )}! Please specify another folder name or delete the existing one.`\n );\n }\n\n return folder;\n}\n"],"mappings":"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","ignoreList":[]}
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","e","__esModule","default","yargs","command","acceptedArgs","create","demandCommand","recommendCommands","fail","printErrorHelp","parserConfiguration","strict","argv","_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","nitroModules","nitroCodegen","basename","path","name","directory","folder","resolve","process","cwd","fs","mkdirp","reactNativeVersion","SUPPORTED_REACT_NATIVE_VERSION","printUsedRNVersion","spinner","ora","start","example","text","generateExampleApp","root","applyTemplates","rootPackageJson","readJson","join","alignDependencyVersionsWithExampleApp","libraryMetadata","createMetadata","writeJson","spaces","printSuccessMessage","succeed","kleur","yellow","relative","local","packageManager","determinePackageManager","addedNitro","project","moduleConfig","addNitroDependencyToLocalLibrary","linkedLocalLibrary","linkLocalLibrary","printLocalLibNextSteps","createInitialGitCommit","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';\n\ntype Args = Partial<Answers> & {\n name?: string;\n $0: string;\n [key: string]: unknown;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\nyargs\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 .strict().argv;\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\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: 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 (answers.reactNativeVersion !== SUPPORTED_REACT_NATIVE_VERSION) {\n printUsedRNVersion(answers.reactNativeVersion, config);\n }\n\n const spinner = ora().start();\n\n if (config.example !== 'none') {\n spinner.text = 'Generating example app';\n\n await generateExampleApp({\n root: folder,\n reactNativeVersion: answers.reactNativeVersion,\n config,\n });\n }\n\n spinner.text = 'Copying files';\n\n await applyTemplates(answers, config, folder);\n\n const rootPackageJson = await fs.readJson(path.join(folder, 'package.json'));\n\n if (config.example !== 'none') {\n await alignDependencyVersionsWithExampleApp(rootPackageJson, folder);\n }\n\n const libraryMetadata = createMetadata(answers);\n\n rootPackageJson['create-react-native-library'] = libraryMetadata;\n\n await fs.writeJson(path.join(folder, 'package.json'), rootPackageJson, {\n spaces: 2,\n });\n\n const printSuccessMessage = () =>\n spinner.succeed(\n `Project created successfully at ${kleur.yellow(\n path.relative(process.cwd(), folder)\n )}!\\n`\n );\n\n if (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 await createInitialGitCommit(folder);\n\n printSuccessMessage();\n\n printNonLocalLibNextSteps(config);\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/inform.js CHANGED
@@ -60,16 +60,15 @@ function printLocalLibNextSteps({
60
60
  }
61
61
  function printErrorHelp(message, error) {
62
62
  console.log('\n');
63
- if (error) {
64
- console.log(_kleur.default.red(error.message));
65
- throw error;
66
- }
67
63
  if (message) {
68
- console.log(_kleur.default.red(message));
64
+ console.log(message);
69
65
  } else {
70
- console.log(_kleur.default.red(`An unknown error occurred. See '--help' for usage guide.`));
66
+ console.log(`An unknown error occurred. See ${_kleur.default.blue('--help')} for usage guide.`);
67
+ }
68
+ if (error) {
69
+ console.log('\n');
70
+ throw error;
71
71
  }
72
- process.exit(1);
73
72
  }
74
73
  function printUsedRNVersion(version, config) {
75
74
  if (config.example === 'vanilla') {
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","red","exit","printUsedRNVersion","version","cyan","warn"],"sources":["../src/inform.ts"],"sourcesContent":["import path from 'path';\nimport dedent from 'dedent';\nimport type { TemplateConfiguration } from './template';\nimport kleur from 'kleur';\n\nexport function printNonLocalLibNextSteps(config: TemplateConfiguration) {\n const platforms = {\n ios: { name: 'iOS', color: 'cyan' },\n android: { name: 'Android', color: 'green' },\n ...(config.example === 'expo'\n ? ({ web: { name: 'Web', color: 'blue' } } as const)\n : null),\n } as const;\n\n console.log(\n dedent(`\n ${kleur.magenta(\n `${kleur.bold('Get started')} with the project`\n )}${kleur.gray(':')}\n\n ${kleur.gray('$')} yarn\n ${Object.entries(platforms)\n .map(\n ([script, { name, color }]) => `\n ${kleur[color](`Run the example app on ${kleur.bold(name)}`)}${kleur.gray(\n ':'\n )}\n\n ${kleur.gray('$')} yarn example ${script}`\n )\n .join('\\n')}\n\n ${kleur.yellow(\n `See ${kleur.bold('CONTRIBUTING.md')} for more details. Good luck!`\n )}\n `)\n );\n}\n\nexport function printLocalLibNextSteps({\n folder,\n config,\n linkedLocalLibrary,\n addedNitro,\n packageManager,\n}: {\n folder: string;\n config: TemplateConfiguration;\n linkedLocalLibrary: boolean;\n addedNitro: boolean;\n packageManager: string;\n}) {\n console.log(\n dedent(`\n ${kleur.magenta(\n `${kleur.bold('Get started')} with the project`\n )}${kleur.gray(':')}\n\n ${\n (linkedLocalLibrary\n ? `- Run ${kleur.blue(\n `${packageManager} install`\n )} to link the library\\n`\n : `- Link the library at ${kleur.blue(\n path.relative(process.cwd(), folder)\n )} based on your project setup\\n`) +\n (config.project.moduleConfig === 'nitro-modules' && !addedNitro\n ? `- Run ${kleur.blue(\n `${packageManager} add react-native-nitro-modules`\n )} to install nitro modules \\n`\n : '') +\n `- Run ${kleur.blue(\n 'pod install --project-directory=ios'\n )} to install dependencies with CocoaPods\\n` +\n `- Run ${kleur.blue('npx react-native run-android')} or ${kleur.blue(\n 'npx react-native run-ios'\n )} to build and run the app\\n` +\n `- Import from ${kleur.blue(\n config.project.slug\n )} and use it in your app.`\n }\n\n ${kleur.yellow(`Good luck!`)}\n `)\n );\n}\n\nexport function printErrorHelp(message: string, error: Error) {\n console.log('\\n');\n\n if (error) {\n console.log(kleur.red(error.message));\n throw error;\n }\n\n if (message) {\n console.log(kleur.red(message));\n } else {\n console.log(\n kleur.red(`An unknown error occurred. See '--help' for usage guide.`)\n );\n }\n\n process.exit(1);\n}\n\nexport function printUsedRNVersion(\n version: string,\n config: TemplateConfiguration\n) {\n if (config.example === 'vanilla') {\n console.log(\n `${kleur.blue('ℹ')} Using untested ${kleur.cyan(\n `react-native@${version}`\n )} for the example`\n );\n } else {\n console.warn(\n `${kleur.yellow(\n '⚠'\n )} Ignoring --react-native-version for unsupported example type: ${kleur.cyan(\n config.example\n )}`\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
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') {\n console.log(\n `${kleur.blue('ℹ')} Using untested ${kleur.cyan(\n `react-native@${version}`\n )} for the example`\n );\n } else {\n console.warn(\n `${kleur.yellow(\n '⚠'\n )} Ignoring --react-native-version for unsupported example type: ${kleur.cyan(\n config.example\n )}`\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/input.js CHANGED
@@ -6,9 +6,12 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.acceptedArgs = void 0;
7
7
  exports.createMetadata = createMetadata;
8
8
  exports.createQuestions = createQuestions;
9
+ var _fsExtra = _interopRequireDefault(require("fs-extra"));
9
10
  var _githubUsername = _interopRequireDefault(require("github-username"));
11
+ var _path = _interopRequireDefault(require("path"));
10
12
  var _validateNpmPackageName = _interopRequireDefault(require("validate-npm-package-name"));
11
13
  var _package = require("../package.json");
14
+ var _constants = require("./constants");
12
15
  var _spawn = require("./utils/spawn");
13
16
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
17
  const LANGUAGE_CHOICES = [{
@@ -60,74 +63,114 @@ const TYPE_CHOICES = [{
60
63
  description: 'supports Expo Go and Web'
61
64
  }];
62
65
  const acceptedArgs = exports.acceptedArgs = {
63
- slug: {
66
+ 'slug': {
64
67
  description: 'Name of the npm package',
65
68
  type: 'string'
66
69
  },
67
- description: {
70
+ 'description': {
68
71
  description: 'Description of the npm package',
69
72
  type: 'string'
70
73
  },
71
- authorName: {
74
+ 'author-name': {
72
75
  description: 'Name of the package author',
73
76
  type: 'string'
74
77
  },
75
- authorEmail: {
78
+ 'author-email': {
76
79
  description: 'Email address of the package author',
77
80
  type: 'string'
78
81
  },
79
- authorUrl: {
82
+ 'author-url': {
80
83
  description: 'URL for the package author',
81
84
  type: 'string'
82
85
  },
83
- repoUrl: {
86
+ 'repo-url': {
84
87
  description: 'URL for the repository',
85
88
  type: 'string'
86
89
  },
87
- languages: {
90
+ 'languages': {
88
91
  description: 'Languages you want to use',
89
92
  choices: LANGUAGE_CHOICES.map(({
90
93
  value
91
94
  }) => value)
92
95
  },
93
- type: {
96
+ 'type': {
94
97
  description: 'Type of library you want to develop',
95
98
  choices: TYPE_CHOICES.map(({
96
99
  value
97
100
  }) => value)
98
101
  },
99
- reactNativeVersion: {
100
- description: 'Version of React Native to use, uses latest if not specified',
101
- type: 'string'
102
+ 'react-native-version': {
103
+ description: 'Version of React Native to use',
104
+ type: 'string',
105
+ default: _constants.SUPPORTED_REACT_NATIVE_VERSION
102
106
  },
103
- local: {
107
+ 'local': {
104
108
  description: 'Whether to create a local library',
105
109
  type: 'boolean'
106
110
  },
107
- example: {
111
+ 'example': {
108
112
  description: 'Type of the example app to create',
109
113
  type: 'string',
110
114
  choices: EXAMPLE_CHOICES.map(({
111
115
  value
112
116
  }) => value)
117
+ },
118
+ 'interactive': {
119
+ description: 'Whether to run in interactive mode',
120
+ type: 'boolean'
113
121
  }
114
122
  };
115
123
  async function createQuestions({
116
- basename,
124
+ name,
117
125
  local
118
126
  }) {
119
- let name, email;
127
+ let fullname, email;
120
128
  try {
121
- name = await (0, _spawn.spawn)('git', ['config', '--get', 'user.name']);
129
+ fullname = await (0, _spawn.spawn)('git', ['config', '--get', 'user.name']);
122
130
  email = await (0, _spawn.spawn)('git', ['config', '--get', 'user.email']);
123
131
  } catch (e) {
124
132
  // Ignore error
125
133
  }
126
134
  const questions = [{
135
+ type: local == null && (await _fsExtra.default.pathExists(_path.default.join(process.cwd(), 'package.json'))) ? 'confirm' : null,
136
+ name: 'local',
137
+ message: `Looks like you're under a project folder. Do you want to create a local library?`,
138
+ initial: local,
139
+ default: false
140
+ }, {
141
+ type: (_, answers) => name && !(answers.local ?? local) ? null : 'text',
142
+ name: 'directory',
143
+ message: `Where do you want to create the library?`,
144
+ initial: (_, answers) => {
145
+ if ((answers.local ?? local) && name && !name?.includes('/')) {
146
+ return `modules/${name}`;
147
+ }
148
+ return name ?? '';
149
+ },
150
+ validate: input => {
151
+ if (!input) {
152
+ return 'Cannot be empty';
153
+ }
154
+ if (_fsExtra.default.pathExistsSync(_path.default.join(process.cwd(), input))) {
155
+ return 'Folder already exists';
156
+ }
157
+ return true;
158
+ },
159
+ default: name
160
+ }, {
127
161
  type: 'text',
128
162
  name: 'slug',
129
163
  message: 'What is the name of the npm package?',
130
- initial: (0, _validateNpmPackageName.default)(basename).validForNewPackages ? /^(@|react-native)/.test(basename) ? basename : `react-native-${basename}` : undefined,
164
+ initial: (_, answers) => {
165
+ const basename = _path.default.basename(answers.directory ?? name ?? '');
166
+ if ((0, _validateNpmPackageName.default)(basename).validForNewPackages) {
167
+ if (/^(@|react-native)/.test(basename)) {
168
+ return basename;
169
+ }
170
+ return `react-native-${basename}`;
171
+ }
172
+ return '';
173
+ },
131
174
  validate: input => (0, _validateNpmPackageName.default)(input).validForNewPackages || 'Must be a valid npm package name'
132
175
  }, {
133
176
  type: 'text',
@@ -135,25 +178,25 @@ async function createQuestions({
135
178
  message: 'What is the description for the package?',
136
179
  validate: input => Boolean(input) || 'Cannot be empty'
137
180
  }, {
138
- type: local ? null : 'text',
181
+ type: (_, answers) => answers.local ?? local ? null : 'text',
139
182
  name: 'authorName',
140
183
  message: 'What is the name of package author?',
141
- initial: name,
184
+ initial: fullname,
142
185
  validate: input => Boolean(input) || 'Cannot be empty'
143
186
  }, {
144
- type: local ? null : 'text',
187
+ type: (_, answers) => answers.local ?? local ? null : 'text',
145
188
  name: 'authorEmail',
146
189
  message: 'What is the email address for the package author?',
147
190
  initial: email,
148
191
  validate: input => /^\S+@\S+$/.test(input) || 'Must be a valid email address'
149
192
  }, {
150
- type: local ? null : 'text',
193
+ type: (_, answers) => answers.local ?? local ? null : 'text',
151
194
  name: 'authorUrl',
152
195
  message: 'What is the URL for the package author?',
153
196
  // @ts-expect-error this is supported, but types are wrong
154
- initial: async previous => {
197
+ initial: async (_, answers) => {
155
198
  try {
156
- const username = await (0, _githubUsername.default)(previous);
199
+ const username = await (0, _githubUsername.default)(answers.authorEmail);
157
200
  return `https://github.com/${username}`;
158
201
  } catch (e) {
159
202
  // Ignore error
@@ -162,7 +205,7 @@ async function createQuestions({
162
205
  },
163
206
  validate: input => /^https?:\/\//.test(input) || 'Must be a valid URL'
164
207
  }, {
165
- type: local ? null : 'text',
208
+ type: (_, answers) => answers.local ?? local ? null : 'text',
166
209
  name: 'repoUrl',
167
210
  message: 'What is the URL for the repository?',
168
211
  initial: (_, answers) => {
@@ -212,7 +255,7 @@ async function createQuestions({
212
255
  }
213
256
  function createMetadata(answers) {
214
257
  // Some of the passed args can already be derived from the generated package.json file.
215
- const ignoredAnswers = ['name', 'slug', 'description', 'authorName', 'authorEmail', 'authorUrl', 'repoUrl', 'example', 'reactNativeVersion', 'local'];
258
+ const ignoredAnswers = ['name', 'directory', 'slug', 'description', 'authorName', 'authorEmail', 'authorUrl', 'repoUrl', 'example', 'reactNativeVersion', 'local', 'interactive'];
216
259
  const libraryMetadata = Object.fromEntries(Object.entries(answers).filter(([answer]) => !ignoredAnswers.includes(answer)));
217
260
  libraryMetadata.version = _package.version;
218
261
  return libraryMetadata;
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' | 'js';\n\nexport type ProjectType =\n | 'turbo-module'\n | 'fabric-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'],\n },\n {\n title: 'Kotlin & Objective-C',\n value: 'kotlin-objc',\n types: ['turbo-module', 'fabric-view'],\n },\n {\n title: 'JavaScript for Android, iOS & Web',\n value: 'js',\n types: ['library'],\n },\n];\n\nconst EXAMPLE_CHOICES = (\n [\n {\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: 'Nitro module',\n value: 'nitro-module',\n description:\n 'type-safe, fast integration for native APIs to JS (experimental)',\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 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":["_fsExtra","_interopRequireDefault","require","_githubUsername","_path","_validateNpmPackageName","_package","_constants","_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","type","choices","map","SUPPORTED_REACT_NATIVE_VERSION","createQuestions","name","local","fullname","email","spawn","questions","fs","pathExists","path","join","cwd","message","initial","_","answers","includes","validate","input","pathExistsSync","basename","directory","validateNpmPackage","validForNewPackages","test","Boolean","username","githubUsername","authorEmail","undefined","authorUrl","slug","replace","values","createMetadata","ignoredAnswers","libraryMetadata","Object","fromEntries","entries","answer","version"],"sources":["../src/input.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport githubUsername from 'github-username';\nimport path from 'path';\nimport validateNpmPackage from 'validate-npm-package-name';\nimport type yargs from 'yargs';\nimport { version } from '../package.json';\nimport { SUPPORTED_REACT_NATIVE_VERSION } from './constants';\nimport type { Question } from './utils/prompt';\nimport { spawn } from './utils/spawn';\n\nexport type ProjectLanguages = 'kotlin-objc' | 'kotlin-swift' | 'js';\n\nexport type ProjectType =\n | 'turbo-module'\n | 'fabric-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'],\n },\n {\n title: 'Kotlin & Objective-C',\n value: 'kotlin-objc',\n types: ['turbo-module', 'fabric-view'],\n },\n {\n title: 'JavaScript for Android, iOS & Web',\n value: 'js',\n types: ['library'],\n },\n];\n\nconst EXAMPLE_CHOICES = (\n [\n {\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: 'Nitro module',\n value: 'nitro-module',\n description:\n 'type-safe, fast integration for native APIs to JS (experimental)',\n },\n {\n title: 'JavaScript library',\n value: 'library',\n description: 'supports Expo Go and Web',\n },\n];\n\nexport const acceptedArgs = {\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 'author-name': {\n description: 'Name of the package author',\n type: 'string',\n },\n 'author-email': {\n description: 'Email address of the package author',\n type: 'string',\n },\n 'author-url': {\n description: 'URL for the package author',\n type: 'string',\n },\n 'repo-url': {\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 'react-native-version': {\n description: 'Version of React Native to use',\n type: 'string',\n default: SUPPORTED_REACT_NATIVE_VERSION,\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 'interactive': {\n description: 'Whether to run in interactive mode',\n type: 'boolean',\n },\n} as const satisfies Record<string, yargs.Options>;\n\nexport type ExampleApp = 'none' | 'test-app' | 'expo' | 'vanilla';\n\nexport type Answers = {\n directory: 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 interactive?: boolean;\n};\n\nexport async function createQuestions({\n name,\n local,\n}: {\n name?: string;\n local?: boolean;\n}) {\n let fullname, email;\n\n try {\n fullname = 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:\n local == null &&\n (await fs.pathExists(path.join(process.cwd(), 'package.json')))\n ? 'confirm'\n : null,\n name: 'local',\n message: `Looks like you're under a project folder. Do you want to create a local library?`,\n initial: local,\n default: false,\n },\n {\n type: (_, answers) => (name && !(answers.local ?? local) ? null : 'text'),\n name: 'directory',\n message: `Where do you want to create the library?`,\n initial: (_: string, answers: Answers) => {\n if ((answers.local ?? local) && name && !name?.includes('/')) {\n return `modules/${name}`;\n }\n\n return name ?? '';\n },\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 default: name,\n },\n {\n type: 'text',\n name: 'slug',\n message: 'What is the name of the npm package?',\n initial: (_: string, answers: Answers) => {\n const basename = path.basename(answers.directory ?? name ?? '');\n\n if (validateNpmPackage(basename).validForNewPackages) {\n if (/^(@|react-native)/.test(basename)) {\n return basename;\n }\n\n return `react-native-${basename}`;\n }\n\n return '';\n },\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: (_, answers) => (answers.local ?? local ? null : 'text'),\n name: 'authorName',\n message: 'What is the name of package author?',\n initial: fullname,\n validate: (input) => Boolean(input) || 'Cannot be empty',\n },\n {\n type: (_, answers) => (answers.local ?? 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: (_, answers) => (answers.local ?? 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 (_: string, answers: Answers) => {\n try {\n const username = await githubUsername(answers.authorEmail);\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: (_, answers) => (answers.local ?? 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 | 'name')[] = [\n 'name',\n 'directory',\n 'slug',\n 'description',\n 'authorName',\n 'authorEmail',\n 'authorUrl',\n 'repoUrl',\n 'example',\n 'reactNativeVersion',\n 'local',\n 'interactive',\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 +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_NEW_FILES","EXAMPLE_VIEW_FILES","JS_FILES","EXPO_FILES","NATIVE_COMMON_FILES","NATIVE_COMMON_EXAMPLE_FILES","NATIVE_FILES","module_new","view_new","module_nitro","OBJC_FILES","module_common","KOTLIN_FILES","generateTemplateConfiguration","versions","basename","answers","slug","languages","type","project","replace","namespace","startsWith","includes","split","toLowerCase","pack","description","name","test","charAt","toUpperCase","_","$1","slice","package","package_dir","package_cpp","identifier","native","swift","viewConfig","getViewConfig","moduleConfig","getModuleConfig","author","authorName","email","authorEmail","url","authorUrl","repo","repoUrl","example","year","Date","getFullYear","projectType","applyTemplates","config","folder","local","applyTemplate","templateType","source","destination","fs","mkdirp","files","readdir","f","ejs","render","openDelimiter","closeDelimiter","Error","cause","target","join","file","stats","stat","isDirectory","some","r","content","readFile","result","writeFile","copyFile"],"sources":["../src/template.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport ejs from 'ejs';\nimport type { Answers, ExampleApp, ProjectType } from './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 swift: boolean;\n viewConfig: ViewConfig;\n moduleConfig: ModuleConfig;\n };\n author: {\n name: string;\n email: string;\n url: string;\n };\n /** Git repo URL */\n repo: string;\n example: ExampleApp;\n year: number;\n};\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_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 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_new: path.resolve(__dirname, '../templates/native-library-new'),\n view_new: path.resolve(__dirname, '../templates/native-view-new'),\n module_nitro: path.resolve(__dirname, '../templates/nitro-module'),\n} as const;\n\nconst OBJC_FILES = {\n module_common: path.resolve(__dirname, '../templates/objc-library'),\n view_new: path.resolve(__dirname, '../templates/objc-view-new'),\n} as const;\n\nconst KOTLIN_FILES = {\n module_new: path.resolve(__dirname, '../templates/kotlin-library-new'),\n view_new: path.resolve(__dirname, '../templates/kotlin-view-new'),\n} as const;\n\nexport function generateTemplateConfiguration({\n versions,\n basename,\n answers,\n}: {\n versions: TemplateVersions;\n basename: string;\n answers: Answers;\n}): TemplateConfiguration {\n const { slug, languages, type } = answers;\n\n const project = slug.replace(/^(react-native-|@[^/]+\\/)/, '');\n let namespace: string | undefined;\n\n if (slug.startsWith('@') && slug.includes('/')) {\n namespace = slug\n .split('/')[0]\n ?.replace(/[^a-z0-9]/g, '')\n .toLowerCase();\n }\n\n // Create a package identifier with specified namespace when possible\n const pack = `${namespace ? `${namespace}.` : ''}${project\n .replace(/[^a-z0-9]/g, '')\n .toLowerCase()}`;\n\n return {\n versions,\n project: {\n slug,\n description: answers.description,\n name:\n /^[A-Z]/.test(basename) && /^[a-z0-9]+$/i.test(basename)\n ? // If the project name is already in PascalCase, use it as-is\n basename\n : // Otherwise, convert it to PascalCase and remove any non-alphanumeric characters\n `${project.charAt(0).toUpperCase()}${project\n .replace(/[^a-z0-9](\\w)/g, (_, $1) => $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 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 default:\n return null;\n }\n}\n\nfunction getViewConfig(projectType: ProjectType): ViewConfig {\n switch (projectType) {\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 await applyTemplate(config, EXAMPLE_MODULE_NEW_FILES, folder);\n }\n }\n }\n\n if (answers.languages === 'js') {\n await applyTemplate(config, JS_FILES, folder);\n 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(config, NATIVE_FILES[`module_new`], folder);\n } else {\n await applyTemplate(config, NATIVE_FILES[`view_new`], folder);\n }\n\n if (config.project.moduleConfig !== null) {\n await applyTemplate(config, OBJC_FILES[`module_common`], folder);\n } else {\n await applyTemplate(config, OBJC_FILES[`view_new`], folder);\n }\n\n const templateType = `${\n config.project.moduleConfig !== null ? 'module' : 'view'\n }_new` as const;\n\n await applyTemplate(config, KOTLIN_FILES[templateType], folder);\n }\n}\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 let name;\n\n try {\n name = ejs.render(f.replace(/^\\$/, ''), config, {\n openDelimiter: '{',\n closeDelimiter: '}',\n });\n } catch (e) {\n throw new Error(`Failed to render template file name: ${f}`, {\n cause: e,\n });\n }\n\n const target = path.join(destination, name);\n\n const file = path.join(source, f);\n const stats = await fs.stat(file);\n\n if (stats.isDirectory()) {\n await applyTemplate(config, file, target);\n } else if (!BINARIES.some((r) => r.test(file))) {\n const content = await fs.readFile(file, 'utf8');\n\n let result;\n\n try {\n result = ejs.render(content, config);\n } catch (e) {\n throw new Error(`Failed to render template file content: ${f}`, {\n cause: e,\n });\n }\n\n await fs.writeFile(target, result);\n } else {\n await fs.copyFile(file, target);\n }\n }\n}\n"],"mappings":"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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_NEW_FILES","EXAMPLE_VIEW_FILES","JS_FILES","EXPO_FILES","NATIVE_COMMON_FILES","NATIVE_COMMON_EXAMPLE_FILES","NATIVE_FILES","module_new","view_new","module_nitro","OBJC_FILES","module_common","KOTLIN_FILES","generateTemplateConfiguration","versions","basename","answers","slug","languages","type","project","replace","namespace","startsWith","includes","split","toLowerCase","pack","description","name","test","charAt","toUpperCase","_","$1","slice","package","package_dir","package_cpp","identifier","native","swift","viewConfig","getViewConfig","moduleConfig","getModuleConfig","author","authorName","email","authorEmail","url","authorUrl","repo","repoUrl","example","year","Date","getFullYear","projectType","applyTemplates","config","folder","local","applyTemplate","templateType","source","destination","fs","mkdirp","files","readdir","f","ejs","render","openDelimiter","closeDelimiter","Error","cause","target","join","file","stats","stat","isDirectory","some","r","content","readFile","result","writeFile","copyFile"],"sources":["../src/template.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport ejs from 'ejs';\nimport type { Answers, ExampleApp, ProjectType } from './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 swift: boolean;\n viewConfig: ViewConfig;\n moduleConfig: ModuleConfig;\n };\n author: {\n name: string;\n email: string;\n url: string;\n };\n /** Git repo URL */\n repo: string;\n example: ExampleApp;\n year: number;\n};\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_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 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_new: path.resolve(__dirname, '../templates/native-library-new'),\n view_new: path.resolve(__dirname, '../templates/native-view-new'),\n module_nitro: path.resolve(__dirname, '../templates/nitro-module'),\n} as const;\n\nconst OBJC_FILES = {\n module_common: path.resolve(__dirname, '../templates/objc-library'),\n view_new: path.resolve(__dirname, '../templates/objc-view-new'),\n} as const;\n\nconst KOTLIN_FILES = {\n module_new: path.resolve(__dirname, '../templates/kotlin-library-new'),\n view_new: path.resolve(__dirname, '../templates/kotlin-view-new'),\n} as const;\n\nexport function generateTemplateConfiguration({\n versions,\n basename,\n answers,\n}: {\n versions: TemplateVersions;\n basename: string;\n answers: Answers;\n}): TemplateConfiguration {\n const { slug, languages, type } = answers;\n\n const project = slug.replace(/^(react-native-|@[^/]+\\/)/, '');\n let namespace: string | undefined;\n\n if (slug.startsWith('@') && slug.includes('/')) {\n namespace = slug\n .split('/')[0]\n ?.replace(/[^a-z0-9]/g, '')\n .toLowerCase();\n }\n\n // Create a package identifier with specified namespace when possible\n const pack = `${namespace ? `${namespace}.` : ''}${project\n .replace(/[^a-z0-9]/g, '')\n .toLowerCase()}`;\n\n return {\n versions,\n project: {\n slug,\n description: answers.description,\n name:\n /^[A-Z]/.test(basename) && /^[a-z0-9]+$/i.test(basename)\n ? // If the project name is already in PascalCase, use it as-is\n basename\n : // Otherwise, convert it to PascalCase and remove any non-alphanumeric characters\n `${project.charAt(0).toUpperCase()}${project\n .replace(/[^a-z0-9](\\w)/g, (_, $1) => $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 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 default:\n return null;\n }\n}\n\nfunction getViewConfig(projectType: ProjectType): ViewConfig {\n switch (projectType) {\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\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 await applyTemplate(config, EXAMPLE_MODULE_NEW_FILES, folder);\n }\n }\n }\n\n if (answers.languages === 'js') {\n await applyTemplate(config, JS_FILES, folder);\n 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(config, NATIVE_FILES[`module_new`], folder);\n } else {\n await applyTemplate(config, NATIVE_FILES[`view_new`], folder);\n }\n\n if (config.project.moduleConfig !== null) {\n await applyTemplate(config, OBJC_FILES[`module_common`], folder);\n } else {\n await applyTemplate(config, OBJC_FILES[`view_new`], folder);\n }\n\n const templateType = `${\n config.project.moduleConfig !== null ? 'module' : 'view'\n }_new` as const;\n\n await applyTemplate(config, KOTLIN_FILES[templateType], folder);\n }\n}\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 let name;\n\n try {\n name = ejs.render(f.replace(/^\\$/, ''), config, {\n openDelimiter: '{',\n closeDelimiter: '}',\n });\n } catch (e) {\n throw new Error(`Failed to render template file name: ${f}`, {\n cause: e,\n });\n }\n\n const target = path.join(destination, name);\n\n const file = path.join(source, f);\n const stats = await fs.stat(file);\n\n if (stats.isDirectory()) {\n await applyTemplate(config, file, target);\n } else if (!BINARIES.some((r) => r.test(file))) {\n const content = await fs.readFile(file, 'utf8');\n\n let result;\n\n try {\n result = ejs.render(content, config);\n } catch (e) {\n throw new Error(`Failed to render template file content: ${f}`, {\n cause: e,\n });\n }\n\n await fs.writeFile(target, result);\n } else {\n await fs.copyFile(file, target);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.assertNpxExists = assertNpxExists;
7
- exports.assertUserInput = assertUserInput;
8
7
  var _kleur = _interopRequireDefault(require("kleur"));
9
8
  var _spawn = require("./spawn");
10
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -20,45 +19,4 @@ async function assertNpxExists() {
20
19
  }
21
20
  }
22
21
  }
23
-
24
- /**
25
- * Makes sure the answers are in expected form and ends the process with error if they are not
26
- */
27
- function assertUserInput(questions, answers) {
28
- for (const [key, value] of Object.entries(answers)) {
29
- if (value == null) {
30
- continue;
31
- }
32
- const question = questions.find(q => q.name === key);
33
- if (question == null) {
34
- continue;
35
- }
36
- let validation;
37
-
38
- // We also need to guard against invalid choices
39
- // If we don't already have a validation message to provide a better error
40
- if ('choices' in question) {
41
- const choices = typeof question.choices === 'function' ? question.choices(undefined, answers) : question.choices;
42
- if (choices && choices.every(choice => choice.value !== value)) {
43
- if (choices.length > 1) {
44
- validation = `Must be one of ${choices.map(choice => _kleur.default.green(choice.value)).join(', ')}`;
45
- } else if (choices[0]) {
46
- validation = `Must be '${_kleur.default.green(choices[0].value)}'`;
47
- } else {
48
- validation = false;
49
- }
50
- }
51
- }
52
- if (validation == null && question.validate) {
53
- validation = question.validate(String(value));
54
- }
55
- if (validation != null && validation !== true) {
56
- let message = `Invalid value ${_kleur.default.red(String(value))} passed for ${_kleur.default.blue(key)}`;
57
- if (typeof validation === 'string') {
58
- message += `: ${validation}`;
59
- }
60
- throw new Error(message);
61
- }
62
- }
63
- }
64
22
  //# sourceMappingURL=assert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"assert.js","names":["_kleur","_interopRequireDefault","require","_spawn","e","__esModule","default","assertNpxExists","spawn","error","code","Error","kleur","blue","assertUserInput","questions","answers","key","value","Object","entries","question","find","q","name","validation","choices","undefined","every","choice","length","map","green","join","validate","String","message","red"],"sources":["../../src/utils/assert.ts"],"sourcesContent":["import kleur from 'kleur';\nimport { spawn } from './spawn';\nimport type { Answers, Args } from '../input';\nimport type { Question } from './prompt';\n\nexport async function assertNpxExists() {\n try {\n await spawn('npx', ['--help']);\n } catch (error) {\n // @ts-expect-error: TS doesn't know about `code`\n if (error != null && error.code === 'ENOENT') {\n throw new Error(\n `Couldn't find ${kleur.blue(\n 'npx'\n )}! Please install it by running ${kleur.blue('npm install -g npx')}`\n );\n } else {\n throw error;\n }\n }\n}\n\n/**\n * Makes sure the answers are in expected form and ends the process with error if they are not\n */\nexport function assertUserInput(\n questions: Question<keyof Answers>[],\n answers: Partial<Answers | Args>\n) {\n for (const [key, value] of Object.entries(answers)) {\n if (value == null) {\n continue;\n }\n\n const question = questions.find((q) => q.name === key);\n\n if (question == null) {\n continue;\n }\n\n let validation;\n\n // We also need to guard against invalid choices\n // If we don't already have a validation message to provide a better error\n if ('choices' in question) {\n const choices =\n typeof question.choices === 'function'\n ? question.choices(undefined, answers)\n : question.choices;\n\n if (choices && choices.every((choice) => choice.value !== value)) {\n if (choices.length > 1) {\n validation = `Must be one of ${choices\n .map((choice) => kleur.green(choice.value))\n .join(', ')}`;\n } else if (choices[0]) {\n validation = `Must be '${kleur.green(choices[0].value)}'`;\n } else {\n validation = false;\n }\n }\n }\n\n if (validation == null && question.validate) {\n validation = question.validate(String(value));\n }\n\n if (validation != null && validation !== true) {\n let message = `Invalid value ${kleur.red(\n String(value)\n )} passed for ${kleur.blue(key)}`;\n\n if (typeof validation === 'string') {\n message += `: ${validation}`;\n }\n\n throw new Error(message);\n }\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAAgC,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAIzB,eAAeG,eAAeA,CAAA,EAAG;EACtC,IAAI;IACF,MAAM,IAAAC,YAAK,EAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;EAChC,CAAC,CAAC,OAAOC,KAAK,EAAE;IACd;IACA,IAAIA,KAAK,IAAI,IAAI,IAAIA,KAAK,CAACC,IAAI,KAAK,QAAQ,EAAE;MAC5C,MAAM,IAAIC,KAAK,CACb,iBAAiBC,cAAK,CAACC,IAAI,CACzB,KACF,CAAC,kCAAkCD,cAAK,CAACC,IAAI,CAAC,oBAAoB,CAAC,EACrE,CAAC;IACH,CAAC,MAAM;MACL,MAAMJ,KAAK;IACb;EACF;AACF;;AAEA;AACA;AACA;AACO,SAASK,eAAeA,CAC7BC,SAAoC,EACpCC,OAAgC,EAChC;EACA,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACJ,OAAO,CAAC,EAAE;IAClD,IAAIE,KAAK,IAAI,IAAI,EAAE;MACjB;IACF;IAEA,MAAMG,QAAQ,GAAGN,SAAS,CAACO,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,IAAI,KAAKP,GAAG,CAAC;IAEtD,IAAII,QAAQ,IAAI,IAAI,EAAE;MACpB;IACF;IAEA,IAAII,UAAU;;IAEd;IACA;IACA,IAAI,SAAS,IAAIJ,QAAQ,EAAE;MACzB,MAAMK,OAAO,GACX,OAAOL,QAAQ,CAACK,OAAO,KAAK,UAAU,GAClCL,QAAQ,CAACK,OAAO,CAACC,SAAS,EAAEX,OAAO,CAAC,GACpCK,QAAQ,CAACK,OAAO;MAEtB,IAAIA,OAAO,IAAIA,OAAO,CAACE,KAAK,CAAEC,MAAM,IAAKA,MAAM,CAACX,KAAK,KAAKA,KAAK,CAAC,EAAE;QAChE,IAAIQ,OAAO,CAACI,MAAM,GAAG,CAAC,EAAE;UACtBL,UAAU,GAAG,kBAAkBC,OAAO,CACnCK,GAAG,CAAEF,MAAM,IAAKjB,cAAK,CAACoB,KAAK,CAACH,MAAM,CAACX,KAAK,CAAC,CAAC,CAC1Ce,IAAI,CAAC,IAAI,CAAC,EAAE;QACjB,CAAC,MAAM,IAAIP,OAAO,CAAC,CAAC,CAAC,EAAE;UACrBD,UAAU,GAAG,YAAYb,cAAK,CAACoB,KAAK,CAACN,OAAO,CAAC,CAAC,CAAC,CAACR,KAAK,CAAC,GAAG;QAC3D,CAAC,MAAM;UACLO,UAAU,GAAG,KAAK;QACpB;MACF;IACF;IAEA,IAAIA,UAAU,IAAI,IAAI,IAAIJ,QAAQ,CAACa,QAAQ,EAAE;MAC3CT,UAAU,GAAGJ,QAAQ,CAACa,QAAQ,CAACC,MAAM,CAACjB,KAAK,CAAC,CAAC;IAC/C;IAEA,IAAIO,UAAU,IAAI,IAAI,IAAIA,UAAU,KAAK,IAAI,EAAE;MAC7C,IAAIW,OAAO,GAAG,iBAAiBxB,cAAK,CAACyB,GAAG,CACtCF,MAAM,CAACjB,KAAK,CACd,CAAC,eAAeN,cAAK,CAACC,IAAI,CAACI,GAAG,CAAC,EAAE;MAEjC,IAAI,OAAOQ,UAAU,KAAK,QAAQ,EAAE;QAClCW,OAAO,IAAI,KAAKX,UAAU,EAAE;MAC9B;MAEA,MAAM,IAAId,KAAK,CAACyB,OAAO,CAAC;IAC1B;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"assert.js","names":["_kleur","_interopRequireDefault","require","_spawn","e","__esModule","default","assertNpxExists","spawn","error","code","Error","kleur","blue"],"sources":["../../src/utils/assert.ts"],"sourcesContent":["import kleur from 'kleur';\nimport { spawn } from './spawn';\n\nexport async function assertNpxExists() {\n try {\n await spawn('npx', ['--help']);\n } catch (error) {\n // @ts-expect-error: TS doesn't know about `code`\n if (error != null && error.code === 'ENOENT') {\n throw new Error(\n `Couldn't find ${kleur.blue(\n 'npx'\n )}! Please install it by running ${kleur.blue('npm install -g npx')}`\n );\n } else {\n throw error;\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAAgC,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEzB,eAAeG,eAAeA,CAAA,EAAG;EACtC,IAAI;IACF,MAAM,IAAAC,YAAK,EAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;EAChC,CAAC,CAAC,OAAOC,KAAK,EAAE;IACd;IACA,IAAIA,KAAK,IAAI,IAAI,IAAIA,KAAK,CAACC,IAAI,KAAK,QAAQ,EAAE;MAC5C,MAAM,IAAIC,KAAK,CACb,iBAAiBC,cAAK,CAACC,IAAI,CACzB,KACF,CAAC,kCAAkCD,cAAK,CAACC,IAAI,CAAC,oBAAoB,CAAC,EACrE,CAAC;IACH,CAAC,MAAM;MACL,MAAMJ,KAAK;IACb;EACF;AACF","ignoreList":[]}
@@ -5,30 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.addNitroDependencyToLocalLibrary = addNitroDependencyToLocalLibrary;
7
7
  exports.linkLocalLibrary = linkLocalLibrary;
8
- exports.promptLocalLibrary = promptLocalLibrary;
9
8
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
10
9
  var _path = _interopRequireDefault(require("path"));
11
- var _prompt = require("./prompt");
12
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
- async function promptLocalLibrary(argv) {
14
- if (typeof argv.local === 'boolean') {
15
- return argv.local;
16
- }
17
- const packageJsonPath = await findAppPackageJsonPath();
18
- if (packageJsonPath === null) {
19
- return false;
20
- }
21
-
22
- // If we're under a project with package.json, ask the user if they want to create a local library
23
- const answers = await (0, _prompt.prompt)({
24
- type: 'confirm',
25
- name: 'local',
26
- message: `Looks like you're under a project folder. Do you want to create a local library?`,
27
- initial: true
28
- });
29
- return answers.local;
30
- }
31
-
32
11
  /** @returns `true` if successfull */
33
12
  async function addNitroDependencyToLocalLibrary(config) {
34
13
  if (config.versions.nitroModules === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"local.js","names":["_fsExtra","_interopRequireDefault","require","_path","_prompt","e","__esModule","default","promptLocalLibrary","argv","local","packageJsonPath","findAppPackageJsonPath","answers","prompt","type","name","message","initial","addNitroDependencyToLocalLibrary","config","versions","nitroModules","undefined","appPackageJsonPath","appPackageJson","fs","readJson","dependencies","writeJson","spaces","linkLocalLibrary","folder","packageManager","isReactNativeProject","Boolean","project","slug","path","relative","process","cwd","writeJSON","cwdPackageJson","join","pathExists"],"sources":["../../src/utils/local.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\nimport { prompt } from './prompt';\nimport type { TemplateConfiguration } from '../template';\nimport type { Args } from '../input';\n\ntype PackageJson = {\n dependencies?: Record<string, string>;\n};\n\nexport async function promptLocalLibrary(argv: Args): Promise<boolean> {\n if (typeof argv.local === 'boolean') {\n return argv.local;\n }\n\n const packageJsonPath = await findAppPackageJsonPath();\n\n if (packageJsonPath === null) {\n return false;\n }\n\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 return answers.local;\n}\n\n/** @returns `true` if successfull */\nexport async function addNitroDependencyToLocalLibrary(\n config: TemplateConfiguration\n): Promise<boolean> {\n if (config.versions.nitroModules === undefined) {\n return false;\n }\n\n const appPackageJsonPath = await findAppPackageJsonPath();\n if (appPackageJsonPath === null) {\n return false;\n }\n\n const appPackageJson: PackageJson = await fs.readJson(appPackageJsonPath);\n const dependencies = appPackageJson['dependencies'] ?? {};\n\n dependencies['react-native-nitro-modules'] = config.versions.nitroModules;\n\n appPackageJson['dependencies'] = dependencies;\n await fs.writeJson(appPackageJsonPath, appPackageJson, {\n spaces: 2,\n });\n\n return true;\n}\n\n/** @returns `true` if successfull */\nexport async function linkLocalLibrary(\n config: TemplateConfiguration,\n folder: string,\n packageManager: string\n): Promise<boolean> {\n const appPackageJsonPath = await findAppPackageJsonPath();\n if (appPackageJsonPath === null) {\n return false;\n }\n\n const appPackageJson: PackageJson = await fs.readJson(appPackageJsonPath);\n\n const isReactNativeProject = Boolean(\n appPackageJson.dependencies?.['react-native']\n );\n\n if (!isReactNativeProject) {\n return false;\n }\n\n const dependencies = appPackageJson['dependencies'] ?? {};\n dependencies[config.project.slug] =\n packageManager === 'yarn'\n ? `link:./${path.relative(process.cwd(), folder)}`\n : `file:./${path.relative(process.cwd(), folder)}`;\n\n await fs.writeJSON(appPackageJsonPath, appPackageJson, {\n spaces: 2,\n });\n\n return true;\n}\n\nasync function findAppPackageJsonPath(): Promise<string | null> {\n const cwdPackageJson = path.join(process.cwd(), 'package.json');\n if (!(await fs.pathExists(cwdPackageJson))) {\n return null;\n }\n\n return cwdPackageJson;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"local.js","names":["_fsExtra","_interopRequireDefault","require","_path","e","__esModule","default","addNitroDependencyToLocalLibrary","config","versions","nitroModules","undefined","appPackageJsonPath","findAppPackageJsonPath","appPackageJson","fs","readJson","dependencies","writeJson","spaces","linkLocalLibrary","folder","packageManager","isReactNativeProject","Boolean","project","slug","path","relative","process","cwd","writeJSON","cwdPackageJson","join","pathExists"],"sources":["../../src/utils/local.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\nimport type { TemplateConfiguration } from '../template';\n\ntype PackageJson = {\n dependencies?: Record<string, string>;\n};\n\n/** @returns `true` if successfull */\nexport async function addNitroDependencyToLocalLibrary(\n config: TemplateConfiguration\n): Promise<boolean> {\n if (config.versions.nitroModules === undefined) {\n return false;\n }\n\n const appPackageJsonPath = await findAppPackageJsonPath();\n if (appPackageJsonPath === null) {\n return false;\n }\n\n const appPackageJson: PackageJson = await fs.readJson(appPackageJsonPath);\n const dependencies = appPackageJson['dependencies'] ?? {};\n\n dependencies['react-native-nitro-modules'] = config.versions.nitroModules;\n\n appPackageJson['dependencies'] = dependencies;\n await fs.writeJson(appPackageJsonPath, appPackageJson, {\n spaces: 2,\n });\n\n return true;\n}\n\n/** @returns `true` if successfull */\nexport async function linkLocalLibrary(\n config: TemplateConfiguration,\n folder: string,\n packageManager: string\n): Promise<boolean> {\n const appPackageJsonPath = await findAppPackageJsonPath();\n if (appPackageJsonPath === null) {\n return false;\n }\n\n const appPackageJson: PackageJson = await fs.readJson(appPackageJsonPath);\n\n const isReactNativeProject = Boolean(\n appPackageJson.dependencies?.['react-native']\n );\n\n if (!isReactNativeProject) {\n return false;\n }\n\n const dependencies = appPackageJson['dependencies'] ?? {};\n dependencies[config.project.slug] =\n packageManager === 'yarn'\n ? `link:./${path.relative(process.cwd(), folder)}`\n : `file:./${path.relative(process.cwd(), folder)}`;\n\n await fs.writeJSON(appPackageJsonPath, appPackageJson, {\n spaces: 2,\n });\n\n return true;\n}\n\nasync function findAppPackageJsonPath(): Promise<string | null> {\n const cwdPackageJson = path.join(process.cwd(), 'package.json');\n if (!(await fs.pathExists(cwdPackageJson))) {\n return null;\n }\n\n return cwdPackageJson;\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAwB,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAOxB;AACO,eAAeG,gCAAgCA,CACpDC,MAA6B,EACX;EAClB,IAAIA,MAAM,CAACC,QAAQ,CAACC,YAAY,KAAKC,SAAS,EAAE;IAC9C,OAAO,KAAK;EACd;EAEA,MAAMC,kBAAkB,GAAG,MAAMC,sBAAsB,CAAC,CAAC;EACzD,IAAID,kBAAkB,KAAK,IAAI,EAAE;IAC/B,OAAO,KAAK;EACd;EAEA,MAAME,cAA2B,GAAG,MAAMC,gBAAE,CAACC,QAAQ,CAACJ,kBAAkB,CAAC;EACzE,MAAMK,YAAY,GAAGH,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;EAEzDG,YAAY,CAAC,4BAA4B,CAAC,GAAGT,MAAM,CAACC,QAAQ,CAACC,YAAY;EAEzEI,cAAc,CAAC,cAAc,CAAC,GAAGG,YAAY;EAC7C,MAAMF,gBAAE,CAACG,SAAS,CAACN,kBAAkB,EAAEE,cAAc,EAAE;IACrDK,MAAM,EAAE;EACV,CAAC,CAAC;EAEF,OAAO,IAAI;AACb;;AAEA;AACO,eAAeC,gBAAgBA,CACpCZ,MAA6B,EAC7Ba,MAAc,EACdC,cAAsB,EACJ;EAClB,MAAMV,kBAAkB,GAAG,MAAMC,sBAAsB,CAAC,CAAC;EACzD,IAAID,kBAAkB,KAAK,IAAI,EAAE;IAC/B,OAAO,KAAK;EACd;EAEA,MAAME,cAA2B,GAAG,MAAMC,gBAAE,CAACC,QAAQ,CAACJ,kBAAkB,CAAC;EAEzE,MAAMW,oBAAoB,GAAGC,OAAO,CAClCV,cAAc,CAACG,YAAY,GAAG,cAAc,CAC9C,CAAC;EAED,IAAI,CAACM,oBAAoB,EAAE;IACzB,OAAO,KAAK;EACd;EAEA,MAAMN,YAAY,GAAGH,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;EACzDG,YAAY,CAACT,MAAM,CAACiB,OAAO,CAACC,IAAI,CAAC,GAC/BJ,cAAc,KAAK,MAAM,GACrB,UAAUK,aAAI,CAACC,QAAQ,CAACC,OAAO,CAACC,GAAG,CAAC,CAAC,EAAET,MAAM,CAAC,EAAE,GAChD,UAAUM,aAAI,CAACC,QAAQ,CAACC,OAAO,CAACC,GAAG,CAAC,CAAC,EAAET,MAAM,CAAC,EAAE;EAEtD,MAAMN,gBAAE,CAACgB,SAAS,CAACnB,kBAAkB,EAAEE,cAAc,EAAE;IACrDK,MAAM,EAAE;EACV,CAAC,CAAC;EAEF,OAAO,IAAI;AACb;AAEA,eAAeN,sBAAsBA,CAAA,EAA2B;EAC9D,MAAMmB,cAAc,GAAGL,aAAI,CAACM,IAAI,CAACJ,OAAO,CAACC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC;EAC/D,IAAI,EAAE,MAAMf,gBAAE,CAACmB,UAAU,CAACF,cAAc,CAAC,CAAC,EAAE;IAC1C,OAAO,IAAI;EACb;EAEA,OAAOA,cAAc;AACvB","ignoreList":[]}
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.prompt = prompt;
7
7
  var _prompts = _interopRequireDefault(require("prompts"));
8
+ var _kleur = _interopRequireDefault(require("kleur"));
8
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
10
  /**
10
11
  * Wrapper around `prompts` with additional features:
@@ -12,16 +13,32 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
12
13
  * - Improved type-safety
13
14
  * - Read answers from passed arguments
14
15
  * - Skip questions with a single choice
16
+ * - Validate answers
15
17
  * - Exit on canceling the prompt
18
+ * - Handle non-interactive mode
16
19
  */
17
20
  async function prompt(questions, argv, options) {
18
- const singleChoiceAnswers = {};
21
+ const interactive = options?.interactive ?? Boolean(process.stdout.isTTY && process.env.TERM !== 'dumb' && !process.env.CI);
22
+ const onCancel = () => {
23
+ // Exit the CLI on Ctrl+C
24
+ process.exit(1);
25
+ };
26
+ const onError = message => {
27
+ console.log(message);
28
+ process.exit(1);
29
+ };
30
+ if (argv) {
31
+ validate(argv, questions, onError);
32
+ }
33
+ const defaultAnswers = {};
19
34
  const promptQuestions = [];
20
35
  if (Array.isArray(questions)) {
21
36
  for (const question of questions) {
37
+ let promptQuestion = question;
38
+
22
39
  // Skip questions which are passed as parameter and pass validation
23
40
  const argValue = argv?.[question.name];
24
- if (argValue && question.validate?.(argValue) !== false) {
41
+ if (argValue && question.validate?.(String(argValue)) !== false) {
25
42
  continue;
26
43
  }
27
44
  const {
@@ -29,50 +46,118 @@ async function prompt(questions, argv, options) {
29
46
  choices
30
47
  } = question;
31
48
 
49
+ // Track default value from questions
50
+ if (type && question.default != null) {
51
+ // @ts-expect-error assume the passed value is correct
52
+ defaultAnswers[question.name] = question.default;
53
+
54
+ // Don't prompt questions with a default value when not interactive
55
+ if (!interactive) {
56
+ continue;
57
+ }
58
+ }
59
+
32
60
  // Don't prompt questions with a single choice
33
61
  if (type === 'select' && Array.isArray(question.choices) && question.choices.length === 1) {
34
62
  const onlyChoice = question.choices[0];
35
63
  if (onlyChoice?.value) {
36
64
  // @ts-expect-error assume the passed value is correct
37
- singleChoiceAnswers[question.name] = onlyChoice.value;
65
+ defaultAnswers[question.name] = onlyChoice.value;
38
66
  }
39
67
  continue;
40
68
  }
41
69
 
42
70
  // Don't prompt dynamic questions with a single choice
43
71
  if (type === 'select' && typeof choices === 'function') {
44
- question.type = (prev, values) => {
45
- const dynamicChoices = choices(prev, {
46
- ...argv,
47
- ...values
48
- });
49
- if (dynamicChoices && dynamicChoices.length === 1) {
50
- const onlyChoice = dynamicChoices[0];
51
- if (onlyChoice?.value) {
52
- // @ts-expect-error assume the passed value is correct
53
- singleChoiceAnswers[question.name] = onlyChoice.value;
72
+ promptQuestion = {
73
+ ...question,
74
+ type: (prev, values) => {
75
+ const dynamicChoices = choices(prev, {
76
+ ...argv,
77
+ ...values
78
+ });
79
+ if (dynamicChoices && dynamicChoices.length === 1) {
80
+ const onlyChoice = dynamicChoices[0];
81
+ if (onlyChoice?.value) {
82
+ // @ts-expect-error assume the passed value is correct
83
+ defaultAnswers[question.name] = onlyChoice.value;
84
+ }
85
+ return null;
54
86
  }
55
- return null;
87
+ return type;
56
88
  }
57
- return type;
58
89
  };
59
90
  }
60
- promptQuestions.push(question);
91
+ promptQuestions.push(promptQuestion);
61
92
  }
62
93
  } else {
63
94
  promptQuestions.push(questions);
64
95
  }
65
- const promptAnswers = await (0, _prompts.default)(promptQuestions, {
66
- onCancel() {
67
- // Exit the CLI on cancel
68
- process.exit(1);
69
- },
70
- ...options
71
- });
72
- return {
96
+ let promptAnswers;
97
+ if (interactive) {
98
+ promptAnswers = await (0, _prompts.default)(promptQuestions, {
99
+ ...options,
100
+ onCancel
101
+ });
102
+ } else {
103
+ const missingQuestions = promptQuestions.reduce((acc, question) => {
104
+ let type = question.type;
105
+ if (typeof question.type === 'function') {
106
+ // @ts-expect-error assume the passed value is correct
107
+ type = question.type(null, argv, null);
108
+ }
109
+ if (type != null) {
110
+ acc.push(question.name.replace(/([A-Z]+)/g, '-$1').replace(/^-/, '').toLowerCase());
111
+ }
112
+ return acc;
113
+ }, []);
114
+ if (missingQuestions.length) {
115
+ onError(`Missing values for options: ${missingQuestions.map(_kleur.default.blue).join(', ')}`);
116
+ }
117
+ }
118
+ const result = {
73
119
  ...argv,
74
- ...singleChoiceAnswers,
120
+ ...defaultAnswers,
75
121
  ...promptAnswers
76
122
  };
123
+ validate(result, questions, onError);
124
+ return result;
125
+ }
126
+ function validate(argv, questions, onError) {
127
+ for (const [key, value] of Object.entries(argv)) {
128
+ if (value == null) {
129
+ continue;
130
+ }
131
+ const question = Array.isArray(questions) ? questions.find(q => q.name === key) : questions.name === key ? questions : null;
132
+ if (question == null) {
133
+ continue;
134
+ }
135
+ let validation;
136
+
137
+ // We also need to guard against invalid choices
138
+ // If we don't already have a validation message to provide a better error
139
+ if ('choices' in question) {
140
+ const choices = typeof question.choices === 'function' ? question.choices(undefined, argv) : question.choices;
141
+ if (choices && choices.every(choice => choice.value !== value)) {
142
+ if (choices.length > 1) {
143
+ validation = `Must be one of ${choices.map(choice => _kleur.default.green(choice.value)).join(', ')}`;
144
+ } else if (choices[0]) {
145
+ validation = `Must be '${_kleur.default.green(choices[0].value)}'`;
146
+ } else {
147
+ validation = false;
148
+ }
149
+ }
150
+ }
151
+ if (validation == null && question.validate) {
152
+ validation = question.validate(String(value));
153
+ }
154
+ if (validation != null && validation !== true) {
155
+ let message = `Invalid value ${_kleur.default.red(String(value))} passed for ${_kleur.default.blue(key)}`;
156
+ if (typeof validation === 'string') {
157
+ message += `: ${validation}`;
158
+ }
159
+ onError(message);
160
+ }
161
+ }
77
162
  }
78
163
  //# sourceMappingURL=prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","names":["_prompts","_interopRequireDefault","require","e","__esModule","default","prompt","questions","argv","options","singleChoiceAnswers","promptQuestions","Array","isArray","question","argValue","name","validate","type","choices","length","onlyChoice","value","prev","values","dynamicChoices","push","promptAnswers","prompts","onCancel","process","exit"],"sources":["../../src/utils/prompt.ts"],"sourcesContent":["import prompts from 'prompts';\n\ntype Choice = {\n title: string;\n value: string;\n description?: string;\n};\n\nexport type Question<T extends string> = Omit<\n prompts.PromptObject<T>,\n 'validate' | 'name' | 'choices'\n> & {\n name: T;\n validate?: (value: string) => boolean | string;\n choices?:\n | Choice[]\n | ((prev: unknown, values: Partial<prompts.Answers<T>>) => Choice[]);\n};\n\n/**\n * Wrapper around `prompts` with additional features:\n *\n * - Improved type-safety\n * - Read answers from passed arguments\n * - Skip questions with a single choice\n * - Exit on canceling the prompt\n */\nexport async function prompt<T extends string>(\n questions: Question<T>[] | Question<T>,\n argv?: Record<T, string>,\n options?: prompts.Options\n) {\n const singleChoiceAnswers = {};\n const promptQuestions = [];\n\n if (Array.isArray(questions)) {\n for (const question of questions) {\n // Skip questions which are passed as parameter and pass validation\n const argValue = argv?.[question.name];\n\n if (argValue && question.validate?.(argValue) !== false) {\n continue;\n }\n\n const { type, choices } = question;\n\n // Don't prompt questions with a single choice\n if (\n type === 'select' &&\n Array.isArray(question.choices) &&\n question.choices.length === 1\n ) {\n const onlyChoice = question.choices[0];\n\n if (onlyChoice?.value) {\n // @ts-expect-error assume the passed value is correct\n singleChoiceAnswers[question.name] = onlyChoice.value;\n }\n\n continue;\n }\n\n // Don't prompt dynamic questions with a single choice\n if (type === 'select' && typeof choices === 'function') {\n question.type = (prev, values) => {\n const dynamicChoices = choices(prev, { ...argv, ...values });\n\n if (dynamicChoices && dynamicChoices.length === 1) {\n const onlyChoice = dynamicChoices[0];\n\n if (onlyChoice?.value) {\n // @ts-expect-error assume the passed value is correct\n singleChoiceAnswers[question.name] = onlyChoice.value;\n }\n\n return null;\n }\n\n return type;\n };\n }\n\n promptQuestions.push(question);\n }\n } else {\n promptQuestions.push(questions);\n }\n\n const promptAnswers = await prompts(promptQuestions, {\n onCancel() {\n // Exit the CLI on cancel\n process.exit(1);\n },\n ...options,\n });\n\n return {\n ...argv,\n ...singleChoiceAnswers,\n ...promptAnswers,\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8B,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAmB9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAeG,MAAMA,CAC1BC,SAAsC,EACtCC,IAAwB,EACxBC,OAAyB,EACzB;EACA,MAAMC,mBAAmB,GAAG,CAAC,CAAC;EAC9B,MAAMC,eAAe,GAAG,EAAE;EAE1B,IAAIC,KAAK,CAACC,OAAO,CAACN,SAAS,CAAC,EAAE;IAC5B,KAAK,MAAMO,QAAQ,IAAIP,SAAS,EAAE;MAChC;MACA,MAAMQ,QAAQ,GAAGP,IAAI,GAAGM,QAAQ,CAACE,IAAI,CAAC;MAEtC,IAAID,QAAQ,IAAID,QAAQ,CAACG,QAAQ,GAAGF,QAAQ,CAAC,KAAK,KAAK,EAAE;QACvD;MACF;MAEA,MAAM;QAAEG,IAAI;QAAEC;MAAQ,CAAC,GAAGL,QAAQ;;MAElC;MACA,IACEI,IAAI,KAAK,QAAQ,IACjBN,KAAK,CAACC,OAAO,CAACC,QAAQ,CAACK,OAAO,CAAC,IAC/BL,QAAQ,CAACK,OAAO,CAACC,MAAM,KAAK,CAAC,EAC7B;QACA,MAAMC,UAAU,GAAGP,QAAQ,CAACK,OAAO,CAAC,CAAC,CAAC;QAEtC,IAAIE,UAAU,EAAEC,KAAK,EAAE;UACrB;UACAZ,mBAAmB,CAACI,QAAQ,CAACE,IAAI,CAAC,GAAGK,UAAU,CAACC,KAAK;QACvD;QAEA;MACF;;MAEA;MACA,IAAIJ,IAAI,KAAK,QAAQ,IAAI,OAAOC,OAAO,KAAK,UAAU,EAAE;QACtDL,QAAQ,CAACI,IAAI,GAAG,CAACK,IAAI,EAAEC,MAAM,KAAK;UAChC,MAAMC,cAAc,GAAGN,OAAO,CAACI,IAAI,EAAE;YAAE,GAAGf,IAAI;YAAE,GAAGgB;UAAO,CAAC,CAAC;UAE5D,IAAIC,cAAc,IAAIA,cAAc,CAACL,MAAM,KAAK,CAAC,EAAE;YACjD,MAAMC,UAAU,GAAGI,cAAc,CAAC,CAAC,CAAC;YAEpC,IAAIJ,UAAU,EAAEC,KAAK,EAAE;cACrB;cACAZ,mBAAmB,CAACI,QAAQ,CAACE,IAAI,CAAC,GAAGK,UAAU,CAACC,KAAK;YACvD;YAEA,OAAO,IAAI;UACb;UAEA,OAAOJ,IAAI;QACb,CAAC;MACH;MAEAP,eAAe,CAACe,IAAI,CAACZ,QAAQ,CAAC;IAChC;EACF,CAAC,MAAM;IACLH,eAAe,CAACe,IAAI,CAACnB,SAAS,CAAC;EACjC;EAEA,MAAMoB,aAAa,GAAG,MAAM,IAAAC,gBAAO,EAACjB,eAAe,EAAE;IACnDkB,QAAQA,CAAA,EAAG;MACT;MACAC,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,GAAGtB;EACL,CAAC,CAAC;EAEF,OAAO;IACL,GAAGD,IAAI;IACP,GAAGE,mBAAmB;IACtB,GAAGiB;EACL,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"prompt.js","names":["_prompts","_interopRequireDefault","require","_kleur","e","__esModule","default","prompt","questions","argv","options","interactive","Boolean","process","stdout","isTTY","env","TERM","CI","onCancel","exit","onError","message","console","log","validate","defaultAnswers","promptQuestions","Array","isArray","question","promptQuestion","argValue","name","String","type","choices","length","onlyChoice","value","prev","values","dynamicChoices","push","promptAnswers","prompts","missingQuestions","reduce","acc","replace","toLowerCase","map","kleur","blue","join","result","key","Object","entries","find","q","validation","undefined","every","choice","green","red"],"sources":["../../src/utils/prompt.ts"],"sourcesContent":["import prompts, { type Answers, type InitialReturnValue } from 'prompts';\nimport kleur from 'kleur';\n\ntype Choice = {\n title: string;\n value: string;\n description?: string;\n};\n\nexport type Question<T extends string> = Omit<\n prompts.PromptObject<T>,\n 'validate' | 'name' | 'choices'\n> & {\n name: T;\n validate?: (value: string) => boolean | string;\n choices?:\n | Choice[]\n | ((prev: unknown, values: Partial<Answers<T>>) => Choice[]);\n default?: InitialReturnValue;\n};\n\n/**\n * Wrapper around `prompts` with additional features:\n *\n * - Improved type-safety\n * - Read answers from passed arguments\n * - Skip questions with a single choice\n * - Validate answers\n * - Exit on canceling the prompt\n * - Handle non-interactive mode\n */\nexport async function prompt<\n PromptAnswers extends Record<string, unknown>,\n Argv extends Record<string, unknown> | undefined,\n>(\n questions:\n | Question<Extract<keyof PromptAnswers, string>>[]\n | Question<Extract<keyof PromptAnswers, string>>,\n argv: Argv,\n options: prompts.Options & {\n interactive: boolean | undefined;\n }\n): Promise<PromptAnswers & Argv> {\n const interactive =\n options?.interactive ??\n Boolean(\n process.stdout.isTTY && process.env.TERM !== 'dumb' && !process.env.CI\n );\n\n const onCancel = () => {\n // Exit the CLI on Ctrl+C\n process.exit(1);\n };\n\n const onError = (message: string) => {\n console.log(message);\n process.exit(1);\n };\n\n if (argv) {\n validate(argv, questions, onError);\n }\n\n const defaultAnswers = {};\n const promptQuestions: Question<Extract<keyof PromptAnswers, string>>[] = [];\n\n if (Array.isArray(questions)) {\n for (const question of questions) {\n let promptQuestion = question;\n\n // Skip questions which are passed as parameter and pass validation\n const argValue = argv?.[question.name];\n\n if (argValue && question.validate?.(String(argValue)) !== false) {\n continue;\n }\n\n const { type, choices } = question;\n\n // Track default value from questions\n if (type && question.default != null) {\n // @ts-expect-error assume the passed value is correct\n defaultAnswers[question.name] = question.default;\n\n // Don't prompt questions with a default value when not interactive\n if (!interactive) {\n continue;\n }\n }\n\n // Don't prompt questions with a single choice\n if (\n type === 'select' &&\n Array.isArray(question.choices) &&\n question.choices.length === 1\n ) {\n const onlyChoice = question.choices[0];\n\n if (onlyChoice?.value) {\n // @ts-expect-error assume the passed value is correct\n defaultAnswers[question.name] = onlyChoice.value;\n }\n\n continue;\n }\n\n // Don't prompt dynamic questions with a single choice\n if (type === 'select' && typeof choices === 'function') {\n promptQuestion = {\n ...question,\n type: (prev, values) => {\n const dynamicChoices = choices(prev, { ...argv, ...values });\n\n if (dynamicChoices && dynamicChoices.length === 1) {\n const onlyChoice = dynamicChoices[0];\n\n if (onlyChoice?.value) {\n // @ts-expect-error assume the passed value is correct\n defaultAnswers[question.name] = onlyChoice.value;\n }\n\n return null;\n }\n\n return type;\n },\n };\n }\n\n promptQuestions.push(promptQuestion);\n }\n } else {\n promptQuestions.push(questions);\n }\n\n let promptAnswers;\n\n if (interactive) {\n promptAnswers = await prompts(promptQuestions, {\n ...options,\n onCancel,\n });\n } else {\n const missingQuestions = promptQuestions.reduce<string[]>(\n (acc, question) => {\n let type = question.type;\n\n if (typeof question.type === 'function') {\n // @ts-expect-error assume the passed value is correct\n type = question.type(null, argv, null);\n }\n\n if (type != null) {\n acc.push(\n question.name\n .replace(/([A-Z]+)/g, '-$1')\n .replace(/^-/, '')\n .toLowerCase()\n );\n }\n\n return acc;\n },\n []\n );\n\n if (missingQuestions.length) {\n onError(\n `Missing values for options: ${missingQuestions\n .map(kleur.blue)\n .join(', ')}`\n );\n }\n }\n\n const result = {\n ...argv,\n ...defaultAnswers,\n ...promptAnswers,\n };\n\n validate(result, questions, onError);\n\n return result as PromptAnswers & Argv;\n}\n\nfunction validate<T extends string>(\n argv: Partial<Answers<T>>,\n questions: Question<T>[] | Question<T>,\n onError: (message: string) => void\n) {\n for (const [key, value] of Object.entries(argv)) {\n if (value == null) {\n continue;\n }\n\n const question = Array.isArray(questions)\n ? questions.find((q) => q.name === key)\n : questions.name === key\n ? questions\n : null;\n\n if (question == null) {\n continue;\n }\n\n let validation;\n\n // We also need to guard against invalid choices\n // If we don't already have a validation message to provide a better error\n if ('choices' in question) {\n const choices =\n typeof question.choices === 'function'\n ? question.choices(undefined, argv)\n : question.choices;\n\n if (choices && choices.every((choice) => choice.value !== value)) {\n if (choices.length > 1) {\n validation = `Must be one of ${choices\n .map((choice) => kleur.green(choice.value))\n .join(', ')}`;\n } else if (choices[0]) {\n validation = `Must be '${kleur.green(choices[0].value)}'`;\n } else {\n validation = false;\n }\n }\n }\n\n if (validation == null && question.validate) {\n validation = question.validate(String(value));\n }\n\n if (validation != null && validation !== true) {\n let message = `Invalid value ${kleur.red(\n String(value)\n )} passed for ${kleur.blue(key)}`;\n\n if (typeof validation === 'string') {\n message += `: ${validation}`;\n }\n\n onError(message);\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.49.10",
3
+ "version": "0.50.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": "f72b5a30dce522039ec4ac64a2fd347492d351ce"
68
+ "gitHead": "7b6b2fb83cd37cdab748c1b69f0abbf5ed7ee744"
69
69
  }
@@ -171,6 +171,12 @@ jobs:
171
171
  **/ios/Pods
172
172
  key: ${{ steps.cocoapods-cache.outputs.cache-key }}
173
173
 
174
+ - name: Use appropriate Xcode version
175
+ if: env.turbo_cache_hit != 1
176
+ uses: maxim-lobanov/setup-xcode@v1
177
+ with:
178
+ xcode-version: '16.2'
179
+
174
180
  - name: Build example for iOS
175
181
  run: |
176
182
  yarn turbo run build:ios --cache-dir="${{ env.TURBO_CACHE_DIR }}"
@@ -193,7 +193,6 @@
193
193
  "jsSrcsDir": "src",
194
194
  "android": {
195
195
  "javaPackageName": "com.<%- project.package %>"
196
- <% if (example === 'vanilla') { -%>
197
196
  <% if (project.viewConfig === 'fabric-view') { -%>
198
197
  },
199
198
  "ios": {
@@ -202,7 +201,6 @@
202
201
  }
203
202
  <% } -%>
204
203
  }
205
- <% } -%>
206
204
  <% } -%>
207
205
  }
208
206
  }