create-react-native-library 0.36.0 → 0.38.0-next.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 CHANGED
@@ -12,8 +12,9 @@ var _githubUsername = _interopRequireDefault(require("github-username"));
12
12
  var _prompts = _interopRequireDefault(require("./utils/prompts"));
13
13
  var _generateExampleApp = _interopRequireDefault(require("./utils/generateExampleApp"));
14
14
  var _spawn = require("./utils/spawn");
15
+ var _package = require("../package.json");
15
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
- const FALLBACK_BOB_VERSION = '0.20.0';
17
+ const FALLBACK_BOB_VERSION = '0.25.0';
17
18
  const BINARIES = [/(gradlew|\.(jar|keystore|png|jpg|gif))$/, /\$\.yarn(?![a-z])/];
18
19
  const COMMON_FILES = _path.default.resolve(__dirname, '../templates/common');
19
20
  const COMMON_EXAMPLE_FILES = _path.default.resolve(__dirname, '../templates/common-example');
@@ -21,7 +22,6 @@ const COMMON_LOCAL_FILES = _path.default.resolve(__dirname, '../templates/common
21
22
  const JS_FILES = _path.default.resolve(__dirname, '../templates/js-library');
22
23
  const EXPO_FILES = _path.default.resolve(__dirname, '../templates/expo-library');
23
24
  const CPP_FILES = _path.default.resolve(__dirname, '../templates/cpp-library');
24
- const EXAMPLE_FILES = _path.default.resolve(__dirname, '../templates/example-legacy');
25
25
  const NATIVE_COMMON_FILES = _path.default.resolve(__dirname, '../templates/native-common');
26
26
  const NATIVE_COMMON_EXAMPLE_FILES = _path.default.resolve(__dirname, '../templates/native-common-example');
27
27
  const NATIVE_FILES = {
@@ -83,6 +83,19 @@ const LANGUAGE_CHOICES = [{
83
83
  value: 'js',
84
84
  types: ['library']
85
85
  }];
86
+ const EXAMPLE_CHOICES = [{
87
+ title: 'Test app',
88
+ value: 'test-app',
89
+ description: "app's native code is abstracted away"
90
+ }, {
91
+ title: 'Vanilla',
92
+ value: 'vanilla',
93
+ description: "provides access to app's native code"
94
+ }, {
95
+ title: 'Expo',
96
+ value: 'expo',
97
+ description: 'managed expo project with web support'
98
+ }];
86
99
  const NEWARCH_DESCRIPTION = 'requires new arch (experimental)';
87
100
  const BACKCOMPAT_DESCRIPTION = 'supports new arch (experimental)';
88
101
  const TYPE_CHOICES = [{
@@ -160,15 +173,23 @@ const args = {
160
173
  type: 'boolean'
161
174
  },
162
175
  'example': {
163
- description: 'Whether to create an example app',
164
- type: 'boolean',
165
- default: true
176
+ description: 'Type of the example app to create',
177
+ type: 'string',
178
+ choices: EXAMPLE_CHOICES.map(({
179
+ value
180
+ }) => value)
166
181
  }
167
182
  };
168
183
 
169
184
  // FIXME: fix the type
170
185
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
171
- async function create(argv) {
186
+ async function create(_argv) {
187
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
188
+ const {
189
+ _,
190
+ $0,
191
+ ...argv
192
+ } = _argv;
172
193
  let local = false;
173
194
  if (typeof argv.local === 'boolean') {
174
195
  local = argv.local;
@@ -229,145 +250,143 @@ async function create(argv) {
229
250
  // Ignore error
230
251
  }
231
252
  const basename = _path.default.basename(folder);
232
- const questions = {
233
- 'slug': {
234
- type: 'text',
235
- name: 'slug',
236
- message: 'What is the name of the npm package?',
237
- initial: (0, _validateNpmPackageName.default)(basename).validForNewPackages ? /^(@|react-native)/.test(basename) ? basename : `react-native-${basename}` : undefined,
238
- validate: input => (0, _validateNpmPackageName.default)(input).validForNewPackages || 'Must be a valid npm package name'
239
- },
240
- 'description': {
241
- type: 'text',
242
- name: 'description',
243
- message: 'What is the description for the package?',
244
- validate: input => Boolean(input) || 'Cannot be empty'
245
- },
246
- 'author-name': {
247
- type: local ? null : 'text',
248
- name: 'authorName',
249
- message: 'What is the name of package author?',
250
- initial: name,
251
- validate: input => Boolean(input) || 'Cannot be empty'
252
- },
253
- 'author-email': {
254
- type: local ? null : 'text',
255
- name: 'authorEmail',
256
- message: 'What is the email address for the package author?',
257
- initial: email,
258
- validate: input => /^\S+@\S+$/.test(input) || 'Must be a valid email address'
253
+ const questions = [{
254
+ type: 'text',
255
+ name: 'slug',
256
+ message: 'What is the name of the npm package?',
257
+ initial: (0, _validateNpmPackageName.default)(basename).validForNewPackages ? /^(@|react-native)/.test(basename) ? basename : `react-native-${basename}` : undefined,
258
+ validate: input => (0, _validateNpmPackageName.default)(input).validForNewPackages || 'Must be a valid npm package name'
259
+ }, {
260
+ type: 'text',
261
+ name: 'description',
262
+ message: 'What is the description for the package?',
263
+ validate: input => Boolean(input) || 'Cannot be empty'
264
+ }, {
265
+ type: local ? null : 'text',
266
+ name: 'authorName',
267
+ message: 'What is the name of package author?',
268
+ initial: name,
269
+ validate: input => Boolean(input) || 'Cannot be empty'
270
+ }, {
271
+ type: local ? null : 'text',
272
+ name: 'authorEmail',
273
+ message: 'What is the email address for the package author?',
274
+ initial: email,
275
+ validate: input => /^\S+@\S+$/.test(input) || 'Must be a valid email address'
276
+ }, {
277
+ type: local ? null : 'text',
278
+ name: 'authorUrl',
279
+ message: 'What is the URL for the package author?',
280
+ // @ts-expect-error this is supported, but types are wrong
281
+ initial: async previous => {
282
+ try {
283
+ const username = await (0, _githubUsername.default)(previous);
284
+ return `https://github.com/${username}`;
285
+ } catch (e) {
286
+ // Ignore error
287
+ }
288
+ return undefined;
259
289
  },
260
- 'author-url': {
261
- type: local ? null : 'text',
262
- name: 'authorUrl',
263
- message: 'What is the URL for the package author?',
264
- // @ts-expect-error this is supported, but types are wrong
265
- initial: async previous => {
266
- try {
267
- const username = await (0, _githubUsername.default)(previous);
268
- return `https://github.com/${username}`;
269
- } catch (e) {
270
- // Ignore error
271
- }
272
- return undefined;
273
- },
274
- validate: input => /^https?:\/\//.test(input) || 'Must be a valid URL'
290
+ validate: input => /^https?:\/\//.test(input) || 'Must be a valid URL'
291
+ }, {
292
+ type: local ? null : 'text',
293
+ name: 'repoUrl',
294
+ message: 'What is the URL for the repository?',
295
+ initial: (_, answers) => {
296
+ if (/^https?:\/\/github.com\/[^/]+/.test(answers.authorUrl)) {
297
+ return `${answers.authorUrl}/${answers.slug.replace(/^@/, '').replace(/\//g, '-')}`;
298
+ }
299
+ return '';
275
300
  },
276
- 'repo-url': {
277
- type: local ? null : 'text',
278
- name: 'repoUrl',
279
- message: 'What is the URL for the repository?',
280
- initial: (_, answers) => {
281
- if (/^https?:\/\/github.com\/[^/]+/.test(answers.authorUrl)) {
282
- return `${answers.authorUrl}/${answers.slug.replace(/^@/, '').replace(/\//g, '-')}`;
301
+ validate: input => /^https?:\/\//.test(input) || 'Must be a valid URL'
302
+ }, {
303
+ type: 'select',
304
+ name: 'type',
305
+ message: 'What type of library do you want to develop?',
306
+ choices: TYPE_CHOICES
307
+ }, {
308
+ type: 'select',
309
+ name: 'languages',
310
+ message: 'Which languages do you want to use?',
311
+ choices: (_, values) => {
312
+ return LANGUAGE_CHOICES.filter(choice => {
313
+ if (choice.types) {
314
+ return choice.types.includes(values.type);
283
315
  }
284
- return '';
285
- },
286
- validate: input => /^https?:\/\//.test(input) || 'Must be a valid URL'
287
- },
288
- 'type': {
289
- type: 'select',
290
- name: 'type',
291
- message: 'What type of library do you want to develop?',
292
- choices: TYPE_CHOICES
293
- },
294
- 'languages': {
295
- type: 'select',
296
- name: 'languages',
297
- message: 'Which languages do you want to use?',
298
- choices: (_, values) => {
299
- return LANGUAGE_CHOICES.filter(choice => {
300
- if (choice.types) {
301
- return choice.types.includes(values.type);
302
- }
303
- return true;
304
- });
305
- }
306
- }
307
- };
308
-
309
- // Validate arguments passed to the CLI
310
- for (const [key, value] of Object.entries(argv)) {
311
- if (value == null) {
312
- continue;
316
+ return true;
317
+ });
313
318
  }
314
- const question = questions[key];
315
- if (question == null) {
316
- continue;
319
+ }, {
320
+ type: 'select',
321
+ name: 'example',
322
+ message: 'What type of example app do you want to create?',
323
+ choices: (_, values) => {
324
+ return EXAMPLE_CHOICES.filter(choice => {
325
+ if (values.type) {
326
+ return values.type === 'library' ? choice.value === 'expo' : choice.value !== 'expo';
327
+ }
328
+ return true;
329
+ });
317
330
  }
318
- let valid = question.validate ? question.validate(String(value)) : true;
331
+ }];
332
+ const validate = answers => {
333
+ for (const [key, value] of Object.entries(answers)) {
334
+ if (value == null) {
335
+ continue;
336
+ }
337
+ const question = questions.find(q => q.name === key);
338
+ if (question == null) {
339
+ continue;
340
+ }
341
+ let valid = question.validate ? question.validate(String(value)) : true;
319
342
 
320
- // We also need to guard against invalid choices
321
- // If we don't already have a validation message to provide a better error
322
- if (typeof valid !== 'string' && 'choices' in question) {
323
- const choices = typeof question.choices === 'function' ? question.choices(undefined, argv, question) : question.choices;
324
- if (choices && !choices.some(choice => choice.value === value)) {
325
- valid = `Supported values are - ${choices.map(c => _kleur.default.green(c.value))}`;
343
+ // We also need to guard against invalid choices
344
+ // If we don't already have a validation message to provide a better error
345
+ if (typeof valid !== 'string' && 'choices' in question) {
346
+ const choices = typeof question.choices === 'function' ? question.choices(undefined,
347
+ // @ts-expect-error: it complains about optional values, but it should be fine
348
+ answers, question) : question.choices;
349
+ if (choices && !choices.some(choice => choice.value === value)) {
350
+ valid = `Supported values are - ${choices.map(c => _kleur.default.green(c.value))}`;
351
+ }
326
352
  }
327
- }
328
- if (valid !== true) {
329
- let message = `Invalid value ${_kleur.default.red(String(value))} passed for ${_kleur.default.blue(key)}`;
330
- if (typeof valid === 'string') {
331
- message += `: ${valid}`;
353
+ if (valid !== true) {
354
+ let message = `Invalid value ${_kleur.default.red(String(value))} passed for ${_kleur.default.blue(key)}`;
355
+ if (typeof valid === 'string') {
356
+ message += `: ${valid}`;
357
+ }
358
+ console.log(message);
359
+ process.exit(1);
332
360
  }
333
- console.log(message);
334
- process.exit(1);
335
361
  }
336
- }
337
- const {
338
- slug,
339
- description,
340
- authorName,
341
- authorEmail,
342
- authorUrl,
343
- repoUrl,
344
- type = 'module-mixed',
345
- languages = type === 'library' ? 'js' : 'java-objc',
346
- example: hasExample,
347
- reactNativeVersion
348
- } = {
362
+ };
363
+
364
+ // Validate arguments passed to the CLI
365
+ validate(argv);
366
+ const answers = {
349
367
  ...argv,
350
- ...(await (0, _prompts.default)(Object.entries(questions).filter(([k, v]) => {
368
+ local,
369
+ ...(await (0, _prompts.default)(questions.filter(question => {
351
370
  // Skip questions which are passed as parameter and pass validation
352
- if (argv[k] != null && v.validate?.(argv[k]) !== false) {
371
+ if (argv[question.name] != null && question.validate?.(argv[question.name]) !== false) {
353
372
  return false;
354
373
  }
355
374
 
356
375
  // Skip questions with a single choice
357
- if (Array.isArray(v.choices) && v.choices.length === 1) {
376
+ if (Array.isArray(question.choices) && question.choices.length === 1) {
358
377
  return false;
359
378
  }
360
379
  return true;
361
- }).map(([, v]) => {
380
+ }).map(question => {
362
381
  const {
363
382
  type,
364
383
  choices
365
- } = v;
384
+ } = question;
366
385
 
367
386
  // Skip dynamic questions with a single choice
368
387
  if (type === 'select' && typeof choices === 'function') {
369
388
  return {
370
- ...v,
389
+ ...question,
371
390
  type: (prev, values, prompt) => {
372
391
  const result = choices(prev, {
373
392
  ...argv,
@@ -380,23 +399,35 @@ async function create(argv) {
380
399
  }
381
400
  };
382
401
  }
383
- return v;
402
+ return question;
384
403
  })))
385
404
  };
405
+ validate(answers);
406
+ const {
407
+ slug,
408
+ description,
409
+ authorName,
410
+ authorEmail,
411
+ authorUrl,
412
+ repoUrl,
413
+ type = 'module-mixed',
414
+ languages = type === 'library' ? 'js' : 'java-objc',
415
+ example = local ? 'none' : type === 'library' ? 'expo' : 'test-app',
416
+ reactNativeVersion
417
+ } = answers;
386
418
 
387
419
  // Get latest version of Bob from NPM
388
- let version;
420
+ let bobVersion;
389
421
  try {
390
- version = await Promise.race([new Promise(resolve => {
422
+ bobVersion = await Promise.race([new Promise(resolve => {
391
423
  setTimeout(() => resolve(FALLBACK_BOB_VERSION), 1000);
392
424
  }), (0, _spawn.spawn)('npm', ['view', 'react-native-builder-bob', 'dist-tags.latest'])]);
393
425
  } catch (e) {
394
426
  // Fallback to a known version if we couldn't fetch
395
- version = FALLBACK_BOB_VERSION;
427
+ bobVersion = FALLBACK_BOB_VERSION;
396
428
  }
397
429
  const moduleType = type.startsWith('view-') ? 'view' : 'module';
398
430
  const arch = type === 'module-new' || type === 'view-new' ? 'new' : type === 'module-mixed' || type === 'view-mixed' ? 'mixed' : 'legacy';
399
- const example = hasExample && !local ? type === 'library' ? 'expo' : 'native' : 'none';
400
431
  const project = slug.replace(/^(react-native-|@[^/]+\/)/, '');
401
432
  let namespace;
402
433
  if (slug.startsWith('@') && slug.includes('/')) {
@@ -407,7 +438,7 @@ async function create(argv) {
407
438
  const pack = `${namespace ? `${namespace}.` : ''}${project.replace(/[^a-z0-9]/g, '').toLowerCase()}`;
408
439
  const options = {
409
440
  bob: {
410
- version: version || FALLBACK_BOB_VERSION
441
+ version: bobVersion || FALLBACK_BOB_VERSION
411
442
  },
412
443
  project: {
413
444
  slug,
@@ -491,9 +522,6 @@ async function create(argv) {
491
522
  await copyDir(JS_FILES, folder);
492
523
  await copyDir(EXPO_FILES, folder);
493
524
  } else {
494
- if (example !== 'none') {
495
- await copyDir(_path.default.join(EXAMPLE_FILES, 'example'), _path.default.join(folder, 'example'));
496
- }
497
525
  await copyDir(NATIVE_COMMON_FILES, folder);
498
526
  if (example !== 'none') {
499
527
  await copyDir(NATIVE_COMMON_EXAMPLE_FILES, folder);
@@ -559,6 +587,16 @@ async function create(argv) {
559
587
  }
560
588
  }
561
589
  }
590
+
591
+ // Some of the passed args can already be derived from the generated package.json file.
592
+ const ignoredAnswers = ['name', 'slug', 'description', 'authorName', 'authorEmail', 'authorUrl', 'repoUrl', 'example', 'reactNativeVersion', 'local'];
593
+ const libraryMetadata = Object.fromEntries(Object.entries(answers).filter(([answer]) => !ignoredAnswers.includes(answer)));
594
+ libraryMetadata.version = _package.version;
595
+ const libraryPackageJson = await _fsExtra.default.readJson(_path.default.join(folder, 'package.json'));
596
+ libraryPackageJson['create-react-native-library'] = libraryMetadata;
597
+ await _fsExtra.default.writeJson(_path.default.join(folder, 'package.json'), libraryPackageJson, {
598
+ spaces: 2
599
+ });
562
600
  spinner.succeed(`Project created successfully at ${_kleur.default.yellow(_path.default.relative(process.cwd(), folder))}!\n`);
563
601
  if (local) {
564
602
  let linked;
@@ -628,5 +666,8 @@ _yargs.default.command('$0 [name]', 'create a react native library', args, creat
628
666
  console.log(_kleur.default.red(`An unknown error occurred. See '--help' for usage guide.`));
629
667
  }
630
668
  process.exit(1);
669
+ }).parserConfiguration({
670
+ // don't pass kebab-case args to handler.
671
+ 'strip-dashed': true
631
672
  }).strict().argv;
632
673
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_path","_interopRequireDefault","require","_fsExtra","_ejs","_dedent","_kleur","_yargs","_ora","_validateNpmPackageName","_githubUsername","_prompts","_generateExampleApp","_spawn","obj","__esModule","default","FALLBACK_BOB_VERSION","BINARIES","COMMON_FILES","path","resolve","__dirname","COMMON_EXAMPLE_FILES","COMMON_LOCAL_FILES","JS_FILES","EXPO_FILES","CPP_FILES","EXAMPLE_FILES","NATIVE_COMMON_FILES","NATIVE_COMMON_EXAMPLE_FILES","NATIVE_FILES","module_legacy","module_new","module_mixed","view_legacy","view_mixed","view_new","JAVA_FILES","OBJC_FILES","module_common","KOTLIN_FILES","SWIFT_FILES","LANGUAGE_CHOICES","title","value","types","NEWARCH_DESCRIPTION","BACKCOMPAT_DESCRIPTION","TYPE_CHOICES","description","args","type","choices","map","create","argv","local","hasPackageJson","fs","pathExists","join","process","cwd","answers","prompts","name","message","initial","folder","includes","validate","input","pathExistsSync","console","log","kleur","blue","exit","spawn","error","code","email","e","basename","questions","validateNpmPackage","validForNewPackages","test","undefined","Boolean","previous","username","githubUsername","_","authorUrl","slug","replace","values","filter","choice","key","Object","entries","question","valid","String","some","c","green","red","authorName","authorEmail","repoUrl","languages","example","hasExample","reactNativeVersion","k","v","Array","isArray","length","prev","prompt","result","version","Promise","race","setTimeout","moduleType","startsWith","arch","project","namespace","split","toLowerCase","pack","options","bob","charAt","toUpperCase","$1","slice","package","package_dir","package_cpp","identifier","native","cpp","kotlin","swift","view","module","author","url","repo","year","Date","getFullYear","copyDir","source","dest","mkdirp","files","readdir","f","target","ejs","render","openDelimiter","closeDelimiter","file","stats","stat","isDirectory","r","content","readFile","writeFile","copyFile","warn","yellow","cyan","spinner","ora","start","text","generateExampleApp","projectName","templateType","remove","examplePackageJson","readJSON","rootPackageJson","devDependencies","react","dependencies","writeJSON","spaces","isInGitRepo","succeed","relative","linked","packageManager","packageJsonPath","packageJson","isReactNativeProject","dedent","magenta","bold","gray","platforms","ios","color","android","web","script","yargs","command","demandCommand","recommendCommands","fail","strict"],"sources":["../src/index.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport ejs from 'ejs';\nimport dedent from 'dedent';\nimport kleur from 'kleur';\nimport yargs from 'yargs';\nimport ora from 'ora';\nimport validateNpmPackage from 'validate-npm-package-name';\nimport githubUsername from 'github-username';\nimport prompts, { type PromptObject } from './utils/prompts';\nimport generateExampleApp from './utils/generateExampleApp';\nimport { spawn } from './utils/spawn';\n\nconst FALLBACK_BOB_VERSION = '0.20.0';\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_EXAMPLE_FILES = path.resolve(\n __dirname,\n '../templates/common-example'\n);\nconst COMMON_LOCAL_FILES = path.resolve(__dirname, '../templates/common-local');\nconst JS_FILES = path.resolve(__dirname, '../templates/js-library');\nconst EXPO_FILES = path.resolve(__dirname, '../templates/expo-library');\nconst CPP_FILES = path.resolve(__dirname, '../templates/cpp-library');\nconst EXAMPLE_FILES = path.resolve(__dirname, '../templates/example-legacy');\nconst NATIVE_COMMON_FILES = path.resolve(\n __dirname,\n '../templates/native-common'\n);\nconst NATIVE_COMMON_EXAMPLE_FILES = path.resolve(\n __dirname,\n '../templates/native-common-example'\n);\n\nconst NATIVE_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/native-library-legacy'),\n module_new: path.resolve(__dirname, '../templates/native-library-new'),\n module_mixed: path.resolve(__dirname, '../templates/native-library-mixed'),\n view_legacy: path.resolve(__dirname, '../templates/native-view-legacy'),\n view_mixed: path.resolve(__dirname, '../templates/native-view-mixed'),\n view_new: path.resolve(__dirname, '../templates/native-view-new'),\n} as const;\n\nconst JAVA_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/java-library-legacy'),\n module_new: path.resolve(__dirname, '../templates/java-library-new'),\n module_mixed: path.resolve(__dirname, '../templates/java-library-mixed'),\n view_legacy: path.resolve(__dirname, '../templates/java-view-legacy'),\n view_mixed: path.resolve(__dirname, '../templates/java-view-mixed'),\n view_new: path.resolve(__dirname, '../templates/java-view-new'),\n} as const;\n\nconst OBJC_FILES = {\n module_common: path.resolve(__dirname, '../templates/objc-library'),\n view_legacy: path.resolve(__dirname, '../templates/objc-view-legacy'),\n view_mixed: path.resolve(__dirname, '../templates/objc-view-mixed'),\n view_new: path.resolve(__dirname, '../templates/objc-view-new'),\n} as const;\n\nconst KOTLIN_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/kotlin-library-legacy'),\n module_new: path.resolve(__dirname, '../templates/kotlin-library-new'),\n module_mixed: path.resolve(__dirname, '../templates/kotlin-library-mixed'),\n view_legacy: path.resolve(__dirname, '../templates/kotlin-view-legacy'),\n view_mixed: path.resolve(__dirname, '../templates/kotlin-view-mixed'),\n view_new: path.resolve(__dirname, '../templates/kotlin-view-new'),\n} as const;\n\nconst SWIFT_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/swift-library-legacy'),\n view_legacy: path.resolve(__dirname, '../templates/swift-view-legacy'),\n} as const;\n\ntype ArgName =\n | 'slug'\n | 'description'\n | 'author-name'\n | 'author-email'\n | 'author-url'\n | 'repo-url'\n | 'languages'\n | 'type'\n | 'local'\n | 'example'\n | 'react-native-version';\n\ntype ProjectLanguages =\n | 'java-objc'\n | 'java-swift'\n | 'kotlin-objc'\n | 'kotlin-swift'\n | 'cpp'\n | 'js';\n\ntype ProjectType =\n | 'module-legacy'\n | 'module-new'\n | 'module-mixed'\n | 'view-mixed'\n | 'view-new'\n | 'view-legacy'\n | 'library';\n\ntype Answers = {\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?: boolean;\n reactNativeVersion?: string;\n};\n\nconst LANGUAGE_CHOICES: {\n title: string;\n value: ProjectLanguages;\n types: ProjectType[];\n}[] = [\n {\n title: 'Kotlin & Objective-C',\n value: 'kotlin-objc',\n types: [\n 'module-legacy',\n 'module-new',\n 'module-mixed',\n 'view-mixed',\n 'view-new',\n 'view-legacy',\n ],\n },\n {\n title: 'Java & Objective-C',\n value: 'java-objc',\n types: [\n 'module-legacy',\n 'module-new',\n 'module-mixed',\n 'view-mixed',\n 'view-new',\n 'view-legacy',\n ],\n },\n {\n title: 'Kotlin & Swift',\n value: 'kotlin-swift',\n types: ['module-legacy', 'view-legacy'],\n },\n {\n title: 'Java & Swift',\n value: 'java-swift',\n types: ['module-legacy', 'view-legacy'],\n },\n {\n title: 'C++ for Android & iOS',\n value: 'cpp',\n types: ['module-legacy', 'module-mixed', 'module-new'],\n },\n {\n title: 'JavaScript for Android, iOS & Web',\n value: 'js',\n types: ['library'],\n },\n];\n\nconst NEWARCH_DESCRIPTION = 'requires new arch (experimental)';\nconst BACKCOMPAT_DESCRIPTION = 'supports new arch (experimental)';\n\nconst TYPE_CHOICES: {\n title: string;\n value: ProjectType;\n description: string;\n}[] = [\n {\n title: 'JavaScript library',\n value: 'library',\n description: 'supports Expo Go and Web',\n },\n {\n title: 'Native module',\n value: 'module-legacy',\n description: 'bridge for native APIs to JS',\n },\n {\n title: 'Native view',\n value: 'view-legacy',\n description: 'bridge for native views to JS',\n },\n {\n title: 'Turbo module with backward compat',\n value: 'module-mixed',\n description: BACKCOMPAT_DESCRIPTION,\n },\n {\n title: 'Turbo module',\n value: 'module-new',\n description: NEWARCH_DESCRIPTION,\n },\n {\n title: 'Fabric view with backward compat',\n value: 'view-mixed',\n description: BACKCOMPAT_DESCRIPTION,\n },\n {\n title: 'Fabric view',\n value: 'view-new',\n description: NEWARCH_DESCRIPTION,\n },\n];\n\nconst args: 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 'author-name': {\n description: 'Name of the package author',\n type: 'string',\n },\n 'author-email': {\n description: 'Email address of the package author',\n type: 'string',\n },\n 'author-url': {\n description: 'URL for the package author',\n type: 'string',\n },\n 'repo-url': {\n description: 'URL for the repository',\n type: 'string',\n },\n 'languages': {\n description: 'Languages you want to use',\n choices: LANGUAGE_CHOICES.map(({ value }) => value),\n },\n 'type': {\n description: 'Type of library you want to develop',\n choices: TYPE_CHOICES.map(({ value }) => value),\n },\n 'react-native-version': {\n description: 'Version of React Native to use, 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: 'Whether to create an example app',\n type: 'boolean',\n default: true,\n },\n};\n\n// FIXME: fix the type\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nasync function create(argv: yargs.Arguments<any>) {\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 prompts({\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 let folder;\n\n if (argv.name && !local) {\n folder = path.join(process.cwd(), argv.name);\n } else {\n const answers = await prompts({\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 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 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 basename = path.basename(folder);\n\n const questions: Record<\n ArgName,\n Omit<PromptObject<keyof Answers>, 'validate'> & {\n validate?: (value: string) => boolean | string;\n }\n > = {\n 'slug': {\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 'description': {\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 'author-name': {\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 'author-email': {\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 'author-url': {\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 'repo-url': {\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 'type': {\n type: 'select',\n name: 'type',\n message: 'What type of library do you want to develop?',\n choices: TYPE_CHOICES,\n },\n 'languages': {\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\n // Validate arguments passed to the CLI\n for (const [key, value] of Object.entries(argv)) {\n if (value == null) {\n continue;\n }\n\n const question = questions[key as ArgName];\n\n if (question == null) {\n continue;\n }\n\n let valid = question.validate ? question.validate(String(value)) : true;\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 (typeof valid !== 'string' && 'choices' in question) {\n const choices =\n typeof question.choices === 'function'\n ? question.choices(undefined, argv, question)\n : question.choices;\n\n if (choices && !choices.some((choice) => choice.value === value)) {\n valid = `Supported values are - ${choices.map((c) =>\n kleur.green(c.value)\n )}`;\n }\n }\n\n if (valid !== true) {\n let message = `Invalid value ${kleur.red(\n String(value)\n )} passed for ${kleur.blue(key)}`;\n\n if (typeof valid === 'string') {\n message += `: ${valid}`;\n }\n\n console.log(message);\n\n process.exit(1);\n }\n }\n\n const {\n slug,\n description,\n authorName,\n authorEmail,\n authorUrl,\n repoUrl,\n type = 'module-mixed',\n languages = type === 'library' ? 'js' : 'java-objc',\n example: hasExample,\n reactNativeVersion,\n } = {\n ...argv,\n ...(await prompts(\n Object.entries(questions)\n .filter(([k, v]) => {\n // Skip questions which are passed as parameter and pass validation\n if (argv[k] != null && v.validate?.(argv[k]) !== false) {\n return false;\n }\n\n // Skip questions with a single choice\n if (Array.isArray(v.choices) && v.choices.length === 1) {\n return false;\n }\n\n return true;\n })\n .map(([, v]) => {\n const { type, choices } = v;\n\n // Skip dynamic questions with a single choice\n if (type === 'select' && typeof choices === 'function') {\n return {\n ...v,\n type: (prev, values, prompt) => {\n const result = choices(prev, { ...argv, ...values }, prompt);\n\n if (result && result.length === 1) {\n return null;\n }\n\n return type;\n },\n };\n }\n\n return v;\n })\n )),\n } as Answers;\n\n // Get latest version of Bob from NPM\n let version: string;\n\n try {\n version = await Promise.race([\n new Promise<string>((resolve) => {\n setTimeout(() => resolve(FALLBACK_BOB_VERSION), 1000);\n }),\n spawn('npm', ['view', 'react-native-builder-bob', 'dist-tags.latest']),\n ]);\n } catch (e) {\n // Fallback to a known version if we couldn't fetch\n version = FALLBACK_BOB_VERSION;\n }\n\n const moduleType = type.startsWith('view-') ? 'view' : 'module';\n const arch =\n type === 'module-new' || type === 'view-new'\n ? 'new'\n : type === 'module-mixed' || type === 'view-mixed'\n ? 'mixed'\n : 'legacy';\n\n const example =\n hasExample && !local ? (type === 'library' ? 'expo' : 'native') : 'none';\n\n const project = slug.replace(/^(react-native-|@[^/]+\\/)/, '');\n\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 const options = {\n bob: {\n version: version || FALLBACK_BOB_VERSION,\n },\n project: {\n slug,\n description,\n name:\n /^[A-Z]/.test(basename) && /^[a-z0-9]+$/i.test(basename)\n ? // If the project name is already in PascalCase, use it as-is\n basename\n : // Otherwise, convert it to PascalCase and remove any non-alphanumeric characters\n `${project.charAt(0).toUpperCase()}${project\n .replace(/[^a-z0-9](\\w)/g, (_, $1) => $1.toUpperCase())\n .slice(1)}`,\n package: pack,\n package_dir: pack.replace(/\\./g, '/'),\n package_cpp: pack.replace(/\\./g, '_'),\n identifier: slug.replace(/[^a-z0-9]+/g, '-').replace(/^-/, ''),\n native: languages !== 'js',\n arch,\n cpp: languages === 'cpp',\n kotlin: languages === 'kotlin-objc' || languages === 'kotlin-swift',\n swift: languages === 'java-swift' || languages === 'kotlin-swift',\n view: moduleType === 'view',\n module: moduleType === 'module',\n },\n author: {\n name: authorName,\n email: authorEmail,\n url: authorUrl,\n },\n repo: repoUrl,\n example,\n year: new Date().getFullYear(),\n };\n\n const copyDir = async (source: string, dest: string) => {\n await fs.mkdirp(dest);\n\n const files = await fs.readdir(source);\n\n for (const f of files) {\n const target = path.join(\n dest,\n ejs.render(f.replace(/^\\$/, ''), options, {\n openDelimiter: '{',\n closeDelimiter: '}',\n })\n );\n\n const file = path.join(source, f);\n const stats = await fs.stat(file);\n\n if (stats.isDirectory()) {\n await copyDir(file, target);\n } else if (!BINARIES.some((r) => r.test(file))) {\n const content = await fs.readFile(file, 'utf8');\n\n await fs.writeFile(target, ejs.render(content, options));\n } else {\n await fs.copyFile(file, target);\n }\n }\n };\n\n await fs.mkdirp(folder);\n\n if (reactNativeVersion != null) {\n if (example === 'expo') {\n console.warn(\n `${kleur.yellow('⚠')} Ignoring --react-native-version for Expo example`\n );\n } else {\n console.log(\n `${kleur.blue('ℹ')} Using ${kleur.cyan(\n `react-native@${reactNativeVersion}`\n )} for the example`\n );\n }\n }\n\n const spinner = ora().start();\n\n if (example !== 'none') {\n spinner.text = 'Generating example app';\n\n await generateExampleApp({\n type: example,\n dest: folder,\n slug: options.project.slug,\n projectName: options.project.name,\n arch,\n reactNativeVersion,\n });\n }\n\n spinner.text = 'Copying files';\n\n if (local) {\n await copyDir(COMMON_LOCAL_FILES, folder);\n } else {\n await copyDir(COMMON_FILES, folder);\n\n if (example !== 'none') {\n await copyDir(COMMON_EXAMPLE_FILES, folder);\n }\n }\n\n if (languages === 'js') {\n await copyDir(JS_FILES, folder);\n await copyDir(EXPO_FILES, folder);\n } else {\n if (example !== 'none') {\n await copyDir(\n path.join(EXAMPLE_FILES, 'example'),\n path.join(folder, 'example')\n );\n }\n\n await copyDir(NATIVE_COMMON_FILES, folder);\n\n if (example !== 'none') {\n await copyDir(NATIVE_COMMON_EXAMPLE_FILES, folder);\n }\n\n if (moduleType === 'module') {\n await copyDir(NATIVE_FILES[`${moduleType}_${arch}`], folder);\n } else {\n await copyDir(NATIVE_FILES[`${moduleType}_${arch}`], folder);\n }\n\n if (options.project.swift) {\n await copyDir(SWIFT_FILES[`${moduleType}_legacy`], folder);\n } else {\n if (moduleType === 'module') {\n await copyDir(OBJC_FILES[`${moduleType}_common`], folder);\n } else {\n await copyDir(OBJC_FILES[`view_${arch}`], folder);\n }\n }\n\n const templateType = `${moduleType}_${arch}` as const;\n\n if (options.project.kotlin) {\n await copyDir(KOTLIN_FILES[templateType], folder);\n } else {\n await copyDir(JAVA_FILES[templateType], folder);\n }\n\n if (options.project.cpp) {\n await copyDir(CPP_FILES, folder);\n await fs.remove(path.join(folder, 'ios', `${options.project.name}.m`));\n }\n }\n\n if (example !== 'none') {\n // Set `react` and `react-native` versions of root `package.json` from example `package.json`\n const examplePackageJson = await fs.readJSON(\n path.join(folder, 'example', 'package.json')\n );\n const rootPackageJson = await fs.readJSON(\n path.join(folder, 'package.json')\n );\n\n rootPackageJson.devDependencies.react =\n examplePackageJson.dependencies.react;\n rootPackageJson.devDependencies['react-native'] =\n examplePackageJson.dependencies['react-native'];\n\n await fs.writeJSON(path.join(folder, 'package.json'), rootPackageJson, {\n spaces: 2,\n });\n }\n\n if (!local) {\n let isInGitRepo = false;\n\n try {\n isInGitRepo =\n (await spawn('git', ['rev-parse', '--is-inside-work-tree'])) === 'true';\n } catch (e) {\n // Ignore error\n }\n\n if (!isInGitRepo) {\n try {\n await spawn('git', ['init'], { cwd: folder });\n await spawn('git', ['branch', '-M', 'main'], { cwd: folder });\n await spawn('git', ['add', '.'], { cwd: folder });\n await spawn('git', ['commit', '-m', 'chore: initial commit'], {\n cwd: folder,\n });\n } catch (e) {\n // Ignore error\n }\n }\n }\n\n spinner.succeed(\n `Project created successfully at ${kleur.yellow(\n path.relative(process.cwd(), folder)\n )}!\\n`\n );\n\n if (local) {\n let linked;\n\n const packageManager = (await fs.pathExists(\n path.join(process.cwd(), 'yarn.lock')\n ))\n ? 'yarn'\n : 'npm';\n\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n\n if (await fs.pathExists(packageJsonPath)) {\n const packageJson = await fs.readJSON(packageJsonPath);\n const isReactNativeProject = Boolean(\n packageJson.dependencies?.['react-native']\n );\n\n if (isReactNativeProject) {\n packageJson.dependencies = packageJson.dependencies || {};\n packageJson.dependencies[slug] =\n packageManager === 'yarn'\n ? `link:./${path.relative(process.cwd(), folder)}`\n : `file:./${path.relative(process.cwd(), folder)}`;\n\n await fs.writeJSON(packageJsonPath, packageJson, {\n spaces: 2,\n });\n\n linked = true;\n }\n }\n\n console.log(\n dedent(`\n ${kleur.magenta(\n `${kleur.bold('Get started')} with the project`\n )}${kleur.gray(':')}\n\n ${\n (linked\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 `- 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(slug)} and use it in your app.`\n }\n\n ${kleur.yellow(`Good luck!`)}\n `)\n );\n } else {\n const platforms = {\n ios: { name: 'iOS', color: 'cyan' },\n android: { name: 'Android', color: 'green' },\n ...(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}\n\nyargs\n .command('$0 [name]', 'create a react native library', args, create)\n .demandCommand()\n .recommendCommands()\n .fail((message, error) => {\n console.log('\\n');\n\n if (error) {\n console.log(kleur.red(error.message));\n throw error;\n }\n\n if (message) {\n console.log(kleur.red(message));\n } else {\n console.log(\n kleur.red(`An unknown error occurred. See '--help' for usage guide.`)\n );\n }\n\n process.exit(1);\n })\n .strict().argv;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_path","_interopRequireDefault","require","_fsExtra","_ejs","_dedent","_kleur","_yargs","_ora","_validateNpmPackageName","_githubUsername","_prompts","_generateExampleApp","_spawn","_package","obj","__esModule","default","FALLBACK_BOB_VERSION","BINARIES","COMMON_FILES","path","resolve","__dirname","COMMON_EXAMPLE_FILES","COMMON_LOCAL_FILES","JS_FILES","EXPO_FILES","CPP_FILES","NATIVE_COMMON_FILES","NATIVE_COMMON_EXAMPLE_FILES","NATIVE_FILES","module_legacy","module_new","module_mixed","view_legacy","view_mixed","view_new","JAVA_FILES","OBJC_FILES","module_common","KOTLIN_FILES","SWIFT_FILES","LANGUAGE_CHOICES","title","value","types","EXAMPLE_CHOICES","description","NEWARCH_DESCRIPTION","BACKCOMPAT_DESCRIPTION","TYPE_CHOICES","args","type","choices","map","create","_argv","_","$0","argv","local","hasPackageJson","fs","pathExists","join","process","cwd","answers","prompts","name","message","initial","folder","includes","validate","input","pathExistsSync","console","log","kleur","blue","exit","spawn","error","code","email","e","basename","questions","validateNpmPackage","validForNewPackages","test","undefined","Boolean","previous","username","githubUsername","authorUrl","slug","replace","values","filter","choice","key","Object","entries","question","find","q","valid","String","some","c","green","red","Array","isArray","length","prev","prompt","result","authorName","authorEmail","repoUrl","languages","example","reactNativeVersion","bobVersion","Promise","race","setTimeout","moduleType","startsWith","arch","project","namespace","split","toLowerCase","pack","options","bob","version","charAt","toUpperCase","$1","slice","package","package_dir","package_cpp","identifier","native","cpp","kotlin","swift","view","module","author","url","repo","year","Date","getFullYear","copyDir","source","dest","mkdirp","files","readdir","f","target","ejs","render","openDelimiter","closeDelimiter","file","stats","stat","isDirectory","r","content","readFile","writeFile","copyFile","warn","yellow","cyan","spinner","ora","start","text","generateExampleApp","projectName","templateType","remove","examplePackageJson","readJSON","rootPackageJson","devDependencies","react","dependencies","writeJSON","spaces","isInGitRepo","ignoredAnswers","libraryMetadata","fromEntries","answer","libraryPackageJson","readJson","writeJson","succeed","relative","linked","packageManager","packageJsonPath","packageJson","isReactNativeProject","dedent","magenta","bold","gray","platforms","ios","color","android","web","script","yargs","command","demandCommand","recommendCommands","fail","parserConfiguration","strict"],"sources":["../src/index.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport ejs from 'ejs';\nimport dedent from 'dedent';\nimport kleur from 'kleur';\nimport yargs from 'yargs';\nimport ora from 'ora';\nimport validateNpmPackage from 'validate-npm-package-name';\nimport githubUsername from 'github-username';\nimport prompts, { type PromptObject } from './utils/prompts';\nimport generateExampleApp, {\n type ExampleType,\n} from './utils/generateExampleApp';\nimport { spawn } from './utils/spawn';\nimport { version } from '../package.json';\n\nconst FALLBACK_BOB_VERSION = '0.25.0';\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_EXAMPLE_FILES = path.resolve(\n __dirname,\n '../templates/common-example'\n);\nconst COMMON_LOCAL_FILES = path.resolve(__dirname, '../templates/common-local');\nconst JS_FILES = path.resolve(__dirname, '../templates/js-library');\nconst EXPO_FILES = path.resolve(__dirname, '../templates/expo-library');\nconst CPP_FILES = path.resolve(__dirname, '../templates/cpp-library');\nconst NATIVE_COMMON_FILES = path.resolve(\n __dirname,\n '../templates/native-common'\n);\nconst NATIVE_COMMON_EXAMPLE_FILES = path.resolve(\n __dirname,\n '../templates/native-common-example'\n);\n\nconst NATIVE_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/native-library-legacy'),\n module_new: path.resolve(__dirname, '../templates/native-library-new'),\n module_mixed: path.resolve(__dirname, '../templates/native-library-mixed'),\n view_legacy: path.resolve(__dirname, '../templates/native-view-legacy'),\n view_mixed: path.resolve(__dirname, '../templates/native-view-mixed'),\n view_new: path.resolve(__dirname, '../templates/native-view-new'),\n} as const;\n\nconst JAVA_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/java-library-legacy'),\n module_new: path.resolve(__dirname, '../templates/java-library-new'),\n module_mixed: path.resolve(__dirname, '../templates/java-library-mixed'),\n view_legacy: path.resolve(__dirname, '../templates/java-view-legacy'),\n view_mixed: path.resolve(__dirname, '../templates/java-view-mixed'),\n view_new: path.resolve(__dirname, '../templates/java-view-new'),\n} as const;\n\nconst OBJC_FILES = {\n module_common: path.resolve(__dirname, '../templates/objc-library'),\n view_legacy: path.resolve(__dirname, '../templates/objc-view-legacy'),\n view_mixed: path.resolve(__dirname, '../templates/objc-view-mixed'),\n view_new: path.resolve(__dirname, '../templates/objc-view-new'),\n} as const;\n\nconst KOTLIN_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/kotlin-library-legacy'),\n module_new: path.resolve(__dirname, '../templates/kotlin-library-new'),\n module_mixed: path.resolve(__dirname, '../templates/kotlin-library-mixed'),\n view_legacy: path.resolve(__dirname, '../templates/kotlin-view-legacy'),\n view_mixed: path.resolve(__dirname, '../templates/kotlin-view-mixed'),\n view_new: path.resolve(__dirname, '../templates/kotlin-view-new'),\n} as const;\n\nconst SWIFT_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/swift-library-legacy'),\n view_legacy: path.resolve(__dirname, '../templates/swift-view-legacy'),\n} as const;\n\ntype ArgName =\n | 'slug'\n | 'description'\n | 'author-name'\n | 'author-email'\n | 'author-url'\n | 'repo-url'\n | 'languages'\n | 'type'\n | 'local'\n | 'example'\n | 'react-native-version';\n\ntype ProjectLanguages =\n | 'java-objc'\n | 'java-swift'\n | 'kotlin-objc'\n | 'kotlin-swift'\n | 'cpp'\n | 'js';\n\ntype ProjectType =\n | 'module-legacy'\n | 'module-new'\n | 'module-mixed'\n | 'view-mixed'\n | 'view-new'\n | 'view-legacy'\n | 'library';\n\ntype 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?: ExampleType;\n reactNativeVersion?: string;\n local?: boolean;\n};\n\nconst LANGUAGE_CHOICES: {\n title: string;\n value: ProjectLanguages;\n types: ProjectType[];\n}[] = [\n {\n title: 'Kotlin & Objective-C',\n value: 'kotlin-objc',\n types: [\n 'module-legacy',\n 'module-new',\n 'module-mixed',\n 'view-mixed',\n 'view-new',\n 'view-legacy',\n ],\n },\n {\n title: 'Java & Objective-C',\n value: 'java-objc',\n types: [\n 'module-legacy',\n 'module-new',\n 'module-mixed',\n 'view-mixed',\n 'view-new',\n 'view-legacy',\n ],\n },\n {\n title: 'Kotlin & Swift',\n value: 'kotlin-swift',\n types: ['module-legacy', 'view-legacy'],\n },\n {\n title: 'Java & Swift',\n value: 'java-swift',\n types: ['module-legacy', 'view-legacy'],\n },\n {\n title: 'C++ for Android & iOS',\n value: 'cpp',\n types: ['module-legacy', 'module-mixed', 'module-new'],\n },\n {\n title: 'JavaScript for Android, iOS & Web',\n value: 'js',\n types: ['library'],\n },\n];\n\nconst EXAMPLE_CHOICES = [\n {\n title: 'Test app',\n value: 'test-app',\n description: \"app's native code is abstracted away\",\n },\n {\n title: 'Vanilla',\n value: 'vanilla',\n description: \"provides access to app's native code\",\n },\n {\n title: 'Expo',\n value: 'expo',\n description: 'managed expo project with web support',\n },\n] as const;\n\nconst NEWARCH_DESCRIPTION = 'requires new arch (experimental)';\nconst BACKCOMPAT_DESCRIPTION = 'supports new arch (experimental)';\n\nconst TYPE_CHOICES: {\n title: string;\n value: ProjectType;\n description: string;\n}[] = [\n {\n title: 'JavaScript library',\n value: 'library',\n description: 'supports Expo Go and Web',\n },\n {\n title: 'Native module',\n value: 'module-legacy',\n description: 'bridge for native APIs to JS',\n },\n {\n title: 'Native view',\n value: 'view-legacy',\n description: 'bridge for native views to JS',\n },\n {\n title: 'Turbo module with backward compat',\n value: 'module-mixed',\n description: BACKCOMPAT_DESCRIPTION,\n },\n {\n title: 'Turbo module',\n value: 'module-new',\n description: NEWARCH_DESCRIPTION,\n },\n {\n title: 'Fabric view with backward compat',\n value: 'view-mixed',\n description: BACKCOMPAT_DESCRIPTION,\n },\n {\n title: 'Fabric view',\n value: 'view-new',\n description: NEWARCH_DESCRIPTION,\n },\n];\n\nconst args: 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 'author-name': {\n description: 'Name of the package author',\n type: 'string',\n },\n 'author-email': {\n description: 'Email address of the package author',\n type: 'string',\n },\n 'author-url': {\n description: 'URL for the package author',\n type: 'string',\n },\n 'repo-url': {\n description: 'URL for the repository',\n type: 'string',\n },\n 'languages': {\n description: 'Languages you want to use',\n choices: LANGUAGE_CHOICES.map(({ value }) => value),\n },\n 'type': {\n description: 'Type of library you want to develop',\n choices: TYPE_CHOICES.map(({ value }) => value),\n },\n 'react-native-version': {\n description: 'Version of React Native to use, 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};\n\n// FIXME: fix the type\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nasync function create(_argv: yargs.Arguments<any>) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _, $0, ...argv } = _argv;\n\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 prompts({\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 let folder;\n\n if (argv.name && !local) {\n folder = path.join(process.cwd(), argv.name);\n } else {\n const answers = await prompts({\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 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 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 basename = path.basename(folder);\n\n const questions: (Omit<PromptObject<keyof Answers>, 'validate' | 'name'> & {\n validate?: (value: string) => boolean | string;\n name: string;\n })[] = [\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 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 const validate = (answers: Answers) => {\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 valid = question.validate ? question.validate(String(value)) : true;\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 (typeof valid !== 'string' && 'choices' in question) {\n const choices =\n typeof question.choices === 'function'\n ? question.choices(\n undefined,\n // @ts-expect-error: it complains about optional values, but it should be fine\n answers,\n question\n )\n : question.choices;\n\n if (choices && !choices.some((choice) => choice.value === value)) {\n valid = `Supported values are - ${choices.map((c) =>\n kleur.green(c.value)\n )}`;\n }\n }\n\n if (valid !== true) {\n let message = `Invalid value ${kleur.red(\n String(value)\n )} passed for ${kleur.blue(key)}`;\n\n if (typeof valid === 'string') {\n message += `: ${valid}`;\n }\n\n console.log(message);\n\n process.exit(1);\n }\n }\n };\n\n // Validate arguments passed to the CLI\n validate(argv);\n\n const answers = {\n ...argv,\n local,\n ...(await prompts(\n questions\n .filter((question) => {\n // Skip questions which are passed as parameter and pass validation\n if (\n argv[question.name] != null &&\n question.validate?.(argv[question.name]) !== false\n ) {\n return false;\n }\n\n // Skip questions with a single choice\n if (\n Array.isArray(question.choices) &&\n question.choices.length === 1\n ) {\n return false;\n }\n\n return true;\n })\n .map((question) => {\n const { type, choices } = question;\n\n // Skip dynamic questions with a single choice\n if (type === 'select' && typeof choices === 'function') {\n return {\n ...question,\n type: (prev, values, prompt) => {\n const result = choices(prev, { ...argv, ...values }, prompt);\n\n if (result && result.length === 1) {\n return null;\n }\n\n return type;\n },\n };\n }\n\n return question;\n })\n )),\n } as Answers;\n\n validate(answers);\n\n const {\n slug,\n description,\n authorName,\n authorEmail,\n authorUrl,\n repoUrl,\n type = 'module-mixed',\n languages = type === 'library' ? 'js' : 'java-objc',\n example = local ? 'none' : type === 'library' ? 'expo' : 'test-app',\n reactNativeVersion,\n } = answers;\n\n // Get latest version of Bob from NPM\n let bobVersion: string;\n\n try {\n bobVersion = await Promise.race([\n new Promise<string>((resolve) => {\n setTimeout(() => resolve(FALLBACK_BOB_VERSION), 1000);\n }),\n spawn('npm', ['view', 'react-native-builder-bob', 'dist-tags.latest']),\n ]);\n } catch (e) {\n // Fallback to a known version if we couldn't fetch\n bobVersion = FALLBACK_BOB_VERSION;\n }\n\n const moduleType = type.startsWith('view-') ? 'view' : 'module';\n const arch =\n type === 'module-new' || type === 'view-new'\n ? 'new'\n : type === 'module-mixed' || type === 'view-mixed'\n ? 'mixed'\n : 'legacy';\n\n const project = slug.replace(/^(react-native-|@[^/]+\\/)/, '');\n\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 const options = {\n bob: {\n version: bobVersion || FALLBACK_BOB_VERSION,\n },\n project: {\n slug,\n description,\n name:\n /^[A-Z]/.test(basename) && /^[a-z0-9]+$/i.test(basename)\n ? // If the project name is already in PascalCase, use it as-is\n basename\n : // Otherwise, convert it to PascalCase and remove any non-alphanumeric characters\n `${project.charAt(0).toUpperCase()}${project\n .replace(/[^a-z0-9](\\w)/g, (_, $1) => $1.toUpperCase())\n .slice(1)}`,\n package: pack,\n package_dir: pack.replace(/\\./g, '/'),\n package_cpp: pack.replace(/\\./g, '_'),\n identifier: slug.replace(/[^a-z0-9]+/g, '-').replace(/^-/, ''),\n native: languages !== 'js',\n arch,\n cpp: languages === 'cpp',\n kotlin: languages === 'kotlin-objc' || languages === 'kotlin-swift',\n swift: languages === 'java-swift' || languages === 'kotlin-swift',\n view: moduleType === 'view',\n module: moduleType === 'module',\n },\n author: {\n name: authorName,\n email: authorEmail,\n url: authorUrl,\n },\n repo: repoUrl,\n example,\n year: new Date().getFullYear(),\n };\n\n const copyDir = async (source: string, dest: string) => {\n await fs.mkdirp(dest);\n\n const files = await fs.readdir(source);\n\n for (const f of files) {\n const target = path.join(\n dest,\n ejs.render(f.replace(/^\\$/, ''), options, {\n openDelimiter: '{',\n closeDelimiter: '}',\n })\n );\n\n const file = path.join(source, f);\n const stats = await fs.stat(file);\n\n if (stats.isDirectory()) {\n await copyDir(file, target);\n } else if (!BINARIES.some((r) => r.test(file))) {\n const content = await fs.readFile(file, 'utf8');\n\n await fs.writeFile(target, ejs.render(content, options));\n } else {\n await fs.copyFile(file, target);\n }\n }\n };\n\n await fs.mkdirp(folder);\n\n if (reactNativeVersion != null) {\n if (example === 'expo') {\n console.warn(\n `${kleur.yellow('⚠')} Ignoring --react-native-version for Expo example`\n );\n } else {\n console.log(\n `${kleur.blue('ℹ')} Using ${kleur.cyan(\n `react-native@${reactNativeVersion}`\n )} for the example`\n );\n }\n }\n\n const spinner = ora().start();\n\n if (example !== 'none') {\n spinner.text = 'Generating example app';\n\n await generateExampleApp({\n type: example,\n dest: folder,\n slug: options.project.slug,\n projectName: options.project.name,\n arch,\n reactNativeVersion,\n });\n }\n\n spinner.text = 'Copying files';\n\n if (local) {\n await copyDir(COMMON_LOCAL_FILES, folder);\n } else {\n await copyDir(COMMON_FILES, folder);\n\n if (example !== 'none') {\n await copyDir(COMMON_EXAMPLE_FILES, folder);\n }\n }\n\n if (languages === 'js') {\n await copyDir(JS_FILES, folder);\n await copyDir(EXPO_FILES, folder);\n } else {\n await copyDir(NATIVE_COMMON_FILES, folder);\n\n if (example !== 'none') {\n await copyDir(NATIVE_COMMON_EXAMPLE_FILES, folder);\n }\n\n if (moduleType === 'module') {\n await copyDir(NATIVE_FILES[`${moduleType}_${arch}`], folder);\n } else {\n await copyDir(NATIVE_FILES[`${moduleType}_${arch}`], folder);\n }\n\n if (options.project.swift) {\n await copyDir(SWIFT_FILES[`${moduleType}_legacy`], folder);\n } else {\n if (moduleType === 'module') {\n await copyDir(OBJC_FILES[`${moduleType}_common`], folder);\n } else {\n await copyDir(OBJC_FILES[`view_${arch}`], folder);\n }\n }\n\n const templateType = `${moduleType}_${arch}` as const;\n\n if (options.project.kotlin) {\n await copyDir(KOTLIN_FILES[templateType], folder);\n } else {\n await copyDir(JAVA_FILES[templateType], folder);\n }\n\n if (options.project.cpp) {\n await copyDir(CPP_FILES, folder);\n await fs.remove(path.join(folder, 'ios', `${options.project.name}.m`));\n }\n }\n\n if (example !== 'none') {\n // Set `react` and `react-native` versions of root `package.json` from example `package.json`\n const examplePackageJson = await fs.readJSON(\n path.join(folder, 'example', 'package.json')\n );\n const rootPackageJson = await fs.readJSON(\n path.join(folder, 'package.json')\n );\n\n rootPackageJson.devDependencies.react =\n examplePackageJson.dependencies.react;\n rootPackageJson.devDependencies['react-native'] =\n examplePackageJson.dependencies['react-native'];\n\n await fs.writeJSON(path.join(folder, 'package.json'), rootPackageJson, {\n spaces: 2,\n });\n }\n\n if (!local) {\n let isInGitRepo = false;\n\n try {\n isInGitRepo =\n (await spawn('git', ['rev-parse', '--is-inside-work-tree'])) === 'true';\n } catch (e) {\n // Ignore error\n }\n\n if (!isInGitRepo) {\n try {\n await spawn('git', ['init'], { cwd: folder });\n await spawn('git', ['branch', '-M', 'main'], { cwd: folder });\n await spawn('git', ['add', '.'], { cwd: folder });\n await spawn('git', ['commit', '-m', 'chore: initial commit'], {\n cwd: folder,\n });\n } catch (e) {\n // Ignore error\n }\n }\n }\n\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 libraryMetadata.version = version;\n\n const libraryPackageJson = await fs.readJson(\n path.join(folder, 'package.json')\n );\n libraryPackageJson['create-react-native-library'] = libraryMetadata;\n await fs.writeJson(path.join(folder, 'package.json'), libraryPackageJson, {\n spaces: 2,\n });\n\n spinner.succeed(\n `Project created successfully at ${kleur.yellow(\n path.relative(process.cwd(), folder)\n )}!\\n`\n );\n\n if (local) {\n let linked;\n\n const packageManager = (await fs.pathExists(\n path.join(process.cwd(), 'yarn.lock')\n ))\n ? 'yarn'\n : 'npm';\n\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n\n if (await fs.pathExists(packageJsonPath)) {\n const packageJson = await fs.readJSON(packageJsonPath);\n const isReactNativeProject = Boolean(\n packageJson.dependencies?.['react-native']\n );\n\n if (isReactNativeProject) {\n packageJson.dependencies = packageJson.dependencies || {};\n packageJson.dependencies[slug] =\n packageManager === 'yarn'\n ? `link:./${path.relative(process.cwd(), folder)}`\n : `file:./${path.relative(process.cwd(), folder)}`;\n\n await fs.writeJSON(packageJsonPath, packageJson, {\n spaces: 2,\n });\n\n linked = true;\n }\n }\n\n console.log(\n dedent(`\n ${kleur.magenta(\n `${kleur.bold('Get started')} with the project`\n )}${kleur.gray(':')}\n\n ${\n (linked\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 `- 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(slug)} and use it in your app.`\n }\n\n ${kleur.yellow(`Good luck!`)}\n `)\n );\n } else {\n const platforms = {\n ios: { name: 'iOS', color: 'cyan' },\n android: { name: 'Android', color: 'green' },\n ...(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}\n\nyargs\n .command('$0 [name]', 'create a react native library', args, create)\n .demandCommand()\n .recommendCommands()\n .fail((message, error) => {\n console.log('\\n');\n\n if (error) {\n console.log(kleur.red(error.message));\n throw error;\n }\n\n if (message) {\n console.log(kleur.red(message));\n } else {\n console.log(\n kleur.red(`An unknown error occurred. See '--help' for usage guide.`)\n );\n }\n\n process.exit(1);\n })\n .parserConfiguration({\n // don't pass kebab-case args to handler.\n 'strip-dashed': true,\n })\n .strict().argv;\n"],"mappings":"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"}
@@ -15,13 +15,10 @@ const PACKAGES_TO_ADD_DEV = {
15
15
  'babel-plugin-module-resolver': '^5.0.0'
16
16
  };
17
17
  const PACKAGES_TO_ADD_WEB = {
18
+ '@expo/metro-runtime': '~3.2.1',
18
19
  'react-dom': '18.2.0',
19
20
  'react-native-web': '~0.18.10'
20
21
  };
21
- const PACKAGES_TO_ADD_WEB_DEV = {
22
- '@expo/webpack-config': '^18.0.1',
23
- 'babel-loader': '^8.1.0'
24
- };
25
22
  async function generateExampleApp({
26
23
  type,
27
24
  dest,
@@ -31,13 +28,28 @@ async function generateExampleApp({
31
28
  reactNativeVersion = 'latest'
32
29
  }) {
33
30
  const directory = _path.default.join(dest, 'example');
34
- const args = type === 'native' ?
31
+
32
+ // `npx --package react-native-test-app@latest init --name ${projectName}Example --destination example --version ${reactNativeVersion}`
33
+ const testAppArgs = ['--package', `react-native-test-app@latest`, 'init', '--name', `${projectName}Example`, `--destination`, directory, ...(reactNativeVersion !== 'latest' ? ['--version', reactNativeVersion] : []), '--platform', 'ios', '--platform', 'android'];
34
+
35
35
  // `npx react-native init <projectName> --directory example --skip-install`
36
- ['react-native@latest', 'init', `${projectName}Example`, '--directory', directory, '--version', reactNativeVersion, '--skip-install', '--npm'] :
36
+ const vanillaArgs = [`react-native@${reactNativeVersion}`, 'init', `${projectName}Example`, '--directory', directory, '--version', reactNativeVersion, '--skip-install', '--npm'];
37
+
37
38
  // `npx create-expo-app example --no-install --template blank`
38
- ['create-expo-app@latest', directory, '--no-install', '--template', 'blank'];
39
+ const expoArgs = ['create-expo-app@latest', directory, '--no-install', '--template', 'blank'];
40
+ let args = [];
41
+ switch (type) {
42
+ case 'vanilla':
43
+ args = vanillaArgs;
44
+ break;
45
+ case 'test-app':
46
+ args = testAppArgs;
47
+ break;
48
+ case 'expo':
49
+ args = expoArgs;
50
+ break;
51
+ }
39
52
  await (0, _spawn.spawn)('npx', args, {
40
- cwd: dest,
41
53
  env: {
42
54
  ...process.env,
43
55
  npm_config_yes: 'true'
@@ -63,10 +75,10 @@ async function generateExampleApp({
63
75
  delete scripts.test;
64
76
  delete scripts.lint;
65
77
  const SCRIPTS_TO_ADD = {
66
- 'build:android': 'cd android && ./gradlew assembleDebug --no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a',
67
- 'build:ios': `cd ios && xcodebuild -workspace ${projectName}Example.xcworkspace -scheme ${projectName}Example -configuration Debug -sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO`
78
+ 'build:android': 'react-native build-android --extra-params "--no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a"',
79
+ 'build:ios': `react-native build-ios --scheme ${projectName}Example --mode Debug --extra-params "-sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO"`
68
80
  };
69
- if (type === 'native') {
81
+ if (type !== 'expo') {
70
82
  Object.assign(scripts, SCRIPTS_TO_ADD);
71
83
  }
72
84
  PACKAGES_TO_REMOVE.forEach(name => {
@@ -97,26 +109,30 @@ async function generateExampleApp({
97
109
  Object.entries(PACKAGES_TO_ADD_WEB).forEach(([name, version]) => {
98
110
  dependencies[name] = bundledNativeModules[name] || version;
99
111
  });
100
- Object.entries(PACKAGES_TO_ADD_WEB_DEV).forEach(([name, version]) => {
101
- devDependencies[name] = bundledNativeModules[name] || version;
102
- });
103
112
  scripts.web = 'expo start --web';
104
113
  }
105
114
  await _fsExtra.default.writeJSON(_path.default.join(directory, 'package.json'), pkg, {
106
115
  spaces: 2
107
116
  });
117
+ if (type !== 'expo') {
118
+ let gradleProperties = await _fsExtra.default.readFile(_path.default.join(directory, 'android', 'gradle.properties'), 'utf8');
108
119
 
109
- // If the library is on new architecture, enable new arch for iOS and Android
110
- if (arch === 'new') {
111
- // Android
112
- // Change newArchEnabled=false to newArchEnabled=true in example/android/gradle.properties
113
- const gradleProperties = await _fsExtra.default.readFile(_path.default.join(directory, 'android', 'gradle.properties'), 'utf8');
114
- await _fsExtra.default.writeFile(_path.default.join(directory, 'android', 'gradle.properties'), gradleProperties.replace('newArchEnabled=false', 'newArchEnabled=true'));
120
+ // Disable Jetifier.
121
+ // Remove this when the app template is updated.
122
+ gradleProperties = gradleProperties.replace('android.enableJetifier=true', 'android.enableJetifier=false');
115
123
 
116
- // iOS
117
- // Add ENV['RCT_NEW_ARCH_ENABLED'] = 1 on top of example/ios/Podfile
118
- const podfile = await _fsExtra.default.readFile(_path.default.join(directory, 'ios', 'Podfile'), 'utf8');
119
- await _fsExtra.default.writeFile(_path.default.join(directory, 'ios', 'Podfile'), "ENV['RCT_NEW_ARCH_ENABLED'] = '1'\n\n" + podfile);
124
+ // If the library is on new architecture, enable new arch for iOS and Android
125
+ if (arch === 'new') {
126
+ // iOS
127
+ // Add ENV['RCT_NEW_ARCH_ENABLED'] = 1 on top of example/ios/Podfile
128
+ const podfile = await _fsExtra.default.readFile(_path.default.join(directory, 'ios', 'Podfile'), 'utf8');
129
+ await _fsExtra.default.writeFile(_path.default.join(directory, 'ios', 'Podfile'), "ENV['RCT_NEW_ARCH_ENABLED'] = '1'\n\n" + podfile);
130
+
131
+ // Android
132
+ // Change newArchEnabled=false to newArchEnabled=true in example/android/gradle.properties
133
+ gradleProperties = gradleProperties.replace('newArchEnabled=false', 'newArchEnabled=true');
134
+ }
135
+ await _fsExtra.default.writeFile(_path.default.join(directory, 'android', 'gradle.properties'), gradleProperties);
120
136
  }
121
137
  }
122
138
  //# sourceMappingURL=generateExampleApp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateExampleApp.js","names":["_fsExtra","_interopRequireDefault","require","_path","_https","_spawn","obj","__esModule","default","FILES_TO_DELETE","PACKAGES_TO_REMOVE","PACKAGES_TO_ADD_DEV","PACKAGES_TO_ADD_WEB","PACKAGES_TO_ADD_WEB_DEV","generateExampleApp","type","dest","slug","projectName","arch","reactNativeVersion","directory","path","join","args","spawn","cwd","env","process","npm_config_yes","file","fs","remove","pkg","JSON","parse","readFile","name","jest","scripts","dependencies","devDependencies","test","lint","SCRIPTS_TO_ADD","Object","assign","forEach","sdkVersion","expo","split","replace","bundledNativeModules","Promise","resolve","reject","https","get","res","data","on","chunk","e","entries","version","web","writeJSON","spaces","gradleProperties","writeFile","podfile"],"sources":["../../src/utils/generateExampleApp.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\nimport https from 'https';\nimport { spawn } from './spawn';\n\nconst FILES_TO_DELETE = [\n '__tests__',\n '.buckconfig',\n '.eslintrc.js',\n '.flowconfig',\n '.git',\n '.gitignore',\n '.prettierrc.js',\n 'App.js',\n 'App.tsx',\n 'index.js',\n 'tsconfig.json',\n];\n\nconst PACKAGES_TO_REMOVE = [\n '@react-native/eslint-config',\n '@tsconfig/react-native',\n '@types/jest',\n '@types/react',\n '@types/react-test-renderer',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'babel-jest',\n 'eslint',\n 'jest',\n 'prettier',\n 'react-test-renderer',\n 'typescript',\n];\n\nconst PACKAGES_TO_ADD_DEV = {\n 'babel-plugin-module-resolver': '^5.0.0',\n};\n\nconst PACKAGES_TO_ADD_WEB = {\n 'react-dom': '18.2.0',\n 'react-native-web': '~0.18.10',\n};\n\nconst PACKAGES_TO_ADD_WEB_DEV = {\n '@expo/webpack-config': '^18.0.1',\n 'babel-loader': '^8.1.0',\n};\n\nexport default async function generateExampleApp({\n type,\n dest,\n slug,\n projectName,\n arch,\n reactNativeVersion = 'latest',\n}: {\n type: 'expo' | 'native';\n dest: string;\n slug: string;\n projectName: string;\n arch: 'new' | 'mixed' | 'legacy';\n reactNativeVersion?: string;\n}) {\n const directory = path.join(dest, 'example');\n const args =\n type === 'native'\n ? // `npx react-native init <projectName> --directory example --skip-install`\n [\n 'react-native@latest',\n 'init',\n `${projectName}Example`,\n '--directory',\n directory,\n '--version',\n reactNativeVersion,\n '--skip-install',\n '--npm',\n ]\n : // `npx create-expo-app example --no-install --template blank`\n [\n 'create-expo-app@latest',\n directory,\n '--no-install',\n '--template',\n 'blank',\n ];\n\n await spawn('npx', args, {\n cwd: dest,\n env: { ...process.env, npm_config_yes: 'true' },\n });\n\n // Remove unnecessary files and folders\n for (const file of FILES_TO_DELETE) {\n await fs.remove(path.join(directory, file));\n }\n\n // Patch the example app's package.json\n const pkg = JSON.parse(\n await fs.readFile(path.join(directory, 'package.json'), 'utf8')\n );\n\n pkg.name = `${slug}-example`;\n\n // Remove Jest config for now\n delete pkg.jest;\n\n const { scripts, dependencies, devDependencies } = pkg;\n\n delete scripts.test;\n delete scripts.lint;\n\n const SCRIPTS_TO_ADD = {\n 'build:android':\n 'cd android && ./gradlew assembleDebug --no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a',\n 'build:ios': `cd ios && xcodebuild -workspace ${projectName}Example.xcworkspace -scheme ${projectName}Example -configuration Debug -sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO`,\n };\n\n if (type === 'native') {\n Object.assign(scripts, SCRIPTS_TO_ADD);\n }\n\n PACKAGES_TO_REMOVE.forEach((name) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete devDependencies[name];\n });\n\n Object.assign(devDependencies, PACKAGES_TO_ADD_DEV);\n\n if (type === 'expo') {\n const sdkVersion = dependencies.expo.split('.')[0].replace(/[^\\d]/, '');\n\n let bundledNativeModules: Record<string, string>;\n\n try {\n bundledNativeModules = await new Promise((resolve, reject) => {\n https\n .get(\n `https://raw.githubusercontent.com/expo/expo/sdk-${sdkVersion}/packages/expo/bundledNativeModules.json`,\n (res) => {\n let data = '';\n\n res.on('data', (chunk) => (data += chunk));\n res.on('end', () => {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n reject(e);\n }\n });\n }\n )\n .on('error', reject);\n });\n } catch (e) {\n bundledNativeModules = {};\n }\n\n Object.entries(PACKAGES_TO_ADD_WEB).forEach(([name, version]) => {\n dependencies[name] = bundledNativeModules[name] || version;\n });\n\n Object.entries(PACKAGES_TO_ADD_WEB_DEV).forEach(([name, version]) => {\n devDependencies[name] = bundledNativeModules[name] || version;\n });\n\n scripts.web = 'expo start --web';\n }\n\n await fs.writeJSON(path.join(directory, 'package.json'), pkg, {\n spaces: 2,\n });\n\n // If the library is on new architecture, enable new arch for iOS and Android\n if (arch === 'new') {\n // Android\n // Change newArchEnabled=false to newArchEnabled=true in example/android/gradle.properties\n const gradleProperties = await fs.readFile(\n path.join(directory, 'android', 'gradle.properties'),\n 'utf8'\n );\n\n await fs.writeFile(\n path.join(directory, 'android', 'gradle.properties'),\n gradleProperties.replace('newArchEnabled=false', 'newArchEnabled=true')\n );\n\n // iOS\n // Add ENV['RCT_NEW_ARCH_ENABLED'] = 1 on top of example/ios/Podfile\n const podfile = await fs.readFile(\n path.join(directory, 'ios', 'Podfile'),\n 'utf8'\n );\n\n await fs.writeFile(\n path.join(directory, 'ios', 'Podfile'),\n \"ENV['RCT_NEW_ARCH_ENABLED'] = '1'\\n\\n\" + podfile\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"generateExampleApp.js","names":["_fsExtra","_interopRequireDefault","require","_path","_https","_spawn","obj","__esModule","default","FILES_TO_DELETE","PACKAGES_TO_REMOVE","PACKAGES_TO_ADD_DEV","PACKAGES_TO_ADD_WEB","generateExampleApp","type","dest","slug","projectName","arch","reactNativeVersion","directory","path","join","testAppArgs","vanillaArgs","expoArgs","args","spawn","env","process","npm_config_yes","file","fs","remove","pkg","JSON","parse","readFile","name","jest","scripts","dependencies","devDependencies","test","lint","SCRIPTS_TO_ADD","Object","assign","forEach","sdkVersion","expo","split","replace","bundledNativeModules","Promise","resolve","reject","https","get","res","data","on","chunk","e","entries","version","web","writeJSON","spaces","gradleProperties","podfile","writeFile"],"sources":["../../src/utils/generateExampleApp.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\nimport https from 'https';\nimport { spawn } from './spawn';\n\nexport type ExampleType = 'vanilla' | 'test-app' | 'expo' | 'none';\n\nconst FILES_TO_DELETE = [\n '__tests__',\n '.buckconfig',\n '.eslintrc.js',\n '.flowconfig',\n '.git',\n '.gitignore',\n '.prettierrc.js',\n 'App.js',\n 'App.tsx',\n 'index.js',\n 'tsconfig.json',\n];\n\nconst PACKAGES_TO_REMOVE = [\n '@react-native/eslint-config',\n '@tsconfig/react-native',\n '@types/jest',\n '@types/react',\n '@types/react-test-renderer',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'babel-jest',\n 'eslint',\n 'jest',\n 'prettier',\n 'react-test-renderer',\n 'typescript',\n];\n\nconst PACKAGES_TO_ADD_DEV = {\n 'babel-plugin-module-resolver': '^5.0.0',\n};\n\nconst PACKAGES_TO_ADD_WEB = {\n '@expo/metro-runtime': '~3.2.1',\n 'react-dom': '18.2.0',\n 'react-native-web': '~0.18.10',\n};\n\nexport default async function generateExampleApp({\n type,\n dest,\n slug,\n projectName,\n arch,\n reactNativeVersion = 'latest',\n}: {\n type: ExampleType;\n dest: string;\n slug: string;\n projectName: string;\n arch: 'new' | 'mixed' | 'legacy';\n reactNativeVersion?: string;\n}) {\n const directory = path.join(dest, 'example');\n\n // `npx --package react-native-test-app@latest init --name ${projectName}Example --destination example --version ${reactNativeVersion}`\n const testAppArgs = [\n '--package',\n `react-native-test-app@latest`,\n 'init',\n '--name',\n `${projectName}Example`,\n `--destination`,\n directory,\n ...(reactNativeVersion !== 'latest'\n ? ['--version', reactNativeVersion]\n : []),\n '--platform',\n 'ios',\n '--platform',\n 'android',\n ];\n\n // `npx react-native init <projectName> --directory example --skip-install`\n const vanillaArgs = [\n `react-native@${reactNativeVersion}`,\n 'init',\n `${projectName}Example`,\n '--directory',\n directory,\n '--version',\n reactNativeVersion,\n '--skip-install',\n '--npm',\n ];\n\n // `npx create-expo-app example --no-install --template blank`\n const expoArgs = [\n 'create-expo-app@latest',\n directory,\n '--no-install',\n '--template',\n 'blank',\n ];\n\n let args: string[] = [];\n\n switch (type) {\n case 'vanilla':\n args = vanillaArgs;\n break;\n case 'test-app':\n args = testAppArgs;\n break;\n case 'expo':\n args = expoArgs;\n break;\n }\n\n await spawn('npx', args, {\n env: { ...process.env, npm_config_yes: 'true' },\n });\n\n // Remove unnecessary files and folders\n for (const file of FILES_TO_DELETE) {\n await fs.remove(path.join(directory, file));\n }\n\n // Patch the example app's package.json\n const pkg = JSON.parse(\n await fs.readFile(path.join(directory, 'package.json'), 'utf8')\n );\n\n pkg.name = `${slug}-example`;\n\n // Remove Jest config for now\n delete pkg.jest;\n\n const { scripts, dependencies, devDependencies } = pkg;\n\n delete scripts.test;\n delete scripts.lint;\n\n const SCRIPTS_TO_ADD = {\n 'build:android':\n 'react-native build-android --extra-params \"--no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a\"',\n 'build:ios': `react-native build-ios --scheme ${projectName}Example --mode Debug --extra-params \"-sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO\"`,\n };\n\n if (type !== 'expo') {\n Object.assign(scripts, SCRIPTS_TO_ADD);\n }\n\n PACKAGES_TO_REMOVE.forEach((name) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete devDependencies[name];\n });\n\n Object.assign(devDependencies, PACKAGES_TO_ADD_DEV);\n\n if (type === 'expo') {\n const sdkVersion = dependencies.expo.split('.')[0].replace(/[^\\d]/, '');\n\n let bundledNativeModules: Record<string, string>;\n\n try {\n bundledNativeModules = await new Promise((resolve, reject) => {\n https\n .get(\n `https://raw.githubusercontent.com/expo/expo/sdk-${sdkVersion}/packages/expo/bundledNativeModules.json`,\n (res) => {\n let data = '';\n\n res.on('data', (chunk) => (data += chunk));\n res.on('end', () => {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n reject(e);\n }\n });\n }\n )\n .on('error', reject);\n });\n } catch (e) {\n bundledNativeModules = {};\n }\n\n Object.entries(PACKAGES_TO_ADD_WEB).forEach(([name, version]) => {\n dependencies[name] = bundledNativeModules[name] || version;\n });\n\n scripts.web = 'expo start --web';\n }\n\n await fs.writeJSON(path.join(directory, 'package.json'), pkg, {\n spaces: 2,\n });\n\n if (type !== 'expo') {\n let gradleProperties = await fs.readFile(\n path.join(directory, 'android', 'gradle.properties'),\n 'utf8'\n );\n\n // Disable Jetifier.\n // Remove this when the app template is updated.\n gradleProperties = gradleProperties.replace(\n 'android.enableJetifier=true',\n 'android.enableJetifier=false'\n );\n\n // If the library is on new architecture, enable new arch for iOS and Android\n if (arch === 'new') {\n // iOS\n // Add ENV['RCT_NEW_ARCH_ENABLED'] = 1 on top of example/ios/Podfile\n const podfile = await fs.readFile(\n path.join(directory, 'ios', 'Podfile'),\n 'utf8'\n );\n\n await fs.writeFile(\n path.join(directory, 'ios', 'Podfile'),\n \"ENV['RCT_NEW_ARCH_ENABLED'] = '1'\\n\\n\" + podfile\n );\n\n // Android\n // Change newArchEnabled=false to newArchEnabled=true in example/android/gradle.properties\n gradleProperties = gradleProperties.replace(\n 'newArchEnabled=false',\n 'newArchEnabled=true'\n );\n }\n\n await fs.writeFile(\n path.join(directory, 'android', 'gradle.properties'),\n gradleProperties\n );\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-react-native-library",
3
- "version": "0.36.0",
3
+ "version": "0.38.0-next.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": "4646e08f940ab57f1d337a1bfaa355077caa978e"
68
+ "gitHead": "176444eaf3a85643f27637ca0dec17520be8f276"
69
69
  }
@@ -6,6 +6,9 @@ on:
6
6
  pull_request:
7
7
  branches:
8
8
  - main
9
+ merge_group:
10
+ types:
11
+ - checks_requested
9
12
 
10
13
  jobs:
11
14
  lint:
@@ -165,5 +168,5 @@ jobs:
165
168
 
166
169
  - name: Build example for Web
167
170
  run: |
168
- yarn example expo export:web
171
+ yarn example expo export --platform web
169
172
  <% } -%>
@@ -2,11 +2,17 @@
2
2
  "name": "<%- project.slug -%>",
3
3
  "version": "0.1.0",
4
4
  "description": "<%- project.description %>",
5
- "main": "lib/commonjs/index",
6
- "module": "lib/module/index",
7
- "types": "lib/typescript/src/index.d.ts",
8
- "react-native": "src/index",
9
- "source": "src/index",
5
+ "source": "./src/index.tsx",
6
+ "main": "./lib/commonjs/index.cjs",
7
+ "module": "./lib/module/index.mjs",
8
+ "types": "./lib/typescript/src/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./lib/typescript/src/index.d.ts",
12
+ "import": "./lib/module/index.mjs",
13
+ "require": "./lib/commonjs/index.cjs"
14
+ }
15
+ },
10
16
  "files": [
11
17
  "src",
12
18
  "lib",
@@ -32,7 +38,7 @@
32
38
  "test": "jest",
33
39
  "typecheck": "tsc --noEmit",
34
40
  "lint": "eslint \"**/*.{js,ts,tsx}\"",
35
- <% if (example === 'native') { -%>
41
+ <% if (example !== 'expo') { -%>
36
42
  "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
37
43
  <% } else { -%>
38
44
  "clean": "del-cli lib",
@@ -76,7 +82,7 @@
76
82
  "react-native": "0.73.0",
77
83
  "react-native-builder-bob": "^<%- bob.version %>",
78
84
  "release-it": "^15.0.0",
79
- <% if (example === 'native') { -%>
85
+ <% if (example !== 'expo') { -%>
80
86
  "turbo": "^1.10.7",
81
87
  <% } -%>
82
88
  "typescript": "^5.2.2"
@@ -130,6 +136,7 @@
130
136
  "prettier"
131
137
  ],
132
138
  "rules": {
139
+ "react/react-in-jsx-scope": "off",
133
140
  "prettier/prettier": [
134
141
  "error",
135
142
  {
@@ -11,6 +11,7 @@ npm install <%- project.slug %>
11
11
  ## Usage
12
12
 
13
13
  <% if (project.view) { -%>
14
+
14
15
  ```js
15
16
  import { <%- project.name -%>View } from "<%- project.slug -%>";
16
17
 
@@ -18,6 +19,7 @@ import { <%- project.name -%>View } from "<%- project.slug -%>";
18
19
 
19
20
  <<%- project.name -%>View color="tomato" />
20
21
  ```
22
+
21
23
  <% } else if (project.arch === 'new' && project.module) { -%>
22
24
 
23
25
  ```js
@@ -27,7 +29,9 @@ import { multiply } from '<%- project.slug -%>';
27
29
 
28
30
  const result = multiply(3, 7);
29
31
  ```
32
+
30
33
  <% } else { -%>
34
+
31
35
  ```js
32
36
  import { multiply } from '<%- project.slug -%>';
33
37
 
@@ -35,6 +39,7 @@ import { multiply } from '<%- project.slug -%>';
35
39
 
36
40
  const result = await multiply(3, 7);
37
41
  ```
42
+
38
43
  <% } -%>
39
44
 
40
45
  ## Contributing
@@ -8,10 +8,10 @@
8
8
  "allowUnusedLabels": false,
9
9
  "esModuleInterop": true,
10
10
  "forceConsistentCasingInFileNames": true,
11
- "jsx": "react",
12
- "lib": ["esnext"],
13
- "module": "esnext",
14
- "moduleResolution": "node",
11
+ "jsx": "react-jsx",
12
+ "lib": ["ESNext"],
13
+ "module": "ESNext",
14
+ "moduleResolution": "Bundler",
15
15
  "noFallthroughCasesInSwitch": true,
16
16
  "noImplicitReturns": true,
17
17
  "noImplicitUseStrict": false,
@@ -22,7 +22,7 @@
22
22
  "resolveJsonModule": true,
23
23
  "skipLibCheck": true,
24
24
  "strict": true,
25
- "target": "esnext",
25
+ "target": "ESNext",
26
26
  "verbatimModuleSyntax": true
27
27
  }
28
28
  }
@@ -1,9 +1,10 @@
1
- import * as React from 'react';
2
-
3
1
  <% if (project.view) { -%>
4
2
  import { StyleSheet, View } from 'react-native';
5
3
  import { <%- project.name -%>View } from '<%- project.slug -%>';
6
4
  <% } else { -%>
5
+ <% if (project.arch !== 'new') { -%>
6
+ import { useState, useEffect } from 'react';
7
+ <% } -%>
7
8
  import { StyleSheet, View, Text } from 'react-native';
8
9
  import { multiply } from '<%- project.slug -%>';
9
10
  <% } -%>
@@ -28,9 +29,9 @@ export default function App() {
28
29
  }
29
30
  <% } else { -%>
30
31
  export default function App() {
31
- const [result, setResult] = React.useState<number | undefined>();
32
+ const [result, setResult] = useState<number | undefined>();
32
33
 
33
- React.useEffect(() => {
34
+ useEffect(() => {
34
35
  multiply(3, 7).then(setResult);
35
36
  }, []);
36
37
 
@@ -1,7 +1,27 @@
1
1
  const path = require('path');
2
2
  const pak = require('../package.json');
3
+ <% if (example === 'test-app') { -%>
4
+ const { configureProjects } = require('react-native-test-app');
5
+ <% } -%>
3
6
 
4
7
  module.exports = {
8
+ <% if (example === 'test-app') { -%>
9
+ project: configureProjects({
10
+ android: {
11
+ sourceDir: 'android',
12
+ },
13
+ ios: {
14
+ sourceDir: 'ios',
15
+ automaticPodsInstallation: true,
16
+ },
17
+ }),
18
+ <% } else { -%>
19
+ project: {
20
+ ios: {
21
+ automaticPodsInstallation: true,
22
+ },
23
+ },
24
+ <% } -%>
5
25
  dependencies: {
6
26
  [pak.name]: {
7
27
  root: path.join(__dirname, '..'),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://turbo.build/schema.json",
3
3
  "pipeline": {
4
- <% if (example === 'native') { -%>
4
+ <% if (example !== 'expo') { -%>
5
5
  "build:android": {
6
6
  "inputs": [
7
7
  "package.json",
@@ -1,10 +0,0 @@
1
- const path = require('path');
2
- const pak = require('../package.json');
3
-
4
- module.exports = {
5
- dependencies: {
6
- [pak.name]: {
7
- root: path.join(__dirname, '..'),
8
- },
9
- },
10
- };
@@ -1,25 +0,0 @@
1
- const path = require('path');
2
- const createExpoWebpackConfigAsync = require('@expo/webpack-config');
3
- const { resolver } = require('./metro.config');
4
-
5
- const root = path.resolve(__dirname, '..');
6
- const node_modules = path.join(__dirname, 'node_modules');
7
-
8
- module.exports = async function (env, argv) {
9
- const config = await createExpoWebpackConfigAsync(env, argv);
10
-
11
- config.module.rules.push({
12
- test: /\.(js|jsx|ts|tsx)$/,
13
- include: path.resolve(root, 'src'),
14
- use: 'babel-loader',
15
- });
16
-
17
- // We need to make sure that only one version is loaded for peerDependencies
18
- // So we alias them to the versions in example's node_modules
19
- Object.assign(config.resolve.alias, {
20
- ...resolver.extraNodeModules,
21
- 'react-native-web': path.join(node_modules, 'react-native-web'),
22
- });
23
-
24
- return config;
25
- };