react-native-platform-override 1.6.5 → 1.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib-commonjs/Api.js +5 -1
- package/lib-commonjs/Api.js.map +1 -1
- package/lib-commonjs/Cli.js +5 -1
- package/lib-commonjs/Cli.js.map +1 -1
- package/lib-commonjs/GitReactFileRepository.js +27 -5
- package/lib-commonjs/GitReactFileRepository.js.map +1 -1
- package/lib-commonjs/OverridePrompt.js +5 -1
- package/lib-commonjs/OverridePrompt.js.map +1 -1
- package/lib-commonjs/Serialized.js +5 -1
- package/lib-commonjs/Serialized.js.map +1 -1
- package/lib-commonjs/scripts/generateManifest.js +5 -1
- package/lib-commonjs/scripts/generateManifest.js.map +1 -1
- package/package.json +5 -5
package/lib-commonjs/Api.js
CHANGED
|
@@ -7,7 +7,11 @@
|
|
|
7
7
|
*/
|
|
8
8
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
9
|
if (k2 === undefined) k2 = k;
|
|
10
|
-
Object.
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
11
15
|
}) : (function(o, m, k, k2) {
|
|
12
16
|
if (k2 === undefined) k2 = k;
|
|
13
17
|
o[k2] = m[k];
|
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 '@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
|
+
{"version":3,"file":"Api.js","sourceRoot":"","sources":["../src/Api.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,wCAAwC;AACxC,2DAA2D;AAE3D,yDAA2C;AAC3C,oDAAuB;AACvB,kEAA0C;AAC1C,gDAAwB;AAExB,uDAAuE;AACvE,qDAI0B;AAC1B,iCAA0C;AAC1C,kFAA0D;AAC1D,sFAA8D;AAC9D,0DAAkC;AAIlC,iDAAqD;AAErD,4EAA4E;AAC5E,sCAAsC;AACtC,oDAAkC;AAClC,6CAA2B;AAC3B,mDAAiC;AAGjC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC;;;GAGG;AACI,KAAK,UAAU,gBAAgB,CACpC,YAAoB,EACpB,IAEC;IAED,MAAM,EAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAC,GAAG,MAAM,qBAAqB,CACrE,YAAY,EACZ,IAAI,CACL,CAAC;IACF,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AAC1D,CAAC;AAXD,4CAWC;AAED;;GAEG;AACI,KAAK,UAAU,WAAW,CAC/B,YAAoB,EACpB,YAAoB;IAEpB,MAAM,EAAC,QAAQ,EAAC,GAAG,MAAM,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC5C,CAAC;AAND,kCAMC;AAED;;;GAGG;AACI,KAAK,UAAU,cAAc,CAClC,YAAoB,EACpB,YAAoB;IAEpB,MAAM,EAAC,QAAQ,EAAC,GAAG,MAAM,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IACtD,IAAI,OAAO,EAAE;QACX,MAAM,UAAU,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,YAAY,CAAC,CAAC;KAC1E;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAXD,wCAWC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CACtC,YAAoB,EACpB,IAEC;IAED,OAAO,CAAC,MAAM,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC;AAC3E,CAAC;AAPD,gDAOC;AAED;;GAEG;AACI,KAAK,UAAU,WAAW,CAC/B,QAAkB,EAClB,YAAoB;IAEpB,MAAM,EAAC,QAAQ,EAAC,GAAG,MAAM,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC7D,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,UAAU,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,YAAY,CAAC,CAAC;AAC3E,CAAC;AAPD,kCAOC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY,CAChC,YAAoB,EACpB,YAAoB;IAEpB,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAEtD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,YAAY,GAAG,CAAC,CAAC;KACxE;IAED,OAAO,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;AAC1E,CAAC;AAZD,oCAYC;AAUD;;;GAGG;AACI,KAAK,UAAU,gBAAgB,CACpC,YAAoB,EACpB,IAIC;IAED,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAE5D,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAClD,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,SAAS,CACd,CAAC;IAEF,MAAM,kBAAkB,GAAG,gBAAgB;SACxC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC;SACzC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,CAAC;IAE9D,4DAA4D;IAC5D,4EAA4E;IAC5E,QAAQ;IACR,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,cAAc,GAAG,MAAM,IAAA,gBAAQ,EACnC,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,EAAE,QAAQ,EAAE,EAAE;QACjB,MAAM,aAAa,GAAG,MAAM,QAAQ;aACjC,eAAe,EAAE;aACjB,OAAO,CACN,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,kBAAkB,EACtB,IAAI,CAAC,cAAc,CACpB,CAAC;QAEJ,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;SACvD;QAED,OAAO,aAAa,CAAC;IACvB,CAAC,CACF,CAAC;IAEF,6EAA6E;IAC7E,wEAAwE;IACxE,iCAAiC;IACjC,MAAM,iBAAiB,GAAG;QACxB,GAAG,gBAAC,CAAC,UAAU,CACb,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,EAC5B,gBAAgB,CAAC,GAAG,CAClB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAE,CACtD,CACF,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAE1B,GAAG,cAAc;aACd,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC;aACjC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC;KAClC,CAAC;IAEF,MAAM,IAAA,iBAAS,EAAC,iBAAiB,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtE,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACpD,MAAM,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,YAAY,CAAC,CAAC;IAE7E,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,CACnD,CAAC;AACJ,CAAC;AAtED,4CAsEC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,YAAoB,EAAE,QAAgB;IACnE,IAAI;QACF,MAAM,YAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC3B;IAAC,OAAO,EAAE,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,aAAa,QAAQ,GAAG,CAAC,CAAC;KACzE;AACH,CAAC;AAcD;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAClC,YAAoB,EACpB,IAEC;IAED,MAAM,eAAe,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAChD,MAAM,kBAAkB,GACtB,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,KAAI,CAAC,MAAM,IAAA,oCAAqB,GAAE,CAAC,CAAC;IAE9D,MAAM,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAI,8BAAoB,CAAC,WAAW,CAAC,CAAC;IAE3D,MAAM,YAAY,GAAG,MAAM,gCAAsB,CAAC,aAAa,EAAE,CAAC;IAClE,MAAM,SAAS,GAAG,IAAA,4BAAW,EAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAEhE,MAAM,eAAe,GAAG,IAAI,qCAAmB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,kBAAQ,CAAC,cAAc,CACtC,MAAM,UAAU,CAAC,oBAAoB,CAAC,YAAY,CAAC,CACpD,CAAC;IAEF,OAAO;QACL,YAAY;QACZ,SAAS;QACT,YAAY;QACZ,eAAe;QACf,QAAQ;QACR,kBAAkB;KACnB,CAAC;AACJ,CAAC","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"]}
|
package/lib-commonjs/Cli.js
CHANGED
|
@@ -7,7 +7,11 @@
|
|
|
7
7
|
*/
|
|
8
8
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
9
|
if (k2 === undefined) k2 = k;
|
|
10
|
-
Object.
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
11
15
|
}) : (function(o, m, k, k2) {
|
|
12
16
|
if (k2 === undefined) k2 = k;
|
|
13
17
|
o[k2] = m[k];
|
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"]}
|
|
@@ -5,6 +5,29 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @format
|
|
7
7
|
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
+
if (mod && mod.__esModule) return mod;
|
|
26
|
+
var result = {};
|
|
27
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
+
__setModuleDefault(result, mod);
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
8
31
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
32
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
33
|
};
|
|
@@ -12,7 +35,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
35
|
const fs_1 = __importDefault(require("@react-native-windows/fs"));
|
|
13
36
|
const os_1 = __importDefault(require("os"));
|
|
14
37
|
const path_1 = __importDefault(require("path"));
|
|
15
|
-
const
|
|
38
|
+
const simple_git_1 = __importStar(require("simple-git"));
|
|
16
39
|
const BatchingQueue_1 = __importDefault(require("./BatchingQueue"));
|
|
17
40
|
const FileSystemRepository_1 = __importDefault(require("./FileSystemRepository"));
|
|
18
41
|
const PackageUtils_1 = require("./PackageUtils");
|
|
@@ -35,8 +58,7 @@ class GitReactFileRepository {
|
|
|
35
58
|
static async createAndInit(gitDirectory) {
|
|
36
59
|
const dir = gitDirectory || (await this.defaultGitDirectory());
|
|
37
60
|
await fs_1.default.mkdir(dir, { recursive: true });
|
|
38
|
-
const gitClient = (0,
|
|
39
|
-
gitClient.silent(true);
|
|
61
|
+
const gitClient = (0, simple_git_1.default)(dir);
|
|
40
62
|
if (!(await gitClient.checkIsRepo())) {
|
|
41
63
|
await gitClient.init();
|
|
42
64
|
await gitClient.addConfig('core.autocrlf', 'input');
|
|
@@ -81,7 +103,7 @@ class GitReactFileRepository {
|
|
|
81
103
|
return patch;
|
|
82
104
|
}
|
|
83
105
|
finally {
|
|
84
|
-
await this.gitClient.reset(
|
|
106
|
+
await this.gitClient.reset(simple_git_1.ResetMode.HARD);
|
|
85
107
|
}
|
|
86
108
|
});
|
|
87
109
|
}
|
|
@@ -124,7 +146,7 @@ class GitReactFileRepository {
|
|
|
124
146
|
return { patchedFile, hasConflicts };
|
|
125
147
|
}
|
|
126
148
|
finally {
|
|
127
|
-
await this.gitClient.reset(
|
|
149
|
+
await this.gitClient.reset(simple_git_1.ResetMode.HARD);
|
|
128
150
|
}
|
|
129
151
|
});
|
|
130
152
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GitReactFileRepository.js","sourceRoot":"","sources":["../src/GitReactFileRepository.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 fs from '@react-native-windows/fs';\nimport os from 'os';\nimport path from 'path';\nimport simplegit from 'simple-git/promise';\n\nimport BatchingQueue from './BatchingQueue';\nimport FileSystemRepository from './FileSystemRepository';\nimport {VersionedReactFileRepository} from './FileRepository';\nimport {getNpmPackage} from './PackageUtils';\nimport {fetchFullRef} from './refFromVersion';\n\nconst RN_GITHUB_URL = 'https://github.com/facebook/react-native.git';\n\n/**\n * Retrives React Native files using the React Native Github repo. Switching\n * between getting file contents of different versions may be slow.\n */\nexport default class GitReactFileRepository\n implements VersionedReactFileRepository\n{\n private readonly fileRepo: FileSystemRepository;\n private readonly gitClient: simplegit.SimpleGit;\n private checkedOutVersion?: string;\n private static githubToken?: string;\n\n // We need to ensure it is impossible to check out a new React Native\n // version while an operation hasn't yet finished. We queue each operation to\n // ensure they are performed atomically.\n private readonly batchingQueue: BatchingQueue<string>;\n\n private constructor(gitDirectory: string, gitClient: simplegit.SimpleGit) {\n this.batchingQueue = new BatchingQueue();\n this.fileRepo = new FileSystemRepository(gitDirectory);\n this.gitClient = gitClient;\n }\n\n /**\n * Asynchronusly initialize the scratch repository, creating a new Git repo is needed\n * @param gitDirectory optional repo directory\n */\n static async createAndInit(\n gitDirectory?: string,\n ): Promise<GitReactFileRepository> {\n const dir = gitDirectory || (await this.defaultGitDirectory());\n await fs.mkdir(dir, {recursive: true});\n\n const gitClient = simplegit(dir);\n gitClient.silent(true);\n\n if (!(await gitClient.checkIsRepo())) {\n await gitClient.init();\n await gitClient.addConfig('core.autocrlf', 'input');\n await gitClient.addConfig('core.filemode', 'false');\n await gitClient.addConfig('core.ignorecase', 'true');\n }\n\n return new GitReactFileRepository(dir, gitClient);\n }\n\n /**\n * Set a GitHub API token for all instances of GitReactFileRepository to use\n * when making requests.\n * @param token a GitHub PAT\n */\n static setGithubToken(token: string) {\n GitReactFileRepository.githubToken = token;\n }\n\n async listFiles(\n globs: string[] | undefined,\n reactNativeVersion: string,\n ): Promise<string[]> {\n return this.usingVersion(reactNativeVersion, () =>\n this.fileRepo.listFiles(globs),\n );\n }\n\n async readFile(\n filename: string,\n reactNativeVersion: string,\n ): Promise<Buffer | null> {\n return this.usingVersion(reactNativeVersion, () =>\n this.fileRepo.readFile(filename),\n );\n }\n\n async stat(\n filename: string,\n reactNativeVersion: string,\n ): Promise<'file' | 'directory' | 'none'> {\n return this.usingVersion(reactNativeVersion, () =>\n this.fileRepo.stat(filename),\n );\n }\n\n /**\n * Generate a Git-style patch to transform the given file into the given\n * content.\n */\n async generatePatch(\n filename: string,\n reactNativeVersion: string,\n newContent: Buffer,\n ): Promise<string> {\n return this.usingVersion(reactNativeVersion, async () => {\n await this.ensureFile(filename);\n\n try {\n await this.fileRepo.writeFile(filename, newContent);\n const patch = await this.gitClient.diff([\n '--patch',\n '--ignore-space-at-eol',\n '--binary',\n '--',\n filename,\n ]);\n\n return patch;\n } finally {\n await this.gitClient.reset('hard');\n }\n });\n }\n\n /**\n * Apply a patch to the given file, returning the merged result, which may\n * include conflict markers. The underlying file is not mutated.\n *\n * Git is unable to generate a representation with conflict markers in the\n * event of binary merge conflicts. In this case a null Buffer is returned.\n */\n async getPatchedFile(\n filename: string,\n reactNativeVersion: string,\n patchContent: string,\n ): Promise<{patchedFile: Buffer | null; hasConflicts: boolean}> {\n return this.usingVersion(reactNativeVersion, async () => {\n await this.ensureFile(filename);\n\n try {\n await this.fileRepo.writeFile('rnwgit.patch', patchContent);\n\n let hasConflicts = false;\n let binaryConflicts = false;\n\n try {\n await this.gitClient.raw([\n 'apply',\n '--3way',\n '--whitespace=nowarn',\n 'rnwgit.patch',\n ]);\n } catch (ex) {\n // Hack alert: simple-git doesn't populate exception information from\n // conflicts when we're using raw commands (which we need to since it\n // doesn't support apply). Try to detect if Git gave us a bad exit code\n // because of merge conflicts, which we explicitly want to allow.\n if (!(ex as Error).message.includes('with conflicts')) {\n throw ex;\n }\n\n hasConflicts = true;\n binaryConflicts = (ex as Error).message.includes(\n 'Cannot merge binary files',\n );\n }\n\n const patchedFile = binaryConflicts\n ? null\n : await this.fileRepo.readFile(filename);\n\n return {patchedFile, hasConflicts};\n } finally {\n await this.gitClient.reset('hard');\n }\n });\n }\n\n private async usingVersion<T>(\n reactNativeVersion: string,\n fn: () => Promise<T>,\n ): Promise<T> {\n return await this.batchingQueue.enqueue(reactNativeVersion, async () => {\n await this.checkoutVersion(reactNativeVersion);\n return await fn();\n });\n }\n\n private async checkoutVersion(reactNativeVersion: string) {\n if (reactNativeVersion !== this.checkedOutVersion) {\n if (!(await this.tryCheckoutLocal(reactNativeVersion))) {\n await this.fetchAndCheckout(reactNativeVersion);\n }\n\n this.checkedOutVersion = reactNativeVersion;\n }\n }\n\n private async tryCheckoutLocal(reactNativeVersion: string): Promise<boolean> {\n try {\n await this.gitClient.checkout([reactNativeVersion, '--force']);\n return true;\n } catch {\n return false;\n }\n }\n\n private async fetchAndCheckout(reactNativeVersion: string) {\n const githubToken =\n GitReactFileRepository.githubToken ||\n process.env.PLATFORM_OVERRIDE_GITHUB_TOKEN;\n const gitRef = await fetchFullRef(reactNativeVersion, {githubToken});\n\n try {\n await this.gitClient.fetch([RN_GITHUB_URL, gitRef, '--depth=1']);\n await this.gitClient.checkout(['-b', reactNativeVersion, 'FETCH_HEAD']);\n } catch (ex) {\n throw new Error(\n `Failed to fetch '${gitRef}'. Does it exist? (${\n (ex as Error).message\n })`,\n );\n }\n\n await this.gitClient.checkout([reactNativeVersion, '--force']);\n }\n\n private static async defaultGitDirectory(): Promise<string> {\n return path.join(os.tmpdir(), (await getNpmPackage()).name, 'git');\n }\n\n private async ensureFile(filename: string): Promise<void> {\n const stat = await this.fileRepo.stat(filename);\n if (stat === 'none') {\n throw new Error(\n `Cannot find file \"${filename}\" in react-native@${this.checkedOutVersion}`,\n );\n } else if (stat === 'directory') {\n throw new Error(`\"${filename}\" refers to a directory`);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"GitReactFileRepository.js","sourceRoot":"","sources":["../src/GitReactFileRepository.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 fs from '@react-native-windows/fs';\nimport os from 'os';\nimport path from 'path';\nimport simplegit, {SimpleGit, ResetMode} from 'simple-git';\n\nimport BatchingQueue from './BatchingQueue';\nimport FileSystemRepository from './FileSystemRepository';\nimport {VersionedReactFileRepository} from './FileRepository';\nimport {getNpmPackage} from './PackageUtils';\nimport {fetchFullRef} from './refFromVersion';\n\nconst RN_GITHUB_URL = 'https://github.com/facebook/react-native.git';\n\n/**\n * Retrives React Native files using the React Native Github repo. Switching\n * between getting file contents of different versions may be slow.\n */\nexport default class GitReactFileRepository\n implements VersionedReactFileRepository\n{\n private readonly fileRepo: FileSystemRepository;\n private readonly gitClient: SimpleGit;\n private checkedOutVersion?: string;\n private static githubToken?: string;\n\n // We need to ensure it is impossible to check out a new React Native\n // version while an operation hasn't yet finished. We queue each operation to\n // ensure they are performed atomically.\n private readonly batchingQueue: BatchingQueue<string>;\n\n private constructor(gitDirectory: string, gitClient: SimpleGit) {\n this.batchingQueue = new BatchingQueue();\n this.fileRepo = new FileSystemRepository(gitDirectory);\n this.gitClient = gitClient;\n }\n\n /**\n * Asynchronusly initialize the scratch repository, creating a new Git repo is needed\n * @param gitDirectory optional repo directory\n */\n static async createAndInit(\n gitDirectory?: string,\n ): Promise<GitReactFileRepository> {\n const dir = gitDirectory || (await this.defaultGitDirectory());\n await fs.mkdir(dir, {recursive: true});\n\n const gitClient = simplegit(dir);\n\n if (!(await gitClient.checkIsRepo())) {\n await gitClient.init();\n await gitClient.addConfig('core.autocrlf', 'input');\n await gitClient.addConfig('core.filemode', 'false');\n await gitClient.addConfig('core.ignorecase', 'true');\n }\n\n return new GitReactFileRepository(dir, gitClient);\n }\n\n /**\n * Set a GitHub API token for all instances of GitReactFileRepository to use\n * when making requests.\n * @param token a GitHub PAT\n */\n static setGithubToken(token: string) {\n GitReactFileRepository.githubToken = token;\n }\n\n async listFiles(\n globs: string[] | undefined,\n reactNativeVersion: string,\n ): Promise<string[]> {\n return this.usingVersion(reactNativeVersion, () =>\n this.fileRepo.listFiles(globs),\n );\n }\n\n async readFile(\n filename: string,\n reactNativeVersion: string,\n ): Promise<Buffer | null> {\n return this.usingVersion(reactNativeVersion, () =>\n this.fileRepo.readFile(filename),\n );\n }\n\n async stat(\n filename: string,\n reactNativeVersion: string,\n ): Promise<'file' | 'directory' | 'none'> {\n return this.usingVersion(reactNativeVersion, () =>\n this.fileRepo.stat(filename),\n );\n }\n\n /**\n * Generate a Git-style patch to transform the given file into the given\n * content.\n */\n async generatePatch(\n filename: string,\n reactNativeVersion: string,\n newContent: Buffer,\n ): Promise<string> {\n return this.usingVersion(reactNativeVersion, async () => {\n await this.ensureFile(filename);\n\n try {\n await this.fileRepo.writeFile(filename, newContent);\n const patch = await this.gitClient.diff([\n '--patch',\n '--ignore-space-at-eol',\n '--binary',\n '--',\n filename,\n ]);\n\n return patch;\n } finally {\n await this.gitClient.reset(ResetMode.HARD);\n }\n });\n }\n\n /**\n * Apply a patch to the given file, returning the merged result, which may\n * include conflict markers. The underlying file is not mutated.\n *\n * Git is unable to generate a representation with conflict markers in the\n * event of binary merge conflicts. In this case a null Buffer is returned.\n */\n async getPatchedFile(\n filename: string,\n reactNativeVersion: string,\n patchContent: string,\n ): Promise<{patchedFile: Buffer | null; hasConflicts: boolean}> {\n return this.usingVersion(reactNativeVersion, async () => {\n await this.ensureFile(filename);\n\n try {\n await this.fileRepo.writeFile('rnwgit.patch', patchContent);\n\n let hasConflicts = false;\n let binaryConflicts = false;\n\n try {\n await this.gitClient.raw([\n 'apply',\n '--3way',\n '--whitespace=nowarn',\n 'rnwgit.patch',\n ]);\n } catch (ex) {\n // Hack alert: simple-git doesn't populate exception information from\n // conflicts when we're using raw commands (which we need to since it\n // doesn't support apply). Try to detect if Git gave us a bad exit code\n // because of merge conflicts, which we explicitly want to allow.\n if (!(ex as Error).message.includes('with conflicts')) {\n throw ex;\n }\n\n hasConflicts = true;\n binaryConflicts = (ex as Error).message.includes(\n 'Cannot merge binary files',\n );\n }\n\n const patchedFile = binaryConflicts\n ? null\n : await this.fileRepo.readFile(filename);\n\n return {patchedFile, hasConflicts};\n } finally {\n await this.gitClient.reset(ResetMode.HARD);\n }\n });\n }\n\n private async usingVersion<T>(\n reactNativeVersion: string,\n fn: () => Promise<T>,\n ): Promise<T> {\n return await this.batchingQueue.enqueue(reactNativeVersion, async () => {\n await this.checkoutVersion(reactNativeVersion);\n return await fn();\n });\n }\n\n private async checkoutVersion(reactNativeVersion: string) {\n if (reactNativeVersion !== this.checkedOutVersion) {\n if (!(await this.tryCheckoutLocal(reactNativeVersion))) {\n await this.fetchAndCheckout(reactNativeVersion);\n }\n\n this.checkedOutVersion = reactNativeVersion;\n }\n }\n\n private async tryCheckoutLocal(reactNativeVersion: string): Promise<boolean> {\n try {\n await this.gitClient.checkout([reactNativeVersion, '--force']);\n return true;\n } catch {\n return false;\n }\n }\n\n private async fetchAndCheckout(reactNativeVersion: string) {\n const githubToken =\n GitReactFileRepository.githubToken ||\n process.env.PLATFORM_OVERRIDE_GITHUB_TOKEN;\n const gitRef = await fetchFullRef(reactNativeVersion, {githubToken});\n\n try {\n await this.gitClient.fetch([RN_GITHUB_URL, gitRef, '--depth=1']);\n await this.gitClient.checkout(['-b', reactNativeVersion, 'FETCH_HEAD']);\n } catch (ex) {\n throw new Error(\n `Failed to fetch '${gitRef}'. Does it exist? (${\n (ex as Error).message\n })`,\n );\n }\n\n await this.gitClient.checkout([reactNativeVersion, '--force']);\n }\n\n private static async defaultGitDirectory(): Promise<string> {\n return path.join(os.tmpdir(), (await getNpmPackage()).name, 'git');\n }\n\n private async ensureFile(filename: string): Promise<void> {\n const stat = await this.fileRepo.stat(filename);\n if (stat === 'none') {\n throw new Error(\n `Cannot find file \"${filename}\" in react-native@${this.checkedOutVersion}`,\n );\n } else if (stat === 'directory') {\n throw new Error(`\"${filename}\" refers to a directory`);\n }\n }\n}\n"]}
|
|
@@ -7,7 +7,11 @@
|
|
|
7
7
|
*/
|
|
8
8
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
9
|
if (k2 === undefined) k2 = k;
|
|
10
|
-
Object.
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
11
15
|
}) : (function(o, m, k, k2) {
|
|
12
16
|
if (k2 === undefined) k2 = k;
|
|
13
17
|
o[k2] = m[k];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverridePrompt.js","sourceRoot":"","sources":["../src/OverridePrompt.ts"],"names":[],"mappings":";AAAA;;;;;GAKG
|
|
1
|
+
{"version":3,"file":"OverridePrompt.js","sourceRoot":"","sources":["../src/OverridePrompt.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 FileSearch from './FileSearch';\nimport inquirer from 'inquirer';\nimport path from 'path';\n\nimport Override from './Override';\nimport OverrideFactory from './OverrideFactory';\nimport {normalizePath} from './PathUtils';\n\nexport type OverridePromptAnswers =\n | {type: 'derived'; baseFile: string; codeCopied: boolean; issue?: number}\n | {type: 'patch'; baseFile: string; issue: number}\n | {type: 'platform'}\n | {type: 'copy'; baseFile: string; issue: number}\n | {type: 'directoryCopy'; baseDirectory: string; issue: number};\n\nexport async function overrideFromDetails(\n overridePath: string,\n answers: OverridePromptAnswers,\n factory: OverrideFactory,\n): Promise<Override> {\n const manifestPath = await FileSearch.findManifest(overridePath);\n const manifestDir = path.dirname(manifestPath);\n const overrideName = normalizePath(path.relative(manifestDir, overridePath));\n\n switch (answers.type) {\n case 'derived':\n return factory.createDerivedOverride(\n overrideName,\n answers.baseFile,\n answers.issue,\n );\n case 'patch':\n return factory.createPatchOverride(\n overrideName,\n answers.baseFile,\n answers.issue,\n );\n case 'platform':\n return factory.createPlatformOverride(overridePath);\n case 'copy':\n return factory.createCopyOverride(\n overrideName,\n answers.baseFile,\n answers.issue,\n );\n case 'directoryCopy':\n return factory.createDirectoryCopyOverride(\n overrideName,\n answers.baseDirectory,\n answers.issue,\n );\n }\n}\n\nexport async function promptForOverrideDetails(): Promise<OverridePromptAnswers> {\n return inquirer.prompt([\n {\n type: 'list',\n name: 'type',\n message: 'Override type:',\n choices: [\n {\n name: 'Derived from upstream (E.g. a Windows implementation of an existing component)',\n value: 'derived',\n short: 'Derived',\n },\n {\n name: 'Patches to upstream (E.g. commenting out code)',\n value: 'patch',\n short: 'Patch',\n },\n {\n name: 'Independent platform logic (E.g. Windows-specific modules)',\n value: 'platform',\n short: 'Platform',\n },\n {\n name: 'Copy of an upstream file',\n value: 'copy',\n short: 'Copy',\n },\n {\n name: 'Copy of an upstream directory',\n value: 'directoryCopy',\n short: 'Directory Copy',\n },\n ],\n },\n {\n when: (res) => res.type === 'derived',\n type: 'confirm',\n name: 'codeCopied',\n default: true,\n message: 'Does the derived file copy code from upstream?',\n },\n {\n when: (res) =>\n (res.type === 'derived' && res.codeCopied) ||\n ['copy', 'directoryCopy', 'patch'].includes(res.type),\n type: 'input',\n validate: validateIssueNumber,\n filter: filterIssueNumber,\n askAnswered: true,\n name: 'issue',\n message: 'Issue number tracking removal:',\n },\n {\n when: (res) => ['copy', 'patch', 'derived'].includes(res.type),\n type: 'input',\n name: 'baseFile',\n message: 'What file is this override based off of?',\n },\n {\n when: (res) => res.type === 'directoryCopy',\n type: 'input',\n name: 'baseDirectory',\n message: 'What directory are you copying from?',\n },\n ]);\n}\n\nfunction filterIssueNumber(answer: string): number | string {\n const parsedInt = Number.parseInt(answer, 10);\n return Number.isInteger(parsedInt) ? parsedInt : '';\n}\n\nfunction validateIssueNumber(answer: string): boolean | string {\n return (\n Number.isInteger(Number.parseInt(answer, 10)) || 'Issue must be a number'\n );\n}\n"]}
|
|
@@ -7,7 +7,11 @@
|
|
|
7
7
|
*/
|
|
8
8
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
9
|
if (k2 === undefined) k2 = k;
|
|
10
|
-
Object.
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
11
15
|
}) : (function(o, m, k, k2) {
|
|
12
16
|
if (k2 === undefined) k2 = k;
|
|
13
17
|
o[k2] = m[k];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Serialized.js","sourceRoot":"","sources":["../src/Serialized.ts"],"names":[],"mappings":";AAAA;;;;;GAKG
|
|
1
|
+
{"version":3,"file":"Serialized.js","sourceRoot":"","sources":["../src/Serialized.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 fs from '@react-native-windows/fs';\nimport path from 'path';\nimport * as t from 'io-ts';\n\nimport {ThrowReporter} from 'io-ts/lib/ThrowReporter';\n\n/**\n * Serialized form of {@see PlatformOverride}\n */\nconst PlatformOverrideType = t.type({\n type: t.literal('platform'),\n file: t.string,\n});\n\n/**\n * Serialized form of {@see PatchOverride}\n */\nconst PatchOverrideType = t.type({\n type: t.literal('patch'),\n file: t.string,\n baseFile: t.string,\n baseVersion: t.union([t.undefined, t.string]),\n baseHash: t.string,\n issue: t.union([t.undefined, t.number]),\n});\n\n/**\n * Serialized form of {@see DerivedOverride}\n */\nconst DerivedOverrideType = t.type({\n type: t.literal('derived'),\n file: t.string,\n baseFile: t.string,\n baseVersion: t.union([t.undefined, t.string]),\n baseHash: t.string,\n issue: t.union([t.undefined, t.number]),\n});\n\n/**\n * Serialized form of {@see CopyOverride}\n */\nconst CopyOverrideType = t.type({\n type: t.literal('copy'),\n file: t.string,\n baseFile: t.string,\n baseVersion: t.union([t.undefined, t.string]),\n baseHash: t.string,\n issue: t.union([t.undefined, t.number]),\n});\n\n/**\n * Serialized form of {@see DirectoryCopyOverride}\n */\nconst DirectoryCopyOverrideType = t.type({\n type: t.literal('copy'),\n directory: t.string,\n baseDirectory: t.string,\n baseVersion: t.union([t.undefined, t.string]),\n baseHash: t.string,\n issue: t.union([t.undefined, t.number]),\n});\n\n/**\n * Union of all serialized override types\n */\nconst OverrideType = t.union([\n PlatformOverrideType,\n PatchOverrideType,\n DerivedOverrideType,\n CopyOverrideType,\n DirectoryCopyOverrideType,\n]);\n\n/**\n * Schema for the \"overrides.json\" manifest\n */\nconst ManifestType = t.type({\n includePatterns: t.union([t.undefined, t.array(t.string)]),\n excludePatterns: t.union([t.undefined, t.array(t.string)]),\n baseVersion: t.union([t.undefined, t.string]),\n overrides: t.array(OverrideType),\n});\n\nexport type PlatformOverride = t.TypeOf<typeof PlatformOverrideType>;\nexport type PatchOverride = t.TypeOf<typeof PatchOverrideType>;\nexport type DerivedOverride = t.TypeOf<typeof DerivedOverrideType>;\nexport type CopyOverride = t.TypeOf<typeof CopyOverrideType>;\nexport type DirectoryCopyOverride = t.TypeOf<typeof DirectoryCopyOverrideType>;\nexport type Override = t.TypeOf<typeof OverrideType>;\nexport type Manifest = t.TypeOf<typeof ManifestType>;\n\n/**\n * Read an override manifest from a file.\n *\n * @throws if the file is invalid or cannot be found\n */\nexport async function readManifestFromFile(\n filePath: string,\n): Promise<Manifest> {\n const json = (await fs.readFile(filePath)).toString();\n return parseManifest(json);\n}\n\n/**\n * Parse a string with JSON for the override manifest into one.\n *\n * @throws if the JSON doesn't describe a valid manifest\n */\nexport function parseManifest(json: string): Manifest {\n const parsed = JSON.parse(json);\n\n try {\n ThrowReporter.report(ManifestType.decode(parsed));\n } catch (ex) {\n throw new Error('Could not parse manifest. Is it valid?');\n }\n\n return parsed;\n}\n\n/**\n * Writes the manifest to a JSON file. Does not validate correctness of the\n * manifest.\n */\nexport async function writeManifestToFile(\n manifest: Manifest,\n filePath: string,\n) {\n const json = JSON.stringify(manifest, null /*replacer*/, 2 /*space*/);\n await fs.mkdir(path.dirname(filePath), {recursive: true});\n await fs.writeFile(filePath, json);\n}\n"]}
|
|
@@ -7,7 +7,11 @@
|
|
|
7
7
|
*/
|
|
8
8
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
9
|
if (k2 === undefined) k2 = k;
|
|
10
|
-
Object.
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
11
15
|
}) : (function(o, m, k, k2) {
|
|
12
16
|
if (k2 === undefined) k2 = k;
|
|
13
17
|
o[k2] = m[k];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateManifest.js","sourceRoot":"","sources":["../../src/scripts/generateManifest.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 FileRepository from '../FileRepository';\nimport * as Serialized from '../Serialized';\n\nimport ora from 'ora';\nimport path from 'path';\nimport yargs from 'yargs';\n\nimport FileSystemRepository from '../FileSystemRepository';\nimport GitReactFileRepository from '../GitReactFileRepository';\n\nimport {diff_match_patch} from 'diff-match-patch';\nimport {getInstalledRNVersion} from '../PackageUtils';\nimport {hashContent} from '../Hash';\n\nimport isUtf8 from 'isutf8';\n\nconst {extensions, directory} = yargs\n .options({\n directory: {\n description:\n 'The directory containing files that should be in the manifest',\n type: 'string',\n demandOption: true,\n },\n extensions: {\n description: 'A list of platform specific JS extensions to include',\n type: 'array',\n demandOption: true,\n },\n })\n .version(false).argv;\n\nconst extensionsRegex = new RegExp(extensions.map((e) => `\\\\.${e}`).join('|'));\n\n(async () => {\n const spinner = ora();\n spinner.start('Creating manifest');\n\n const version = await getInstalledRNVersion();\n const [overrides, reactSources] = await getFileRepos(directory, version);\n const manifest: Serialized.Manifest = {\n includePatterns: undefined,\n excludePatterns: undefined,\n baseVersion: version,\n overrides: [],\n };\n const overrideFiles = await overrides.listFiles();\n\n let i = 0;\n for (const file of overrideFiles) {\n spinner.text = `Creating manifest (${++i}/${overrideFiles.length})`;\n\n const contents = (await overrides.readFile(file))!;\n (await tryAddCopy(file, contents, reactSources, manifest)) ||\n (await tryAddPatch(file, contents, reactSources, manifest)) ||\n (await tryAddDerived(file, contents, reactSources, manifest)) ||\n addUnknown(file, manifest);\n }\n\n const ovrFile = path.join(directory, 'overrides.json');\n await Serialized.writeManifestToFile(manifest, ovrFile);\n\n spinner.succeed();\n})();\n\nasync function tryAddCopy(\n filename: string,\n overrideContent: Buffer,\n reactSources: FileRepository.ReactFileRepository,\n manifest: Serialized.Manifest,\n): Promise<boolean> {\n const baseContent = await reactSources.readFile(filename);\n if (!baseContent) {\n return false;\n }\n\n if (hashContent(baseContent) !== hashContent(overrideContent)) {\n return false;\n }\n\n manifest.overrides.push({\n type: 'copy',\n file: filename,\n baseFile: filename,\n baseVersion: undefined,\n baseHash: hashContent(baseContent),\n issue: undefined,\n });\n\n return true;\n}\n\nasync function tryAddPatch(\n filename: string,\n overrideContent: Buffer,\n reactSources: FileRepository.ReactFileRepository,\n manifest: Serialized.Manifest,\n): Promise<boolean> {\n const baseFile = filename.replace(extensionsRegex, '');\n const baseContent = await reactSources.readFile(baseFile);\n\n if (!baseContent) {\n return false;\n }\n\n const {similar} = computeSimilarity(overrideContent, baseContent);\n if (similar) {\n manifest.overrides.push({\n type: 'patch',\n file: filename,\n baseFile: baseFile,\n baseVersion: undefined,\n baseHash: hashContent(baseContent),\n issue: undefined,\n });\n } else {\n addUnknown(filename, manifest);\n }\n\n return true;\n}\n\nasync function tryAddDerived(\n filename: string,\n overrideContent: Buffer,\n reactSources: FileRepository.ReactFileRepository,\n manifest: Serialized.Manifest,\n): Promise<boolean> {\n const matches: Array<{file: string; contents: Buffer; dist: number}> = [];\n\n const droidFile = filename.replace(extensionsRegex, '.android');\n const droidContents = await reactSources.readFile(droidFile);\n const droidSim =\n droidContents && computeSimilarity(overrideContent, droidContents);\n if (droidSim && droidSim.similar) {\n matches.push({\n file: droidFile,\n contents: droidContents!,\n dist: droidSim.editDistance,\n });\n }\n\n const iosFile = filename.replace(extensionsRegex, '.ios');\n const iosContents = await reactSources.readFile(iosFile);\n const iosSim = iosContents && computeSimilarity(overrideContent, iosContents);\n if (iosSim && iosSim.similar) {\n matches.push({\n file: iosFile,\n contents: iosContents!,\n dist: iosSim.editDistance,\n });\n }\n\n if (matches.length === 0) {\n return false;\n }\n\n const bestMatch = matches.reduce((a, b) => (a.dist < b.dist ? a : b));\n manifest.overrides.push({\n type: 'derived',\n file: filename,\n baseFile: bestMatch.file,\n baseVersion: undefined,\n baseHash: hashContent(bestMatch.contents),\n issue: undefined,\n });\n\n return true;\n}\n\nfunction addUnknown(filename: string, manifest: Serialized.Manifest) {\n (manifest.overrides as Array<any>).push({\n type: '???',\n file: filename,\n baseFile: '???',\n baseHash: '???',\n });\n}\n\nasync function getFileRepos(\n overrideovrPath: string,\n rnVersion: string,\n): Promise<\n [FileRepository.WritableFileRepository, FileRepository.ReactFileRepository]\n> {\n const overrides = new FileSystemRepository(overrideovrPath);\n\n const versionedReactSources = await GitReactFileRepository.createAndInit();\n const reactSources = FileRepository.bindVersion(\n versionedReactSources,\n rnVersion,\n );\n\n return [overrides, reactSources];\n}\n\nfunction computeSimilarity(\n override: Buffer,\n source: Buffer,\n): {similar: boolean; editDistance: number} {\n if (!isUtf8(override) || !isUtf8(source)) {\n return {similar: false, editDistance: NaN};\n }\n\n let overrideStr = override.toString();\n let sourceStr = source.toString();\n\n overrideStr = stripCopyrightHeaders(overrideStr);\n sourceStr = stripCopyrightHeaders(sourceStr);\n\n const differ = new diff_match_patch();\n const diffs = differ.diff_main(sourceStr, overrideStr);\n\n const editDistance = differ.diff_levenshtein(diffs);\n const similar =\n editDistance / Math.max(overrideStr.length, sourceStr.length) < 0.8;\n return {similar, editDistance};\n}\n\nfunction stripCopyrightHeaders(str: string): string {\n if (!str.startsWith('/*')) {\n return str;\n }\n\n const headerEnd = str.indexOf('*/') + 1;\n return str.slice(headerEnd);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"generateManifest.js","sourceRoot":"","sources":["../../src/scripts/generateManifest.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 FileRepository from '../FileRepository';\nimport * as Serialized from '../Serialized';\n\nimport ora from 'ora';\nimport path from 'path';\nimport yargs from 'yargs';\n\nimport FileSystemRepository from '../FileSystemRepository';\nimport GitReactFileRepository from '../GitReactFileRepository';\n\nimport {diff_match_patch} from 'diff-match-patch';\nimport {getInstalledRNVersion} from '../PackageUtils';\nimport {hashContent} from '../Hash';\n\nimport isUtf8 from 'isutf8';\n\nconst {extensions, directory} = yargs\n .options({\n directory: {\n description:\n 'The directory containing files that should be in the manifest',\n type: 'string',\n demandOption: true,\n },\n extensions: {\n description: 'A list of platform specific JS extensions to include',\n type: 'array',\n demandOption: true,\n },\n })\n .version(false).argv;\n\nconst extensionsRegex = new RegExp(extensions.map((e) => `\\\\.${e}`).join('|'));\n\n(async () => {\n const spinner = ora();\n spinner.start('Creating manifest');\n\n const version = await getInstalledRNVersion();\n const [overrides, reactSources] = await getFileRepos(directory, version);\n const manifest: Serialized.Manifest = {\n includePatterns: undefined,\n excludePatterns: undefined,\n baseVersion: version,\n overrides: [],\n };\n const overrideFiles = await overrides.listFiles();\n\n let i = 0;\n for (const file of overrideFiles) {\n spinner.text = `Creating manifest (${++i}/${overrideFiles.length})`;\n\n const contents = (await overrides.readFile(file))!;\n (await tryAddCopy(file, contents, reactSources, manifest)) ||\n (await tryAddPatch(file, contents, reactSources, manifest)) ||\n (await tryAddDerived(file, contents, reactSources, manifest)) ||\n addUnknown(file, manifest);\n }\n\n const ovrFile = path.join(directory, 'overrides.json');\n await Serialized.writeManifestToFile(manifest, ovrFile);\n\n spinner.succeed();\n})();\n\nasync function tryAddCopy(\n filename: string,\n overrideContent: Buffer,\n reactSources: FileRepository.ReactFileRepository,\n manifest: Serialized.Manifest,\n): Promise<boolean> {\n const baseContent = await reactSources.readFile(filename);\n if (!baseContent) {\n return false;\n }\n\n if (hashContent(baseContent) !== hashContent(overrideContent)) {\n return false;\n }\n\n manifest.overrides.push({\n type: 'copy',\n file: filename,\n baseFile: filename,\n baseVersion: undefined,\n baseHash: hashContent(baseContent),\n issue: undefined,\n });\n\n return true;\n}\n\nasync function tryAddPatch(\n filename: string,\n overrideContent: Buffer,\n reactSources: FileRepository.ReactFileRepository,\n manifest: Serialized.Manifest,\n): Promise<boolean> {\n const baseFile = filename.replace(extensionsRegex, '');\n const baseContent = await reactSources.readFile(baseFile);\n\n if (!baseContent) {\n return false;\n }\n\n const {similar} = computeSimilarity(overrideContent, baseContent);\n if (similar) {\n manifest.overrides.push({\n type: 'patch',\n file: filename,\n baseFile: baseFile,\n baseVersion: undefined,\n baseHash: hashContent(baseContent),\n issue: undefined,\n });\n } else {\n addUnknown(filename, manifest);\n }\n\n return true;\n}\n\nasync function tryAddDerived(\n filename: string,\n overrideContent: Buffer,\n reactSources: FileRepository.ReactFileRepository,\n manifest: Serialized.Manifest,\n): Promise<boolean> {\n const matches: Array<{file: string; contents: Buffer; dist: number}> = [];\n\n const droidFile = filename.replace(extensionsRegex, '.android');\n const droidContents = await reactSources.readFile(droidFile);\n const droidSim =\n droidContents && computeSimilarity(overrideContent, droidContents);\n if (droidSim && droidSim.similar) {\n matches.push({\n file: droidFile,\n contents: droidContents!,\n dist: droidSim.editDistance,\n });\n }\n\n const iosFile = filename.replace(extensionsRegex, '.ios');\n const iosContents = await reactSources.readFile(iosFile);\n const iosSim = iosContents && computeSimilarity(overrideContent, iosContents);\n if (iosSim && iosSim.similar) {\n matches.push({\n file: iosFile,\n contents: iosContents!,\n dist: iosSim.editDistance,\n });\n }\n\n if (matches.length === 0) {\n return false;\n }\n\n const bestMatch = matches.reduce((a, b) => (a.dist < b.dist ? a : b));\n manifest.overrides.push({\n type: 'derived',\n file: filename,\n baseFile: bestMatch.file,\n baseVersion: undefined,\n baseHash: hashContent(bestMatch.contents),\n issue: undefined,\n });\n\n return true;\n}\n\nfunction addUnknown(filename: string, manifest: Serialized.Manifest) {\n (manifest.overrides as Array<any>).push({\n type: '???',\n file: filename,\n baseFile: '???',\n baseHash: '???',\n });\n}\n\nasync function getFileRepos(\n overrideovrPath: string,\n rnVersion: string,\n): Promise<\n [FileRepository.WritableFileRepository, FileRepository.ReactFileRepository]\n> {\n const overrides = new FileSystemRepository(overrideovrPath);\n\n const versionedReactSources = await GitReactFileRepository.createAndInit();\n const reactSources = FileRepository.bindVersion(\n versionedReactSources,\n rnVersion,\n );\n\n return [overrides, reactSources];\n}\n\nfunction computeSimilarity(\n override: Buffer,\n source: Buffer,\n): {similar: boolean; editDistance: number} {\n if (!isUtf8(override) || !isUtf8(source)) {\n return {similar: false, editDistance: NaN};\n }\n\n let overrideStr = override.toString();\n let sourceStr = source.toString();\n\n overrideStr = stripCopyrightHeaders(overrideStr);\n sourceStr = stripCopyrightHeaders(sourceStr);\n\n const differ = new diff_match_patch();\n const diffs = differ.diff_main(sourceStr, overrideStr);\n\n const editDistance = differ.diff_levenshtein(diffs);\n const similar =\n editDistance / Math.max(overrideStr.length, sourceStr.length) < 0.8;\n return {similar, editDistance};\n}\n\nfunction stripCopyrightHeaders(str: string): string {\n if (!str.startsWith('/*')) {\n return str;\n }\n\n const headerEnd = str.indexOf('*/') + 1;\n return str.slice(headerEnd);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-platform-override",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.8",
|
|
4
4
|
"description": "react-native-platform-override offers CLI tools to manage Javascript overrides in out-of-tree React Native platforms",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./lib-commonjs/Api.js",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"react-native-platform-override": "./bin.js"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@react-native-windows/fs": "^
|
|
26
|
-
"@react-native-windows/package-utils": "^0.0.0-canary.
|
|
25
|
+
"@react-native-windows/fs": "^0.0.0-canary.1",
|
|
26
|
+
"@react-native-windows/package-utils": "^0.0.0-canary.27",
|
|
27
27
|
"async": "^3.2.0",
|
|
28
28
|
"chalk": "^4.1.0",
|
|
29
29
|
"fp-ts": "^2.5.0",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"node-fetch": "^2.6.7",
|
|
36
36
|
"ora": "^3.4.0",
|
|
37
37
|
"semver": "^7.3.2",
|
|
38
|
-
"simple-git": "^
|
|
38
|
+
"simple-git": "^3.3.0",
|
|
39
39
|
"source-map-support": "^0.5.19",
|
|
40
40
|
"upath": "^1.2.0",
|
|
41
41
|
"yargs": "^16.2.0"
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@babel/core": "^7.14.0",
|
|
45
45
|
"@babel/preset-env": "^7.8.4",
|
|
46
46
|
"@babel/preset-typescript": "^7.8.3",
|
|
47
|
-
"@react-native-windows/package-utils": "0.0.0-canary.
|
|
47
|
+
"@react-native-windows/package-utils": "0.0.0-canary.27",
|
|
48
48
|
"@rnw-scripts/eslint-config": "1.1.11",
|
|
49
49
|
"@rnw-scripts/jest-unittest-config": "1.2.6",
|
|
50
50
|
"@rnw-scripts/just-task": "2.2.3",
|