create-react-native-library 0.48.8 → 0.49.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.
@@ -3,12 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getDependencyVersionsFromExampleApp = getDependencyVersionsFromExampleApp;
7
- var _nodeAssert = _interopRequireDefault(require("node:assert"));
6
+ exports.alignDependencyVersionsWithExampleApp = alignDependencyVersionsWithExampleApp;
8
7
  var _path = _interopRequireDefault(require("path"));
9
8
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
9
+ var _sortObjectKeys = _interopRequireDefault(require("../utils/sortObjectKeys"));
10
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
- async function getDependencyVersionsFromExampleApp(folder, config) {
11
+ async function alignDependencyVersionsWithExampleApp(pkg, folder, config) {
12
12
  const examplePackageJson = await _fsExtra.default.readJSON(_path.default.join(folder, 'example', 'package.json'));
13
13
  const PACKAGES_TO_COPY = ['react', 'react-native', '@types/react'];
14
14
  if (config.example === 'vanilla' && (config.project.moduleConfig === 'turbo-modules' || config.project.viewConfig === 'fabric-view')) {
@@ -20,13 +20,16 @@ async function getDependencyVersionsFromExampleApp(folder, config) {
20
20
  PACKAGES_TO_COPY.forEach(name => {
21
21
  if (name) {
22
22
  const version = examplePackageJson.dependencies?.[name] ?? examplePackageJson.devDependencies?.[name];
23
- (0, _nodeAssert.default)(version != null, `Couldn't find the package "${name}" in the example app.`);
24
- devDependencies[name] = version;
23
+ if (version != null) {
24
+ devDependencies[name] = version;
25
+ } else if (pkg.devDependencies?.[name] == null) {
26
+ throw new Error(`Couldn't find the package "${name}" in the example app.`);
27
+ }
25
28
  }
26
29
  });
27
- return {
28
- dependencies: {},
29
- devDependencies
30
- };
30
+ pkg['devDependencies'] = (0, _sortObjectKeys.default)({
31
+ ...pkg['devDependencies'],
32
+ ...devDependencies
33
+ });
31
34
  }
32
35
  //# sourceMappingURL=dependencies.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.js","names":["_nodeAssert","_interopRequireDefault","require","_path","_fsExtra","e","__esModule","default","getDependencyVersionsFromExampleApp","folder","config","examplePackageJson","fs","readJSON","path","join","PACKAGES_TO_COPY","example","project","moduleConfig","viewConfig","push","devDependencies","forEach","name","version","dependencies","assert"],"sources":["../../src/exampleApp/dependencies.ts"],"sourcesContent":["import assert from 'node:assert';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport type { TemplateConfiguration } from '../template';\n\nexport async function getDependencyVersionsFromExampleApp(\n folder: string,\n config: TemplateConfiguration\n) {\n const examplePackageJson = await fs.readJSON(\n path.join(folder, 'example', 'package.json')\n );\n\n const PACKAGES_TO_COPY = ['react', 'react-native', '@types/react'];\n\n if (\n config.example === 'vanilla' &&\n (config.project.moduleConfig === 'turbo-modules' ||\n config.project.viewConfig === 'fabric-view')\n ) {\n // React Native doesn't provide the community CLI as a dependency.\n // We have to read the version from the example app and put to the root package json\n PACKAGES_TO_COPY.push('@react-native-community/cli');\n }\n\n const devDependencies: Record<string, string> = {};\n\n PACKAGES_TO_COPY.forEach((name) => {\n if (name) {\n const version =\n examplePackageJson.dependencies?.[name] ??\n examplePackageJson.devDependencies?.[name];\n\n assert(\n version != null,\n `Couldn't find the package \"${name}\" in the example app.`\n );\n\n devDependencies[name] = version;\n }\n });\n\n return {\n dependencies: {},\n devDependencies,\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,QAAA,GAAAH,sBAAA,CAAAC,OAAA;AAA0B,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAGnB,eAAeG,mCAAmCA,CACvDC,MAAc,EACdC,MAA6B,EAC7B;EACA,MAAMC,kBAAkB,GAAG,MAAMC,gBAAE,CAACC,QAAQ,CAC1CC,aAAI,CAACC,IAAI,CAACN,MAAM,EAAE,SAAS,EAAE,cAAc,CAC7C,CAAC;EAED,MAAMO,gBAAgB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC;EAElE,IACEN,MAAM,CAACO,OAAO,KAAK,SAAS,KAC3BP,MAAM,CAACQ,OAAO,CAACC,YAAY,KAAK,eAAe,IAC9CT,MAAM,CAACQ,OAAO,CAACE,UAAU,KAAK,aAAa,CAAC,EAC9C;IACA;IACA;IACAJ,gBAAgB,CAACK,IAAI,CAAC,6BAA6B,CAAC;EACtD;EAEA,MAAMC,eAAuC,GAAG,CAAC,CAAC;EAElDN,gBAAgB,CAACO,OAAO,CAAEC,IAAI,IAAK;IACjC,IAAIA,IAAI,EAAE;MACR,MAAMC,OAAO,GACXd,kBAAkB,CAACe,YAAY,GAAGF,IAAI,CAAC,IACvCb,kBAAkB,CAACW,eAAe,GAAGE,IAAI,CAAC;MAE5C,IAAAG,mBAAM,EACJF,OAAO,IAAI,IAAI,EACf,8BAA8BD,IAAI,uBACpC,CAAC;MAEDF,eAAe,CAACE,IAAI,CAAC,GAAGC,OAAO;IACjC;EACF,CAAC,CAAC;EAEF,OAAO;IACLC,YAAY,EAAE,CAAC,CAAC;IAChBJ;EACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"dependencies.js","names":["_path","_interopRequireDefault","require","_fsExtra","_sortObjectKeys","e","__esModule","default","alignDependencyVersionsWithExampleApp","pkg","folder","config","examplePackageJson","fs","readJSON","path","join","PACKAGES_TO_COPY","example","project","moduleConfig","viewConfig","push","devDependencies","forEach","name","version","dependencies","Error","sortObjectKeys"],"sources":["../../src/exampleApp/dependencies.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport type { TemplateConfiguration } from '../template';\nimport sortObjectKeys from '../utils/sortObjectKeys';\n\ntype PackageJson = {\n devDependencies?: Record<string, string>;\n};\n\nexport async function alignDependencyVersionsWithExampleApp(\n pkg: PackageJson,\n folder: string,\n config: TemplateConfiguration\n) {\n const examplePackageJson = await fs.readJSON(\n path.join(folder, 'example', 'package.json')\n );\n\n const PACKAGES_TO_COPY = ['react', 'react-native', '@types/react'];\n\n if (\n config.example === 'vanilla' &&\n (config.project.moduleConfig === 'turbo-modules' ||\n config.project.viewConfig === 'fabric-view')\n ) {\n // React Native doesn't provide the community CLI as a dependency.\n // We have to read the version from the example app and put to the root package json\n PACKAGES_TO_COPY.push('@react-native-community/cli');\n }\n\n const devDependencies: Record<string, string> = {};\n\n PACKAGES_TO_COPY.forEach((name) => {\n if (name) {\n const version =\n examplePackageJson.dependencies?.[name] ??\n examplePackageJson.devDependencies?.[name];\n\n if (version != null) {\n devDependencies[name] = version;\n } else if (pkg.devDependencies?.[name] == null) {\n throw new Error(\n `Couldn't find the package \"${name}\" in the example app.`\n );\n }\n }\n });\n\n pkg['devDependencies'] = sortObjectKeys({\n ...pkg['devDependencies'],\n ...devDependencies,\n });\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,eAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAqD,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAM9C,eAAeG,qCAAqCA,CACzDC,GAAgB,EAChBC,MAAc,EACdC,MAA6B,EAC7B;EACA,MAAMC,kBAAkB,GAAG,MAAMC,gBAAE,CAACC,QAAQ,CAC1CC,aAAI,CAACC,IAAI,CAACN,MAAM,EAAE,SAAS,EAAE,cAAc,CAC7C,CAAC;EAED,MAAMO,gBAAgB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC;EAElE,IACEN,MAAM,CAACO,OAAO,KAAK,SAAS,KAC3BP,MAAM,CAACQ,OAAO,CAACC,YAAY,KAAK,eAAe,IAC9CT,MAAM,CAACQ,OAAO,CAACE,UAAU,KAAK,aAAa,CAAC,EAC9C;IACA;IACA;IACAJ,gBAAgB,CAACK,IAAI,CAAC,6BAA6B,CAAC;EACtD;EAEA,MAAMC,eAAuC,GAAG,CAAC,CAAC;EAElDN,gBAAgB,CAACO,OAAO,CAAEC,IAAI,IAAK;IACjC,IAAIA,IAAI,EAAE;MACR,MAAMC,OAAO,GACXd,kBAAkB,CAACe,YAAY,GAAGF,IAAI,CAAC,IACvCb,kBAAkB,CAACW,eAAe,GAAGE,IAAI,CAAC;MAE5C,IAAIC,OAAO,IAAI,IAAI,EAAE;QACnBH,eAAe,CAACE,IAAI,CAAC,GAAGC,OAAO;MACjC,CAAC,MAAM,IAAIjB,GAAG,CAACc,eAAe,GAAGE,IAAI,CAAC,IAAI,IAAI,EAAE;QAC9C,MAAM,IAAIG,KAAK,CACb,8BAA8BH,IAAI,uBACpC,CAAC;MACH;IACF;EACF,CAAC,CAAC;EAEFhB,GAAG,CAAC,iBAAiB,CAAC,GAAG,IAAAoB,uBAAc,EAAC;IACtC,GAAGpB,GAAG,CAAC,iBAAiB,CAAC;IACzB,GAAGc;EACL,CAAC,CAAC;AACJ","ignoreList":[]}
package/lib/index.js CHANGED
@@ -15,10 +15,11 @@ var _assert = require("./utils/assert");
15
15
  var _initialCommit = require("./utils/initialCommit");
16
16
  var _prompt = require("./utils/prompt");
17
17
  var _resolveNpmPackageVersion = require("./utils/resolveNpmPackageVersion");
18
- var _sortObjectKeys = _interopRequireDefault(require("./utils/sortObjectKeys"));
19
18
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
19
  const FALLBACK_BOB_VERSION = '0.38.3';
21
20
  const FALLBACK_NITRO_MODULES_VERSION = '0.22.1';
21
+
22
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
22
23
  _yargs.default.command('$0 [name]', 'create a react native library', _input.acceptedArgs,
23
24
  // @ts-expect-error Some types are still incompatible
24
25
  create).demandCommand().recommendCommands().fail(_inform.printErrorHelp).parserConfiguration({
@@ -80,18 +81,7 @@ async function create(_argv) {
80
81
  await (0, _template.applyTemplates)(answers, config, folder);
81
82
  const rootPackageJson = await _fsExtra.default.readJson(_path.default.join(folder, 'package.json'));
82
83
  if (config.example !== 'none') {
83
- const {
84
- dependencies,
85
- devDependencies
86
- } = await (0, _dependencies.getDependencyVersionsFromExampleApp)(folder, config);
87
- rootPackageJson.dependencies = (0, _sortObjectKeys.default)({
88
- ...rootPackageJson.dependencies,
89
- ...dependencies
90
- });
91
- rootPackageJson.devDependencies = (0, _sortObjectKeys.default)({
92
- ...rootPackageJson.devDependencies,
93
- ...devDependencies
94
- });
84
+ await (0, _dependencies.alignDependencyVersionsWithExampleApp)(rootPackageJson, folder, config);
95
85
  }
96
86
  if (config.example === 'vanilla' && (config.project.moduleConfig === 'turbo-modules' || config.project.viewConfig === 'fabric-view')) {
97
87
  (0, _addCodegenBuildScript.addCodegenBuildScript)(folder);
@@ -149,8 +139,7 @@ async function promptPath(argv, local) {
149
139
  folder = _path.default.join(process.cwd(), answers.folder);
150
140
  }
151
141
  if (await _fsExtra.default.pathExists(folder)) {
152
- console.log(`A folder already exists at ${_kleur.default.blue(folder)}! Please specify another folder name or delete the existing one.`);
153
- process.exit(1);
142
+ throw new Error(`A folder already exists at ${_kleur.default.blue(folder)}! Please specify another folder name or delete the existing one.`);
154
143
  }
155
144
  return folder;
156
145
  }
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_fsExtra","_interopRequireDefault","require","_kleur","_ora","_path","_yargs","_addCodegenBuildScript","_dependencies","_generateExampleApp","_inform","_input","_template","_assert","_initialCommit","_prompt","_resolveNpmPackageVersion","_sortObjectKeys","e","__esModule","default","FALLBACK_BOB_VERSION","FALLBACK_NITRO_MODULES_VERSION","yargs","command","acceptedArgs","create","demandCommand","recommendCommands","fail","printErrorHelp","parserConfiguration","strict","argv","_argv","_","$0","bobVersionPromise","resolveNpmPackageVersion","nitroModulesVersionPromise","local","promptLocalLibrary","folder","promptPath","assertNpxExists","basename","path","questions","createQuestions","assertUserInput","promptAnswers","prompt","answers","bobVersion","nitroModulesVersion","type","undefined","config","generateTemplateConfiguration","versions","bob","nitroModules","nitroCodegen","fs","mkdirp","reactNativeVersion","printUsedRNVersion","spinner","ora","start","example","text","generateExampleApp","destination","applyTemplates","rootPackageJson","readJson","join","dependencies","devDependencies","getDependencyVersionsFromExampleApp","sortObjectKeys","project","moduleConfig","viewConfig","addCodegenBuildScript","libraryMetadata","createMetadata","writeJson","spaces","createInitialGitCommit","succeed","kleur","yellow","relative","process","cwd","printNextSteps","hasPackageJson","pathExists","name","message","initial","includes","validate","input","pathExistsSync","console","log","blue","exit"],"sources":["../src/index.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport kleur from 'kleur';\nimport ora from 'ora';\nimport path from 'path';\nimport yargs from 'yargs';\nimport { addCodegenBuildScript } from './exampleApp/addCodegenBuildScript';\nimport { getDependencyVersionsFromExampleApp } from './exampleApp/dependencies';\nimport generateExampleApp from './exampleApp/generateExampleApp';\nimport { printErrorHelp, printNextSteps, printUsedRNVersion } 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 sortObjectKeys from './utils/sortObjectKeys';\n\nconst FALLBACK_BOB_VERSION = '0.38.3';\nconst FALLBACK_NITRO_MODULES_VERSION = '0.22.1';\n\nyargs\n .command(\n '$0 [name]',\n 'create a react native library',\n acceptedArgs,\n // @ts-expect-error Some types are still incompatible\n create\n )\n .demandCommand()\n .recommendCommands()\n .fail(printErrorHelp)\n .parserConfiguration({\n // don't pass kebab-case args to handler.\n 'strip-dashed': true,\n })\n .strict().argv;\n\nasync function create(_argv: yargs.Arguments<Args>) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _, $0, ...argv } = _argv;\n\n // Prefetch bob version in background while asking questions\n const bobVersionPromise = resolveNpmPackageVersion(\n 'react-native-builder-bob',\n FALLBACK_BOB_VERSION\n );\n const nitroModulesVersionPromise = resolveNpmPackageVersion(\n 'react-native-nitro-modules',\n FALLBACK_NITRO_MODULES_VERSION\n );\n\n const local = await promptLocalLibrary(argv);\n const folder = await promptPath(argv, local);\n\n await assertNpxExists();\n\n const basename = path.basename(folder);\n\n const questions = await createQuestions({ basename, local });\n\n assertUserInput(questions, argv);\n\n const promptAnswers = await prompt(questions, argv);\n const answers: Answers = {\n ...promptAnswers,\n local,\n };\n\n assertUserInput(questions, answers);\n\n const bobVersion = await bobVersionPromise;\n\n const nitroModulesVersion =\n answers.type === 'nitro-module'\n ? await nitroModulesVersionPromise\n : undefined;\n\n const config = generateTemplateConfiguration({\n versions: {\n bob: bobVersion,\n nitroModules: nitroModulesVersion,\n // Nitro codegen's version is always the same as nitro modules version.\n nitroCodegen: nitroModulesVersion,\n },\n basename,\n answers,\n });\n\n await fs.mkdirp(folder);\n\n if (answers.reactNativeVersion != null) {\n printUsedRNVersion(answers.reactNativeVersion, config);\n }\n\n const spinner = ora().start();\n\n if (config.example !== 'none') {\n spinner.text = 'Generating example app';\n\n await generateExampleApp({\n destination: folder,\n reactNativeVersion: answers.reactNativeVersion,\n config,\n });\n }\n\n spinner.text = 'Copying files';\n\n await applyTemplates(answers, config, folder);\n\n const rootPackageJson = await fs.readJson(path.join(folder, 'package.json'));\n\n if (config.example !== 'none') {\n const { dependencies, devDependencies } =\n await getDependencyVersionsFromExampleApp(folder, config);\n\n rootPackageJson.dependencies = sortObjectKeys({\n ...rootPackageJson.dependencies,\n ...dependencies,\n });\n\n rootPackageJson.devDependencies = sortObjectKeys({\n ...rootPackageJson.devDependencies,\n ...devDependencies,\n });\n }\n\n if (\n config.example === 'vanilla' &&\n (config.project.moduleConfig === 'turbo-modules' ||\n config.project.viewConfig === 'fabric-view')\n ) {\n addCodegenBuildScript(folder);\n }\n\n const libraryMetadata = createMetadata(answers);\n\n rootPackageJson['create-react-native-library'] = libraryMetadata;\n\n await fs.writeJson(path.join(folder, 'package.json'), rootPackageJson, {\n spaces: 2,\n });\n\n if (!local) {\n await createInitialGitCommit(folder);\n }\n\n spinner.succeed(\n `Project created successfully at ${kleur.yellow(\n path.relative(process.cwd(), folder)\n )}!\\n`\n );\n\n await printNextSteps(local, folder, config);\n}\n\nasync function promptLocalLibrary(argv: Args) {\n let local = false;\n\n if (typeof argv.local === 'boolean') {\n local = argv.local;\n } else {\n const hasPackageJson = await fs.pathExists(\n path.join(process.cwd(), 'package.json')\n );\n\n if (hasPackageJson) {\n // If we're under a project with package.json, ask the user if they want to create a local library\n const answers = await prompt({\n type: 'confirm',\n name: 'local',\n message: `Looks like you're under a project folder. Do you want to create a local library?`,\n initial: true,\n });\n\n local = answers.local;\n }\n }\n\n return local;\n}\n\nasync function promptPath(argv: Args, local: boolean) {\n let folder: string;\n\n if (argv.name && !local) {\n folder = path.join(process.cwd(), argv.name);\n } else {\n const answers = await prompt({\n type: 'text',\n name: 'folder',\n message: `Where do you want to create the library?`,\n initial:\n local && argv.name && !argv.name.includes('/')\n ? `modules/${argv.name}`\n : argv.name,\n validate: (input) => {\n if (!input) {\n return 'Cannot be empty';\n }\n\n if (fs.pathExistsSync(path.join(process.cwd(), input))) {\n return 'Folder already exists';\n }\n\n return true;\n },\n });\n\n folder = path.join(process.cwd(), answers.folder);\n }\n\n if (await fs.pathExists(folder)) {\n console.log(\n `A folder already exists at ${kleur.blue(\n folder\n )}! Please specify another folder name or delete the existing one.`\n );\n\n process.exit(1);\n }\n\n return folder;\n}\n"],"mappings":";;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,IAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,KAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,MAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,sBAAA,GAAAL,OAAA;AACA,IAAAM,aAAA,GAAAN,OAAA;AACA,IAAAO,mBAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,OAAA,GAAAR,OAAA;AACA,IAAAS,MAAA,GAAAT,OAAA;AAOA,IAAAU,SAAA,GAAAV,OAAA;AACA,IAAAW,OAAA,GAAAX,OAAA;AACA,IAAAY,cAAA,GAAAZ,OAAA;AACA,IAAAa,OAAA,GAAAb,OAAA;AACA,IAAAc,yBAAA,GAAAd,OAAA;AACA,IAAAe,eAAA,GAAAhB,sBAAA,CAAAC,OAAA;AAAoD,SAAAD,uBAAAiB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEpD,MAAMG,oBAAoB,GAAG,QAAQ;AACrC,MAAMC,8BAA8B,GAAG,QAAQ;AAE/CC,cAAK,CACFC,OAAO,CACN,WAAW,EACX,+BAA+B,EAC/BC,mBAAY;AACZ;AACAC,MACF,CAAC,CACAC,aAAa,CAAC,CAAC,CACfC,iBAAiB,CAAC,CAAC,CACnBC,IAAI,CAACC,sBAAc,CAAC,CACpBC,mBAAmB,CAAC;EACnB;EACA,cAAc,EAAE;AAClB,CAAC,CAAC,CACDC,MAAM,CAAC,CAAC,CAACC,IAAI;AAEhB,eAAeP,MAAMA,CAACQ,KAA4B,EAAE;EAClD;EACA,MAAM;IAAEC,CAAC;IAAEC,EAAE;IAAE,GAAGH;EAAK,CAAC,GAAGC,KAAK;;EAEhC;EACA,MAAMG,iBAAiB,GAAG,IAAAC,kDAAwB,EAChD,0BAA0B,EAC1BjB,oBACF,CAAC;EACD,MAAMkB,0BAA0B,GAAG,IAAAD,kDAAwB,EACzD,4BAA4B,EAC5BhB,8BACF,CAAC;EAED,MAAMkB,KAAK,GAAG,MAAMC,kBAAkB,CAACR,IAAI,CAAC;EAC5C,MAAMS,MAAM,GAAG,MAAMC,UAAU,CAACV,IAAI,EAAEO,KAAK,CAAC;EAE5C,MAAM,IAAAI,uBAAe,EAAC,CAAC;EAEvB,MAAMC,QAAQ,GAAGC,aAAI,CAACD,QAAQ,CAACH,MAAM,CAAC;EAEtC,MAAMK,SAAS,GAAG,MAAM,IAAAC,sBAAe,EAAC;IAAEH,QAAQ;IAAEL;EAAM,CAAC,CAAC;EAE5D,IAAAS,uBAAe,EAACF,SAAS,EAAEd,IAAI,CAAC;EAEhC,MAAMiB,aAAa,GAAG,MAAM,IAAAC,cAAM,EAACJ,SAAS,EAAEd,IAAI,CAAC;EACnD,MAAMmB,OAAgB,GAAG;IACvB,GAAGF,aAAa;IAChBV;EACF,CAAC;EAED,IAAAS,uBAAe,EAACF,SAAS,EAAEK,OAAO,CAAC;EAEnC,MAAMC,UAAU,GAAG,MAAMhB,iBAAiB;EAE1C,MAAMiB,mBAAmB,GACvBF,OAAO,CAACG,IAAI,KAAK,cAAc,GAC3B,MAAMhB,0BAA0B,GAChCiB,SAAS;EAEf,MAAMC,MAAM,GAAG,IAAAC,uCAA6B,EAAC;IAC3CC,QAAQ,EAAE;MACRC,GAAG,EAAEP,UAAU;MACfQ,YAAY,EAAEP,mBAAmB;MACjC;MACAQ,YAAY,EAAER;IAChB,CAAC;IACDT,QAAQ;IACRO;EACF,CAAC,CAAC;EAEF,MAAMW,gBAAE,CAACC,MAAM,CAACtB,MAAM,CAAC;EAEvB,IAAIU,OAAO,CAACa,kBAAkB,IAAI,IAAI,EAAE;IACtC,IAAAC,0BAAkB,EAACd,OAAO,CAACa,kBAAkB,EAAER,MAAM,CAAC;EACxD;EAEA,MAAMU,OAAO,GAAG,IAAAC,YAAG,EAAC,CAAC,CAACC,KAAK,CAAC,CAAC;EAE7B,IAAIZ,MAAM,CAACa,OAAO,KAAK,MAAM,EAAE;IAC7BH,OAAO,CAACI,IAAI,GAAG,wBAAwB;IAEvC,MAAM,IAAAC,2BAAkB,EAAC;MACvBC,WAAW,EAAE/B,MAAM;MACnBuB,kBAAkB,EAAEb,OAAO,CAACa,kBAAkB;MAC9CR;IACF,CAAC,CAAC;EACJ;EAEAU,OAAO,CAACI,IAAI,GAAG,eAAe;EAE9B,MAAM,IAAAG,wBAAc,EAACtB,OAAO,EAAEK,MAAM,EAAEf,MAAM,CAAC;EAE7C,MAAMiC,eAAe,GAAG,MAAMZ,gBAAE,CAACa,QAAQ,CAAC9B,aAAI,CAAC+B,IAAI,CAACnC,MAAM,EAAE,cAAc,CAAC,CAAC;EAE5E,IAAIe,MAAM,CAACa,OAAO,KAAK,MAAM,EAAE;IAC7B,MAAM;MAAEQ,YAAY;MAAEC;IAAgB,CAAC,GACrC,MAAM,IAAAC,iDAAmC,EAACtC,MAAM,EAAEe,MAAM,CAAC;IAE3DkB,eAAe,CAACG,YAAY,GAAG,IAAAG,uBAAc,EAAC;MAC5C,GAAGN,eAAe,CAACG,YAAY;MAC/B,GAAGA;IACL,CAAC,CAAC;IAEFH,eAAe,CAACI,eAAe,GAAG,IAAAE,uBAAc,EAAC;MAC/C,GAAGN,eAAe,CAACI,eAAe;MAClC,GAAGA;IACL,CAAC,CAAC;EACJ;EAEA,IACEtB,MAAM,CAACa,OAAO,KAAK,SAAS,KAC3Bb,MAAM,CAACyB,OAAO,CAACC,YAAY,KAAK,eAAe,IAC9C1B,MAAM,CAACyB,OAAO,CAACE,UAAU,KAAK,aAAa,CAAC,EAC9C;IACA,IAAAC,4CAAqB,EAAC3C,MAAM,CAAC;EAC/B;EAEA,MAAM4C,eAAe,GAAG,IAAAC,qBAAc,EAACnC,OAAO,CAAC;EAE/CuB,eAAe,CAAC,6BAA6B,CAAC,GAAGW,eAAe;EAEhE,MAAMvB,gBAAE,CAACyB,SAAS,CAAC1C,aAAI,CAAC+B,IAAI,CAACnC,MAAM,EAAE,cAAc,CAAC,EAAEiC,eAAe,EAAE;IACrEc,MAAM,EAAE;EACV,CAAC,CAAC;EAEF,IAAI,CAACjD,KAAK,EAAE;IACV,MAAM,IAAAkD,qCAAsB,EAAChD,MAAM,CAAC;EACtC;EAEAyB,OAAO,CAACwB,OAAO,CACb,mCAAmCC,cAAK,CAACC,MAAM,CAC7C/C,aAAI,CAACgD,QAAQ,CAACC,OAAO,CAACC,GAAG,CAAC,CAAC,EAAEtD,MAAM,CACrC,CAAC,KACH,CAAC;EAED,MAAM,IAAAuD,sBAAc,EAACzD,KAAK,EAAEE,MAAM,EAAEe,MAAM,CAAC;AAC7C;AAEA,eAAehB,kBAAkBA,CAACR,IAAU,EAAE;EAC5C,IAAIO,KAAK,GAAG,KAAK;EAEjB,IAAI,OAAOP,IAAI,CAACO,KAAK,KAAK,SAAS,EAAE;IACnCA,KAAK,GAAGP,IAAI,CAACO,KAAK;EACpB,CAAC,MAAM;IACL,MAAM0D,cAAc,GAAG,MAAMnC,gBAAE,CAACoC,UAAU,CACxCrD,aAAI,CAAC+B,IAAI,CAACkB,OAAO,CAACC,GAAG,CAAC,CAAC,EAAE,cAAc,CACzC,CAAC;IAED,IAAIE,cAAc,EAAE;MAClB;MACA,MAAM9C,OAAO,GAAG,MAAM,IAAAD,cAAM,EAAC;QAC3BI,IAAI,EAAE,SAAS;QACf6C,IAAI,EAAE,OAAO;QACbC,OAAO,EAAE,kFAAkF;QAC3FC,OAAO,EAAE;MACX,CAAC,CAAC;MAEF9D,KAAK,GAAGY,OAAO,CAACZ,KAAK;IACvB;EACF;EAEA,OAAOA,KAAK;AACd;AAEA,eAAeG,UAAUA,CAACV,IAAU,EAAEO,KAAc,EAAE;EACpD,IAAIE,MAAc;EAElB,IAAIT,IAAI,CAACmE,IAAI,IAAI,CAAC5D,KAAK,EAAE;IACvBE,MAAM,GAAGI,aAAI,CAAC+B,IAAI,CAACkB,OAAO,CAACC,GAAG,CAAC,CAAC,EAAE/D,IAAI,CAACmE,IAAI,CAAC;EAC9C,CAAC,MAAM;IACL,MAAMhD,OAAO,GAAG,MAAM,IAAAD,cAAM,EAAC;MAC3BI,IAAI,EAAE,MAAM;MACZ6C,IAAI,EAAE,QAAQ;MACdC,OAAO,EAAE,0CAA0C;MACnDC,OAAO,EACL9D,KAAK,IAAIP,IAAI,CAACmE,IAAI,IAAI,CAACnE,IAAI,CAACmE,IAAI,CAACG,QAAQ,CAAC,GAAG,CAAC,GAC1C,WAAWtE,IAAI,CAACmE,IAAI,EAAE,GACtBnE,IAAI,CAACmE,IAAI;MACfI,QAAQ,EAAGC,KAAK,IAAK;QACnB,IAAI,CAACA,KAAK,EAAE;UACV,OAAO,iBAAiB;QAC1B;QAEA,IAAI1C,gBAAE,CAAC2C,cAAc,CAAC5D,aAAI,CAAC+B,IAAI,CAACkB,OAAO,CAACC,GAAG,CAAC,CAAC,EAAES,KAAK,CAAC,CAAC,EAAE;UACtD,OAAO,uBAAuB;QAChC;QAEA,OAAO,IAAI;MACb;IACF,CAAC,CAAC;IAEF/D,MAAM,GAAGI,aAAI,CAAC+B,IAAI,CAACkB,OAAO,CAACC,GAAG,CAAC,CAAC,EAAE5C,OAAO,CAACV,MAAM,CAAC;EACnD;EAEA,IAAI,MAAMqB,gBAAE,CAACoC,UAAU,CAACzD,MAAM,CAAC,EAAE;IAC/BiE,OAAO,CAACC,GAAG,CACT,8BAA8BhB,cAAK,CAACiB,IAAI,CACtCnE,MACF,CAAC,kEACH,CAAC;IAEDqD,OAAO,CAACe,IAAI,CAAC,CAAC,CAAC;EACjB;EAEA,OAAOpE,MAAM;AACf","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_fsExtra","_interopRequireDefault","require","_kleur","_ora","_path","_yargs","_addCodegenBuildScript","_dependencies","_generateExampleApp","_inform","_input","_template","_assert","_initialCommit","_prompt","_resolveNpmPackageVersion","e","__esModule","default","FALLBACK_BOB_VERSION","FALLBACK_NITRO_MODULES_VERSION","yargs","command","acceptedArgs","create","demandCommand","recommendCommands","fail","printErrorHelp","parserConfiguration","strict","argv","_argv","_","$0","bobVersionPromise","resolveNpmPackageVersion","nitroModulesVersionPromise","local","promptLocalLibrary","folder","promptPath","assertNpxExists","basename","path","questions","createQuestions","assertUserInput","promptAnswers","prompt","answers","bobVersion","nitroModulesVersion","type","undefined","config","generateTemplateConfiguration","versions","bob","nitroModules","nitroCodegen","fs","mkdirp","reactNativeVersion","printUsedRNVersion","spinner","ora","start","example","text","generateExampleApp","destination","applyTemplates","rootPackageJson","readJson","join","alignDependencyVersionsWithExampleApp","project","moduleConfig","viewConfig","addCodegenBuildScript","libraryMetadata","createMetadata","writeJson","spaces","createInitialGitCommit","succeed","kleur","yellow","relative","process","cwd","printNextSteps","hasPackageJson","pathExists","name","message","initial","includes","validate","input","pathExistsSync","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 { addCodegenBuildScript } from './exampleApp/addCodegenBuildScript';\nimport { alignDependencyVersionsWithExampleApp } from './exampleApp/dependencies';\nimport generateExampleApp from './exampleApp/generateExampleApp';\nimport { printErrorHelp, printNextSteps, printUsedRNVersion } 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';\n\nconst FALLBACK_BOB_VERSION = '0.38.3';\nconst FALLBACK_NITRO_MODULES_VERSION = '0.22.1';\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 local,\n };\n\n assertUserInput(questions, answers);\n\n const bobVersion = await bobVersionPromise;\n\n const nitroModulesVersion =\n answers.type === 'nitro-module'\n ? await nitroModulesVersionPromise\n : undefined;\n\n const config = generateTemplateConfiguration({\n versions: {\n bob: bobVersion,\n nitroModules: nitroModulesVersion,\n // Nitro codegen's version is always the same as nitro modules version.\n nitroCodegen: nitroModulesVersion,\n },\n basename,\n answers,\n });\n\n await fs.mkdirp(folder);\n\n if (answers.reactNativeVersion != null) {\n printUsedRNVersion(answers.reactNativeVersion, config);\n }\n\n const spinner = ora().start();\n\n if (config.example !== 'none') {\n spinner.text = 'Generating example app';\n\n await generateExampleApp({\n destination: folder,\n reactNativeVersion: answers.reactNativeVersion,\n config,\n });\n }\n\n spinner.text = 'Copying files';\n\n await applyTemplates(answers, config, folder);\n\n const rootPackageJson = await fs.readJson(path.join(folder, 'package.json'));\n\n if (config.example !== 'none') {\n await alignDependencyVersionsWithExampleApp(\n rootPackageJson,\n folder,\n config\n );\n }\n\n if (\n config.example === 'vanilla' &&\n (config.project.moduleConfig === 'turbo-modules' ||\n config.project.viewConfig === 'fabric-view')\n ) {\n addCodegenBuildScript(folder);\n }\n\n const libraryMetadata = createMetadata(answers);\n\n rootPackageJson['create-react-native-library'] = libraryMetadata;\n\n await fs.writeJson(path.join(folder, 'package.json'), rootPackageJson, {\n spaces: 2,\n });\n\n if (!local) {\n await createInitialGitCommit(folder);\n }\n\n spinner.succeed(\n `Project created successfully at ${kleur.yellow(\n path.relative(process.cwd(), folder)\n )}!\\n`\n );\n\n await printNextSteps(local, folder, config);\n}\n\nasync function promptLocalLibrary(argv: Args) {\n let local = false;\n\n if (typeof argv.local === 'boolean') {\n local = argv.local;\n } else {\n const hasPackageJson = await fs.pathExists(\n path.join(process.cwd(), 'package.json')\n );\n\n if (hasPackageJson) {\n // If we're under a project with package.json, ask the user if they want to create a local library\n const answers = await prompt({\n type: 'confirm',\n name: 'local',\n message: `Looks like you're under a project folder. Do you want to create a local library?`,\n initial: true,\n });\n\n local = answers.local;\n }\n }\n\n return local;\n}\n\nasync function promptPath(argv: Args, local: boolean) {\n let folder: string;\n\n if (argv.name && !local) {\n folder = path.join(process.cwd(), argv.name);\n } else {\n const answers = await prompt({\n type: 'text',\n name: 'folder',\n message: `Where do you want to create the library?`,\n initial:\n local && argv.name && !argv.name.includes('/')\n ? `modules/${argv.name}`\n : argv.name,\n validate: (input) => {\n if (!input) {\n return 'Cannot be empty';\n }\n\n if (fs.pathExistsSync(path.join(process.cwd(), input))) {\n return 'Folder already exists';\n }\n\n return true;\n },\n });\n\n folder = path.join(process.cwd(), answers.folder);\n }\n\n if (await fs.pathExists(folder)) {\n 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":[]}
@@ -14,8 +14,7 @@ async function assertNpxExists() {
14
14
  } catch (error) {
15
15
  // @ts-expect-error: TS doesn't know about `code`
16
16
  if (error != null && error.code === 'ENOENT') {
17
- console.log(`Couldn't find ${_kleur.default.blue('npx')}! Please install it by running ${_kleur.default.blue('npm install -g npx')}`);
18
- process.exit(1);
17
+ throw new Error(`Couldn't find ${_kleur.default.blue('npx')}! Please install it by running ${_kleur.default.blue('npm install -g npx')}`);
19
18
  } else {
20
19
  throw error;
21
20
  }
@@ -58,8 +57,7 @@ function assertUserInput(questions, answers) {
58
57
  if (typeof validation === 'string') {
59
58
  message += `: ${validation}`;
60
59
  }
61
- console.log(message);
62
- process.exit(1);
60
+ throw new Error(message);
63
61
  }
64
62
  }
65
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"assert.js","names":["_kleur","_interopRequireDefault","require","_spawn","e","__esModule","default","assertNpxExists","spawn","error","code","console","log","kleur","blue","process","exit","assertUserInput","questions","answers","key","value","Object","entries","question","find","q","name","validation","choices","undefined","every","choice","length","map","green","join","validate","String","message","red"],"sources":["../../src/utils/assert.ts"],"sourcesContent":["import kleur from 'kleur';\nimport { spawn } from './spawn';\nimport type { Answers, Args } from '../input';\nimport type { Question } from './prompt';\n\nexport async function assertNpxExists() {\n try {\n await spawn('npx', ['--help']);\n } catch (error) {\n // @ts-expect-error: TS doesn't know about `code`\n if (error != null && error.code === 'ENOENT') {\n console.log(\n `Couldn't find ${kleur.blue(\n 'npx'\n )}! Please install it by running ${kleur.blue('npm install -g npx')}`\n );\n\n process.exit(1);\n } else {\n throw error;\n }\n }\n}\n\n/**\n * Makes sure the answers are in expected form and ends the process with error if they are not\n */\nexport function assertUserInput(\n questions: Question<keyof Answers>[],\n answers: Partial<Answers | Args>\n) {\n for (const [key, value] of Object.entries(answers)) {\n if (value == null) {\n continue;\n }\n\n const question = questions.find((q) => q.name === key);\n\n if (question == null) {\n continue;\n }\n\n let validation;\n\n // We also need to guard against invalid choices\n // If we don't already have a validation message to provide a better error\n if ('choices' in question) {\n const choices =\n typeof question.choices === 'function'\n ? question.choices(undefined, answers)\n : question.choices;\n\n if (choices && choices.every((choice) => choice.value !== value)) {\n if (choices.length > 1) {\n validation = `Must be one of ${choices\n .map((choice) => kleur.green(choice.value))\n .join(', ')}`;\n } else if (choices[0]) {\n validation = `Must be '${kleur.green(choices[0].value)}'`;\n } else {\n validation = false;\n }\n }\n }\n\n if (validation == null && question.validate) {\n validation = question.validate(String(value));\n }\n\n if (validation != null && validation !== true) {\n let message = `Invalid value ${kleur.red(\n String(value)\n )} passed for ${kleur.blue(key)}`;\n\n if (typeof validation === 'string') {\n message += `: ${validation}`;\n }\n\n console.log(message);\n\n process.exit(1);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"assert.js","names":["_kleur","_interopRequireDefault","require","_spawn","e","__esModule","default","assertNpxExists","spawn","error","code","Error","kleur","blue","assertUserInput","questions","answers","key","value","Object","entries","question","find","q","name","validation","choices","undefined","every","choice","length","map","green","join","validate","String","message","red"],"sources":["../../src/utils/assert.ts"],"sourcesContent":["import kleur from 'kleur';\nimport { spawn } from './spawn';\nimport type { Answers, Args } from '../input';\nimport type { Question } from './prompt';\n\nexport async function assertNpxExists() {\n try {\n await spawn('npx', ['--help']);\n } catch (error) {\n // @ts-expect-error: TS doesn't know about `code`\n if (error != null && error.code === 'ENOENT') {\n throw new Error(\n `Couldn't find ${kleur.blue(\n 'npx'\n )}! Please install it by running ${kleur.blue('npm install -g npx')}`\n );\n } else {\n throw error;\n }\n }\n}\n\n/**\n * Makes sure the answers are in expected form and ends the process with error if they are not\n */\nexport function assertUserInput(\n questions: Question<keyof Answers>[],\n answers: Partial<Answers | Args>\n) {\n for (const [key, value] of Object.entries(answers)) {\n if (value == null) {\n continue;\n }\n\n const question = questions.find((q) => q.name === key);\n\n if (question == null) {\n continue;\n }\n\n let validation;\n\n // We also need to guard against invalid choices\n // If we don't already have a validation message to provide a better error\n if ('choices' in question) {\n const choices =\n typeof question.choices === 'function'\n ? question.choices(undefined, answers)\n : question.choices;\n\n if (choices && choices.every((choice) => choice.value !== value)) {\n if (choices.length > 1) {\n validation = `Must be one of ${choices\n .map((choice) => kleur.green(choice.value))\n .join(', ')}`;\n } else if (choices[0]) {\n validation = `Must be '${kleur.green(choices[0].value)}'`;\n } else {\n validation = false;\n }\n }\n }\n\n if (validation == null && question.validate) {\n validation = question.validate(String(value));\n }\n\n if (validation != null && validation !== true) {\n let message = `Invalid value ${kleur.red(\n String(value)\n )} passed for ${kleur.blue(key)}`;\n\n if (typeof validation === 'string') {\n message += `: ${validation}`;\n }\n\n throw new Error(message);\n }\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAAgC,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAIzB,eAAeG,eAAeA,CAAA,EAAG;EACtC,IAAI;IACF,MAAM,IAAAC,YAAK,EAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;EAChC,CAAC,CAAC,OAAOC,KAAK,EAAE;IACd;IACA,IAAIA,KAAK,IAAI,IAAI,IAAIA,KAAK,CAACC,IAAI,KAAK,QAAQ,EAAE;MAC5C,MAAM,IAAIC,KAAK,CACb,iBAAiBC,cAAK,CAACC,IAAI,CACzB,KACF,CAAC,kCAAkCD,cAAK,CAACC,IAAI,CAAC,oBAAoB,CAAC,EACrE,CAAC;IACH,CAAC,MAAM;MACL,MAAMJ,KAAK;IACb;EACF;AACF;;AAEA;AACA;AACA;AACO,SAASK,eAAeA,CAC7BC,SAAoC,EACpCC,OAAgC,EAChC;EACA,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACJ,OAAO,CAAC,EAAE;IAClD,IAAIE,KAAK,IAAI,IAAI,EAAE;MACjB;IACF;IAEA,MAAMG,QAAQ,GAAGN,SAAS,CAACO,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,IAAI,KAAKP,GAAG,CAAC;IAEtD,IAAII,QAAQ,IAAI,IAAI,EAAE;MACpB;IACF;IAEA,IAAII,UAAU;;IAEd;IACA;IACA,IAAI,SAAS,IAAIJ,QAAQ,EAAE;MACzB,MAAMK,OAAO,GACX,OAAOL,QAAQ,CAACK,OAAO,KAAK,UAAU,GAClCL,QAAQ,CAACK,OAAO,CAACC,SAAS,EAAEX,OAAO,CAAC,GACpCK,QAAQ,CAACK,OAAO;MAEtB,IAAIA,OAAO,IAAIA,OAAO,CAACE,KAAK,CAAEC,MAAM,IAAKA,MAAM,CAACX,KAAK,KAAKA,KAAK,CAAC,EAAE;QAChE,IAAIQ,OAAO,CAACI,MAAM,GAAG,CAAC,EAAE;UACtBL,UAAU,GAAG,kBAAkBC,OAAO,CACnCK,GAAG,CAAEF,MAAM,IAAKjB,cAAK,CAACoB,KAAK,CAACH,MAAM,CAACX,KAAK,CAAC,CAAC,CAC1Ce,IAAI,CAAC,IAAI,CAAC,EAAE;QACjB,CAAC,MAAM,IAAIP,OAAO,CAAC,CAAC,CAAC,EAAE;UACrBD,UAAU,GAAG,YAAYb,cAAK,CAACoB,KAAK,CAACN,OAAO,CAAC,CAAC,CAAC,CAACR,KAAK,CAAC,GAAG;QAC3D,CAAC,MAAM;UACLO,UAAU,GAAG,KAAK;QACpB;MACF;IACF;IAEA,IAAIA,UAAU,IAAI,IAAI,IAAIJ,QAAQ,CAACa,QAAQ,EAAE;MAC3CT,UAAU,GAAGJ,QAAQ,CAACa,QAAQ,CAACC,MAAM,CAACjB,KAAK,CAAC,CAAC;IAC/C;IAEA,IAAIO,UAAU,IAAI,IAAI,IAAIA,UAAU,KAAK,IAAI,EAAE;MAC7C,IAAIW,OAAO,GAAG,iBAAiBxB,cAAK,CAACyB,GAAG,CACtCF,MAAM,CAACjB,KAAK,CACd,CAAC,eAAeN,cAAK,CAACC,IAAI,CAACI,GAAG,CAAC,EAAE;MAEjC,IAAI,OAAOQ,UAAU,KAAK,QAAQ,EAAE;QAClCW,OAAO,IAAI,KAAKX,UAAU,EAAE;MAC9B;MAEA,MAAM,IAAId,KAAK,CAACyB,OAAO,CAAC;IAC1B;EACF;AACF","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-react-native-library",
3
- "version": "0.48.8",
3
+ "version": "0.49.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": "0691c049fc15ea8fd6bde87ecd6f2bb89338b3bf"
68
+ "gitHead": "c9af25bf214b96a001382a61014b7e22e90cad2d"
69
69
  }
@@ -78,26 +78,29 @@
78
78
  },
79
79
  "devDependencies": {
80
80
  "@commitlint/config-conventional": "^19.6.0",
81
+ "@eslint/compat": "^1.2.7",
82
+ "@eslint/eslintrc": "^3.3.0",
83
+ "@eslint/js": "^9.22.0",
81
84
  "@evilmartians/lefthook": "^1.5.0",
82
85
  <% if (example === 'vanilla' && (project.moduleConfig === 'turbo-modules' || project.viewConfig === 'fabric-view')) { -%>
83
86
  "@react-native-community/cli": "15.0.0-alpha.2",
84
87
  <% } -%>
85
- "@react-native/eslint-config": "^0.73.1",
88
+ "@react-native/eslint-config": "^0.78.0",
86
89
  "@release-it/conventional-changelog": "^9.0.2",
87
90
  "@types/jest": "^29.5.5",
88
- "@types/react": "^18.2.44",
91
+ "@types/react": "^19.0.12",
89
92
  "commitlint": "^19.6.1",
90
93
  "del-cli": "^5.1.0",
91
- "eslint": "^8.51.0",
92
- "eslint-config-prettier": "^9.0.0",
93
- "eslint-plugin-prettier": "^5.0.1",
94
+ "eslint": "^9.22.0",
95
+ "eslint-config-prettier": "^10.1.1",
96
+ "eslint-plugin-prettier": "^5.2.3",
94
97
  "jest": "^29.7.0",
95
98
  <% if (project.moduleConfig === 'nitro-modules') { -%>
96
99
  "nitro-codegen": "^<%- versions.nitroCodegen %>",
97
100
  <% } -%>
98
101
  "prettier": "^3.0.3",
99
- "react": "17.0.2",
100
- "react-native": "0.73.0",
102
+ "react": "19.0.0",
103
+ "react-native": "0.78.1",
101
104
  "react-native-builder-bob": "^<%- versions.bob %>",
102
105
  <% if (project.moduleConfig === 'nitro-modules') { -%>
103
106
  "react-native-nitro-modules": "^<%- versions.nitroModules %>",
@@ -154,30 +157,6 @@
154
157
  }
155
158
  }
156
159
  },
157
- "eslintConfig": {
158
- "root": true,
159
- "extends": [
160
- "@react-native",
161
- "prettier"
162
- ],
163
- "rules": {
164
- "react/react-in-jsx-scope": "off",
165
- "prettier/prettier": [
166
- "error",
167
- {
168
- "quoteProps": "consistent",
169
- "singleQuote": true,
170
- "tabWidth": 2,
171
- "trailingComma": "es5",
172
- "useTabs": false
173
- }
174
- ]
175
- }
176
- },
177
- "eslintIgnore": [
178
- "node_modules/",
179
- "lib/"
180
- ],
181
160
  "prettier": {
182
161
  "quoteProps": "consistent",
183
162
  "singleQuote": true,
@@ -0,0 +1,41 @@
1
+ import { fixupConfigRules } from '@eslint/compat';
2
+ import { FlatCompat } from '@eslint/eslintrc';
3
+ import js from '@eslint/js';
4
+ import prettier from 'eslint-plugin-prettier';
5
+ import { defineConfig } from 'eslint/config';
6
+ import path from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = path.dirname(__filename);
11
+ const compat = new FlatCompat({
12
+ baseDirectory: __dirname,
13
+ recommendedConfig: js.configs.recommended,
14
+ allConfig: js.configs.all,
15
+ });
16
+
17
+ export default defineConfig([
18
+ {
19
+ extends: fixupConfigRules(compat.extends('@react-native', 'prettier')),
20
+ plugins: { prettier },
21
+ rules: {
22
+ 'react/react-in-jsx-scope': 'off',
23
+ 'prettier/prettier': [
24
+ 'error',
25
+ {
26
+ quoteProps: 'consistent',
27
+ singleQuote: true,
28
+ tabWidth: 2,
29
+ trailingComma: 'es5',
30
+ useTabs: false,
31
+ },
32
+ ],
33
+ },
34
+ },
35
+ {
36
+ ignores: [
37
+ 'node_modules/',
38
+ 'lib/'
39
+ ],
40
+ },
41
+ ]);