react-native-windows-init 1.1.73 → 1.1.77

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/bin.js CHANGED
@@ -8,4 +8,6 @@
8
8
  */
9
9
 
10
10
  require('source-map-support').install();
11
- require('./lib-commonjs/Cli');
11
+ const cli = require('./lib-commonjs/Cli');
12
+
13
+ cli.reactNativeWindowsInit();
@@ -4,4 +4,77 @@
4
4
  *
5
5
  * @format
6
6
  */
7
- export {};
7
+ import yargs from 'yargs';
8
+ export declare const windowsInitOptions: {
9
+ version: {
10
+ type: "string";
11
+ describe: string;
12
+ };
13
+ namespace: {
14
+ type: "string";
15
+ describe: string;
16
+ };
17
+ verbose: {
18
+ type: "boolean";
19
+ describe: string;
20
+ default: boolean;
21
+ };
22
+ telemetry: {
23
+ type: "boolean";
24
+ describe: string;
25
+ default: boolean;
26
+ };
27
+ language: {
28
+ type: "string";
29
+ describe: string;
30
+ choices: string[];
31
+ default: string;
32
+ };
33
+ overwrite: {
34
+ type: "boolean";
35
+ describe: string;
36
+ default: boolean;
37
+ };
38
+ projectType: {
39
+ type: "string";
40
+ describe: string;
41
+ choices: string[];
42
+ default: string;
43
+ };
44
+ experimentalNuGetDependency: {
45
+ type: "boolean";
46
+ describe: string;
47
+ hidden: true;
48
+ default: boolean;
49
+ };
50
+ useHermes: {
51
+ type: "boolean";
52
+ describe: string;
53
+ default: boolean;
54
+ };
55
+ useWinUI3: {
56
+ type: "boolean";
57
+ describe: string;
58
+ hidden: true;
59
+ default: boolean;
60
+ };
61
+ nuGetTestVersion: {
62
+ type: "string";
63
+ describe: string;
64
+ hidden: true;
65
+ };
66
+ nuGetTestFeed: {
67
+ type: "string";
68
+ describe: string;
69
+ hidden: true;
70
+ };
71
+ useDevMode: {
72
+ type: "boolean";
73
+ describe: string;
74
+ hidden: true;
75
+ default: boolean;
76
+ conflicts: string;
77
+ };
78
+ };
79
+ export declare function reactNativeWindowsInit(args?: string[]): Promise<void>;
80
+ export declare type WindowsInitOptions = yargs.InferredOptionTypes<typeof windowsInitOptions>;
@@ -9,6 +9,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
9
9
  return (mod && mod.__esModule) ? mod : { "default": mod };
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.reactNativeWindowsInit = exports.windowsInitOptions = void 0;
12
13
  const yargs_1 = __importDefault(require("yargs"));
13
14
  const fs_1 = __importDefault(require("@react-native-windows/fs"));
14
15
  const semver_1 = __importDefault(require("semver"));
@@ -25,16 +26,15 @@ const telemetry_1 = require("@react-native-windows/telemetry");
25
26
  * See https://github.com/microsoft/ApplicationInsights-node.js/issues/580
26
27
  */
27
28
  const requireGenerateWindows_1 = __importDefault(require("./requireGenerateWindows"));
28
- const npmConfReg = (0, child_process_1.execSync)('npm config get registry')
29
- .toString()
30
- .trim();
29
+ const npmConfReg = (0, child_process_1.execSync)('npm config get registry').toString().trim();
31
30
  const NPM_REGISTRY_URL = valid_url_1.default.isUri(npmConfReg)
32
31
  ? npmConfReg
33
32
  : 'http://registry.npmjs.org';
34
- const yargsParser = yargs_1.default
35
- .version(false)
36
- .strict(true)
37
- .options({
33
+ // Causes the type-checker to ensure the options object is a valid yargs options object
34
+ function initOptions(options) {
35
+ return options;
36
+ }
37
+ exports.windowsInitOptions = initOptions({
38
38
  version: {
39
39
  type: 'string',
40
40
  describe: 'The version of react-native-windows to use.',
@@ -101,11 +101,14 @@ const yargsParser = yargs_1.default
101
101
  type: 'boolean',
102
102
  describe: '[internalTesting] Link rather than Add/Install the react-native-windows package. This option is for the development workflow of the developers working on react-native-windows.',
103
103
  hidden: true,
104
+ default: false,
104
105
  conflicts: 'version',
105
106
  },
106
- })
107
+ });
108
+ const yargsParser = yargs_1.default
109
+ .version(false)
110
+ .options(exports.windowsInitOptions)
107
111
  .strict(true);
108
- const argv = yargsParser.argv;
109
112
  function getReactNativeProjectName() {
110
113
  console.log('Reading project name from package.json...');
111
114
  const cwd = process.cwd();
@@ -172,7 +175,7 @@ async function getLatestMatchingVersion(pkg, versionSemVer) {
172
175
  const versions = Object.keys(npmResponse.versions);
173
176
  if (versions.length > 0) {
174
177
  const candidates = versions
175
- .filter(v => semver_1.default.satisfies(v, versionSemVer))
178
+ .filter((v) => semver_1.default.satisfies(v, versionSemVer))
176
179
  .sort(semver_1.default.rcompare);
177
180
  if (candidates.length > 0) {
178
181
  return candidates[0];
@@ -197,9 +200,9 @@ async function getLatestMatchingRNWVersion(versionSemVer) {
197
200
  return null;
198
201
  }
199
202
  }
200
- function installReactNativeWindows(version, useDevMode) {
203
+ function installReactNativeWindows(version, verbose, useDevMode) {
201
204
  const cwd = process.cwd();
202
- const execOptions = argv.verbose ? { stdio: 'inherit' } : {};
205
+ const execOptions = verbose ? { stdio: 'inherit' } : {};
203
206
  if (useDevMode) {
204
207
  const packageCmd = isProjectUsingYarn(cwd) ? 'yarn' : 'npm';
205
208
  (0, child_process_1.execSync)(`${packageCmd} link react-native-windows`, execOptions);
@@ -242,27 +245,45 @@ function installReactNativeWindows(version, useDevMode) {
242
245
  * @returns The sanitized value of the option.
243
246
  */
244
247
  function optionSanitizer(key, value) {
248
+ // Do not add a default case here.
249
+ // Strings risking PII should just return true if present, false otherwise.
250
+ // All others should return the value (or false if undefined).
245
251
  switch (key) {
246
252
  case 'namespace':
247
- return value === undefined ? false : true;
248
- default:
253
+ case 'nuGetTestFeed':
254
+ case 'nuGetTestVersion':
255
+ return value ? true : false;
256
+ case 'verbose':
257
+ case 'version':
258
+ case 'telemetry':
259
+ case 'language':
260
+ case 'overwrite':
261
+ case 'projectType':
262
+ case 'experimentalNuGetDependency':
263
+ case 'useHermes':
264
+ case 'useWinUI3':
265
+ case 'useDevMode':
249
266
  return value === undefined ? false : value;
250
267
  }
251
268
  }
252
269
  /**
253
270
  * Sets up and starts the telemetry gathering for the CLI command.
271
+ * @param args The raw CLI args.
272
+ * @param options The CLI args parsed by yargs.
254
273
  */
255
- async function startTelemetrySession() {
256
- if (!argv.telemetry) {
257
- if (argv.verbose) {
274
+ async function startTelemetrySession(args, options) {
275
+ if (!options.telemetry) {
276
+ if (options.verbose) {
258
277
  console.log('Telemetry is disabled');
259
278
  }
260
279
  return;
261
280
  }
262
- await telemetry_1.Telemetry.setup();
263
- const sanitizedOptions = (0, telemetry_1.yargsOptionsToOptions)(argv, optionSanitizer);
281
+ // Setup telemetry, but don't get NPM package version info right away as
282
+ // we're going to change things and this may interfere with the resolver
283
+ await telemetry_1.Telemetry.setup({ populateNpmPackageVersions: false });
284
+ const sanitizedOptions = (0, telemetry_1.yargsOptionsToOptions)(options, optionSanitizer);
264
285
  const sanitizedDefaultOptions = (0, telemetry_1.yargsOptionsToOptions)(yargsParser.parse(''), optionSanitizer);
265
- const sanitizedArgs = (0, telemetry_1.optionsToArgs)(sanitizedOptions, process.argv);
286
+ const sanitizedArgs = (0, telemetry_1.optionsToArgs)(sanitizedOptions, args);
266
287
  const startInfo = {
267
288
  commandName: 'react-native-windows-init',
268
289
  args: sanitizedArgs,
@@ -333,29 +354,32 @@ function setExitProcessWithError(loggingIsEnabled, error) {
333
354
  function isProjectUsingYarn(cwd) {
334
355
  return !!find_up_1.default.sync('yarn.lock', { cwd });
335
356
  }
336
- (async () => {
337
- if (argv.verbose) {
338
- console.log(argv);
357
+ async function reactNativeWindowsInit(args) {
358
+ args = args !== null && args !== void 0 ? args : process.argv;
359
+ const options = yargsParser.parse(args);
360
+ if (options.verbose) {
361
+ console.log(options);
339
362
  }
340
- await startTelemetrySession();
363
+ await startTelemetrySession(args, options);
341
364
  let initWindowsError;
342
365
  try {
343
366
  const name = getReactNativeProjectName();
344
- const ns = argv.namespace || name;
345
- const useDevMode = !!argv.useDevMode;
346
- let version = argv.version;
347
- if (argv.useWinUI3 && argv.experimentalNuGetDependency) {
367
+ const ns = options.namespace || name;
368
+ const useDevMode = options.useDevMode;
369
+ let version = options.version;
370
+ if (options.useWinUI3 && options.experimentalNuGetDependency) {
348
371
  throw new telemetry_1.CodedError('IncompatibleOptions', "Error: Incompatible options specified. Options '--useWinUI3' and '--experimentalNuGetDependency' are incompatible", { detail: 'useWinUI3 and experimentalNuGetDependency' });
349
372
  }
350
373
  if (!useDevMode) {
351
374
  if (!version) {
352
375
  const rnVersion = getReactNativeVersion();
353
- version = getDefaultReactNativeWindowsSemVerForReactNativeVersion(rnVersion);
376
+ version =
377
+ getDefaultReactNativeWindowsSemVerForReactNativeVersion(rnVersion);
354
378
  }
355
379
  const rnwResolvedVersion = await getLatestMatchingRNWVersion(version);
356
380
  if (!rnwResolvedVersion) {
357
- if (argv.version) {
358
- console.warn(`Warning: Querying npm to find react-native-windows@${argv.version} failed. Attempting to continue anyway...`);
381
+ if (options.version) {
382
+ console.warn(`Warning: Querying npm to find react-native-windows@${options.version} failed. Attempting to continue anyway...`);
359
383
  }
360
384
  else {
361
385
  const rnwLatestVersion = await getLatestRNWVersion();
@@ -366,7 +390,7 @@ function isProjectUsingYarn(cwd) {
366
390
  `, { rnwLatestVersion: rnwLatestVersion });
367
391
  }
368
392
  }
369
- if (!argv.version) {
393
+ if (!options.version) {
370
394
  console.log(`Latest matching version of ${chalk_1.default.bold('react-native-windows')} for ${chalk_1.default.green('react-native')}@${chalk_1.default.cyan(getReactNativeVersion())} is ${chalk_1.default.green('react-native-windows')}@${chalk_1.default.cyan(rnwResolvedVersion)}`);
371
395
  if (rnwResolvedVersion && semver_1.default.prerelease(rnwResolvedVersion)) {
372
396
  const rnwLatestVersion = await getLatestRNWVersion();
@@ -389,27 +413,30 @@ function isProjectUsingYarn(cwd) {
389
413
  version = rnwResolvedVersion;
390
414
  }
391
415
  }
392
- installReactNativeWindows(version, useDevMode);
416
+ installReactNativeWindows(version, options.verbose, useDevMode);
393
417
  const generateWindows = (0, requireGenerateWindows_1.default)();
394
- // Now that new NPM packages have been installed, refresh their versions
395
- await telemetry_1.Telemetry.populateNpmPackageVersions(true);
418
+ // Now that new NPM packages have been installed, get their versions
419
+ await telemetry_1.Telemetry.populateNpmPackageVersions();
396
420
  await generateWindows(process.cwd(), name, ns, {
397
- language: argv.language,
398
- overwrite: argv.overwrite,
399
- verbose: argv.verbose,
400
- projectType: argv.projectType,
401
- experimentalNuGetDependency: argv.experimentalNuGetDependency,
402
- useWinUI3: argv.useWinUI3,
403
- useHermes: argv.useHermes,
421
+ language: options.language,
422
+ overwrite: options.overwrite,
423
+ verbose: options.verbose,
424
+ projectType: options.projectType,
425
+ experimentalNuGetDependency: options.experimentalNuGetDependency,
426
+ useWinUI3: options.useWinUI3,
427
+ useHermes: options.useHermes,
404
428
  useDevMode: useDevMode,
405
- nuGetTestVersion: argv.nuGetTestVersion,
406
- nuGetTestFeed: argv.nuGetTestFeed,
407
- telemetry: argv.telemetry,
429
+ nuGetTestVersion: options.nuGetTestVersion,
430
+ nuGetTestFeed: options.nuGetTestFeed,
431
+ telemetry: options.telemetry,
408
432
  });
409
433
  // Now that the project has been generated, add project info
410
434
  await addProjectInfoToTelemetry();
411
435
  }
412
436
  catch (ex) {
437
+ // Since we may have failed before generating a project, make
438
+ // sure we get those NPM package versions
439
+ await telemetry_1.Telemetry.populateNpmPackageVersions();
413
440
  initWindowsError =
414
441
  ex instanceof Error ? ex : new Error(String(ex));
415
442
  telemetry_1.Telemetry.trackException(initWindowsError);
@@ -417,6 +444,7 @@ function isProjectUsingYarn(cwd) {
417
444
  console.error(initWindowsError);
418
445
  }
419
446
  endTelemetrySession(initWindowsError);
420
- setExitProcessWithError(argv.verbose, initWindowsError);
421
- })();
447
+ setExitProcessWithError(options.verbose, initWindowsError);
448
+ }
449
+ exports.reactNativeWindowsInit = reactNativeWindowsInit;
422
450
  //# sourceMappingURL=Cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cli.js","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport yargs from 'yargs';\nimport fs from '@react-native-windows/fs';\nimport semver from 'semver';\nimport {execSync} from 'child_process';\nimport validUrl from 'valid-url';\nimport prompts from 'prompts';\nimport findUp from 'find-up';\nimport chalk from 'chalk';\nimport npmFetch from 'npm-registry-fetch';\n\nimport {\n Telemetry,\n CommandStartInfo,\n CommandEndInfo,\n CodedErrors,\n CodedError,\n yargsOptionsToOptions,\n optionsToArgs,\n configToProjectInfo,\n getProjectFileFromConfig,\n} from '@react-native-windows/telemetry';\n\n/**\n * Important:\n * Do not use process.exit() in this script as it will prevent telemetry from being sent.\n * See https://github.com/microsoft/ApplicationInsights-node.js/issues/580\n */\n\nimport requireGenerateWindows from './requireGenerateWindows';\n\nconst npmConfReg = execSync('npm config get registry')\n .toString()\n .trim();\nconst NPM_REGISTRY_URL = validUrl.isUri(npmConfReg)\n ? npmConfReg\n : 'http://registry.npmjs.org';\n\nconst yargsParser = yargs\n .version(false)\n .strict(true)\n .options({\n version: {\n type: 'string',\n describe: 'The version of react-native-windows to use.',\n },\n namespace: {\n type: 'string',\n describe:\n \"The native project namespace. This should be expressed using dots as separators. i.e. 'Level1.Level2.Level3'. The generator will apply the correct syntax for the target language\",\n },\n verbose: {\n type: 'boolean',\n describe: 'Enables logging.',\n default: false,\n },\n telemetry: {\n type: 'boolean',\n describe:\n 'Controls sending telemetry that allows analysis of usage and failures of the react-native-windows CLI',\n default: true,\n },\n language: {\n type: 'string',\n describe: 'The language the project is written in.',\n choices: ['cs', 'cpp'],\n default: 'cpp',\n },\n overwrite: {\n type: 'boolean',\n describe: 'Overwrite any existing files without prompting',\n default: false,\n },\n projectType: {\n type: 'string',\n describe: 'The type of project to initialize (supported on 0.64+)',\n choices: ['app', 'lib'],\n default: 'app',\n },\n experimentalNuGetDependency: {\n type: 'boolean',\n describe:\n '[Experimental] change to start consuming a NuGet containing a pre-built dll version of Microsoft.ReactNative',\n hidden: true,\n default: false,\n },\n useHermes: {\n type: 'boolean',\n describe:\n '[Experimental] Use Hermes instead of Chakra as the JS engine (supported on 0.64+ for C++ projects)',\n default: false,\n },\n useWinUI3: {\n type: 'boolean',\n describe: '[Experimental] Use WinUI3',\n hidden: true,\n default: false,\n },\n nuGetTestVersion: {\n type: 'string',\n describe:\n '[internalTesting] By default the NuGet version matches the rnw package. This flag allows manually specifying the version for internal testing.',\n hidden: true,\n },\n nuGetTestFeed: {\n type: 'string',\n describe:\n '[internalTesting] Allows a test feed to be added to the generated NuGet configuration',\n hidden: true,\n },\n useDevMode: {\n type: 'boolean',\n describe:\n '[internalTesting] Link rather than Add/Install the react-native-windows package. This option is for the development workflow of the developers working on react-native-windows.',\n hidden: true,\n conflicts: 'version',\n },\n })\n .strict(true);\n\nconst argv = yargsParser.argv;\n\nfunction getReactNativeProjectName(): string {\n console.log('Reading project name from package.json...');\n const cwd = process.cwd();\n const pkgJsonPath = findUp.sync('package.json', {cwd});\n if (!pkgJsonPath) {\n throw new CodedError(\n 'NoPackageJson',\n 'Unable to find package.json. This should be run from within an existing react-native project.',\n );\n }\n type PackageJson = {name: string};\n\n let name = fs.readJsonFileSync<PackageJson>(pkgJsonPath).name;\n if (!name) {\n const appJsonPath = findUp.sync('app.json', {cwd});\n if (appJsonPath) {\n console.log('Reading project name from app.json...');\n name = fs.readJsonFileSync<PackageJson>(pkgJsonPath).name;\n }\n }\n if (!name) {\n console.error('Please specify name in package.json or app.json');\n }\n return name;\n}\n\nfunction getReactNativeVersion(): string {\n console.log('Reading react-native version from node_modules...');\n const rnPkgJsonPath = require.resolve('react-native/package.json', {\n paths: [process.cwd()],\n });\n if (fs.existsSync(rnPkgJsonPath)) {\n return require(rnPkgJsonPath).version;\n }\n\n throw new CodedError(\n 'NoReactNativeFound',\n 'Must be run from a project that already depends on react-native, and has react-native installed.',\n );\n}\n\nfunction getDefaultReactNativeWindowsSemVerForReactNativeVersion(\n rnVersion: string,\n): string {\n const validVersion = semver.valid(rnVersion);\n if (validVersion) {\n const major = semver.major(validVersion);\n const minor = semver.minor(validVersion);\n if (major === 0 && minor >= 59) {\n return `^${major}.${minor}.0-0`;\n }\n }\n\n throw new CodedError(\n 'UnsupportedReactNativeVersion',\n `Error: Unsupported version of react-native: ${chalk.cyan(\n rnVersion,\n )} react-native-windows supports react-native versions ${chalk.cyan(\n '>=0.60',\n )}`,\n );\n}\n\nfunction getMatchingReactNativeSemVerForReactNativeWindowsVersion(\n rnwVersion: string,\n): string {\n const validVersion = semver.valid(rnwVersion);\n if (validVersion) {\n const major = semver.major(validVersion);\n const minor = semver.minor(validVersion);\n if (major === 0 && minor >= 59) {\n return `^${major}.${minor}`;\n }\n }\n return 'unknown';\n}\n\nasync function getLatestMatchingVersion(\n pkg: string,\n versionSemVer: string,\n): Promise<string> {\n const npmResponse = await npmFetch.json(pkg, {registry: NPM_REGISTRY_URL});\n\n // Check if versionSemVer is a tag (i.e. 'canary', 'latest', 'preview', etc.)\n if ('dist-tags' in npmResponse) {\n const distTags = npmResponse['dist-tags'] as Record<string, string>;\n if (versionSemVer in distTags) {\n return distTags[versionSemVer];\n }\n }\n\n // Check if versionSemVer is a semver version (i.e. '^0.60.0-0', '0.63.1', etc.)\n if ('versions' in npmResponse) {\n const versions = Object.keys(\n npmResponse.versions as Record<string, unknown>,\n );\n if (versions.length > 0) {\n const candidates = versions\n .filter(v => semver.satisfies(v, versionSemVer))\n .sort(semver.rcompare);\n if (candidates.length > 0) {\n return candidates[0];\n }\n }\n }\n\n throw new CodedError(\n 'NoMatchingPackageVersion',\n `No matching version of ${pkg}@${versionSemVer} found`,\n );\n}\n\nasync function getLatestRNWVersion(): Promise<string> {\n const rnwLatestVersion = await getLatestMatchingRNWVersion('latest');\n if (!rnwLatestVersion) {\n throw new CodedError(\n 'NoLatestReactNativeWindows',\n 'Error: No version of react-native-windows@latest found',\n );\n }\n return rnwLatestVersion;\n}\n\nasync function getLatestMatchingRNWVersion(\n versionSemVer: string,\n): Promise<string | null> {\n try {\n const version = await getLatestMatchingVersion(\n 'react-native-windows',\n versionSemVer,\n );\n return version;\n } catch (err) {\n return null;\n }\n}\n\nfunction installReactNativeWindows(\n version: string | undefined,\n useDevMode: boolean,\n) {\n const cwd = process.cwd();\n const execOptions = argv.verbose ? {stdio: 'inherit' as 'inherit'} : {};\n\n if (useDevMode) {\n const packageCmd = isProjectUsingYarn(cwd) ? 'yarn' : 'npm';\n execSync(`${packageCmd} link react-native-windows`, execOptions);\n version = '*';\n } else if (!version) {\n throw new CodedError(\n 'Unknown',\n 'Unexpected error encountered. If you are able, please file an issue on: https://github.com/microsoft/react-native-windows/issues/new/choose',\n );\n }\n\n console.log(\n `Installing ${chalk.green('react-native-windows')}@${chalk.cyan(\n version,\n )}...`,\n );\n\n const pkgJsonPath = findUp.sync('package.json', {cwd});\n if (!pkgJsonPath) {\n throw new CodedError('NoPackageJson', 'Unable to find package.json');\n }\n\n const pkgJson = require(pkgJsonPath);\n\n // check how react-native is installed\n if ('dependencies' in pkgJson && 'react-native' in pkgJson.dependencies) {\n // regular dependency (probably an app), inject into json and run install\n pkgJson.dependencies['react-native-windows'] = version;\n fs.writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2));\n execSync(isProjectUsingYarn(cwd) ? 'yarn' : 'npm install', execOptions);\n } else if (\n 'devDependencies' in pkgJson &&\n 'react-native' in pkgJson.devDependencies\n ) {\n // only a dev dependency (probably a native module),\n execSync(\n isProjectUsingYarn(cwd)\n ? `yarn add react-native-windows@${version} --dev`\n : `npm install react-native-windows@${version} --save-dev`,\n execOptions,\n );\n } else {\n throw new CodedError(\n 'NoReactNativeDependencies',\n \"Unable to find 'react-native' in package.json's dependencies or devDependencies. This should be run from within an existing react-native app or lib.\",\n );\n }\n\n console.log(\n chalk.green(\n `react-native-windows@${chalk.cyan(\n require(require.resolve('react-native-windows/package.json', {\n paths: [cwd],\n })).version,\n )} successfully installed.`,\n ),\n );\n}\n\n/**\n * Sanitizes the given option for telemetry.\n * @param key The key of the option.\n * @param value The unsanitized value of the option.\n * @returns The sanitized value of the option.\n */\nfunction optionSanitizer(key: string, value: any): any {\n switch (key) {\n case 'namespace':\n return value === undefined ? false : true;\n default:\n return value === undefined ? false : value;\n }\n}\n\n/**\n * Sets up and starts the telemetry gathering for the CLI command.\n */\nasync function startTelemetrySession() {\n if (!argv.telemetry) {\n if (argv.verbose) {\n console.log('Telemetry is disabled');\n }\n return;\n }\n\n await Telemetry.setup();\n\n const sanitizedOptions = yargsOptionsToOptions(argv, optionSanitizer);\n const sanitizedDefaultOptions = yargsOptionsToOptions(\n yargsParser.parse(''),\n optionSanitizer,\n );\n const sanitizedArgs = optionsToArgs(sanitizedOptions, process.argv);\n\n const startInfo: CommandStartInfo = {\n commandName: 'react-native-windows-init',\n args: sanitizedArgs,\n options: sanitizedOptions,\n defaultOptions: sanitizedDefaultOptions,\n };\n\n Telemetry.startCommand(startInfo);\n}\n\n/**\n * Adds the new project's telemetry info by calling and processing `react-native config`.\n */\nasync function addProjectInfoToTelemetry() {\n if (!Telemetry.isEnabled()) {\n return;\n }\n\n try {\n const config = JSON.parse(\n execSync('npx react-native config', {\n stdio: ['ignore', 'pipe', 'ignore'],\n }).toString(),\n );\n const projectInfo = await configToProjectInfo(config);\n if (projectInfo) {\n Telemetry.setProjectInfo(projectInfo);\n }\n\n const projectFile = getProjectFileFromConfig(config);\n if (projectFile) {\n await Telemetry.populateNuGetPackageVersions(projectFile);\n }\n } catch {}\n}\n\n/**\n * Ends the gathering of telemetry for the CLI command.\n * @param error The error (if any) thrown during the command.\n */\nfunction endTelemetrySession(error?: Error) {\n const endInfo: CommandEndInfo = {\n resultCode: 'Success',\n };\n\n if (error) {\n endInfo.resultCode =\n error instanceof CodedError ? (error as CodedError).type : 'Unknown';\n }\n\n Telemetry.endCommand(endInfo);\n}\n\n/**\n * Sets the process exit code and offers some information at the end of a CLI command.\n * @param loggingIsEnabled Is verbose logging enabled.\n * @param error The error caught during the process, if any.\n */\nfunction setExitProcessWithError(\n loggingIsEnabled: boolean,\n error?: Error,\n): void {\n if (error) {\n const errorType =\n error instanceof CodedError ? (error as CodedError).type : 'Unknown';\n\n process.exitCode = CodedErrors[errorType];\n\n if (loggingIsEnabled) {\n console.log(\n `Command failed with error ${chalk.bold(errorType)}: ${error.message}`,\n );\n if (Telemetry.isEnabled()) {\n console.log(\n `Your telemetry sessionId was ${chalk.bold(\n Telemetry.getSessionId(),\n )}`,\n );\n }\n } else {\n console.log(\n `Command failed. Re-run the command with ${chalk.bold(\n '--verbose',\n )} for more information.`,\n );\n }\n }\n}\n\n/**\n * Check if project is using Yarn (has `yarn.lock` in the tree)\n */\nfunction isProjectUsingYarn(cwd: string): boolean {\n return !!findUp.sync('yarn.lock', {cwd});\n}\n\n(async () => {\n if (argv.verbose) {\n console.log(argv);\n }\n\n await startTelemetrySession();\n\n let initWindowsError: Error | undefined;\n try {\n const name = getReactNativeProjectName();\n const ns = argv.namespace || name;\n const useDevMode = !!argv.useDevMode;\n let version = argv.version;\n\n if (argv.useWinUI3 && argv.experimentalNuGetDependency) {\n throw new CodedError(\n 'IncompatibleOptions',\n \"Error: Incompatible options specified. Options '--useWinUI3' and '--experimentalNuGetDependency' are incompatible\",\n {detail: 'useWinUI3 and experimentalNuGetDependency'},\n );\n }\n\n if (!useDevMode) {\n if (!version) {\n const rnVersion = getReactNativeVersion();\n version = getDefaultReactNativeWindowsSemVerForReactNativeVersion(\n rnVersion,\n );\n }\n\n const rnwResolvedVersion = await getLatestMatchingRNWVersion(version);\n\n if (!rnwResolvedVersion) {\n if (argv.version) {\n console.warn(\n `Warning: Querying npm to find react-native-windows@${argv.version} failed. Attempting to continue anyway...`,\n );\n } else {\n const rnwLatestVersion = await getLatestRNWVersion();\n throw new CodedError(\n 'NoAutoMatchingReactNativeWindows',\n `\n No compatible version of ${chalk.green('react-native-windows')} found.\n The latest supported version is ${chalk.green(\n 'react-native-windows',\n )}@${chalk.cyan(rnwLatestVersion)}.\n Please modify your application to use ${chalk.green(\n 'react-native',\n )}@${chalk.cyan(\n getMatchingReactNativeSemVerForReactNativeWindowsVersion(\n rnwLatestVersion,\n ),\n )} or another supported version of ${chalk.green(\n 'react-native',\n )} and try again.\n `,\n {rnwLatestVersion: rnwLatestVersion},\n );\n }\n }\n\n if (!argv.version) {\n console.log(\n `Latest matching version of ${chalk.bold(\n 'react-native-windows',\n )} for ${chalk.green('react-native')}@${chalk.cyan(\n getReactNativeVersion(),\n )} is ${chalk.green('react-native-windows')}@${chalk.cyan(\n rnwResolvedVersion,\n )}`,\n );\n\n if (rnwResolvedVersion && semver.prerelease(rnwResolvedVersion)) {\n const rnwLatestVersion = await getLatestRNWVersion();\n console.warn(\n `\n ${chalk.green('react-native-windows')}@${chalk.cyan(\n rnwResolvedVersion,\n )} is a ${chalk.yellow('pre-release')} version.\n The latest supported version is ${chalk.green(\n 'react-native-windows',\n )}@${chalk.cyan(rnwLatestVersion)}.\n You can either downgrade your version of ${chalk.green(\n 'react-native',\n )} to ${chalk.cyan(\n getMatchingReactNativeSemVerForReactNativeWindowsVersion(\n rnwLatestVersion,\n ),\n )}, or continue with a ${chalk.yellow(\n 'pre-release',\n )} version of ${chalk.bold('react-native-windows')}.\n `,\n );\n\n const confirm: boolean = (\n await prompts({\n type: 'confirm',\n name: 'confirm',\n message: `Do you wish to continue with ${chalk.green(\n 'react-native-windows',\n )}@${chalk.cyan(rnwResolvedVersion)}?`,\n })\n ).confirm;\n\n if (!confirm) {\n throw new CodedError('UserCancel', 'User canceled');\n }\n }\n }\n\n if (rnwResolvedVersion) {\n version = rnwResolvedVersion;\n }\n }\n\n installReactNativeWindows(version, useDevMode);\n\n const generateWindows = requireGenerateWindows();\n\n // Now that new NPM packages have been installed, refresh their versions\n await Telemetry.populateNpmPackageVersions(true);\n\n await generateWindows(process.cwd(), name, ns, {\n language: argv.language as 'cs' | 'cpp',\n overwrite: argv.overwrite,\n verbose: argv.verbose,\n projectType: argv.projectType as 'lib' | 'app',\n experimentalNuGetDependency: argv.experimentalNuGetDependency,\n useWinUI3: argv.useWinUI3,\n useHermes: argv.useHermes,\n useDevMode: useDevMode,\n nuGetTestVersion: argv.nuGetTestVersion,\n nuGetTestFeed: argv.nuGetTestFeed,\n telemetry: argv.telemetry,\n });\n\n // Now that the project has been generated, add project info\n await addProjectInfoToTelemetry();\n } catch (ex) {\n initWindowsError =\n ex instanceof Error ? (ex as Error) : new Error(String(ex));\n Telemetry.trackException(initWindowsError);\n\n console.error(chalk.red(initWindowsError.message));\n console.error(initWindowsError);\n }\n endTelemetrySession(initWindowsError);\n setExitProcessWithError(argv.verbose, initWindowsError);\n})();\n"]}
1
+ {"version":3,"file":"Cli.js","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport yargs from 'yargs';\nimport fs from '@react-native-windows/fs';\nimport semver from 'semver';\nimport {execSync} from 'child_process';\nimport validUrl from 'valid-url';\nimport prompts from 'prompts';\nimport findUp from 'find-up';\nimport chalk from 'chalk';\nimport npmFetch from 'npm-registry-fetch';\n\nimport {\n Telemetry,\n CommandStartInfo,\n CommandEndInfo,\n CodedErrors,\n CodedError,\n yargsOptionsToOptions,\n optionsToArgs,\n configToProjectInfo,\n getProjectFileFromConfig,\n OptionSanitizer,\n YargsOptionsType,\n} from '@react-native-windows/telemetry';\n\n/**\n * Important:\n * Do not use process.exit() in this script as it will prevent telemetry from being sent.\n * See https://github.com/microsoft/ApplicationInsights-node.js/issues/580\n */\n\nimport requireGenerateWindows from './requireGenerateWindows';\n\nconst npmConfReg = execSync('npm config get registry').toString().trim();\nconst NPM_REGISTRY_URL = validUrl.isUri(npmConfReg)\n ? npmConfReg\n : 'http://registry.npmjs.org';\n\n// Causes the type-checker to ensure the options object is a valid yargs options object\nfunction initOptions<T extends Record<string, yargs.Options>>(options: T): T {\n return options;\n}\n\nexport const windowsInitOptions = initOptions({\n version: {\n type: 'string',\n describe: 'The version of react-native-windows to use.',\n },\n namespace: {\n type: 'string',\n describe:\n \"The native project namespace. This should be expressed using dots as separators. i.e. 'Level1.Level2.Level3'. The generator will apply the correct syntax for the target language\",\n },\n verbose: {\n type: 'boolean',\n describe: 'Enables logging.',\n default: false,\n },\n telemetry: {\n type: 'boolean',\n describe:\n 'Controls sending telemetry that allows analysis of usage and failures of the react-native-windows CLI',\n default: true,\n },\n language: {\n type: 'string',\n describe: 'The language the project is written in.',\n choices: ['cs', 'cpp'],\n default: 'cpp',\n },\n overwrite: {\n type: 'boolean',\n describe: 'Overwrite any existing files without prompting',\n default: false,\n },\n projectType: {\n type: 'string',\n describe: 'The type of project to initialize (supported on 0.64+)',\n choices: ['app', 'lib'],\n default: 'app',\n },\n experimentalNuGetDependency: {\n type: 'boolean',\n describe:\n '[Experimental] change to start consuming a NuGet containing a pre-built dll version of Microsoft.ReactNative',\n hidden: true,\n default: false,\n },\n useHermes: {\n type: 'boolean',\n describe:\n '[Experimental] Use Hermes instead of Chakra as the JS engine (supported on 0.64+ for C++ projects)',\n default: false,\n },\n useWinUI3: {\n type: 'boolean',\n describe: '[Experimental] Use WinUI3',\n hidden: true,\n default: false,\n },\n nuGetTestVersion: {\n type: 'string',\n describe:\n '[internalTesting] By default the NuGet version matches the rnw package. This flag allows manually specifying the version for internal testing.',\n hidden: true,\n },\n nuGetTestFeed: {\n type: 'string',\n describe:\n '[internalTesting] Allows a test feed to be added to the generated NuGet configuration',\n hidden: true,\n },\n useDevMode: {\n type: 'boolean',\n describe:\n '[internalTesting] Link rather than Add/Install the react-native-windows package. This option is for the development workflow of the developers working on react-native-windows.',\n hidden: true,\n default: false,\n conflicts: 'version',\n },\n});\n\nconst yargsParser = yargs\n .version(false)\n .options(windowsInitOptions)\n .strict(true);\n\nfunction getReactNativeProjectName(): string {\n console.log('Reading project name from package.json...');\n const cwd = process.cwd();\n const pkgJsonPath = findUp.sync('package.json', {cwd});\n if (!pkgJsonPath) {\n throw new CodedError(\n 'NoPackageJson',\n 'Unable to find package.json. This should be run from within an existing react-native project.',\n );\n }\n type PackageJson = {name: string};\n\n let name = fs.readJsonFileSync<PackageJson>(pkgJsonPath).name;\n if (!name) {\n const appJsonPath = findUp.sync('app.json', {cwd});\n if (appJsonPath) {\n console.log('Reading project name from app.json...');\n name = fs.readJsonFileSync<PackageJson>(pkgJsonPath).name;\n }\n }\n if (!name) {\n console.error('Please specify name in package.json or app.json');\n }\n return name;\n}\n\nfunction getReactNativeVersion(): string {\n console.log('Reading react-native version from node_modules...');\n const rnPkgJsonPath = require.resolve('react-native/package.json', {\n paths: [process.cwd()],\n });\n if (fs.existsSync(rnPkgJsonPath)) {\n return require(rnPkgJsonPath).version;\n }\n\n throw new CodedError(\n 'NoReactNativeFound',\n 'Must be run from a project that already depends on react-native, and has react-native installed.',\n );\n}\n\nfunction getDefaultReactNativeWindowsSemVerForReactNativeVersion(\n rnVersion: string,\n): string {\n const validVersion = semver.valid(rnVersion);\n if (validVersion) {\n const major = semver.major(validVersion);\n const minor = semver.minor(validVersion);\n if (major === 0 && minor >= 59) {\n return `^${major}.${minor}.0-0`;\n }\n }\n\n throw new CodedError(\n 'UnsupportedReactNativeVersion',\n `Error: Unsupported version of react-native: ${chalk.cyan(\n rnVersion,\n )} react-native-windows supports react-native versions ${chalk.cyan(\n '>=0.60',\n )}`,\n );\n}\n\nfunction getMatchingReactNativeSemVerForReactNativeWindowsVersion(\n rnwVersion: string,\n): string {\n const validVersion = semver.valid(rnwVersion);\n if (validVersion) {\n const major = semver.major(validVersion);\n const minor = semver.minor(validVersion);\n if (major === 0 && minor >= 59) {\n return `^${major}.${minor}`;\n }\n }\n return 'unknown';\n}\n\nasync function getLatestMatchingVersion(\n pkg: string,\n versionSemVer: string,\n): Promise<string> {\n const npmResponse = await npmFetch.json(pkg, {registry: NPM_REGISTRY_URL});\n\n // Check if versionSemVer is a tag (i.e. 'canary', 'latest', 'preview', etc.)\n if ('dist-tags' in npmResponse) {\n const distTags = npmResponse['dist-tags'] as Record<string, string>;\n if (versionSemVer in distTags) {\n return distTags[versionSemVer];\n }\n }\n\n // Check if versionSemVer is a semver version (i.e. '^0.60.0-0', '0.63.1', etc.)\n if ('versions' in npmResponse) {\n const versions = Object.keys(\n npmResponse.versions as Record<string, unknown>,\n );\n if (versions.length > 0) {\n const candidates = versions\n .filter((v) => semver.satisfies(v, versionSemVer))\n .sort(semver.rcompare);\n if (candidates.length > 0) {\n return candidates[0];\n }\n }\n }\n\n throw new CodedError(\n 'NoMatchingPackageVersion',\n `No matching version of ${pkg}@${versionSemVer} found`,\n );\n}\n\nasync function getLatestRNWVersion(): Promise<string> {\n const rnwLatestVersion = await getLatestMatchingRNWVersion('latest');\n if (!rnwLatestVersion) {\n throw new CodedError(\n 'NoLatestReactNativeWindows',\n 'Error: No version of react-native-windows@latest found',\n );\n }\n return rnwLatestVersion;\n}\n\nasync function getLatestMatchingRNWVersion(\n versionSemVer: string,\n): Promise<string | null> {\n try {\n const version = await getLatestMatchingVersion(\n 'react-native-windows',\n versionSemVer,\n );\n return version;\n } catch (err) {\n return null;\n }\n}\n\nfunction installReactNativeWindows(\n version: string | undefined,\n verbose: boolean,\n useDevMode: boolean,\n) {\n const cwd = process.cwd();\n const execOptions = verbose ? {stdio: 'inherit' as 'inherit'} : {};\n\n if (useDevMode) {\n const packageCmd = isProjectUsingYarn(cwd) ? 'yarn' : 'npm';\n execSync(`${packageCmd} link react-native-windows`, execOptions);\n version = '*';\n } else if (!version) {\n throw new CodedError(\n 'Unknown',\n 'Unexpected error encountered. If you are able, please file an issue on: https://github.com/microsoft/react-native-windows/issues/new/choose',\n );\n }\n\n console.log(\n `Installing ${chalk.green('react-native-windows')}@${chalk.cyan(\n version,\n )}...`,\n );\n\n const pkgJsonPath = findUp.sync('package.json', {cwd});\n if (!pkgJsonPath) {\n throw new CodedError('NoPackageJson', 'Unable to find package.json');\n }\n\n const pkgJson = require(pkgJsonPath);\n\n // check how react-native is installed\n if ('dependencies' in pkgJson && 'react-native' in pkgJson.dependencies) {\n // regular dependency (probably an app), inject into json and run install\n pkgJson.dependencies['react-native-windows'] = version;\n fs.writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2));\n execSync(isProjectUsingYarn(cwd) ? 'yarn' : 'npm install', execOptions);\n } else if (\n 'devDependencies' in pkgJson &&\n 'react-native' in pkgJson.devDependencies\n ) {\n // only a dev dependency (probably a native module),\n execSync(\n isProjectUsingYarn(cwd)\n ? `yarn add react-native-windows@${version} --dev`\n : `npm install react-native-windows@${version} --save-dev`,\n execOptions,\n );\n } else {\n throw new CodedError(\n 'NoReactNativeDependencies',\n \"Unable to find 'react-native' in package.json's dependencies or devDependencies. This should be run from within an existing react-native app or lib.\",\n );\n }\n\n console.log(\n chalk.green(\n `react-native-windows@${chalk.cyan(\n require(require.resolve('react-native-windows/package.json', {\n paths: [cwd],\n })).version,\n )} successfully installed.`,\n ),\n );\n}\n\n/**\n * Sanitizes the given option for telemetry.\n * @param key The key of the option.\n * @param value The unsanitized value of the option.\n * @returns The sanitized value of the option.\n */\nfunction optionSanitizer(key: keyof WindowsInitOptions, value: any): any {\n // Do not add a default case here.\n // Strings risking PII should just return true if present, false otherwise.\n // All others should return the value (or false if undefined).\n switch (key) {\n case 'namespace':\n case 'nuGetTestFeed':\n case 'nuGetTestVersion':\n return value ? true : false;\n case 'verbose':\n case 'version':\n case 'telemetry':\n case 'language':\n case 'overwrite':\n case 'projectType':\n case 'experimentalNuGetDependency':\n case 'useHermes':\n case 'useWinUI3':\n case 'useDevMode':\n return value === undefined ? false : value;\n }\n}\n\n/**\n * Sets up and starts the telemetry gathering for the CLI command.\n * @param args The raw CLI args.\n * @param options The CLI args parsed by yargs.\n */\nasync function startTelemetrySession(\n args: string[],\n options: YargsOptionsType,\n) {\n if (!options.telemetry) {\n if (options.verbose) {\n console.log('Telemetry is disabled');\n }\n return;\n }\n\n // Setup telemetry, but don't get NPM package version info right away as\n // we're going to change things and this may interfere with the resolver\n await Telemetry.setup({populateNpmPackageVersions: false});\n\n const sanitizedOptions = yargsOptionsToOptions(\n options,\n optionSanitizer as OptionSanitizer,\n );\n const sanitizedDefaultOptions = yargsOptionsToOptions(\n yargsParser.parse(''),\n optionSanitizer as OptionSanitizer,\n );\n const sanitizedArgs = optionsToArgs(sanitizedOptions, args);\n\n const startInfo: CommandStartInfo = {\n commandName: 'react-native-windows-init',\n args: sanitizedArgs,\n options: sanitizedOptions,\n defaultOptions: sanitizedDefaultOptions,\n };\n\n Telemetry.startCommand(startInfo);\n}\n\n/**\n * Adds the new project's telemetry info by calling and processing `react-native config`.\n */\nasync function addProjectInfoToTelemetry() {\n if (!Telemetry.isEnabled()) {\n return;\n }\n\n try {\n const config = JSON.parse(\n execSync('npx react-native config', {\n stdio: ['ignore', 'pipe', 'ignore'],\n }).toString(),\n );\n const projectInfo = await configToProjectInfo(config);\n if (projectInfo) {\n Telemetry.setProjectInfo(projectInfo);\n }\n\n const projectFile = getProjectFileFromConfig(config);\n if (projectFile) {\n await Telemetry.populateNuGetPackageVersions(projectFile);\n }\n } catch {}\n}\n\n/**\n * Ends the gathering of telemetry for the CLI command.\n * @param error The error (if any) thrown during the command.\n */\nfunction endTelemetrySession(error?: Error) {\n const endInfo: CommandEndInfo = {\n resultCode: 'Success',\n };\n\n if (error) {\n endInfo.resultCode =\n error instanceof CodedError ? (error as CodedError).type : 'Unknown';\n }\n\n Telemetry.endCommand(endInfo);\n}\n\n/**\n * Sets the process exit code and offers some information at the end of a CLI command.\n * @param loggingIsEnabled Is verbose logging enabled.\n * @param error The error caught during the process, if any.\n */\nfunction setExitProcessWithError(\n loggingIsEnabled: boolean,\n error?: Error,\n): void {\n if (error) {\n const errorType =\n error instanceof CodedError ? (error as CodedError).type : 'Unknown';\n\n process.exitCode = CodedErrors[errorType];\n\n if (loggingIsEnabled) {\n console.log(\n `Command failed with error ${chalk.bold(errorType)}: ${error.message}`,\n );\n if (Telemetry.isEnabled()) {\n console.log(\n `Your telemetry sessionId was ${chalk.bold(\n Telemetry.getSessionId(),\n )}`,\n );\n }\n } else {\n console.log(\n `Command failed. Re-run the command with ${chalk.bold(\n '--verbose',\n )} for more information.`,\n );\n }\n }\n}\n\n/**\n * Check if project is using Yarn (has `yarn.lock` in the tree)\n */\nfunction isProjectUsingYarn(cwd: string): boolean {\n return !!findUp.sync('yarn.lock', {cwd});\n}\n\nexport async function reactNativeWindowsInit(args?: string[]) {\n args = args ?? process.argv;\n const options = yargsParser.parse(args) as WindowsInitOptions;\n\n if (options.verbose) {\n console.log(options);\n }\n\n await startTelemetrySession(args, options);\n\n let initWindowsError: Error | undefined;\n try {\n const name = getReactNativeProjectName();\n const ns = options.namespace || name;\n const useDevMode = options.useDevMode;\n let version = options.version;\n\n if (options.useWinUI3 && options.experimentalNuGetDependency) {\n throw new CodedError(\n 'IncompatibleOptions',\n \"Error: Incompatible options specified. Options '--useWinUI3' and '--experimentalNuGetDependency' are incompatible\",\n {detail: 'useWinUI3 and experimentalNuGetDependency'},\n );\n }\n\n if (!useDevMode) {\n if (!version) {\n const rnVersion = getReactNativeVersion();\n version =\n getDefaultReactNativeWindowsSemVerForReactNativeVersion(rnVersion);\n }\n\n const rnwResolvedVersion = await getLatestMatchingRNWVersion(version);\n\n if (!rnwResolvedVersion) {\n if (options.version) {\n console.warn(\n `Warning: Querying npm to find react-native-windows@${options.version} failed. Attempting to continue anyway...`,\n );\n } else {\n const rnwLatestVersion = await getLatestRNWVersion();\n throw new CodedError(\n 'NoAutoMatchingReactNativeWindows',\n `\n No compatible version of ${chalk.green('react-native-windows')} found.\n The latest supported version is ${chalk.green(\n 'react-native-windows',\n )}@${chalk.cyan(rnwLatestVersion)}.\n Please modify your application to use ${chalk.green(\n 'react-native',\n )}@${chalk.cyan(\n getMatchingReactNativeSemVerForReactNativeWindowsVersion(\n rnwLatestVersion,\n ),\n )} or another supported version of ${chalk.green(\n 'react-native',\n )} and try again.\n `,\n {rnwLatestVersion: rnwLatestVersion},\n );\n }\n }\n\n if (!options.version) {\n console.log(\n `Latest matching version of ${chalk.bold(\n 'react-native-windows',\n )} for ${chalk.green('react-native')}@${chalk.cyan(\n getReactNativeVersion(),\n )} is ${chalk.green('react-native-windows')}@${chalk.cyan(\n rnwResolvedVersion,\n )}`,\n );\n\n if (rnwResolvedVersion && semver.prerelease(rnwResolvedVersion)) {\n const rnwLatestVersion = await getLatestRNWVersion();\n console.warn(\n `\n ${chalk.green('react-native-windows')}@${chalk.cyan(\n rnwResolvedVersion,\n )} is a ${chalk.yellow('pre-release')} version.\n The latest supported version is ${chalk.green(\n 'react-native-windows',\n )}@${chalk.cyan(rnwLatestVersion)}.\n You can either downgrade your version of ${chalk.green(\n 'react-native',\n )} to ${chalk.cyan(\n getMatchingReactNativeSemVerForReactNativeWindowsVersion(\n rnwLatestVersion,\n ),\n )}, or continue with a ${chalk.yellow(\n 'pre-release',\n )} version of ${chalk.bold('react-native-windows')}.\n `,\n );\n\n const confirm: boolean = (\n await prompts({\n type: 'confirm',\n name: 'confirm',\n message: `Do you wish to continue with ${chalk.green(\n 'react-native-windows',\n )}@${chalk.cyan(rnwResolvedVersion)}?`,\n })\n ).confirm;\n\n if (!confirm) {\n throw new CodedError('UserCancel', 'User canceled');\n }\n }\n }\n\n if (rnwResolvedVersion) {\n version = rnwResolvedVersion;\n }\n }\n\n installReactNativeWindows(version, options.verbose, useDevMode);\n\n const generateWindows = requireGenerateWindows();\n\n // Now that new NPM packages have been installed, get their versions\n await Telemetry.populateNpmPackageVersions();\n\n await generateWindows(process.cwd(), name, ns, {\n language: options.language as 'cs' | 'cpp',\n overwrite: options.overwrite,\n verbose: options.verbose,\n projectType: options.projectType as 'lib' | 'app',\n experimentalNuGetDependency: options.experimentalNuGetDependency,\n useWinUI3: options.useWinUI3,\n useHermes: options.useHermes,\n useDevMode: useDevMode,\n nuGetTestVersion: options.nuGetTestVersion,\n nuGetTestFeed: options.nuGetTestFeed,\n telemetry: options.telemetry,\n });\n\n // Now that the project has been generated, add project info\n await addProjectInfoToTelemetry();\n } catch (ex) {\n // Since we may have failed before generating a project, make\n // sure we get those NPM package versions\n await Telemetry.populateNpmPackageVersions();\n\n initWindowsError =\n ex instanceof Error ? (ex as Error) : new Error(String(ex));\n Telemetry.trackException(initWindowsError);\n\n console.error(chalk.red(initWindowsError.message));\n console.error(initWindowsError);\n }\n endTelemetrySession(initWindowsError);\n setExitProcessWithError(options.verbose, initWindowsError);\n}\n\nexport type WindowsInitOptions = yargs.InferredOptionTypes<\n typeof windowsInitOptions\n>;\n"]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation.
3
+ * Licensed under the MIT License.
4
+ *
5
+ * @format
6
+ */
7
+ export {};
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Microsoft Corporation.
4
+ * Licensed under the MIT License.
5
+ *
6
+ * @format
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const Cli_1 = require("../Cli");
10
+ function validateOptionName(name, optionName) {
11
+ // Do not add a default case here. Every item must explicitly return true
12
+ switch (optionName) {
13
+ case 'version':
14
+ case 'namespace':
15
+ case 'verbose':
16
+ case 'telemetry':
17
+ case 'language':
18
+ case 'overwrite':
19
+ case 'projectType':
20
+ case 'experimentalNuGetDependency':
21
+ case 'useHermes':
22
+ case 'useWinUI3':
23
+ case 'nuGetTestVersion':
24
+ case 'nuGetTestFeed':
25
+ case 'useDevMode':
26
+ return true;
27
+ }
28
+ throw new Error(`Unable to find ${optionName} to match '${name}' in WindowsInitOptions.`);
29
+ }
30
+ test('windowsInitOptions - validate options', () => {
31
+ const options = Cli_1.windowsInitOptions;
32
+ for (const optionName of Object.keys(options)) {
33
+ const option = options[optionName];
34
+ // Validate type
35
+ expect(option.type).toBeDefined();
36
+ // Validate defaults
37
+ if (option.type === 'string') {
38
+ if (option.choices !== undefined) {
39
+ // If there are choices (enum value) make sure
40
+ // the default is present and of that type
41
+ expect(Array.isArray(option.choices)).toBe(true);
42
+ expect(option).toHaveProperty('default');
43
+ expect(option.default).toBeDefined();
44
+ expect(option.choices.includes(option.default)).toBe(true);
45
+ }
46
+ else {
47
+ // Regular strings should not have defined default
48
+ expect(option.default).not.toBeDefined();
49
+ }
50
+ }
51
+ else {
52
+ expect(option).toHaveProperty('default');
53
+ expect(option.default).toBeDefined();
54
+ }
55
+ // Validate description
56
+ expect(option.describe).toBeDefined();
57
+ expect(option.describe).not.toBeNull();
58
+ expect(option.describe).toBe(option.describe.trim());
59
+ // Validate all command options are present in WindowsInitOptions
60
+ expect(validateOptionName(optionName, optionName)).toBe(true);
61
+ }
62
+ });
63
+ //# sourceMappingURL=cli.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../src/e2etest/cli.test.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAEH,gCAA8D;AAE9D,SAAS,kBAAkB,CACzB,IAAY,EACZ,UAAoC;IAEpC,yEAAyE;IACzE,QAAQ,UAAU,EAAE;QAClB,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,aAAa,CAAC;QACnB,KAAK,6BAA6B,CAAC;QACnC,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,kBAAkB,CAAC;QACxB,KAAK,eAAe,CAAC;QACrB,KAAK,YAAY;YACf,OAAO,IAAI,CAAC;KACf;IACD,MAAM,IAAI,KAAK,CACb,kBAAkB,UAAU,cAAc,IAAI,0BAA0B,CACzE,CAAC;AACJ,CAAC;AAED,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACjD,MAAM,OAAO,GAAG,wBAAyC,CAAC;IAC1D,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAEnC,gBAAgB;QAChB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAElC,oBAAoB;QACpB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC5B,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;gBAChC,8CAA8C;gBAC9C,0CAA0C;gBAC1C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjD,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gBACzC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;gBACrC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC5D;iBAAM;gBACL,kDAAkD;gBAClD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;aAC1C;SACF;aAAM;YACL,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;SACtC;QAED,uBAAuB;QACvB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,QAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QAEvD,iEAAiE;QACjE,MAAM,CACJ,kBAAkB,CAAC,UAAU,EAAE,UAAsC,CAAC,CACvE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACd;AACH,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport {windowsInitOptions, WindowsInitOptions} from '../Cli';\n\nfunction validateOptionName(\n name: string,\n optionName: keyof WindowsInitOptions,\n): boolean {\n // Do not add a default case here. Every item must explicitly return true\n switch (optionName) {\n case 'version':\n case 'namespace':\n case 'verbose':\n case 'telemetry':\n case 'language':\n case 'overwrite':\n case 'projectType':\n case 'experimentalNuGetDependency':\n case 'useHermes':\n case 'useWinUI3':\n case 'nuGetTestVersion':\n case 'nuGetTestFeed':\n case 'useDevMode':\n return true;\n }\n throw new Error(\n `Unable to find ${optionName} to match '${name}' in WindowsInitOptions.`,\n );\n}\n\ntest('windowsInitOptions - validate options', () => {\n const options = windowsInitOptions as Record<string, any>;\n for (const optionName of Object.keys(options)) {\n const option = options[optionName];\n\n // Validate type\n expect(option.type).toBeDefined();\n\n // Validate defaults\n if (option.type === 'string') {\n if (option.choices !== undefined) {\n // If there are choices (enum value) make sure\n // the default is present and of that type\n expect(Array.isArray(option.choices)).toBe(true);\n expect(option).toHaveProperty('default');\n expect(option.default).toBeDefined();\n expect(option.choices.includes(option.default)).toBe(true);\n } else {\n // Regular strings should not have defined default\n expect(option.default).not.toBeDefined();\n }\n } else {\n expect(option).toHaveProperty('default');\n expect(option.default).toBeDefined();\n }\n\n // Validate description\n expect(option.describe).toBeDefined();\n expect(option.describe).not.toBeNull();\n expect(option.describe!).toBe(option.describe!.trim());\n\n // Validate all command options are present in WindowsInitOptions\n expect(\n validateOptionName(optionName, optionName as keyof WindowsInitOptions),\n ).toBe(true);\n }\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-windows-init",
3
- "version": "1.1.73",
3
+ "version": "1.1.77",
4
4
  "description": "CLI to add react-native-windows to an existing react-native project",
5
5
  "main": "index.js",
6
6
  "repository": "https://github.com/microsoft/react-native-windows",
@@ -18,8 +18,8 @@
18
18
  "react-native-windows-init": "./bin.js"
19
19
  },
20
20
  "dependencies": {
21
- "@react-native-windows/fs": "^1.0.0",
22
- "@react-native-windows/telemetry": "^0.0.0-canary.29",
21
+ "@react-native-windows/fs": "^1.0.1",
22
+ "@react-native-windows/telemetry": "^0.0.0-canary.31",
23
23
  "chalk": "^4.1.0",
24
24
  "find-up": "^4.1.0",
25
25
  "mustache": "^4.0.1",
@@ -31,10 +31,10 @@
31
31
  "yargs": "^16.2.0"
32
32
  },
33
33
  "devDependencies": {
34
- "@react-native-windows/cli": "0.0.0-canary.104",
35
- "@rnw-scripts/eslint-config": "1.1.9",
36
- "@rnw-scripts/jest-unittest-config": "1.2.4",
37
- "@rnw-scripts/just-task": "2.2.1",
34
+ "@react-native-windows/cli": "0.0.0-canary.108",
35
+ "@rnw-scripts/eslint-config": "1.1.10",
36
+ "@rnw-scripts/jest-unittest-config": "1.2.5",
37
+ "@rnw-scripts/just-task": "2.2.2",
38
38
  "@rnw-scripts/ts-config": "2.0.1",
39
39
  "@types/chalk": "^2.2.0",
40
40
  "@types/jest": "^26.0.20",
@@ -45,10 +45,10 @@
45
45
  "@types/valid-url": "^1.0.3",
46
46
  "@types/yargs": "16.0.0",
47
47
  "babel-jest": "^26.3.0",
48
- "eslint": "7.12.0",
48
+ "eslint": "^7.32.0",
49
49
  "jest": "^26.6.3",
50
50
  "just-scripts": "^1.3.3",
51
- "prettier": "1.19.1",
51
+ "prettier": "^2.4.1",
52
52
  "typescript": "^4.4.4"
53
53
  },
54
54
  "files": [