create-react-native-library 0.49.9 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +23 -59
- package/lib/index.js.map +1 -1
- package/lib/inform.js +6 -7
- package/lib/inform.js.map +1 -1
- package/lib/input.js +53 -12
- package/lib/input.js.map +1 -1
- package/lib/template.js.map +1 -1
- package/lib/utils/assert.js +0 -42
- package/lib/utils/assert.js.map +1 -1
- package/lib/utils/local.js +0 -21
- package/lib/utils/local.js.map +1 -1
- package/lib/utils/prompt.js +110 -25
- package/lib/utils/prompt.js.map +1 -1
- package/package.json +2 -2
- package/templates/common/$.github/workflows/ci.yml +6 -0
- package/templates/common/$package.json +0 -2
package/lib/index.js
CHANGED
|
@@ -20,11 +20,8 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
20
20
|
const FALLBACK_BOB_VERSION = '0.40.5';
|
|
21
21
|
const FALLBACK_NITRO_MODULES_VERSION = '0.22.1';
|
|
22
22
|
const SUPPORTED_REACT_NATIVE_VERSION = '0.78.2';
|
|
23
|
-
|
|
24
23
|
// 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({
|
|
24
|
+
_yargs.default.command('$0 [name]', 'create a react native library', _input.acceptedArgs, create).demandCommand().recommendCommands().fail(_inform.printErrorHelp).parserConfiguration({
|
|
28
25
|
// don't pass kebab-case args to handler.
|
|
29
26
|
'strip-dashed': true
|
|
30
27
|
}).strict().argv;
|
|
@@ -39,22 +36,15 @@ async function create(_argv) {
|
|
|
39
36
|
// Prefetch bob version in background while asking questions
|
|
40
37
|
const bobVersionPromise = (0, _resolveNpmPackageVersion.resolveNpmPackageVersion)('react-native-builder-bob', FALLBACK_BOB_VERSION);
|
|
41
38
|
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);
|
|
44
39
|
await (0, _assert.assertNpxExists)();
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
local
|
|
40
|
+
const questions = await (0, _input.createQuestions)(argv);
|
|
41
|
+
const promptAnswers = await (0, _prompt.prompt)(questions, argv, {
|
|
42
|
+
interactive: argv.interactive
|
|
49
43
|
});
|
|
50
|
-
(0, _assert.assertUserInput)(questions, argv);
|
|
51
|
-
const promptAnswers = await (0, _prompt.prompt)(questions, argv);
|
|
52
44
|
const answers = {
|
|
53
45
|
...promptAnswers,
|
|
54
|
-
reactNativeVersion: promptAnswers.reactNativeVersion ?? SUPPORTED_REACT_NATIVE_VERSION
|
|
55
|
-
local
|
|
46
|
+
reactNativeVersion: promptAnswers.reactNativeVersion ?? SUPPORTED_REACT_NATIVE_VERSION
|
|
56
47
|
};
|
|
57
|
-
(0, _assert.assertUserInput)(questions, answers);
|
|
58
48
|
const bobVersion = await bobVersionPromise;
|
|
59
49
|
const nitroModulesVersion = answers.type === 'nitro-module' ? await nitroModulesVersionPromise : undefined;
|
|
60
50
|
const config = (0, _template.generateTemplateConfiguration)({
|
|
@@ -64,9 +54,10 @@ async function create(_argv) {
|
|
|
64
54
|
// Nitro codegen's version is always the same as nitro modules version.
|
|
65
55
|
nitroCodegen: nitroModulesVersion
|
|
66
56
|
},
|
|
67
|
-
basename,
|
|
57
|
+
basename: _path.default.basename(answers.name ?? answers.directory),
|
|
68
58
|
answers
|
|
69
59
|
});
|
|
60
|
+
const folder = _path.default.resolve(process.cwd(), answers.directory);
|
|
70
61
|
await _fsExtra.default.mkdirp(folder);
|
|
71
62
|
if (answers.reactNativeVersion !== SUPPORTED_REACT_NATIVE_VERSION) {
|
|
72
63
|
(0, _inform.printUsedRNVersion)(answers.reactNativeVersion, config);
|
|
@@ -92,52 +83,25 @@ async function create(_argv) {
|
|
|
92
83
|
spaces: 2
|
|
93
84
|
});
|
|
94
85
|
const printSuccessMessage = () => spinner.succeed(`Project created successfully at ${_kleur.default.yellow(_path.default.relative(process.cwd(), folder))}!\n`);
|
|
95
|
-
if (
|
|
86
|
+
if (answers.local) {
|
|
87
|
+
const packageManager = await (0, _packageManager.determinePackageManager)();
|
|
88
|
+
let addedNitro = false;
|
|
89
|
+
if (config.project.moduleConfig === 'nitro-modules') {
|
|
90
|
+
addedNitro = await (0, _local.addNitroDependencyToLocalLibrary)(config);
|
|
91
|
+
}
|
|
92
|
+
const linkedLocalLibrary = await (0, _local.linkLocalLibrary)(config, folder, packageManager);
|
|
93
|
+
printSuccessMessage();
|
|
94
|
+
(0, _inform.printLocalLibNextSteps)({
|
|
95
|
+
config,
|
|
96
|
+
packageManager,
|
|
97
|
+
linkedLocalLibrary,
|
|
98
|
+
addedNitro,
|
|
99
|
+
folder
|
|
100
|
+
});
|
|
101
|
+
} else {
|
|
96
102
|
await (0, _initialCommit.createInitialGitCommit)(folder);
|
|
97
103
|
printSuccessMessage();
|
|
98
104
|
(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
105
|
}
|
|
141
|
-
return folder;
|
|
142
106
|
}
|
|
143
107
|
//# 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","_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","assertNpxExists","questions","createQuestions","promptAnswers","prompt","interactive","answers","reactNativeVersion","bobVersion","nitroModulesVersion","type","undefined","config","generateTemplateConfiguration","versions","bob","nitroModules","nitroCodegen","basename","path","name","directory","folder","resolve","process","cwd","fs","mkdirp","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 { 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 { prompt } from './utils/prompt';\nimport { resolveNpmPackageVersion } from './utils/resolveNpmPackageVersion';\nimport {\n addNitroDependencyToLocalLibrary,\n linkLocalLibrary,\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\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 promptAnswers = await prompt<Answers, typeof argv>(questions, argv, {\n interactive: argv.interactive,\n });\n\n const answers = {\n ...promptAnswers,\n reactNativeVersion:\n promptAnswers.reactNativeVersion ?? SUPPORTED_REACT_NATIVE_VERSION,\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(
|
|
64
|
+
console.log(message);
|
|
69
65
|
} else {
|
|
70
|
-
console.log(
|
|
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","
|
|
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
|
@@ -10,6 +10,8 @@ var _githubUsername = _interopRequireDefault(require("github-username"));
|
|
|
10
10
|
var _validateNpmPackageName = _interopRequireDefault(require("validate-npm-package-name"));
|
|
11
11
|
var _package = require("../package.json");
|
|
12
12
|
var _spawn = require("./utils/spawn");
|
|
13
|
+
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
14
|
+
var _path = _interopRequireDefault(require("path"));
|
|
13
15
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
16
|
const LANGUAGE_CHOICES = [{
|
|
15
17
|
title: 'Kotlin & Swift',
|
|
@@ -110,24 +112,63 @@ const acceptedArgs = exports.acceptedArgs = {
|
|
|
110
112
|
choices: EXAMPLE_CHOICES.map(({
|
|
111
113
|
value
|
|
112
114
|
}) => value)
|
|
115
|
+
},
|
|
116
|
+
interactive: {
|
|
117
|
+
description: 'Whether to run in interactive mode',
|
|
118
|
+
type: 'boolean'
|
|
113
119
|
}
|
|
114
120
|
};
|
|
115
121
|
async function createQuestions({
|
|
116
|
-
|
|
122
|
+
name,
|
|
117
123
|
local
|
|
118
124
|
}) {
|
|
119
|
-
let
|
|
125
|
+
let fullname, email;
|
|
120
126
|
try {
|
|
121
|
-
|
|
127
|
+
fullname = await (0, _spawn.spawn)('git', ['config', '--get', 'user.name']);
|
|
122
128
|
email = await (0, _spawn.spawn)('git', ['config', '--get', 'user.email']);
|
|
123
129
|
} catch (e) {
|
|
124
130
|
// Ignore error
|
|
125
131
|
}
|
|
126
132
|
const questions = [{
|
|
133
|
+
type: local == null && (await _fsExtra.default.pathExists(_path.default.join(process.cwd(), 'package.json'))) ? 'confirm' : null,
|
|
134
|
+
name: 'local',
|
|
135
|
+
message: `Looks like you're under a project folder. Do you want to create a local library?`,
|
|
136
|
+
initial: local,
|
|
137
|
+
default: false
|
|
138
|
+
}, {
|
|
139
|
+
type: (_, answers) => name && !(answers.local ?? local) ? null : 'text',
|
|
140
|
+
name: 'directory',
|
|
141
|
+
message: `Where do you want to create the library?`,
|
|
142
|
+
initial: (_, answers) => {
|
|
143
|
+
if ((answers.local ?? local) && name && !name?.includes('/')) {
|
|
144
|
+
return `modules/${name}`;
|
|
145
|
+
}
|
|
146
|
+
return name ?? '';
|
|
147
|
+
},
|
|
148
|
+
validate: input => {
|
|
149
|
+
if (!input) {
|
|
150
|
+
return 'Cannot be empty';
|
|
151
|
+
}
|
|
152
|
+
if (_fsExtra.default.pathExistsSync(_path.default.join(process.cwd(), input))) {
|
|
153
|
+
return 'Folder already exists';
|
|
154
|
+
}
|
|
155
|
+
return true;
|
|
156
|
+
},
|
|
157
|
+
default: name
|
|
158
|
+
}, {
|
|
127
159
|
type: 'text',
|
|
128
160
|
name: 'slug',
|
|
129
161
|
message: 'What is the name of the npm package?',
|
|
130
|
-
initial: (
|
|
162
|
+
initial: (_, answers) => {
|
|
163
|
+
const basename = _path.default.basename(answers.directory ?? name ?? '');
|
|
164
|
+
if ((0, _validateNpmPackageName.default)(basename).validForNewPackages) {
|
|
165
|
+
if (/^(@|react-native)/.test(basename)) {
|
|
166
|
+
return basename;
|
|
167
|
+
}
|
|
168
|
+
return `react-native-${basename}`;
|
|
169
|
+
}
|
|
170
|
+
return '';
|
|
171
|
+
},
|
|
131
172
|
validate: input => (0, _validateNpmPackageName.default)(input).validForNewPackages || 'Must be a valid npm package name'
|
|
132
173
|
}, {
|
|
133
174
|
type: 'text',
|
|
@@ -135,25 +176,25 @@ async function createQuestions({
|
|
|
135
176
|
message: 'What is the description for the package?',
|
|
136
177
|
validate: input => Boolean(input) || 'Cannot be empty'
|
|
137
178
|
}, {
|
|
138
|
-
type: local ? null : 'text',
|
|
179
|
+
type: (_, answers) => answers.local ?? local ? null : 'text',
|
|
139
180
|
name: 'authorName',
|
|
140
181
|
message: 'What is the name of package author?',
|
|
141
|
-
initial:
|
|
182
|
+
initial: fullname,
|
|
142
183
|
validate: input => Boolean(input) || 'Cannot be empty'
|
|
143
184
|
}, {
|
|
144
|
-
type: local ? null : 'text',
|
|
185
|
+
type: (_, answers) => answers.local ?? local ? null : 'text',
|
|
145
186
|
name: 'authorEmail',
|
|
146
187
|
message: 'What is the email address for the package author?',
|
|
147
188
|
initial: email,
|
|
148
189
|
validate: input => /^\S+@\S+$/.test(input) || 'Must be a valid email address'
|
|
149
190
|
}, {
|
|
150
|
-
type: local ? null : 'text',
|
|
191
|
+
type: (_, answers) => answers.local ?? local ? null : 'text',
|
|
151
192
|
name: 'authorUrl',
|
|
152
193
|
message: 'What is the URL for the package author?',
|
|
153
194
|
// @ts-expect-error this is supported, but types are wrong
|
|
154
|
-
initial: async
|
|
195
|
+
initial: async (_, answers) => {
|
|
155
196
|
try {
|
|
156
|
-
const username = await (0, _githubUsername.default)(
|
|
197
|
+
const username = await (0, _githubUsername.default)(answers.authorEmail);
|
|
157
198
|
return `https://github.com/${username}`;
|
|
158
199
|
} catch (e) {
|
|
159
200
|
// Ignore error
|
|
@@ -162,7 +203,7 @@ async function createQuestions({
|
|
|
162
203
|
},
|
|
163
204
|
validate: input => /^https?:\/\//.test(input) || 'Must be a valid URL'
|
|
164
205
|
}, {
|
|
165
|
-
type: local ? null : 'text',
|
|
206
|
+
type: (_, answers) => answers.local ?? local ? null : 'text',
|
|
166
207
|
name: 'repoUrl',
|
|
167
208
|
message: 'What is the URL for the repository?',
|
|
168
209
|
initial: (_, answers) => {
|
|
@@ -212,7 +253,7 @@ async function createQuestions({
|
|
|
212
253
|
}
|
|
213
254
|
function createMetadata(answers) {
|
|
214
255
|
// 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'];
|
|
256
|
+
const ignoredAnswers = ['name', 'directory', 'slug', 'description', 'authorName', 'authorEmail', 'authorUrl', 'repoUrl', 'example', 'reactNativeVersion', 'local', 'interactive'];
|
|
216
257
|
const libraryMetadata = Object.fromEntries(Object.entries(answers).filter(([answer]) => !ignoredAnswers.includes(answer)));
|
|
217
258
|
libraryMetadata.version = _package.version;
|
|
218
259
|
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":["_githubUsername","_interopRequireDefault","require","_validateNpmPackageName","_package","_spawn","_fsExtra","_path","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","interactive","createQuestions","name","fullname","email","spawn","questions","fs","pathExists","path","join","cwd","message","initial","_","answers","includes","validate","input","pathExistsSync","basename","directory","validateNpmPackage","validForNewPackages","test","Boolean","username","githubUsername","undefined","replace","values","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';\nimport fs from 'fs-extra';\nimport path from 'path';\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 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 interactive: {\n description: 'Whether to run in interactive mode',\n type: 'boolean',\n },\n} as const satisfies Record<\n Exclude<keyof Answers, 'name' | 'directory'>,\n yargs.Options\n>;\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":[]}
|
package/lib/template.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","names":["_path","_interopRequireDefault","require","_fsExtra","_ejs","e","__esModule","default","BINARIES","COMMON_FILES","path","resolve","__dirname","COMMON_LOCAL_FILES","EXAMPLE_COMMON_FILES","EXAMPLE_MODULE_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":[]}
|
package/lib/utils/assert.js
CHANGED
|
@@ -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
|
package/lib/utils/assert.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assert.js","names":["_kleur","_interopRequireDefault","require","_spawn","e","__esModule","default","assertNpxExists","spawn","error","code","Error","kleur","blue"
|
|
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":[]}
|
package/lib/utils/local.js
CHANGED
|
@@ -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 hasPackageJson = findAppPackageJsonPath() !== null;
|
|
18
|
-
if (!hasPackageJson) {
|
|
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) {
|
package/lib/utils/local.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.js","names":["_fsExtra","_interopRequireDefault","require","_path","
|
|
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":[]}
|
package/lib/utils/prompt.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (
|
|
52
|
-
|
|
53
|
-
|
|
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
|
|
87
|
+
return type;
|
|
56
88
|
}
|
|
57
|
-
return type;
|
|
58
89
|
};
|
|
59
90
|
}
|
|
60
|
-
promptQuestions.push(
|
|
91
|
+
promptQuestions.push(promptQuestion);
|
|
61
92
|
}
|
|
62
93
|
} else {
|
|
63
94
|
promptQuestions.push(questions);
|
|
64
95
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
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
|
-
...
|
|
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
|
package/lib/utils/prompt.js.map
CHANGED
|
@@ -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.
|
|
3
|
+
"version": "0.50.0",
|
|
4
4
|
"description": "CLI to scaffold React Native libraries",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
@@ -65,5 +65,5 @@
|
|
|
65
65
|
"@types/validate-npm-package-name": "^3.0.3",
|
|
66
66
|
"@types/yargs": "^17.0.10"
|
|
67
67
|
},
|
|
68
|
-
"gitHead": "
|
|
68
|
+
"gitHead": "a448a7ff39bfe4407813c99d31d3f96707115337"
|
|
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
|
}
|