react-native-platform-override 1.5.0 → 1.6.2
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 +0 -0
- package/lib-commonjs/Api.d.ts +1 -0
- package/lib-commonjs/Api.js +14 -13
- package/lib-commonjs/Api.js.map +1 -1
- package/lib-commonjs/BatchingQueue.js.map +1 -1
- package/lib-commonjs/Cli.js +30 -30
- package/lib-commonjs/Cli.js.map +1 -1
- package/lib-commonjs/CrossProcessLock.js +5 -5
- package/lib-commonjs/CrossProcessLock.js.map +1 -1
- package/lib-commonjs/FileRepository.js +3 -3
- package/lib-commonjs/FileRepository.js.map +1 -1
- package/lib-commonjs/FileSearch.js +6 -23
- package/lib-commonjs/FileSearch.js.map +1 -1
- package/lib-commonjs/FileSystemRepository.js +7 -7
- package/lib-commonjs/FileSystemRepository.js.map +1 -1
- package/lib-commonjs/GitReactFileRepository.d.ts +0 -2
- package/lib-commonjs/GitReactFileRepository.js +8 -42
- package/lib-commonjs/GitReactFileRepository.js.map +1 -1
- package/lib-commonjs/Hash.js +4 -7
- package/lib-commonjs/Hash.js.map +1 -1
- package/lib-commonjs/Manifest.js +10 -10
- package/lib-commonjs/Manifest.js.map +1 -1
- package/lib-commonjs/Override.js +13 -13
- package/lib-commonjs/Override.js.map +1 -1
- package/lib-commonjs/OverrideFactory.js +1 -1
- package/lib-commonjs/OverrideFactory.js.map +1 -1
- package/lib-commonjs/OverridePrompt.js +6 -6
- package/lib-commonjs/OverridePrompt.js.map +1 -1
- package/lib-commonjs/PackageUtils.js +3 -4
- package/lib-commonjs/PackageUtils.js.map +1 -1
- package/lib-commonjs/Serialized.js +5 -5
- package/lib-commonjs/Serialized.js.map +1 -1
- package/lib-commonjs/UpgradeStrategy.js +7 -7
- package/lib-commonjs/UpgradeStrategy.js.map +1 -1
- package/lib-commonjs/ValidationStrategy.js +5 -5
- package/lib-commonjs/ValidationStrategy.js.map +1 -1
- package/lib-commonjs/refFromVersion.d.ts +10 -0
- package/lib-commonjs/refFromVersion.js +92 -0
- package/lib-commonjs/refFromVersion.js.map +1 -0
- package/lib-commonjs/scripts/generateManifest.js +9 -9
- package/lib-commonjs/scripts/generateManifest.js.map +1 -1
- package/lib-commonjs/scripts/hashFile.js +3 -3
- package/lib-commonjs/scripts/hashFile.js.map +1 -1
- package/package.json +10 -9
- package/CHANGELOG.json +0 -895
- package/CHANGELOG.md +0 -371
package/bin.js
CHANGED
|
File without changes
|
package/lib-commonjs/Api.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { UpgradeResult } from './UpgradeStrategy';
|
|
|
10
10
|
import { ValidationError } from './ValidationStrategy';
|
|
11
11
|
export * from './OverrideFactory';
|
|
12
12
|
export * from './Override';
|
|
13
|
+
export * from './refFromVersion';
|
|
13
14
|
export { UpgradeResult, ValidationError };
|
|
14
15
|
/**
|
|
15
16
|
* Check that the given manifest correctly describe overrides and that all
|
package/lib-commonjs/Api.js
CHANGED
|
@@ -20,12 +20,12 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
20
20
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
21
21
|
if (mod && mod.__esModule) return mod;
|
|
22
22
|
var result = {};
|
|
23
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
24
24
|
__setModuleDefault(result, mod);
|
|
25
25
|
return result;
|
|
26
26
|
};
|
|
27
27
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
28
|
-
for (var p in m) if (p !== "default" && !
|
|
28
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
29
29
|
};
|
|
30
30
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
31
31
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -36,7 +36,7 @@ exports.upgradeOverrides = exports.diffOverride = exports.addOverride = exports.
|
|
|
36
36
|
/* eslint-disable @typescript-eslint/no-misused-promises */
|
|
37
37
|
const Serialized = __importStar(require("./Serialized"));
|
|
38
38
|
const lodash_1 = __importDefault(require("lodash"));
|
|
39
|
-
const fs_1 = __importDefault(require("fs"));
|
|
39
|
+
const fs_1 = __importDefault(require("@react-native-windows/fs"));
|
|
40
40
|
const path_1 = __importDefault(require("path"));
|
|
41
41
|
const OverrideFactory_1 = require("./OverrideFactory");
|
|
42
42
|
const FileRepository_1 = require("./FileRepository");
|
|
@@ -49,6 +49,7 @@ const PackageUtils_1 = require("./PackageUtils");
|
|
|
49
49
|
// reach into our guts to import them.
|
|
50
50
|
__exportStar(require("./OverrideFactory"), exports);
|
|
51
51
|
__exportStar(require("./Override"), exports);
|
|
52
|
+
__exportStar(require("./refFromVersion"), exports);
|
|
52
53
|
const MAX_CONCURRENT_TASKS = 30;
|
|
53
54
|
/**
|
|
54
55
|
* Check that the given manifest correctly describe overrides and that all
|
|
@@ -116,13 +117,13 @@ async function upgradeOverrides(manifestPath, opts) {
|
|
|
116
117
|
const ctx = await createManifestContext(manifestPath, opts);
|
|
117
118
|
const validationErrors = await ctx.manifest.validate(ctx.overrideRepo, ctx.reactRepo);
|
|
118
119
|
const outOfDateOverrides = validationErrors
|
|
119
|
-
.filter(err => err.type === 'outOfDate')
|
|
120
|
-
.map(err => ctx.manifest.findOverride(err.overrideName));
|
|
120
|
+
.filter((err) => err.type === 'outOfDate')
|
|
121
|
+
.map((err) => ctx.manifest.findOverride(err.overrideName));
|
|
121
122
|
// Perform upgrades concurrently so we can take advantage of
|
|
122
123
|
// GitReactFileRepository optimizations when multiple requests are queued at
|
|
123
124
|
// once.
|
|
124
125
|
let i = 0;
|
|
125
|
-
const upgradeResults = await async_1.mapLimit(outOfDateOverrides, MAX_CONCURRENT_TASKS, async (override) => {
|
|
126
|
+
const upgradeResults = await (0, async_1.mapLimit)(outOfDateOverrides, MAX_CONCURRENT_TASKS, async (override) => {
|
|
126
127
|
const upgradeResult = await override
|
|
127
128
|
.upgradeStrategy()
|
|
128
129
|
.upgrade(ctx.gitReactRepo, ctx.overrideRepo, ctx.reactNativeVersion, opts.allowConflicts);
|
|
@@ -135,12 +136,12 @@ async function upgradeOverrides(manifestPath, opts) {
|
|
|
135
136
|
// to current. This helps to minimize the numbers of versions we have to
|
|
136
137
|
// check out for future upgrades.
|
|
137
138
|
const upToDateOverrides = [
|
|
138
|
-
...lodash_1.default.difference(ctx.manifest.listOverrides(), validationErrors.map(err => ctx.manifest.findOverride(err.overrideName))).map(ovr => ovr.name()),
|
|
139
|
+
...lodash_1.default.difference(ctx.manifest.listOverrides(), validationErrors.map((err) => ctx.manifest.findOverride(err.overrideName))).map((ovr) => ovr.name()),
|
|
139
140
|
...upgradeResults
|
|
140
|
-
.filter(res => res.filesWritten)
|
|
141
|
-
.map(res => res.overrideName),
|
|
141
|
+
.filter((res) => res.filesWritten)
|
|
142
|
+
.map((res) => res.overrideName),
|
|
142
143
|
];
|
|
143
|
-
await async_1.eachLimit(upToDateOverrides, MAX_CONCURRENT_TASKS, async (name) => {
|
|
144
|
+
await (0, async_1.eachLimit)(upToDateOverrides, MAX_CONCURRENT_TASKS, async (name) => {
|
|
144
145
|
await ctx.manifest.markUpToDate(name, ctx.overrideFactory);
|
|
145
146
|
});
|
|
146
147
|
ctx.manifest.setBaseVersion(ctx.reactNativeVersion);
|
|
@@ -153,7 +154,7 @@ exports.upgradeOverrides = upgradeOverrides;
|
|
|
153
154
|
*/
|
|
154
155
|
async function checkFileExists(friendlyName, filePath) {
|
|
155
156
|
try {
|
|
156
|
-
await fs_1.default.
|
|
157
|
+
await fs_1.default.access(filePath);
|
|
157
158
|
}
|
|
158
159
|
catch (ex) {
|
|
159
160
|
throw new Error(`Could not find ${friendlyName} at path '${filePath}'`);
|
|
@@ -164,11 +165,11 @@ async function checkFileExists(friendlyName, filePath) {
|
|
|
164
165
|
*/
|
|
165
166
|
async function createManifestContext(manifestPath, opts) {
|
|
166
167
|
await checkFileExists('manifest', manifestPath);
|
|
167
|
-
const reactNativeVersion = (opts === null || opts === void 0 ? void 0 : opts.reactNativeVersion) || (await PackageUtils_1.getInstalledRNVersion());
|
|
168
|
+
const reactNativeVersion = (opts === null || opts === void 0 ? void 0 : opts.reactNativeVersion) || (await (0, PackageUtils_1.getInstalledRNVersion)());
|
|
168
169
|
const overrideDir = path_1.default.dirname(manifestPath);
|
|
169
170
|
const overrideRepo = new FileSystemRepository_1.default(overrideDir);
|
|
170
171
|
const gitReactRepo = await GitReactFileRepository_1.default.createAndInit();
|
|
171
|
-
const reactRepo = FileRepository_1.bindVersion(gitReactRepo, reactNativeVersion);
|
|
172
|
+
const reactRepo = (0, FileRepository_1.bindVersion)(gitReactRepo, reactNativeVersion);
|
|
172
173
|
const overrideFactory = new OverrideFactory_1.OverrideFactoryImpl(reactRepo, overrideRepo);
|
|
173
174
|
const manifest = Manifest_1.default.fromSerialized(await Serialized.readManifestFromFile(manifestPath));
|
|
174
175
|
return {
|
package/lib-commonjs/Api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Api.js","sourceRoot":"","sources":["../src/Api.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\n// Typings for \"async\" confuse this rule\n/* eslint-disable @typescript-eslint/no-misused-promises */\n\nimport * as Serialized from './Serialized';\nimport _ from 'lodash';\nimport fs from 'fs';\nimport path from 'path';\n\nimport OverrideFactory, {OverrideFactoryImpl} from './OverrideFactory';\nimport {\n ReactFileRepository,\n WritableFileRepository,\n bindVersion,\n} from './FileRepository';\nimport {eachLimit, mapLimit} from 'async';\nimport FileSystemRepository from './FileSystemRepository';\nimport GitReactFileRepository from './GitReactFileRepository';\nimport Manifest from './Manifest';\nimport Override from './Override';\nimport {UpgradeResult} from './UpgradeStrategy';\nimport {ValidationError} from './ValidationStrategy';\nimport {getInstalledRNVersion} from './PackageUtils';\n\n// Re-export types used in the public API so external packages don't have to\n// reach into our guts to import them.\nexport * from './OverrideFactory';\nexport * from './Override';\nexport {UpgradeResult, ValidationError};\n\nconst MAX_CONCURRENT_TASKS = 30;\n\n/**\n * Check that the given manifest correctly describe overrides and that all\n * overrides are up to date\n */\nexport async function validateManifest(\n manifestPath: string,\n opts?: {\n reactNativeVersion?: string;\n },\n): Promise<ValidationError[]> {\n const {manifest, overrideRepo, reactRepo} = await createManifestContext(\n manifestPath,\n opts,\n );\n return await manifest.validate(overrideRepo, reactRepo);\n}\n\n/**\n * Return whether the override exists in the manifest\n */\nexport async function hasOverride(\n overrideName: string,\n manifestPath: string,\n): Promise<boolean> {\n const {manifest} = await createManifestContext(manifestPath);\n return manifest.hasOverride(overrideName);\n}\n\n/**\n * Removes an override from the manifest if it exists.\n * @returns whether the override was removed\n */\nexport async function removeOverride(\n overrideName: string,\n manifestPath: string,\n): Promise<boolean> {\n const {manifest} = await createManifestContext(manifestPath);\n const removed = manifest.removeOverride(overrideName);\n if (removed) {\n await Serialized.writeManifestToFile(manifest.serialize(), manifestPath);\n }\n\n return removed;\n}\n\n/**\n * Returns a factory to create overrides which may be added to the manifest\n */\nexport async function getOverrideFactory(\n manifestPath: string,\n opts?: {\n reactNativeVersion?: string;\n },\n): Promise<OverrideFactory> {\n return (await createManifestContext(manifestPath, opts)).overrideFactory;\n}\n\n/**\n * Adds an override to the manifest\n */\nexport async function addOverride(\n override: Override,\n manifestPath: string,\n): Promise<void> {\n const {manifest} = await createManifestContext(manifestPath);\n manifest.addOverride(override);\n await Serialized.writeManifestToFile(manifest.serialize(), manifestPath);\n}\n\n/**\n * Ouputs a patch-style diff of an override compared to its original source\n */\nexport async function diffOverride(\n overrideName: string,\n manifestPath: string,\n): Promise<string> {\n const ctx = await createManifestContext(manifestPath);\n\n const override = ctx.manifest.findOverride(overrideName);\n if (!override) {\n throw new Error(`Could not find override with name \"${overrideName}\"`);\n }\n\n return override.diffStrategy().diff(ctx.gitReactRepo, ctx.overrideRepo);\n}\n\n/**\n * Receives notifications on progress during overide upgrades\n */\nexport type UpgradeProgressListener = (\n currentOverride: number,\n totalOverrides: number,\n) => void;\n\n/**\n * Attempts to automatically merge changes from the current version into\n * out-of-date overrides.\n */\nexport async function upgradeOverrides(\n manifestPath: string,\n opts: {\n allowConflicts: boolean;\n reactNativeVersion?: string;\n progressListener?: UpgradeProgressListener;\n },\n): Promise<UpgradeResult[]> {\n const ctx = await createManifestContext(manifestPath, opts);\n\n const validationErrors = await ctx.manifest.validate(\n ctx.overrideRepo,\n ctx.reactRepo,\n );\n\n const outOfDateOverrides = validationErrors\n .filter(err => err.type === 'outOfDate')\n .map(err => ctx.manifest.findOverride(err.overrideName)!);\n\n // Perform upgrades concurrently so we can take advantage of\n // GitReactFileRepository optimizations when multiple requests are queued at\n // once.\n let i = 0;\n const upgradeResults = await mapLimit<Override, UpgradeResult>(\n outOfDateOverrides,\n MAX_CONCURRENT_TASKS,\n async override => {\n const upgradeResult = await override\n .upgradeStrategy()\n .upgrade(\n ctx.gitReactRepo,\n ctx.overrideRepo,\n ctx.reactNativeVersion,\n opts.allowConflicts,\n );\n\n if (opts.progressListener) {\n opts.progressListener(++i, outOfDateOverrides.length);\n }\n\n return upgradeResult;\n },\n );\n\n // Regenerate overrides that are already up to date to update the baseVersion\n // to current. This helps to minimize the numbers of versions we have to\n // check out for future upgrades.\n const upToDateOverrides = [\n ..._.difference(\n ctx.manifest.listOverrides(),\n validationErrors.map(err => ctx.manifest.findOverride(err.overrideName)!),\n ).map(ovr => ovr.name()),\n\n ...upgradeResults\n .filter(res => res.filesWritten)\n .map(res => res.overrideName),\n ];\n\n await eachLimit(upToDateOverrides, MAX_CONCURRENT_TASKS, async name => {\n await ctx.manifest.markUpToDate(name, ctx.overrideFactory);\n });\n\n ctx.manifest.setBaseVersion(ctx.reactNativeVersion);\n await Serialized.writeManifestToFile(ctx.manifest.serialize(), manifestPath);\n\n return upgradeResults.sort((a, b) =>\n a.overrideName.localeCompare(b.overrideName, 'en'),\n );\n}\n\n/**\n * Throw if a file doesn't exist, printing an error message on the way\n */\nasync function checkFileExists(friendlyName: string, filePath: string) {\n try {\n await fs.promises.access(filePath);\n } catch (ex) {\n throw new Error(`Could not find ${friendlyName} at path '${filePath}'`);\n }\n}\n\n/**\n * Context describing state centered around a single manifest\n */\ninterface ManifestContext {\n overrideRepo: WritableFileRepository;\n reactRepo: ReactFileRepository;\n gitReactRepo: GitReactFileRepository;\n overrideFactory: OverrideFactory;\n manifest: Manifest;\n reactNativeVersion: string;\n}\n\n/**\n * Sets up state for a manifest describing overrides at a specified RN version\n */\nasync function createManifestContext(\n manifestPath: string,\n opts?: {\n reactNativeVersion?: string;\n },\n): Promise<ManifestContext> {\n await checkFileExists('manifest', manifestPath);\n const reactNativeVersion =\n opts?.reactNativeVersion || (await getInstalledRNVersion());\n\n const overrideDir = path.dirname(manifestPath);\n const overrideRepo = new FileSystemRepository(overrideDir);\n\n const gitReactRepo = await GitReactFileRepository.createAndInit();\n const reactRepo = bindVersion(gitReactRepo, reactNativeVersion);\n\n const overrideFactory = new OverrideFactoryImpl(reactRepo, overrideRepo);\n const manifest = Manifest.fromSerialized(\n await Serialized.readManifestFromFile(manifestPath),\n );\n\n return {\n overrideRepo,\n reactRepo,\n gitReactRepo,\n overrideFactory,\n manifest,\n reactNativeVersion,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Api.js","sourceRoot":"","sources":["../src/Api.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\n// Typings for \"async\" confuse this rule\n/* eslint-disable @typescript-eslint/no-misused-promises */\n\nimport * as Serialized from './Serialized';\nimport _ from 'lodash';\nimport fs from '@react-native-windows/fs';\nimport path from 'path';\n\nimport OverrideFactory, {OverrideFactoryImpl} from './OverrideFactory';\nimport {\n ReactFileRepository,\n WritableFileRepository,\n bindVersion,\n} from './FileRepository';\nimport {eachLimit, mapLimit} from 'async';\nimport FileSystemRepository from './FileSystemRepository';\nimport GitReactFileRepository from './GitReactFileRepository';\nimport Manifest from './Manifest';\nimport Override from './Override';\nimport {UpgradeResult} from './UpgradeStrategy';\nimport {ValidationError} from './ValidationStrategy';\nimport {getInstalledRNVersion} from './PackageUtils';\n\n// Re-export types used in the public API so external packages don't have to\n// reach into our guts to import them.\nexport * from './OverrideFactory';\nexport * from './Override';\nexport * from './refFromVersion';\nexport {UpgradeResult, ValidationError};\n\nconst MAX_CONCURRENT_TASKS = 30;\n\n/**\n * Check that the given manifest correctly describe overrides and that all\n * overrides are up to date\n */\nexport async function validateManifest(\n manifestPath: string,\n opts?: {\n reactNativeVersion?: string;\n },\n): Promise<ValidationError[]> {\n const {manifest, overrideRepo, reactRepo} = await createManifestContext(\n manifestPath,\n opts,\n );\n return await manifest.validate(overrideRepo, reactRepo);\n}\n\n/**\n * Return whether the override exists in the manifest\n */\nexport async function hasOverride(\n overrideName: string,\n manifestPath: string,\n): Promise<boolean> {\n const {manifest} = await createManifestContext(manifestPath);\n return manifest.hasOverride(overrideName);\n}\n\n/**\n * Removes an override from the manifest if it exists.\n * @returns whether the override was removed\n */\nexport async function removeOverride(\n overrideName: string,\n manifestPath: string,\n): Promise<boolean> {\n const {manifest} = await createManifestContext(manifestPath);\n const removed = manifest.removeOverride(overrideName);\n if (removed) {\n await Serialized.writeManifestToFile(manifest.serialize(), manifestPath);\n }\n\n return removed;\n}\n\n/**\n * Returns a factory to create overrides which may be added to the manifest\n */\nexport async function getOverrideFactory(\n manifestPath: string,\n opts?: {\n reactNativeVersion?: string;\n },\n): Promise<OverrideFactory> {\n return (await createManifestContext(manifestPath, opts)).overrideFactory;\n}\n\n/**\n * Adds an override to the manifest\n */\nexport async function addOverride(\n override: Override,\n manifestPath: string,\n): Promise<void> {\n const {manifest} = await createManifestContext(manifestPath);\n manifest.addOverride(override);\n await Serialized.writeManifestToFile(manifest.serialize(), manifestPath);\n}\n\n/**\n * Ouputs a patch-style diff of an override compared to its original source\n */\nexport async function diffOverride(\n overrideName: string,\n manifestPath: string,\n): Promise<string> {\n const ctx = await createManifestContext(manifestPath);\n\n const override = ctx.manifest.findOverride(overrideName);\n if (!override) {\n throw new Error(`Could not find override with name \"${overrideName}\"`);\n }\n\n return override.diffStrategy().diff(ctx.gitReactRepo, ctx.overrideRepo);\n}\n\n/**\n * Receives notifications on progress during overide upgrades\n */\nexport type UpgradeProgressListener = (\n currentOverride: number,\n totalOverrides: number,\n) => void;\n\n/**\n * Attempts to automatically merge changes from the current version into\n * out-of-date overrides.\n */\nexport async function upgradeOverrides(\n manifestPath: string,\n opts: {\n allowConflicts: boolean;\n reactNativeVersion?: string;\n progressListener?: UpgradeProgressListener;\n },\n): Promise<UpgradeResult[]> {\n const ctx = await createManifestContext(manifestPath, opts);\n\n const validationErrors = await ctx.manifest.validate(\n ctx.overrideRepo,\n ctx.reactRepo,\n );\n\n const outOfDateOverrides = validationErrors\n .filter((err) => err.type === 'outOfDate')\n .map((err) => ctx.manifest.findOverride(err.overrideName)!);\n\n // Perform upgrades concurrently so we can take advantage of\n // GitReactFileRepository optimizations when multiple requests are queued at\n // once.\n let i = 0;\n const upgradeResults = await mapLimit<Override, UpgradeResult>(\n outOfDateOverrides,\n MAX_CONCURRENT_TASKS,\n async (override) => {\n const upgradeResult = await override\n .upgradeStrategy()\n .upgrade(\n ctx.gitReactRepo,\n ctx.overrideRepo,\n ctx.reactNativeVersion,\n opts.allowConflicts,\n );\n\n if (opts.progressListener) {\n opts.progressListener(++i, outOfDateOverrides.length);\n }\n\n return upgradeResult;\n },\n );\n\n // Regenerate overrides that are already up to date to update the baseVersion\n // to current. This helps to minimize the numbers of versions we have to\n // check out for future upgrades.\n const upToDateOverrides = [\n ..._.difference(\n ctx.manifest.listOverrides(),\n validationErrors.map(\n (err) => ctx.manifest.findOverride(err.overrideName)!,\n ),\n ).map((ovr) => ovr.name()),\n\n ...upgradeResults\n .filter((res) => res.filesWritten)\n .map((res) => res.overrideName),\n ];\n\n await eachLimit(upToDateOverrides, MAX_CONCURRENT_TASKS, async (name) => {\n await ctx.manifest.markUpToDate(name, ctx.overrideFactory);\n });\n\n ctx.manifest.setBaseVersion(ctx.reactNativeVersion);\n await Serialized.writeManifestToFile(ctx.manifest.serialize(), manifestPath);\n\n return upgradeResults.sort((a, b) =>\n a.overrideName.localeCompare(b.overrideName, 'en'),\n );\n}\n\n/**\n * Throw if a file doesn't exist, printing an error message on the way\n */\nasync function checkFileExists(friendlyName: string, filePath: string) {\n try {\n await fs.access(filePath);\n } catch (ex) {\n throw new Error(`Could not find ${friendlyName} at path '${filePath}'`);\n }\n}\n\n/**\n * Context describing state centered around a single manifest\n */\ninterface ManifestContext {\n overrideRepo: WritableFileRepository;\n reactRepo: ReactFileRepository;\n gitReactRepo: GitReactFileRepository;\n overrideFactory: OverrideFactory;\n manifest: Manifest;\n reactNativeVersion: string;\n}\n\n/**\n * Sets up state for a manifest describing overrides at a specified RN version\n */\nasync function createManifestContext(\n manifestPath: string,\n opts?: {\n reactNativeVersion?: string;\n },\n): Promise<ManifestContext> {\n await checkFileExists('manifest', manifestPath);\n const reactNativeVersion =\n opts?.reactNativeVersion || (await getInstalledRNVersion());\n\n const overrideDir = path.dirname(manifestPath);\n const overrideRepo = new FileSystemRepository(overrideDir);\n\n const gitReactRepo = await GitReactFileRepository.createAndInit();\n const reactRepo = bindVersion(gitReactRepo, reactNativeVersion);\n\n const overrideFactory = new OverrideFactoryImpl(reactRepo, overrideRepo);\n const manifest = Manifest.fromSerialized(\n await Serialized.readManifestFromFile(manifestPath),\n );\n\n return {\n overrideRepo,\n reactRepo,\n gitReactRepo,\n overrideFactory,\n manifest,\n reactNativeVersion,\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchingQueue.js","sourceRoot":"","sources":["../src/BatchingQueue.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAEH;;GAEG;AACH,MAAqB,aAAa;IAAlC;QACmB,gBAAW,
|
|
1
|
+
{"version":3,"file":"BatchingQueue.js","sourceRoot":"","sources":["../src/BatchingQueue.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAEH;;GAEG;AACH,MAAqB,aAAa;IAAlC;QACmB,gBAAW,GAC1B,IAAI,GAAG,EAAE,CAAC;IAiDd,CAAC;IA9CC,OAAO,CAAI,GAAS,EAAE,MAAwB;QAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;aAC/B;YAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACzC,IAAI;oBACF,OAAO,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC;iBACzB;gBAAC,OAAO,EAAE,EAAE;oBACX,MAAM,CAAC,EAAE,CAAC,CAAC;iBACZ;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACpB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;gBACtB,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;aACvB;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAW,CAAE,CAAC;QAE7D,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,MAAM,YAAY,CAAC,KAAK,EAAG,EAAE,CAAC;SAC/B;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAE5B,gEAAgE;QAChE,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE;YAC7B,IAAI,OAAyB,CAAC;YAC9B,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACtC,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE;oBAC5B,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;oBACzB,OAAO,GAAG,GAAG,CAAC;iBACf;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;YAC1B,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;SACzB;IACH,CAAC;CACF;AAnDD,gCAmDC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\n/**\n * Executes actions, attempting to group by a given key\n */\nexport default class BatchingQueue<TKey> {\n private readonly keyedQueues: Map<TKey, Array<() => Promise<void>>> =\n new Map();\n private currentKey?: TKey;\n\n enqueue<T>(key: TKey, action: () => Promise<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n if (!this.keyedQueues.has(key)) {\n this.keyedQueues.set(key, []);\n }\n\n this.keyedQueues.get(key)!.push(async () => {\n try {\n resolve(await action());\n } catch (ex) {\n reject(ex);\n }\n });\n\n if (!this.currentKey) {\n this.currentKey = key;\n void this.pumpQueue();\n }\n });\n }\n\n private async pumpQueue(): Promise<void> {\n const currentQueue = this.keyedQueues.get(this.currentKey!)!;\n\n while (currentQueue.length > 0) {\n await currentQueue.shift()!();\n }\n\n this.keyedQueues.delete(this.currentKey!);\n this.currentKey = undefined;\n\n // If we have more batches, pick the next greedily based on size\n if (this.keyedQueues.size > 0) {\n let nextKey: TKey | undefined;\n let maxLength = 0;\n this.keyedQueues.forEach((queue, key) => {\n if (queue.length > maxLength) {\n maxLength = queue.length;\n nextKey = key;\n }\n });\n\n this.currentKey = nextKey;\n return this.pumpQueue();\n }\n }\n}\n"]}
|
package/lib-commonjs/Cli.js
CHANGED
|
@@ -20,7 +20,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
20
20
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
21
21
|
if (mod && mod.__esModule) return mod;
|
|
22
22
|
var result = {};
|
|
23
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
24
24
|
__setModuleDefault(result, mod);
|
|
25
25
|
return result;
|
|
26
26
|
};
|
|
@@ -39,10 +39,10 @@ const CrossProcessLock_1 = __importDefault(require("./CrossProcessLock"));
|
|
|
39
39
|
const GitReactFileRepository_1 = __importDefault(require("./GitReactFileRepository"));
|
|
40
40
|
const PackageUtils_1 = require("./PackageUtils");
|
|
41
41
|
void doMain(async () => {
|
|
42
|
-
const npmPackage = await PackageUtils_1.getNpmPackage();
|
|
42
|
+
const npmPackage = await (0, PackageUtils_1.getNpmPackage)();
|
|
43
43
|
return new Promise((resolve, _reject) => {
|
|
44
44
|
yargs_1.default
|
|
45
|
-
.command('validate', 'Verify that overrides are recorded and up-to-date', cmdYargs => cmdYargs.options({
|
|
45
|
+
.command('validate', 'Verify that overrides are recorded and up-to-date', (cmdYargs) => cmdYargs.options({
|
|
46
46
|
manifest: {
|
|
47
47
|
type: 'string',
|
|
48
48
|
describe: 'Optional path to the override manifest to validate',
|
|
@@ -53,26 +53,26 @@ void doMain(async () => {
|
|
|
53
53
|
},
|
|
54
54
|
}),
|
|
55
55
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
56
|
-
cmdArgv => validateManifests({
|
|
56
|
+
(cmdArgv) => validateManifests({
|
|
57
57
|
manifestPath: cmdArgv.manifest,
|
|
58
58
|
reactNativeVersion: cmdArgv.version,
|
|
59
59
|
}))
|
|
60
|
-
.command('add <override>', 'Add an override to the manifest', cmdYargs => cmdYargs.options({
|
|
60
|
+
.command('add <override>', 'Add an override to the manifest', (cmdYargs) => cmdYargs.options({
|
|
61
61
|
override: { type: 'string', describe: 'The override to add' },
|
|
62
62
|
}),
|
|
63
63
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
64
|
-
cmdArgv => addOverride(cmdArgv.override))
|
|
65
|
-
.command('remove <override>', 'Remove an override from the manifest', cmdYargs => cmdYargs.options({
|
|
64
|
+
(cmdArgv) => addOverride(cmdArgv.override))
|
|
65
|
+
.command('remove <override>', 'Remove an override from the manifest', (cmdYargs) => cmdYargs.options({
|
|
66
66
|
override: { type: 'string', describe: 'The override to remove' },
|
|
67
67
|
}),
|
|
68
68
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
69
|
-
cmdArgv => removeOverride(cmdArgv.override))
|
|
70
|
-
.command('diff <override>', 'Compares an override to the base file of its current version', cmdYargs => cmdYargs.options({
|
|
69
|
+
(cmdArgv) => removeOverride(cmdArgv.override))
|
|
70
|
+
.command('diff <override>', 'Compares an override to the base file of its current version', (cmdYargs) => cmdYargs.options({
|
|
71
71
|
override: { type: 'string', describe: 'The override to add' },
|
|
72
72
|
}),
|
|
73
73
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
74
|
-
cmdArgv => diffOverride(cmdArgv.override))
|
|
75
|
-
.command('upgrade', 'Attempts to automatically merge new changes into out-of-date overrides', cmdYargs => cmdYargs.options({
|
|
74
|
+
(cmdArgv) => diffOverride(cmdArgv.override))
|
|
75
|
+
.command('upgrade', 'Attempts to automatically merge new changes into out-of-date overrides', (cmdYargs) => cmdYargs.options({
|
|
76
76
|
manifest: {
|
|
77
77
|
type: 'string',
|
|
78
78
|
describe: 'Optional path to the override manifests to validate',
|
|
@@ -88,7 +88,7 @@ void doMain(async () => {
|
|
|
88
88
|
},
|
|
89
89
|
}),
|
|
90
90
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
91
|
-
cmdArgv => upgrade({
|
|
91
|
+
(cmdArgv) => upgrade({
|
|
92
92
|
manifestPath: cmdArgv.manifest,
|
|
93
93
|
reactNativeVersion: cmdArgv.version,
|
|
94
94
|
allowConflicts: cmdArgv.conflicts,
|
|
@@ -99,7 +99,7 @@ void doMain(async () => {
|
|
|
99
99
|
description: 'Optional PAT to use for GitHub API calls',
|
|
100
100
|
type: 'string',
|
|
101
101
|
})
|
|
102
|
-
.middleware(argv => {
|
|
102
|
+
.middleware((argv) => {
|
|
103
103
|
if (argv.githubToken) {
|
|
104
104
|
GitReactFileRepository_1.default.setGithubToken(argv.githubToken);
|
|
105
105
|
}
|
|
@@ -122,7 +122,7 @@ async function validateManifests(opts) {
|
|
|
122
122
|
const manifests = opts.manifestPath
|
|
123
123
|
? [opts.manifestPath]
|
|
124
124
|
: await enumerateManifests();
|
|
125
|
-
const spinner = ora_1.default();
|
|
125
|
+
const spinner = (0, ora_1.default)();
|
|
126
126
|
await spinnerGuard(spinner, async () => {
|
|
127
127
|
// Perform validation sequentially because validation has internal
|
|
128
128
|
// concurrency
|
|
@@ -134,7 +134,7 @@ async function validateManifests(opts) {
|
|
|
134
134
|
if (manifestErrors.length !== 0) {
|
|
135
135
|
errors.push(
|
|
136
136
|
// Add the manifest path to the override name to disambiguate between different packages
|
|
137
|
-
...manifestErrors.map(e => ({
|
|
137
|
+
...manifestErrors.map((e) => ({
|
|
138
138
|
...e,
|
|
139
139
|
overrideName: path_1.default.join(path_1.default.dirname(manifest), e.overrideName),
|
|
140
140
|
})));
|
|
@@ -156,16 +156,16 @@ async function validateManifests(opts) {
|
|
|
156
156
|
* Add an override to the manifest
|
|
157
157
|
*/
|
|
158
158
|
async function addOverride(overridePath) {
|
|
159
|
-
const manifestPath = await FileSearch_1.findManifest(path_1.default.dirname(overridePath));
|
|
159
|
+
const manifestPath = await (0, FileSearch_1.findManifest)(path_1.default.dirname(overridePath));
|
|
160
160
|
const manifestDir = path_1.default.dirname(manifestPath);
|
|
161
161
|
const overrideName = path_1.default.relative(manifestDir, path_1.default.resolve(overridePath));
|
|
162
162
|
if (await Api.hasOverride(overrideName, manifestPath)) {
|
|
163
163
|
console.warn(chalk_1.default.yellow('Warning: override already exists in manifest and will be overwritten'));
|
|
164
164
|
}
|
|
165
|
-
const overrideDetails = await OverridePrompt_1.promptForOverrideDetails();
|
|
166
|
-
const spinner = ora_1.default('Adding override').start();
|
|
165
|
+
const overrideDetails = await (0, OverridePrompt_1.promptForOverrideDetails)();
|
|
166
|
+
const spinner = (0, ora_1.default)('Adding override').start();
|
|
167
167
|
await spinnerGuard(spinner, async () => {
|
|
168
|
-
const override = await OverridePrompt_1.overrideFromDetails(overridePath, overrideDetails, await Api.getOverrideFactory(manifestPath));
|
|
168
|
+
const override = await (0, OverridePrompt_1.overrideFromDetails)(overridePath, overrideDetails, await Api.getOverrideFactory(manifestPath));
|
|
169
169
|
await Api.removeOverride(overrideName, manifestPath);
|
|
170
170
|
await Api.addOverride(override, manifestPath);
|
|
171
171
|
spinner.succeed();
|
|
@@ -175,7 +175,7 @@ async function addOverride(overridePath) {
|
|
|
175
175
|
* Remove an override from the manifest
|
|
176
176
|
*/
|
|
177
177
|
async function removeOverride(overridePath) {
|
|
178
|
-
const manifestPath = await FileSearch_1.findManifest(path_1.default.dirname(overridePath));
|
|
178
|
+
const manifestPath = await (0, FileSearch_1.findManifest)(path_1.default.dirname(overridePath));
|
|
179
179
|
const manifestDir = path_1.default.dirname(manifestPath);
|
|
180
180
|
const overrideName = path_1.default.relative(manifestDir, path_1.default.resolve(overridePath));
|
|
181
181
|
if (await Api.removeOverride(overrideName, manifestPath)) {
|
|
@@ -190,13 +190,13 @@ async function removeOverride(overridePath) {
|
|
|
190
190
|
* Diffs an override against its base file
|
|
191
191
|
*/
|
|
192
192
|
async function diffOverride(overridePath) {
|
|
193
|
-
const manifestPath = await FileSearch_1.findManifest(path_1.default.dirname(overridePath));
|
|
193
|
+
const manifestPath = await (0, FileSearch_1.findManifest)(path_1.default.dirname(overridePath));
|
|
194
194
|
const manifestDir = path_1.default.dirname(manifestPath);
|
|
195
195
|
const overrideName = path_1.default.relative(manifestDir, path_1.default.resolve(overridePath));
|
|
196
196
|
const diff = await Api.diffOverride(overrideName, manifestPath);
|
|
197
197
|
const colorizedDiff = diff
|
|
198
198
|
.split('\n')
|
|
199
|
-
.map(line => line.startsWith('+')
|
|
199
|
+
.map((line) => line.startsWith('+')
|
|
200
200
|
? chalk_1.default.green(line)
|
|
201
201
|
: line.startsWith('-')
|
|
202
202
|
? chalk_1.default.red(line)
|
|
@@ -217,7 +217,7 @@ async function upgrade(opts) {
|
|
|
217
217
|
}
|
|
218
218
|
}
|
|
219
219
|
async function upgradeManifest(manifestPath, opts) {
|
|
220
|
-
const spinner = ora_1.default(`Merging overrides in ${manifestPath}`).start();
|
|
220
|
+
const spinner = (0, ora_1.default)(`Merging overrides in ${manifestPath}`).start();
|
|
221
221
|
await spinnerGuard(spinner, async () => {
|
|
222
222
|
const upgradeResults = await Api.upgradeOverrides(manifestPath, {
|
|
223
223
|
...opts,
|
|
@@ -232,7 +232,7 @@ async function upgradeManifest(manifestPath, opts) {
|
|
|
232
232
|
*/
|
|
233
233
|
function printUpgradeStats(results, allowConflicts) {
|
|
234
234
|
const numTotal = results.length;
|
|
235
|
-
const numConflicts = results.filter(res => res.hasConflicts).length;
|
|
235
|
+
const numConflicts = results.filter((res) => res.hasConflicts).length;
|
|
236
236
|
const numAutoPatched = numTotal - numConflicts;
|
|
237
237
|
if (numTotal === 0) {
|
|
238
238
|
console.log(chalk_1.default.greenBright('No out-of-date overrides detected'));
|
|
@@ -251,7 +251,7 @@ async function printValidationErrors(errors) {
|
|
|
251
251
|
if (errors.length === 0) {
|
|
252
252
|
return;
|
|
253
253
|
}
|
|
254
|
-
const npmPackage = await PackageUtils_1.getNpmPackage();
|
|
254
|
+
const npmPackage = await (0, PackageUtils_1.getNpmPackage)();
|
|
255
255
|
// Add an initial line of separation
|
|
256
256
|
console.error();
|
|
257
257
|
printErrorType('missingFromManifest', errors, `Found override files that aren't listed in the manifest. Overrides can be added to the manifest by using 'npx ${npmPackage.name} add <override>':`);
|
|
@@ -267,11 +267,11 @@ async function printValidationErrors(errors) {
|
|
|
267
267
|
* Print validation errors of a speccific type
|
|
268
268
|
*/
|
|
269
269
|
function printErrorType(type, errors, message) {
|
|
270
|
-
const filteredErrors = errors.filter(err => err.type === type);
|
|
270
|
+
const filteredErrors = errors.filter((err) => err.type === type);
|
|
271
271
|
filteredErrors.sort((a, b) => a.overrideName.localeCompare(b.overrideName, 'en'));
|
|
272
272
|
if (filteredErrors.length > 0) {
|
|
273
273
|
console.error(chalk_1.default.red(message));
|
|
274
|
-
filteredErrors.forEach(err => {
|
|
274
|
+
filteredErrors.forEach((err) => {
|
|
275
275
|
console.error(` - ${err.overrideName}`);
|
|
276
276
|
});
|
|
277
277
|
console.error();
|
|
@@ -298,9 +298,9 @@ async function spinnerGuard(spinner, fn) {
|
|
|
298
298
|
* accessing the same local Git repo at the same time.
|
|
299
299
|
*/
|
|
300
300
|
async function doMain(fn) {
|
|
301
|
-
const lock = new CrossProcessLock_1.default(`${(await PackageUtils_1.getNpmPackage()).name}-cli-lock`);
|
|
301
|
+
const lock = new CrossProcessLock_1.default(`${(await (0, PackageUtils_1.getNpmPackage)()).name}-cli-lock`);
|
|
302
302
|
if (!(await lock.tryLock())) {
|
|
303
|
-
const spinner = ora_1.default('Waiting for other instances of the override CLI to finish').start();
|
|
303
|
+
const spinner = (0, ora_1.default)('Waiting for other instances of the override CLI to finish').start();
|
|
304
304
|
await lock.lock();
|
|
305
305
|
spinner.stop();
|
|
306
306
|
}
|
|
@@ -311,7 +311,7 @@ async function doMain(fn) {
|
|
|
311
311
|
* Check that a manifest exists, and return all that are found
|
|
312
312
|
*/
|
|
313
313
|
async function enumerateManifests() {
|
|
314
|
-
const manifests = await FileSearch_1.findAllManifests();
|
|
314
|
+
const manifests = await (0, FileSearch_1.findAllManifests)();
|
|
315
315
|
if (manifests.length === 0) {
|
|
316
316
|
throw new Error('No override manifests were found relative to the current directory');
|
|
317
317
|
}
|
package/lib-commonjs/Cli.js.map
CHANGED
|
@@ -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 * as Api from './Api';\n\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport path from 'path';\nimport yargs from 'yargs';\n\nimport {findAllManifests, findManifest} from './FileSearch';\nimport {overrideFromDetails, promptForOverrideDetails} from './OverridePrompt';\n\nimport CrossProcessLock from './CrossProcessLock';\nimport GitReactFileRepository from './GitReactFileRepository';\nimport {UpgradeResult} from './UpgradeStrategy';\nimport {ValidationError} from './ValidationStrategy';\nimport {getNpmPackage} from './PackageUtils';\n\nvoid doMain(async () => {\n const npmPackage = await getNpmPackage();\n\n return new Promise((resolve, _reject) => {\n yargs\n .command(\n 'validate',\n 'Verify that overrides are recorded and up-to-date',\n cmdYargs =>\n cmdYargs.options({\n manifest: {\n type: 'string',\n describe: 'Optional path to the override manifest to validate',\n },\n version: {\n type: 'string',\n describe: 'Optional React Native version to check against',\n },\n }),\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cmdArgv =>\n validateManifests({\n manifestPath: cmdArgv.manifest,\n reactNativeVersion: cmdArgv.version,\n }),\n )\n .command(\n 'add <override>',\n 'Add an override to the manifest',\n cmdYargs =>\n cmdYargs.options({\n override: {type: 'string', describe: 'The override to add'},\n }),\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cmdArgv => addOverride(cmdArgv.override!),\n )\n .command(\n 'remove <override>',\n 'Remove an override from the manifest',\n cmdYargs =>\n cmdYargs.options({\n override: {type: 'string', describe: 'The override to remove'},\n }),\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cmdArgv => removeOverride(cmdArgv.override!),\n )\n .command(\n 'diff <override>',\n 'Compares an override to the base file of its current version',\n cmdYargs =>\n cmdYargs.options({\n override: {type: 'string', describe: 'The override to add'},\n }),\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cmdArgv => diffOverride(cmdArgv.override!),\n )\n .command(\n 'upgrade',\n 'Attempts to automatically merge new changes into out-of-date overrides',\n cmdYargs =>\n cmdYargs.options({\n manifest: {\n type: 'string',\n describe: 'Optional path to the override manifests to validate',\n },\n conflicts: {\n type: 'boolean',\n default: true,\n describe: 'Whether to allow merge conflicts to be written',\n },\n version: {\n type: 'string',\n describe: 'Optional React Native version to check against',\n },\n }),\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cmdArgv =>\n upgrade({\n manifestPath: cmdArgv.manifest,\n reactNativeVersion: cmdArgv.version,\n allowConflicts: cmdArgv.conflicts,\n }),\n )\n .epilogue(npmPackage.description)\n .option('color', {hidden: true})\n .option('githubToken', {\n description: 'Optional PAT to use for GitHub API calls',\n type: 'string',\n })\n .middleware(argv => {\n if (argv.githubToken) {\n GitReactFileRepository.setGithubToken(argv.githubToken);\n }\n })\n .demandCommand()\n .recommendCommands()\n .strict()\n .showHelpOnFail(false)\n .wrap(yargs.terminalWidth())\n .version(false)\n .scriptName(npmPackage.name)\n .onFinishCommand(resolve).argv;\n });\n});\n\n/**\n * Check that the given manifest correctly describe overrides and that all\n * overrides are up to date\n */\nasync function validateManifests(opts: {\n manifestPath?: string;\n reactNativeVersion?: string;\n}) {\n const manifests = opts.manifestPath\n ? [opts.manifestPath]\n : await enumerateManifests();\n\n const spinner = ora();\n await spinnerGuard(spinner, async () => {\n // Perform validation sequentially because validation has internal\n // concurrency\n const errors: ValidationError[] = [];\n for (const manifest of manifests) {\n spinner.text = `Validating ${manifest}`;\n spinner.start();\n\n const manifestErrors = await Api.validateManifest(manifest, opts);\n if (manifestErrors.length !== 0) {\n errors.push(\n // Add the manifest path to the override name to disambiguate between different packages\n ...manifestErrors.map(e => ({\n ...e,\n overrideName: path.join(path.dirname(manifest), e.overrideName),\n })),\n );\n }\n }\n\n if (errors.length === 0) {\n spinner.text = 'Validation succeeded';\n spinner.succeed();\n } else {\n spinner.text = 'Validation failed';\n spinner.fail();\n await printValidationErrors(errors);\n process.exitCode = 1;\n }\n });\n}\n\n/**\n * Add an override to the manifest\n */\nasync function addOverride(overridePath: string) {\n const manifestPath = await findManifest(path.dirname(overridePath));\n const manifestDir = path.dirname(manifestPath);\n const overrideName = path.relative(manifestDir, path.resolve(overridePath));\n\n if (await Api.hasOverride(overrideName, manifestPath)) {\n console.warn(\n chalk.yellow(\n 'Warning: override already exists in manifest and will be overwritten',\n ),\n );\n }\n\n const overrideDetails = await promptForOverrideDetails();\n\n const spinner = ora('Adding override').start();\n await spinnerGuard(spinner, async () => {\n const override = await overrideFromDetails(\n overridePath,\n overrideDetails,\n await Api.getOverrideFactory(manifestPath),\n );\n\n await Api.removeOverride(overrideName, manifestPath);\n await Api.addOverride(override, manifestPath);\n spinner.succeed();\n });\n}\n\n/**\n * Remove an override from the manifest\n */\nasync function removeOverride(overridePath: string) {\n const manifestPath = await findManifest(path.dirname(overridePath));\n const manifestDir = path.dirname(manifestPath);\n const overrideName = path.relative(manifestDir, path.resolve(overridePath));\n\n if (await Api.removeOverride(overrideName, manifestPath)) {\n console.log(chalk.greenBright('Override successfully removed'));\n } else {\n console.error(\n chalk.red('Could not remove override. Is it part of the manifest?'),\n );\n process.exit(1);\n }\n}\n\n/**\n * Diffs an override against its base file\n */\nasync function diffOverride(overridePath: string) {\n const manifestPath = await findManifest(path.dirname(overridePath));\n const manifestDir = path.dirname(manifestPath);\n const overrideName = path.relative(manifestDir, path.resolve(overridePath));\n const diff = await Api.diffOverride(overrideName, manifestPath);\n\n const colorizedDiff = diff\n .split('\\n')\n .map(line =>\n line.startsWith('+')\n ? chalk.green(line)\n : line.startsWith('-')\n ? chalk.red(line)\n : line,\n )\n .join('\\n');\n\n console.log(colorizedDiff);\n}\n\n/**\n * Attempts to automatically merge changes from the current version into\n * out-of-date overrides.\n */\nasync function upgrade(opts: {\n manifestPath?: string;\n reactNativeVersion?: string;\n allowConflicts: boolean;\n}) {\n const manifests = opts.manifestPath\n ? [opts.manifestPath]\n : await enumerateManifests();\n\n for (const manifest of manifests) {\n await upgradeManifest(manifest, opts);\n }\n}\n\nasync function upgradeManifest(\n manifestPath: string,\n opts: {\n reactNativeVersion?: string;\n allowConflicts: boolean;\n },\n) {\n const spinner = ora(`Merging overrides in ${manifestPath}`).start();\n await spinnerGuard(spinner, async () => {\n const upgradeResults = await Api.upgradeOverrides(manifestPath, {\n ...opts,\n progressListener: (currentOverride, totalOverrides) =>\n (spinner.text = `Merging overrides in ${manifestPath} (${currentOverride}/${totalOverrides})`),\n });\n\n spinner.succeed();\n printUpgradeStats(upgradeResults, opts.allowConflicts);\n });\n}\n\n/**\n * Print statistics about an attempt to upgrade out-of-date-overrides.\n */\nfunction printUpgradeStats(\n results: Array<UpgradeResult>,\n allowConflicts: boolean,\n) {\n const numTotal = results.length;\n const numConflicts = results.filter(res => res.hasConflicts).length;\n const numAutoPatched = numTotal - numConflicts;\n\n if (numTotal === 0) {\n console.log(chalk.greenBright('No out-of-date overrides detected'));\n } else {\n console.log(\n chalk.greenBright(\n `${numAutoPatched}/${numTotal} out-of-date overrides automatically merged`,\n ),\n );\n }\n if (allowConflicts && numConflicts > 0) {\n console.log(\n chalk.yellowBright(`${numConflicts} overrides require manual resolution`),\n );\n }\n}\n\n/**\n * Prints validation errors in a user-readable form to stderr\n */\nasync function printValidationErrors(errors: ValidationError[]) {\n if (errors.length === 0) {\n return;\n }\n\n const npmPackage = await getNpmPackage();\n\n // Add an initial line of separation\n console.error();\n\n printErrorType(\n 'missingFromManifest',\n errors,\n `Found override files that aren't listed in the manifest. Overrides can be added to the manifest by using 'npx ${npmPackage.name} add <override>':`,\n );\n\n printErrorType(\n 'overrideNotFound',\n errors,\n `Found overrides in the manifest that don't exist on disk. Remove existing overrides using 'npx ${npmPackage.name} remove <override>':`,\n );\n\n printErrorType(\n 'baseNotFound',\n errors,\n `Found overrides whose base files do not exist. Remove existing overrides using 'npx ${npmPackage.name} remove <override>':`,\n );\n\n printErrorType(\n 'outOfDate',\n errors,\n `Found overrides whose original files have changed. Upgrade overrides using 'npx ${npmPackage.name} upgrade':`,\n );\n\n printErrorType(\n 'overrideDifferentFromBase',\n errors,\n 'The following overrides should be an exact copy of their base files. Ensure overrides are up to date or revert changes:',\n );\n\n printErrorType(\n 'overrideSameAsBase',\n errors,\n 'The following overrides are identical to their base files. Please remove them or set their type to \"copy\":',\n );\n\n printErrorType(\n 'expectedFile',\n errors,\n 'The following overrides should operate on files, but list directories:',\n );\n\n printErrorType(\n 'expectedDirectory',\n errors,\n 'The following overrides should operate on directories, but listed files:',\n );\n}\n\n/**\n * Print validation errors of a speccific type\n */\nfunction printErrorType(\n type: ValidationError['type'],\n errors: ValidationError[],\n message: string,\n) {\n const filteredErrors = errors.filter(err => err.type === type);\n filteredErrors.sort((a, b) =>\n a.overrideName.localeCompare(b.overrideName, 'en'),\n );\n\n if (filteredErrors.length > 0) {\n console.error(chalk.red(message));\n filteredErrors.forEach(err => {\n console.error(` - ${err.overrideName}`);\n });\n console.error();\n }\n}\n\n/**\n * Wraps the function in a try/catch, failing the spinner if an exception is\n * thrown to allow unmangled output\n */\nasync function spinnerGuard<T>(\n spinner: ora.Ora,\n fn: () => Promise<T>,\n): Promise<T> {\n try {\n return await fn();\n } catch (ex) {\n if (spinner.isSpinning) {\n spinner.fail();\n }\n throw ex;\n }\n}\n\n/**\n * Wrap the main function around a barrier to ensure only one copy of the\n * override tool is running at once. This is needed to avoid multiple tools\n * accessing the same local Git repo at the same time.\n */\nasync function doMain(fn: () => Promise<void>): Promise<void> {\n const lock = new CrossProcessLock(`${(await getNpmPackage()).name}-cli-lock`);\n\n if (!(await lock.tryLock())) {\n const spinner = ora(\n 'Waiting for other instances of the override CLI to finish',\n ).start();\n await lock.lock();\n spinner.stop();\n }\n\n await fn();\n await lock.unlock();\n}\n\n/**\n * Check that a manifest exists, and return all that are found\n */\nasync function enumerateManifests(): Promise<string[]> {\n const manifests = await findAllManifests();\n if (manifests.length === 0) {\n throw new Error(\n 'No override manifests were found relative to the current directory',\n );\n }\n\n return manifests;\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 * as Api from './Api';\n\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport path from 'path';\nimport yargs from 'yargs';\n\nimport {findAllManifests, findManifest} from './FileSearch';\nimport {overrideFromDetails, promptForOverrideDetails} from './OverridePrompt';\n\nimport CrossProcessLock from './CrossProcessLock';\nimport GitReactFileRepository from './GitReactFileRepository';\nimport {UpgradeResult} from './UpgradeStrategy';\nimport {ValidationError} from './ValidationStrategy';\nimport {getNpmPackage} from './PackageUtils';\n\nvoid doMain(async () => {\n const npmPackage = await getNpmPackage();\n\n return new Promise((resolve, _reject) => {\n yargs\n .command(\n 'validate',\n 'Verify that overrides are recorded and up-to-date',\n (cmdYargs) =>\n cmdYargs.options({\n manifest: {\n type: 'string',\n describe: 'Optional path to the override manifest to validate',\n },\n version: {\n type: 'string',\n describe: 'Optional React Native version to check against',\n },\n }),\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n (cmdArgv) =>\n validateManifests({\n manifestPath: cmdArgv.manifest,\n reactNativeVersion: cmdArgv.version,\n }),\n )\n .command(\n 'add <override>',\n 'Add an override to the manifest',\n (cmdYargs) =>\n cmdYargs.options({\n override: {type: 'string', describe: 'The override to add'},\n }),\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n (cmdArgv) => addOverride(cmdArgv.override!),\n )\n .command(\n 'remove <override>',\n 'Remove an override from the manifest',\n (cmdYargs) =>\n cmdYargs.options({\n override: {type: 'string', describe: 'The override to remove'},\n }),\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n (cmdArgv) => removeOverride(cmdArgv.override!),\n )\n .command(\n 'diff <override>',\n 'Compares an override to the base file of its current version',\n (cmdYargs) =>\n cmdYargs.options({\n override: {type: 'string', describe: 'The override to add'},\n }),\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n (cmdArgv) => diffOverride(cmdArgv.override!),\n )\n .command(\n 'upgrade',\n 'Attempts to automatically merge new changes into out-of-date overrides',\n (cmdYargs) =>\n cmdYargs.options({\n manifest: {\n type: 'string',\n describe: 'Optional path to the override manifests to validate',\n },\n conflicts: {\n type: 'boolean',\n default: true,\n describe: 'Whether to allow merge conflicts to be written',\n },\n version: {\n type: 'string',\n describe: 'Optional React Native version to check against',\n },\n }),\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n (cmdArgv) =>\n upgrade({\n manifestPath: cmdArgv.manifest,\n reactNativeVersion: cmdArgv.version,\n allowConflicts: cmdArgv.conflicts,\n }),\n )\n .epilogue(npmPackage.description)\n .option('color', {hidden: true})\n .option('githubToken', {\n description: 'Optional PAT to use for GitHub API calls',\n type: 'string',\n })\n .middleware((argv) => {\n if (argv.githubToken) {\n GitReactFileRepository.setGithubToken(argv.githubToken);\n }\n })\n .demandCommand()\n .recommendCommands()\n .strict()\n .showHelpOnFail(false)\n .wrap(yargs.terminalWidth())\n .version(false)\n .scriptName(npmPackage.name)\n .onFinishCommand(resolve).argv;\n });\n});\n\n/**\n * Check that the given manifest correctly describe overrides and that all\n * overrides are up to date\n */\nasync function validateManifests(opts: {\n manifestPath?: string;\n reactNativeVersion?: string;\n}) {\n const manifests = opts.manifestPath\n ? [opts.manifestPath]\n : await enumerateManifests();\n\n const spinner = ora();\n await spinnerGuard(spinner, async () => {\n // Perform validation sequentially because validation has internal\n // concurrency\n const errors: ValidationError[] = [];\n for (const manifest of manifests) {\n spinner.text = `Validating ${manifest}`;\n spinner.start();\n\n const manifestErrors = await Api.validateManifest(manifest, opts);\n if (manifestErrors.length !== 0) {\n errors.push(\n // Add the manifest path to the override name to disambiguate between different packages\n ...manifestErrors.map((e) => ({\n ...e,\n overrideName: path.join(path.dirname(manifest), e.overrideName),\n })),\n );\n }\n }\n\n if (errors.length === 0) {\n spinner.text = 'Validation succeeded';\n spinner.succeed();\n } else {\n spinner.text = 'Validation failed';\n spinner.fail();\n await printValidationErrors(errors);\n process.exitCode = 1;\n }\n });\n}\n\n/**\n * Add an override to the manifest\n */\nasync function addOverride(overridePath: string) {\n const manifestPath = await findManifest(path.dirname(overridePath));\n const manifestDir = path.dirname(manifestPath);\n const overrideName = path.relative(manifestDir, path.resolve(overridePath));\n\n if (await Api.hasOverride(overrideName, manifestPath)) {\n console.warn(\n chalk.yellow(\n 'Warning: override already exists in manifest and will be overwritten',\n ),\n );\n }\n\n const overrideDetails = await promptForOverrideDetails();\n\n const spinner = ora('Adding override').start();\n await spinnerGuard(spinner, async () => {\n const override = await overrideFromDetails(\n overridePath,\n overrideDetails,\n await Api.getOverrideFactory(manifestPath),\n );\n\n await Api.removeOverride(overrideName, manifestPath);\n await Api.addOverride(override, manifestPath);\n spinner.succeed();\n });\n}\n\n/**\n * Remove an override from the manifest\n */\nasync function removeOverride(overridePath: string) {\n const manifestPath = await findManifest(path.dirname(overridePath));\n const manifestDir = path.dirname(manifestPath);\n const overrideName = path.relative(manifestDir, path.resolve(overridePath));\n\n if (await Api.removeOverride(overrideName, manifestPath)) {\n console.log(chalk.greenBright('Override successfully removed'));\n } else {\n console.error(\n chalk.red('Could not remove override. Is it part of the manifest?'),\n );\n process.exit(1);\n }\n}\n\n/**\n * Diffs an override against its base file\n */\nasync function diffOverride(overridePath: string) {\n const manifestPath = await findManifest(path.dirname(overridePath));\n const manifestDir = path.dirname(manifestPath);\n const overrideName = path.relative(manifestDir, path.resolve(overridePath));\n const diff = await Api.diffOverride(overrideName, manifestPath);\n\n const colorizedDiff = diff\n .split('\\n')\n .map((line) =>\n line.startsWith('+')\n ? chalk.green(line)\n : line.startsWith('-')\n ? chalk.red(line)\n : line,\n )\n .join('\\n');\n\n console.log(colorizedDiff);\n}\n\n/**\n * Attempts to automatically merge changes from the current version into\n * out-of-date overrides.\n */\nasync function upgrade(opts: {\n manifestPath?: string;\n reactNativeVersion?: string;\n allowConflicts: boolean;\n}) {\n const manifests = opts.manifestPath\n ? [opts.manifestPath]\n : await enumerateManifests();\n\n for (const manifest of manifests) {\n await upgradeManifest(manifest, opts);\n }\n}\n\nasync function upgradeManifest(\n manifestPath: string,\n opts: {\n reactNativeVersion?: string;\n allowConflicts: boolean;\n },\n) {\n const spinner = ora(`Merging overrides in ${manifestPath}`).start();\n await spinnerGuard(spinner, async () => {\n const upgradeResults = await Api.upgradeOverrides(manifestPath, {\n ...opts,\n progressListener: (currentOverride, totalOverrides) =>\n (spinner.text = `Merging overrides in ${manifestPath} (${currentOverride}/${totalOverrides})`),\n });\n\n spinner.succeed();\n printUpgradeStats(upgradeResults, opts.allowConflicts);\n });\n}\n\n/**\n * Print statistics about an attempt to upgrade out-of-date-overrides.\n */\nfunction printUpgradeStats(\n results: Array<UpgradeResult>,\n allowConflicts: boolean,\n) {\n const numTotal = results.length;\n const numConflicts = results.filter((res) => res.hasConflicts).length;\n const numAutoPatched = numTotal - numConflicts;\n\n if (numTotal === 0) {\n console.log(chalk.greenBright('No out-of-date overrides detected'));\n } else {\n console.log(\n chalk.greenBright(\n `${numAutoPatched}/${numTotal} out-of-date overrides automatically merged`,\n ),\n );\n }\n if (allowConflicts && numConflicts > 0) {\n console.log(\n chalk.yellowBright(`${numConflicts} overrides require manual resolution`),\n );\n }\n}\n\n/**\n * Prints validation errors in a user-readable form to stderr\n */\nasync function printValidationErrors(errors: ValidationError[]) {\n if (errors.length === 0) {\n return;\n }\n\n const npmPackage = await getNpmPackage();\n\n // Add an initial line of separation\n console.error();\n\n printErrorType(\n 'missingFromManifest',\n errors,\n `Found override files that aren't listed in the manifest. Overrides can be added to the manifest by using 'npx ${npmPackage.name} add <override>':`,\n );\n\n printErrorType(\n 'overrideNotFound',\n errors,\n `Found overrides in the manifest that don't exist on disk. Remove existing overrides using 'npx ${npmPackage.name} remove <override>':`,\n );\n\n printErrorType(\n 'baseNotFound',\n errors,\n `Found overrides whose base files do not exist. Remove existing overrides using 'npx ${npmPackage.name} remove <override>':`,\n );\n\n printErrorType(\n 'outOfDate',\n errors,\n `Found overrides whose original files have changed. Upgrade overrides using 'npx ${npmPackage.name} upgrade':`,\n );\n\n printErrorType(\n 'overrideDifferentFromBase',\n errors,\n 'The following overrides should be an exact copy of their base files. Ensure overrides are up to date or revert changes:',\n );\n\n printErrorType(\n 'overrideSameAsBase',\n errors,\n 'The following overrides are identical to their base files. Please remove them or set their type to \"copy\":',\n );\n\n printErrorType(\n 'expectedFile',\n errors,\n 'The following overrides should operate on files, but list directories:',\n );\n\n printErrorType(\n 'expectedDirectory',\n errors,\n 'The following overrides should operate on directories, but listed files:',\n );\n}\n\n/**\n * Print validation errors of a speccific type\n */\nfunction printErrorType(\n type: ValidationError['type'],\n errors: ValidationError[],\n message: string,\n) {\n const filteredErrors = errors.filter((err) => err.type === type);\n filteredErrors.sort((a, b) =>\n a.overrideName.localeCompare(b.overrideName, 'en'),\n );\n\n if (filteredErrors.length > 0) {\n console.error(chalk.red(message));\n filteredErrors.forEach((err) => {\n console.error(` - ${err.overrideName}`);\n });\n console.error();\n }\n}\n\n/**\n * Wraps the function in a try/catch, failing the spinner if an exception is\n * thrown to allow unmangled output\n */\nasync function spinnerGuard<T>(\n spinner: ora.Ora,\n fn: () => Promise<T>,\n): Promise<T> {\n try {\n return await fn();\n } catch (ex) {\n if (spinner.isSpinning) {\n spinner.fail();\n }\n throw ex;\n }\n}\n\n/**\n * Wrap the main function around a barrier to ensure only one copy of the\n * override tool is running at once. This is needed to avoid multiple tools\n * accessing the same local Git repo at the same time.\n */\nasync function doMain(fn: () => Promise<void>): Promise<void> {\n const lock = new CrossProcessLock(`${(await getNpmPackage()).name}-cli-lock`);\n\n if (!(await lock.tryLock())) {\n const spinner = ora(\n 'Waiting for other instances of the override CLI to finish',\n ).start();\n await lock.lock();\n spinner.stop();\n }\n\n await fn();\n await lock.unlock();\n}\n\n/**\n * Check that a manifest exists, and return all that are found\n */\nasync function enumerateManifests(): Promise<string[]> {\n const manifests = await findAllManifests();\n if (manifests.length === 0) {\n throw new Error(\n 'No override manifests were found relative to the current directory',\n );\n }\n\n return manifests;\n}\n"]}
|
|
@@ -31,15 +31,15 @@ class CrossProcessLock {
|
|
|
31
31
|
* chars and not use special characters.
|
|
32
32
|
*/
|
|
33
33
|
constructor(lockName) {
|
|
34
|
-
if (os_1.platform() === 'win32') {
|
|
34
|
+
if ((0, os_1.platform)() === 'win32') {
|
|
35
35
|
this.ipcPath = `\\\\.\\pipe\\${lockName}`;
|
|
36
36
|
}
|
|
37
37
|
else {
|
|
38
|
-
this.ipcPath = path_1.default.join(os_1.tmpdir(), `${lockName}`);
|
|
38
|
+
this.ipcPath = path_1.default.join((0, os_1.tmpdir)(), `${lockName}`);
|
|
39
39
|
}
|
|
40
40
|
this.server = net_1.default.createServer();
|
|
41
41
|
this.connections = new Set();
|
|
42
|
-
this.server.on('connection', conn => {
|
|
42
|
+
this.server.on('connection', (conn) => {
|
|
43
43
|
this.connections.add(conn);
|
|
44
44
|
conn.on('close', () => this.connections.delete(conn));
|
|
45
45
|
});
|
|
@@ -104,7 +104,7 @@ class CrossProcessLock {
|
|
|
104
104
|
// Treat some errors as potential pipe death, since it could have died
|
|
105
105
|
// between the time to create a server and attempting to connect to the
|
|
106
106
|
// existing.
|
|
107
|
-
socket.once('error', err => {
|
|
107
|
+
socket.once('error', (err) => {
|
|
108
108
|
// @ts-ignore Typings for EventEmitter only know about generic JS errors
|
|
109
109
|
if (err.code === 'ECONNREFUSED' || err.code === 'ECONNRESET') {
|
|
110
110
|
resolve();
|
|
@@ -140,7 +140,7 @@ class CrossProcessLock {
|
|
|
140
140
|
// ones. Manually destroy all existing connections to let them retry the
|
|
141
141
|
// lock.
|
|
142
142
|
this.server.close();
|
|
143
|
-
this.connections.forEach(conn => conn.destroy());
|
|
143
|
+
this.connections.forEach((conn) => conn.destroy());
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
146
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CrossProcessLock.js","sourceRoot":"","sources":["../src/CrossProcessLock.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAEH,8CAAsB;AACtB,gDAAwB;AACxB,2BAAoC;AAEpC;;;;;;;;;;GAUG;AACH,MAAqB,gBAAgB;IAKnC;;;;;OAKG;IACH,YAAY,QAAgB;QAC1B,IAAI,aAAQ,
|
|
1
|
+
{"version":3,"file":"CrossProcessLock.js","sourceRoot":"","sources":["../src/CrossProcessLock.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 net from 'net';\nimport path from 'path';\nimport {platform, tmpdir} from 'os';\n\n/**\n * CrossProcessLock implements a non-polling cross-process asynchronous barrier.\n *\n * - The lock is acquired by creating a named pipe\n *\n * - If named pipe creation fails due to an existing pipe, the process\n * subscribes to the pipe, waiting asynchronously until it dies.\n *\n * - Once the pipe dies, any subscribers will race to acquire the lock (create\n * the pipe server)\n */\nexport default class CrossProcessLock {\n private readonly ipcPath: string;\n private readonly server: net.Server;\n private readonly connections: Set<net.Socket>;\n\n /**\n * Create the lock instance. Does not yet allocate any resources.\n *\n * @param lockName unique name of the shared resource. Must be under 256\n * chars and not use special characters.\n */\n constructor(lockName: string) {\n if (platform() === 'win32') {\n this.ipcPath = `\\\\\\\\.\\\\pipe\\\\${lockName}`;\n } else {\n this.ipcPath = path.join(tmpdir(), `${lockName}`);\n }\n\n this.server = net.createServer();\n\n this.connections = new Set();\n this.server.on('connection', (conn) => {\n this.connections.add(conn);\n conn.on('close', () => this.connections.delete(conn));\n });\n }\n\n /**\n * Try to acquire the shared resource. Returns false if it is already in use\n * without acquiring the resource. Subsequent tryLock calls after obtaining a\n * lock will return false.\n */\n tryLock(): Promise<boolean> {\n if (this.server.listening) {\n return Promise.resolve(false);\n }\n\n return new Promise((resolve, reject) => {\n const onListening = () => {\n this.server.off('error', onError);\n resolve(true);\n };\n\n const onError = (err: Error) => {\n this.server.off('listening', onListening);\n // @ts-ignore Typings for EventEmitter only know about generic JS errors\n if (err.code === 'EADDRINUSE') {\n resolve(false);\n } else {\n reject(err);\n }\n };\n\n this.server.once('listening', onListening);\n this.server.once('error', onError);\n\n try {\n this.server.listen({\n path: this.ipcPath,\n exclusive: true,\n readableAll: true,\n });\n } catch (ex) {\n // Old versions of Node will throw an extra TypeError when address is\n // in use that we need to ignore https://github.com/nodejs/node/issues/23917\n if ((ex as Error).name !== 'TypeError') {\n throw ex;\n }\n }\n });\n }\n\n /**\n * Acquire the shared resource, waiting for it to be available.\n */\n async lock(): Promise<void> {\n if (this.server.listening) {\n return;\n }\n\n if (!(await this.tryLock())) {\n await this.waitUntilPipeDeath();\n return this.lock();\n }\n }\n\n private waitUntilPipeDeath(): Promise<void> {\n return new Promise((resolve, reject) => {\n const socket = new net.Socket();\n\n // Treat some errors as potential pipe death, since it could have died\n // between the time to create a server and attempting to connect to the\n // existing.\n socket.once('error', (err) => {\n // @ts-ignore Typings for EventEmitter only know about generic JS errors\n if (err.code === 'ECONNREFUSED' || err.code === 'ECONNRESET') {\n resolve();\n } else {\n reject(err);\n }\n });\n\n socket.once('close', () => resolve());\n\n socket.setTimeout(0);\n socket.connect({path: this.ipcPath});\n });\n }\n\n /**\n * Release the shared resource\n */\n unlock(): Promise<void> {\n if (!this.server.listening) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n const onClose = () => {\n this.server.off('error', onError);\n resolve();\n };\n const onError = (err: Error) => {\n this.server.off('close', onClose);\n reject(err);\n };\n\n this.server.once('close', onClose);\n this.server.once('error', onError);\n\n // Closing will only prevent new connections, instead of killing old\n // ones. Manually destroy all existing connections to let them retry the\n // lock.\n this.server.close();\n this.connections.forEach((conn) => conn.destroy());\n });\n }\n}\n"]}
|
|
@@ -12,9 +12,9 @@ exports.bindVersion = void 0;
|
|
|
12
12
|
*/
|
|
13
13
|
function bindVersion(repository, version) {
|
|
14
14
|
return {
|
|
15
|
-
listFiles: globs => repository.listFiles(globs, version),
|
|
16
|
-
readFile: filename => repository.readFile(filename, version),
|
|
17
|
-
stat: filename => repository.stat(filename, version),
|
|
15
|
+
listFiles: (globs) => repository.listFiles(globs, version),
|
|
16
|
+
readFile: (filename) => repository.readFile(filename, version),
|
|
17
|
+
stat: (filename) => repository.stat(filename, version),
|
|
18
18
|
getVersion: () => version,
|
|
19
19
|
};
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileRepository.js","sourceRoot":"","sources":["../src/FileRepository.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAkEH;;GAEG;AACH,SAAgB,WAAW,CACzB,UAAwC,EACxC,OAAe;IAEf,OAAO;QACL,SAAS,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"FileRepository.js","sourceRoot":"","sources":["../src/FileRepository.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAkEH;;GAEG;AACH,SAAgB,WAAW,CACzB,UAAwC,EACxC,OAAe;IAEf,OAAO;QACL,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;QAC1D,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC9D,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;QACtD,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO;KAC1B,CAAC;AACJ,CAAC;AAVD,kCAUC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\n/**\n * A filesystem abstraction that allows listing and reading files\n */\nexport default interface FileRepository {\n /**\n * Return the repository-relative path to files\n * @param globs optional list of globs which files must match\n */\n listFiles(globs?: string[]): Promise<Array<string>>;\n\n /**\n * Read the contents of a patch file.\n * @param filename is expected to be relative to the repository root.\n */\n readFile(filename: string): Promise<Buffer | null>;\n\n /**\n * Check whether a file exists, and if so whether its a file or directory\n */\n stat(filename: string): Promise<'file' | 'directory' | 'none'>;\n}\n\n/**\n * Provides access to files\n */\nexport interface WritableFileRepository extends FileRepository {\n /**\n * Sets the contents of a file. Rejects the promise if the file doesn't\n * exist.\n */\n writeFile(filename: string, content: Buffer | string): Promise<void>;\n\n /**\n * Deletes the file/directory, rejecting the promise if it doesn't exist.\n */\n deleteFile(filename: string): Promise<void>;\n}\n\n/**\n * Provides access to React Native source files\n */\nexport interface ReactFileRepository extends FileRepository {\n /**\n * Get the React Native version the repo is exploring\n */\n getVersion(): string;\n}\n\n/**\n * Provides access to React Native source files of arbitrary version\n * {@see ReactFileRepository} for more details\n */\nexport interface VersionedReactFileRepository {\n listFiles(\n globs: string[] | undefined,\n version: string,\n ): Promise<Array<string>>;\n readFile(filename: string, version: string): Promise<Buffer | null>;\n stat(\n filename: string,\n version: string,\n ): Promise<'file' | 'directory' | 'none'>;\n}\n\n/**\n * Convert from a VersionedReactFileRepository to ReactFileRepository\n */\nexport function bindVersion(\n repository: VersionedReactFileRepository,\n version: string,\n): ReactFileRepository {\n return {\n listFiles: (globs) => repository.listFiles(globs, version),\n readFile: (filename) => repository.readFile(filename, version),\n stat: (filename) => repository.stat(filename, version),\n getVersion: () => version,\n };\n}\n"]}
|