react-native-platform-override 1.9.5 → 1.9.6

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.
Files changed (38) hide show
  1. package/lib-commonjs/Api.d.ts +2 -2
  2. package/lib-commonjs/Api.js +1 -1
  3. package/lib-commonjs/Api.js.map +1 -1
  4. package/lib-commonjs/Cli.js +1 -1
  5. package/lib-commonjs/Cli.js.map +1 -1
  6. package/lib-commonjs/DiffStrategy.d.ts +1 -1
  7. package/lib-commonjs/DiffStrategy.js +1 -1
  8. package/lib-commonjs/DiffStrategy.js.map +1 -1
  9. package/lib-commonjs/FileSearch.d.ts +2 -2
  10. package/lib-commonjs/FileSearch.js +2 -2
  11. package/lib-commonjs/FileSearch.js.map +1 -1
  12. package/lib-commonjs/FileSystemRepository.d.ts +1 -1
  13. package/lib-commonjs/FileSystemRepository.js +1 -1
  14. package/lib-commonjs/FileSystemRepository.js.map +1 -1
  15. package/lib-commonjs/GitReactFileRepository.d.ts +2 -2
  16. package/lib-commonjs/GitReactFileRepository.js +2 -2
  17. package/lib-commonjs/GitReactFileRepository.js.map +1 -1
  18. package/lib-commonjs/Hash.js +1 -1
  19. package/lib-commonjs/Hash.js.map +1 -1
  20. package/lib-commonjs/Manifest.d.ts +1 -1
  21. package/lib-commonjs/Manifest.js +1 -1
  22. package/lib-commonjs/Manifest.js.map +1 -1
  23. package/lib-commonjs/Override.d.ts +1 -1
  24. package/lib-commonjs/Override.js +2 -2
  25. package/lib-commonjs/Override.js.map +1 -1
  26. package/lib-commonjs/OverrideFactory.d.ts +1 -1
  27. package/lib-commonjs/OverrideFactory.js +1 -1
  28. package/lib-commonjs/OverrideFactory.js.map +1 -1
  29. package/lib-commonjs/PackageUtils.js +1 -1
  30. package/lib-commonjs/PackageUtils.js.map +1 -1
  31. package/lib-commonjs/UpgradeStrategy.d.ts +1 -1
  32. package/lib-commonjs/UpgradeStrategy.js +2 -2
  33. package/lib-commonjs/UpgradeStrategy.js.map +1 -1
  34. package/lib-commonjs/ValidationStrategy.js +1 -1
  35. package/lib-commonjs/ValidationStrategy.js.map +1 -1
  36. package/lib-commonjs/scripts/testLocks.js +1 -1
  37. package/lib-commonjs/scripts/testLocks.js.map +1 -1
  38. package/package.json +4 -4
@@ -39,11 +39,11 @@ export declare function getOverrideFactory(manifestPath: string, opts?: {
39
39
  */
40
40
  export declare function addOverride(override: Override, manifestPath: string): Promise<void>;
41
41
  /**
42
- * Ouputs a patch-style diff of an override compared to its original source
42
+ * Outputs a patch-style diff of an override compared to its original source
43
43
  */
44
44
  export declare function diffOverride(overrideName: string, manifestPath: string): Promise<string>;
45
45
  /**
46
- * Receives notifications on progress during overide upgrades
46
+ * Receives notifications on progress during override upgrades
47
47
  */
48
48
  export type UpgradeProgressListener = (currentOverride: number, totalOverrides: number) => void;
49
49
  /**
@@ -102,7 +102,7 @@ async function addOverride(override, manifestPath) {
102
102
  }
103
103
  exports.addOverride = addOverride;
104
104
  /**
105
- * Ouputs a patch-style diff of an override compared to its original source
105
+ * Outputs a patch-style diff of an override compared to its original source
106
106
  */
107
107
  async function diffOverride(overrideName, manifestPath) {
108
108
  const ctx = await createManifestContext(manifestPath);
@@ -1 +1 @@
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,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC;SACvC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,CAAC;IAE5D,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,QAAa,EAAE,EAAE;QACtB,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,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,CAC1E,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAExB,GAAG,cAAc;aACd,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC;aAC/B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC;KAChC,CAAC;IAEF,MAAM,IAAA,iBAAS,EAAC,iBAAiB,EAAE,oBAAoB,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE;QACpE,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;AApED,4CAoEC;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: any) => {\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.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 * Outputs 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 override 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: any) => {\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.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"]}
@@ -268,7 +268,7 @@ async function printValidationErrors(errors) {
268
268
  printErrorType('expectedDirectory', errors, 'The following overrides should operate on directories, but listed files:');
269
269
  }
270
270
  /**
271
- * Print validation errors of a speccific type
271
+ * Print validation errors of a specific type
272
272
  */
273
273
  function printErrorType(type, errors, message) {
274
274
  const filteredErrors = errors.filter(err => err.type === type);
@@ -1 +1 @@
1
- {"version":3,"file":"Cli.js","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAE7B,kDAA0B;AAC1B,8CAAsB;AACtB,gDAAwB;AACxB,kDAA0B;AAE1B,6CAA4D;AAC5D,qDAA+E;AAE/E,0EAAkD;AAClD,sFAA8D;AAG9D,iDAA6C;AAE7C,KAAK,MAAM,CAAC,KAAK,IAAI,EAAE;IACrB,MAAM,UAAU,GAAG,MAAM,IAAA,4BAAa,GAAE,CAAC;IAEzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;QACtC,eAAK;aACF,OAAO,CACN,UAAU,EACV,mDAAmD,EACnD,QAAQ,CAAC,EAAE,CACT,QAAQ,CAAC,OAAO,CAAC;YACf,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,oDAAoD;aAC/D;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,gDAAgD;aAC3D;SACF,CAAC;QACJ,kEAAkE;QAClE,OAAO,CAAC,EAAE,CACR,iBAAiB,CAAC;YAChB,YAAY,EAAE,OAAO,CAAC,QAAQ;YAC9B,kBAAkB,EAAE,OAAO,CAAC,OAAO;SACpC,CAAC,CACL;aACA,OAAO,CACN,gBAAgB,EAChB,iCAAiC,EACjC,QAAQ,CAAC,EAAE,CACT,QAAQ,CAAC,OAAO,CAAC;YACf,QAAQ,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,EAAC;SAC5D,CAAC;QACJ,kEAAkE;QAClE,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,QAAS,CAAC,CAC1C;aACA,OAAO,CACN,mBAAmB,EACnB,sCAAsC,EACtC,QAAQ,CAAC,EAAE,CACT,QAAQ,CAAC,OAAO,CAAC;YACf,QAAQ,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,wBAAwB,EAAC;SAC/D,CAAC;QACJ,kEAAkE;QAClE,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,QAAS,CAAC,CAC7C;aACA,OAAO,CACN,iBAAiB,EACjB,8DAA8D,EAC9D,QAAQ,CAAC,EAAE,CACT,QAAQ,CAAC,OAAO,CAAC;YACf,QAAQ,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,EAAC;SAC5D,CAAC;QACJ,kEAAkE;QAClE,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,QAAS,CAAC,CAC3C;aACA,OAAO,CACN,SAAS,EACT,wEAAwE,EACxE,QAAQ,CAAC,EAAE,CACT,QAAQ,CAAC,OAAO,CAAC;YACf,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,qDAAqD;aAChE;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,gDAAgD;aAC3D;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,gDAAgD;aAC3D;SACF,CAAC;QACJ,kEAAkE;QAClE,OAAO,CAAC,EAAE,CACR,OAAO,CAAC;YACN,YAAY,EAAE,OAAO,CAAC,QAAQ;YAC9B,kBAAkB,EAAE,OAAO,CAAC,OAAO;YACnC,cAAc,EAAE,OAAO,CAAC,SAAS;SAClC,CAAC,CACL;aACA,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;aAChC,MAAM,CAAC,OAAO,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;aAC/B,MAAM,CAAC,aAAa,EAAE;YACrB,WAAW,EAAE,0CAA0C;YACvD,IAAI,EAAE,QAAQ;SACf,CAAC;aACD,UAAU,CAAC,IAAI,CAAC,EAAE;YACjB,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,gCAAsB,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACzD;QACH,CAAC,CAAC;aACD,aAAa,EAAE;aACf,iBAAiB,EAAE;aACnB,MAAM,EAAE;aACR,cAAc,CAAC,KAAK,CAAC;aACrB,IAAI,CAAC,eAAK,CAAC,aAAa,EAAE,CAAC;aAC3B,OAAO,CAAC,KAAK,CAAC;aACd,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;aAC3B,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,KAAK,UAAU,iBAAiB,CAAC,IAGhC;IACC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY;QACjC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;QACrB,CAAC,CAAC,MAAM,kBAAkB,EAAE,CAAC;IAE/B,MAAM,OAAO,GAAG,IAAA,aAAG,GAAE,CAAC;IACtB,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QACrC,kEAAkE;QAClE,cAAc;QACd,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,OAAO,CAAC,IAAI,GAAG,cAAc,QAAQ,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,EAAE,CAAC;YAEhB,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAClE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC/B,MAAM,CAAC,IAAI;gBACT,wFAAwF;gBACxF,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC1B,GAAG,CAAC;oBACJ,YAAY,EAAE,cAAI,CAAC,IAAI,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC;iBAChE,CAAC,CAAC,CACJ,CAAC;aACH;SACF;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,OAAO,CAAC,IAAI,GAAG,sBAAsB,CAAC;YACtC,OAAO,CAAC,OAAO,EAAE,CAAC;SACnB;aAAM;YACL,OAAO,CAAC,IAAI,GAAG,mBAAmB,CAAC;YACnC,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;YACpC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;SACtB;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CAAC,YAAoB;IAC7C,MAAM,YAAY,GAAG,MAAM,IAAA,yBAAY,EAAC,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAE5E,IAAI,MAAM,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE;QACrD,OAAO,CAAC,IAAI,CACV,eAAK,CAAC,MAAM,CACV,sEAAsE,CACvE,CACF,CAAC;KACH;IAED,MAAM,eAAe,GAAG,MAAM,IAAA,yCAAwB,GAAE,CAAC;IAEzD,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/C,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,QAAQ,GAAG,MAAM,IAAA,oCAAmB,EACxC,YAAY,EACZ,eAAe,EACf,MAAM,GAAG,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAC3C,CAAC;QAEF,MAAM,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACrD,MAAM,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC9C,OAAO,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,YAAoB;IAChD,MAAM,YAAY,GAAG,MAAM,IAAA,yBAAY,EAAC,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAE5E,IAAI,MAAM,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE;QACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC,CAAC;KACjE;SAAM;QACL,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CACpE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,YAAoB;IAC9C,MAAM,YAAY,GAAG,MAAM,IAAA,yBAAY,EAAC,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAEhE,MAAM,aAAa,GAAG,IAAI;SACvB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,IAAI,CAAC,EAAE,CACV,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAClB,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACnB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACtB,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YACjB,CAAC,CAAC,IAAI,CACT;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,OAAO,CAAC,IAItB;IACC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY;QACjC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;QACrB,CAAC,CAAC,MAAM,kBAAkB,EAAE,CAAC;IAE/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAChC,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;KACvC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,YAAoB,EACpB,IAGC;IAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACpE,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,YAAY,EAAE;YAC9D,GAAG,IAAI;YACP,gBAAgB,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,EAAE,CACpD,CAAC,OAAO,CAAC,IAAI,GAAG,wBAAwB,YAAY,KAAK,eAAe,IAAI,cAAc,GAAG,CAAC;SACjG,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,iBAAiB,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,OAA6B,EAC7B,cAAuB;IAEvB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAChC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;IACpE,MAAM,cAAc,GAAG,QAAQ,GAAG,YAAY,CAAC;IAE/C,IAAI,QAAQ,KAAK,CAAC,EAAE;QAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC,CAAC;KACrE;SAAM;QACL,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,WAAW,CACf,GAAG,cAAc,IAAI,QAAQ,6CAA6C,CAC3E,CACF,CAAC;KACH;IACD,IAAI,cAAc,IAAI,YAAY,GAAG,CAAC,EAAE;QACtC,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,YAAY,CAAC,GAAG,YAAY,sCAAsC,CAAC,CAC1E,CAAC;KACH;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAAC,MAAyB;IAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO;KACR;IAED,MAAM,UAAU,GAAG,MAAM,IAAA,4BAAa,GAAE,CAAC;IAEzC,oCAAoC;IACpC,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,cAAc,CACZ,qBAAqB,EACrB,MAAM,EACN,iHAAiH,UAAU,CAAC,IAAI,mBAAmB,CACpJ,CAAC;IAEF,cAAc,CACZ,kBAAkB,EAClB,MAAM,EACN,kGAAkG,UAAU,CAAC,IAAI,sBAAsB,CACxI,CAAC;IAEF,cAAc,CACZ,cAAc,EACd,MAAM,EACN,uFAAuF,UAAU,CAAC,IAAI,sBAAsB,CAC7H,CAAC;IAEF,cAAc,CACZ,WAAW,EACX,MAAM,EACN,mFAAmF,UAAU,CAAC,IAAI,YAAY,CAC/G,CAAC;IAEF,cAAc,CACZ,2BAA2B,EAC3B,MAAM,EACN,yHAAyH,CAC1H,CAAC;IAEF,cAAc,CACZ,oBAAoB,EACpB,MAAM,EACN,4GAA4G,CAC7G,CAAC;IAEF,cAAc,CACZ,cAAc,EACd,MAAM,EACN,wEAAwE,CACzE,CAAC;IAEF,cAAc,CACZ,mBAAmB,EACnB,MAAM,EACN,0EAA0E,CAC3E,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,IAA6B,EAC7B,MAAyB,EACzB,OAAe;IAEf,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC/D,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3B,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,CACnD,CAAC;IAEF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;QAC7B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAClC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,EAAE,CAAC;KACjB;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,YAAY,CACzB,OAAgB,EAChB,EAAoB;IAEpB,IAAI;QACF,OAAO,MAAM,EAAE,EAAE,CAAC;KACnB;IAAC,OAAO,EAAE,EAAE;QACX,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,OAAO,CAAC,IAAI,EAAE,CAAC;SAChB;QACD,MAAM,EAAE,CAAC;KACV;AACH,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,MAAM,CAAC,EAAuB;IAC3C,MAAM,IAAI,GAAG,IAAI,0BAAgB,CAAC,GAAG,CAAC,MAAM,IAAA,4BAAa,GAAE,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC;IAE9E,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;QAC3B,MAAM,OAAO,GAAG,IAAA,aAAG,EACjB,2DAA2D,CAC5D,CAAC,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,EAAE,CAAC;KAChB;IAED,MAAM,EAAE,EAAE,CAAC;IACX,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB;IAC/B,MAAM,SAAS,GAAG,MAAM,IAAA,6BAAgB,GAAE,CAAC;IAC3C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;KACH;IAED,OAAO,SAAS,CAAC;AACnB,CAAC","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 specific 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"]}
@@ -16,7 +16,7 @@ export declare const DiffStrategies: {
16
16
  /**
17
17
  * Assume the override is the same as the original
18
18
  */
19
- asssumeSame: () => DiffStrategy;
19
+ assumeSame: () => DiffStrategy;
20
20
  /**
21
21
  * Assume the override is the same as the original
22
22
  */
@@ -11,7 +11,7 @@ exports.DiffStrategies = {
11
11
  /**
12
12
  * Assume the override is the same as the original
13
13
  */
14
- asssumeSame: () => ({
14
+ assumeSame: () => ({
15
15
  diff: async () => '',
16
16
  }),
17
17
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"DiffStrategy.js","sourceRoot":"","sources":["../src/DiffStrategy.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAeU,QAAA,cAAc,GAAG;IAC5B;;OAEG;IACH,WAAW,EAAE,GAAiB,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;KACrB,CAAC;IAEF;;OAEG;IACH,eAAe,EAAE,CACf,YAAoB,EACpB,QAAgB,EAChB,WAAmB,EACL,EAAE,CAAC,CAAC;QAClB,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE;YACzC,MAAM,gBAAgB,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACnE,IAAI,CAAC,gBAAgB,EAAE;gBACrB,MAAM,IAAI,KAAK,CAAC,2BAA2B,YAAY,GAAG,CAAC,CAAC;aAC7D;YAED,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,aAAa,CAC5C,QAAQ,EACR,WAAW,EACX,gBAAgB,CACjB,CAAC;YAEF,OAAO,KAAK;iBACT,IAAI,EAAE;iBACN,KAAK,CAAC,IAAI,CAAC;iBACX,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB;iBAC3B,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;KACF,CAAC;CACH,CAAC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport GitReactFileRepository from './GitReactFileRepository';\nimport {WritableFileRepository} from './FileRepository';\n\n/**\n * An UpgradeStrategy describes the process to diff an override to its base\n */\nexport default interface DiffStrategy {\n diff(\n gitReactRepo: GitReactFileRepository,\n overrideRepo: WritableFileRepository,\n ): Promise<string>;\n}\n\nexport const DiffStrategies = {\n /**\n * Assume the override is the same as the original\n */\n asssumeSame: (): DiffStrategy => ({\n diff: async () => '',\n }),\n\n /**\n * Assume the override is the same as the original\n */\n compareBaseFile: (\n overrideFile: string,\n baseFile: string,\n baseVersion: string,\n ): DiffStrategy => ({\n diff: async (gitReactRepo, overrideRepo) => {\n const overrideContents = await overrideRepo.readFile(overrideFile);\n if (!overrideContents) {\n throw new Error(`Couldn't read override \"${overrideFile}\"`);\n }\n\n const patch = await gitReactRepo.generatePatch(\n baseFile,\n baseVersion,\n overrideContents,\n );\n\n return patch\n .trim()\n .split('\\n')\n .slice(4) // Ignore Git gunk\n .join('\\n');\n },\n }),\n};\n"]}
1
+ {"version":3,"file":"DiffStrategy.js","sourceRoot":"","sources":["../src/DiffStrategy.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAeU,QAAA,cAAc,GAAG;IAC5B;;OAEG;IACH,UAAU,EAAE,GAAiB,EAAE,CAAC,CAAC;QAC/B,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;KACrB,CAAC;IAEF;;OAEG;IACH,eAAe,EAAE,CACf,YAAoB,EACpB,QAAgB,EAChB,WAAmB,EACL,EAAE,CAAC,CAAC;QAClB,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE;YACzC,MAAM,gBAAgB,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACnE,IAAI,CAAC,gBAAgB,EAAE;gBACrB,MAAM,IAAI,KAAK,CAAC,2BAA2B,YAAY,GAAG,CAAC,CAAC;aAC7D;YAED,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,aAAa,CAC5C,QAAQ,EACR,WAAW,EACX,gBAAgB,CACjB,CAAC;YAEF,OAAO,KAAK;iBACT,IAAI,EAAE;iBACN,KAAK,CAAC,IAAI,CAAC;iBACX,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB;iBAC3B,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;KACF,CAAC;CACH,CAAC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport GitReactFileRepository from './GitReactFileRepository';\nimport {WritableFileRepository} from './FileRepository';\n\n/**\n * An UpgradeStrategy describes the process to diff an override to its base\n */\nexport default interface DiffStrategy {\n diff(\n gitReactRepo: GitReactFileRepository,\n overrideRepo: WritableFileRepository,\n ): Promise<string>;\n}\n\nexport const DiffStrategies = {\n /**\n * Assume the override is the same as the original\n */\n assumeSame: (): DiffStrategy => ({\n diff: async () => '',\n }),\n\n /**\n * Assume the override is the same as the original\n */\n compareBaseFile: (\n overrideFile: string,\n baseFile: string,\n baseVersion: string,\n ): DiffStrategy => ({\n diff: async (gitReactRepo, overrideRepo) => {\n const overrideContents = await overrideRepo.readFile(overrideFile);\n if (!overrideContents) {\n throw new Error(`Couldn't read override \"${overrideFile}\"`);\n }\n\n const patch = await gitReactRepo.generatePatch(\n baseFile,\n baseVersion,\n overrideContents,\n );\n\n return patch\n .trim()\n .split('\\n')\n .slice(4) // Ignore Git gunk\n .join('\\n');\n },\n }),\n};\n"]}
@@ -10,12 +10,12 @@
10
10
  */
11
11
  export declare function findManifest(cwd?: string): Promise<string>;
12
12
  /**
13
- * Enumerate the override manifests reachable from CWD, prefering the local
13
+ * Enumerate the override manifests reachable from CWD, preferring the local
14
14
  * package if run within a package with an override manifest, otherwise
15
15
  * searching for packages in a monorepo
16
16
  */
17
17
  export declare function findAllManifests(): Promise<string[]>;
18
18
  /**
19
- * Seatch for the package.json for this package (react-native-platform-override)
19
+ * Search for the package.json for this package (react-native-platform-override)
20
20
  */
21
21
  export declare function findThisPackage(): Promise<string>;
@@ -30,7 +30,7 @@ async function findManifest(cwd) {
30
30
  }
31
31
  exports.findManifest = findManifest;
32
32
  /**
33
- * Enumerate the override manifests reachable from CWD, prefering the local
33
+ * Enumerate the override manifests reachable from CWD, preferring the local
34
34
  * package if run within a package with an override manifest, otherwise
35
35
  * searching for packages in a monorepo
36
36
  */
@@ -48,7 +48,7 @@ async function findAllManifests() {
48
48
  }
49
49
  exports.findAllManifests = findAllManifests;
50
50
  /**
51
- * Seatch for the package.json for this package (react-native-platform-override)
51
+ * Search for the package.json for this package (react-native-platform-override)
52
52
  */
53
53
  async function findThisPackage() {
54
54
  const thisPackagePath = await findFileAbove(__dirname, 'package.json');
@@ -1 +1 @@
1
- {"version":3,"file":"FileSearch.js","sourceRoot":"","sources":["../src/FileSearch.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;AAEH,kEAA0C;AAC1C,gDAAwB;AACxB,uEAA0E;AAE1E;;;GAGG;AACI,KAAK,UAAU,YAAY,CAAC,GAAY;IAC7C,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IAC9E,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAC9D;IAED,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC5E,IAAI,CAAC,CAAC,MAAM,YAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE;QACpC,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;KACH;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAdD,oCAcC;AAED;;;;GAIG;AACI,KAAK,UAAU,gBAAgB;IACpC,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IACvE,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAC9D;IAED,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,MAAM,YAAE,CAAC,MAAM,CAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,EAAE;QAC5D,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC;KAClD;IAED,MAAM,aAAa,GAAG,MAAM,IAAA,qCAAqB,EAAC,GAAG,CAAC,EAAE,CACtD,YAAE,CAAC,MAAM,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CACjD,CAAC;IAEF,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACzE,CAAC;AAhBD,4CAgBC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe;IACnC,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACvE,IAAI,CAAC,eAAe,EAAE;QACpB,MAAM,IAAI,KAAK,CACb,sFAAsF,CACvF,CAAC;KACH;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AATD,0CASC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,IAAY,EACZ,MAAc;IAEd,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,MAAM,YAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,gBAAgB,GAAG,cAAI,CAAC,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IACnE,IAAI,gBAAgB,KAAK,UAAU,EAAE;QACnC,OAAO,IAAI,CAAC;KACb;SAAM;QACL,OAAO,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;KAChD;AACH,CAAC","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 {enumerateRepoPackages} from '@react-native-windows/package-utils';\n\n/**\n * Search for a single manifest adjacent to the package above a directory or\n * CWD\n */\nexport async function findManifest(cwd?: string): Promise<string> {\n const packagePath = await findFileAbove(cwd || process.cwd(), 'package.json');\n if (!packagePath) {\n throw new Error('This command must be run within a package');\n }\n\n const manifestPath = path.join(path.dirname(packagePath), 'overrides.json');\n if (!(await fs.exists(manifestPath))) {\n throw new Error(\n 'Expected an \"overrides.json\" file at the root of the current package',\n );\n }\n\n return manifestPath;\n}\n\n/**\n * Enumerate the override manifests reachable from CWD, prefering the local\n * package if run within a package with an override manifest, otherwise\n * searching for packages in a monorepo\n */\nexport async function findAllManifests(): Promise<string[]> {\n const packagePath = await findFileAbove(process.cwd(), 'package.json');\n if (!packagePath) {\n throw new Error('This command must be run within a package');\n }\n\n const packageDir = path.dirname(packagePath);\n if (await fs.exists(path.join(packageDir, 'overrides.json'))) {\n return [path.join(packageDir, 'overrides.json')];\n }\n\n const localPackages = await enumerateRepoPackages(pkg =>\n fs.exists(path.join(pkg.path, 'overrides.json')),\n );\n\n return localPackages.map(pkg => path.join(pkg.path, 'overrides.json'));\n}\n\n/**\n * Seatch for the package.json for this package (react-native-platform-override)\n */\nexport async function findThisPackage(): Promise<string> {\n const thisPackagePath = await findFileAbove(__dirname, 'package.json');\n if (!thisPackagePath) {\n throw new Error(\n 'Unable to find a package.json about our source code. Did directory structure change?',\n );\n }\n\n return thisPackagePath;\n}\n\n/**\n * Search for the target path segment in all directories above the base\n */\nasync function findFileAbove(\n base: string,\n target: string,\n): Promise<string | null> {\n const searchPath = path.resolve(base);\n const fullPath = path.join(searchPath, target);\n if (await fs.exists(fullPath)) {\n return fullPath;\n }\n\n const searchPathParent = path.resolve(path.join(searchPath, '..'));\n if (searchPathParent === searchPath) {\n return null;\n } else {\n return findFileAbove(searchPathParent, target);\n }\n}\n"]}
1
+ {"version":3,"file":"FileSearch.js","sourceRoot":"","sources":["../src/FileSearch.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;AAEH,kEAA0C;AAC1C,gDAAwB;AACxB,uEAA0E;AAE1E;;;GAGG;AACI,KAAK,UAAU,YAAY,CAAC,GAAY;IAC7C,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IAC9E,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAC9D;IAED,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC5E,IAAI,CAAC,CAAC,MAAM,YAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE;QACpC,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;KACH;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAdD,oCAcC;AAED;;;;GAIG;AACI,KAAK,UAAU,gBAAgB;IACpC,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IACvE,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAC9D;IAED,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,MAAM,YAAE,CAAC,MAAM,CAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,EAAE;QAC5D,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC;KAClD;IAED,MAAM,aAAa,GAAG,MAAM,IAAA,qCAAqB,EAAC,GAAG,CAAC,EAAE,CACtD,YAAE,CAAC,MAAM,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CACjD,CAAC;IAEF,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACzE,CAAC;AAhBD,4CAgBC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe;IACnC,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACvE,IAAI,CAAC,eAAe,EAAE;QACpB,MAAM,IAAI,KAAK,CACb,sFAAsF,CACvF,CAAC;KACH;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AATD,0CASC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,IAAY,EACZ,MAAc;IAEd,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,MAAM,YAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,gBAAgB,GAAG,cAAI,CAAC,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IACnE,IAAI,gBAAgB,KAAK,UAAU,EAAE;QACnC,OAAO,IAAI,CAAC;KACb;SAAM;QACL,OAAO,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;KAChD;AACH,CAAC","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 {enumerateRepoPackages} from '@react-native-windows/package-utils';\n\n/**\n * Search for a single manifest adjacent to the package above a directory or\n * CWD\n */\nexport async function findManifest(cwd?: string): Promise<string> {\n const packagePath = await findFileAbove(cwd || process.cwd(), 'package.json');\n if (!packagePath) {\n throw new Error('This command must be run within a package');\n }\n\n const manifestPath = path.join(path.dirname(packagePath), 'overrides.json');\n if (!(await fs.exists(manifestPath))) {\n throw new Error(\n 'Expected an \"overrides.json\" file at the root of the current package',\n );\n }\n\n return manifestPath;\n}\n\n/**\n * Enumerate the override manifests reachable from CWD, preferring the local\n * package if run within a package with an override manifest, otherwise\n * searching for packages in a monorepo\n */\nexport async function findAllManifests(): Promise<string[]> {\n const packagePath = await findFileAbove(process.cwd(), 'package.json');\n if (!packagePath) {\n throw new Error('This command must be run within a package');\n }\n\n const packageDir = path.dirname(packagePath);\n if (await fs.exists(path.join(packageDir, 'overrides.json'))) {\n return [path.join(packageDir, 'overrides.json')];\n }\n\n const localPackages = await enumerateRepoPackages(pkg =>\n fs.exists(path.join(pkg.path, 'overrides.json')),\n );\n\n return localPackages.map(pkg => path.join(pkg.path, 'overrides.json'));\n}\n\n/**\n * Search for the package.json for this package (react-native-platform-override)\n */\nexport async function findThisPackage(): Promise<string> {\n const thisPackagePath = await findFileAbove(__dirname, 'package.json');\n if (!thisPackagePath) {\n throw new Error(\n 'Unable to find a package.json about our source code. Did directory structure change?',\n );\n }\n\n return thisPackagePath;\n}\n\n/**\n * Search for the target path segment in all directories above the base\n */\nasync function findFileAbove(\n base: string,\n target: string,\n): Promise<string | null> {\n const searchPath = path.resolve(base);\n const fullPath = path.join(searchPath, target);\n if (await fs.exists(fullPath)) {\n return fullPath;\n }\n\n const searchPathParent = path.resolve(path.join(searchPath, '..'));\n if (searchPathParent === searchPath) {\n return null;\n } else {\n return findFileAbove(searchPathParent, target);\n }\n}\n"]}
@@ -7,7 +7,7 @@
7
7
  /// <reference types="node" />
8
8
  import { WritableFileRepository } from './FileRepository';
9
9
  /**
10
- * Allows reading phsyical files based on a passed in directory
10
+ * Allows reading physical files based on a passed in directory
11
11
  */
12
12
  export default class FileSystemRepository implements WritableFileRepository {
13
13
  private readonly baseDir;
@@ -13,7 +13,7 @@ const fs_1 = __importDefault(require("@react-native-windows/fs"));
13
13
  const globby_1 = __importDefault(require("globby"));
14
14
  const path_1 = __importDefault(require("path"));
15
15
  /**
16
- * Allows reading phsyical files based on a passed in directory
16
+ * Allows reading physical files based on a passed in directory
17
17
  */
18
18
  class FileSystemRepository {
19
19
  constructor(baseDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"FileSystemRepository.js","sourceRoot":"","sources":["../src/FileSystemRepository.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAEH,kEAA0C;AAC1C,oDAA4B;AAC5B,gDAAwB;AAIxB;;GAEG;AACH,MAAqB,oBAAoB;IAGvC,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAkB,CAAC,IAAI,CAAC;QACtC,OAAO,MAAM,IAAA,gBAAM,EAAC,KAAK,EAAE;YACzB,GAAG,EAAE,IAAI,CAAC,OAAO;YACjB,GAAG,EAAE,IAAI;SACV,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI;YACF,OAAO,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SACpC;QAAC,WAAM;YACN,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB;QACzB,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI;YACF,MAAM,KAAK,GAAG,MAAM,YAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;SACnD;QAAC,OAAO,EAAE,EAAE;YACX,IAAK,EAA4B,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACnD,OAAO,MAAM,CAAC;aACf;iBAAM;gBACL,MAAM,EAAE,CAAC;aACV;SACF;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,OAAwB;QACxD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,YAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;QAC1D,OAAO,YAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,YAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;CACF;AA/CD,uCA+CC","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 globby from 'globby';\nimport path from 'path';\n\nimport {WritableFileRepository} from './FileRepository';\n\n/**\n * Allows reading phsyical files based on a passed in directory\n */\nexport default class FileSystemRepository implements WritableFileRepository {\n private readonly baseDir: string;\n\n constructor(baseDir: string) {\n this.baseDir = baseDir;\n }\n\n async listFiles(globs: string[] = ['**']): Promise<string[]> {\n return await globby(globs, {\n cwd: this.baseDir,\n dot: true,\n });\n }\n\n async readFile(filename: string): Promise<Buffer | null> {\n const filePath = path.join(this.baseDir, filename);\n try {\n return await fs.readFile(filePath);\n } catch {\n return null;\n }\n }\n\n async stat(filename: string): Promise<'file' | 'directory' | 'none'> {\n const filePath = path.join(this.baseDir, filename);\n try {\n const stats = await fs.stat(filePath);\n return stats.isDirectory() ? 'directory' : 'file';\n } catch (ex) {\n if ((ex as NodeJS.ErrnoException).code === 'ENOENT') {\n return 'none';\n } else {\n throw ex;\n }\n }\n }\n\n async writeFile(filename: string, content: Buffer | string) {\n const filePath = path.join(this.baseDir, filename);\n await fs.mkdir(path.dirname(filePath), {recursive: true});\n return fs.writeFile(filePath, content);\n }\n\n async deleteFile(filename: string): Promise<void> {\n const filePath = path.join(this.baseDir, filename);\n await fs.unlink(filePath);\n }\n}\n"]}
1
+ {"version":3,"file":"FileSystemRepository.js","sourceRoot":"","sources":["../src/FileSystemRepository.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAEH,kEAA0C;AAC1C,oDAA4B;AAC5B,gDAAwB;AAIxB;;GAEG;AACH,MAAqB,oBAAoB;IAGvC,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAkB,CAAC,IAAI,CAAC;QACtC,OAAO,MAAM,IAAA,gBAAM,EAAC,KAAK,EAAE;YACzB,GAAG,EAAE,IAAI,CAAC,OAAO;YACjB,GAAG,EAAE,IAAI;SACV,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI;YACF,OAAO,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SACpC;QAAC,WAAM;YACN,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB;QACzB,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI;YACF,MAAM,KAAK,GAAG,MAAM,YAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;SACnD;QAAC,OAAO,EAAE,EAAE;YACX,IAAK,EAA4B,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACnD,OAAO,MAAM,CAAC;aACf;iBAAM;gBACL,MAAM,EAAE,CAAC;aACV;SACF;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,OAAwB;QACxD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,YAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;QAC1D,OAAO,YAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,YAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;CACF;AA/CD,uCA+CC","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 globby from 'globby';\nimport path from 'path';\n\nimport {WritableFileRepository} from './FileRepository';\n\n/**\n * Allows reading physical files based on a passed in directory\n */\nexport default class FileSystemRepository implements WritableFileRepository {\n private readonly baseDir: string;\n\n constructor(baseDir: string) {\n this.baseDir = baseDir;\n }\n\n async listFiles(globs: string[] = ['**']): Promise<string[]> {\n return await globby(globs, {\n cwd: this.baseDir,\n dot: true,\n });\n }\n\n async readFile(filename: string): Promise<Buffer | null> {\n const filePath = path.join(this.baseDir, filename);\n try {\n return await fs.readFile(filePath);\n } catch {\n return null;\n }\n }\n\n async stat(filename: string): Promise<'file' | 'directory' | 'none'> {\n const filePath = path.join(this.baseDir, filename);\n try {\n const stats = await fs.stat(filePath);\n return stats.isDirectory() ? 'directory' : 'file';\n } catch (ex) {\n if ((ex as NodeJS.ErrnoException).code === 'ENOENT') {\n return 'none';\n } else {\n throw ex;\n }\n }\n }\n\n async writeFile(filename: string, content: Buffer | string) {\n const filePath = path.join(this.baseDir, filename);\n await fs.mkdir(path.dirname(filePath), {recursive: true});\n return fs.writeFile(filePath, content);\n }\n\n async deleteFile(filename: string): Promise<void> {\n const filePath = path.join(this.baseDir, filename);\n await fs.unlink(filePath);\n }\n}\n"]}
@@ -7,7 +7,7 @@
7
7
  /// <reference types="node" />
8
8
  import { VersionedReactFileRepository } from './FileRepository';
9
9
  /**
10
- * Retrives React Native files using the React Native Github repo. Switching
10
+ * Retrieves React Native files using the React Native Github repo. Switching
11
11
  * between getting file contents of different versions may be slow.
12
12
  */
13
13
  export default class GitReactFileRepository implements VersionedReactFileRepository {
@@ -18,7 +18,7 @@ export default class GitReactFileRepository implements VersionedReactFileReposit
18
18
  private readonly batchingQueue;
19
19
  private constructor();
20
20
  /**
21
- * Asynchronusly initialize the scratch repository, creating a new Git repo is needed
21
+ * Asynchronously initialize the scratch repository, creating a new Git repo is needed
22
22
  * @param gitDirectory optional repo directory
23
23
  */
24
24
  static createAndInit(gitDirectory?: string): Promise<GitReactFileRepository>;
@@ -42,7 +42,7 @@ const PackageUtils_1 = require("./PackageUtils");
42
42
  const refFromVersion_1 = require("./refFromVersion");
43
43
  const RN_GITHUB_URL = 'https://github.com/facebook/react-native.git';
44
44
  /**
45
- * Retrives React Native files using the React Native Github repo. Switching
45
+ * Retrieves React Native files using the React Native Github repo. Switching
46
46
  * between getting file contents of different versions may be slow.
47
47
  */
48
48
  class GitReactFileRepository {
@@ -52,7 +52,7 @@ class GitReactFileRepository {
52
52
  this.gitClient = gitClient;
53
53
  }
54
54
  /**
55
- * Asynchronusly initialize the scratch repository, creating a new Git repo is needed
55
+ * Asynchronously initialize the scratch repository, creating a new Git repo is needed
56
56
  * @param gitDirectory optional repo directory
57
57
  */
58
58
  static async createAndInit(gitDirectory) {
@@ -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, {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"]}
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 * Retrieves 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 * Asynchronously 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"]}
@@ -15,7 +15,7 @@ const path_1 = __importDefault(require("path"));
15
15
  const PathUtils_1 = require("./PathUtils");
16
16
  const isutf8_1 = __importDefault(require("isutf8"));
17
17
  /**
18
- * Normalize content according to insensitivty rules
18
+ * Normalize content according to insensitivity rules
19
19
  */
20
20
  function normalizeContent(content, opts) {
21
21
  if (opts.insensitivity === 'none' ||
@@ -1 +1 @@
1
- {"version":3,"file":"Hash.js","sourceRoot":"","sources":["../src/Hash.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;AAEH,oDAA4B;AAC5B,gDAAwB;AACxB,2CAAoD;AAEpD,oDAA4B;AAU5B;;GAEG;AACH,SAAS,gBAAgB,CACvB,OAAwB,EACxB,IAAc;IAEd,IACE,IAAI,CAAC,aAAa,KAAK,MAAM;QAC7B,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAA,gBAAM,EAAC,OAAO,CAAC,CAAC,EACjD;QACA,OAAO,OAAO,CAAC;KAChB;IAED,QAAQ,IAAI,CAAC,aAAa,IAAI,aAAa,EAAE;QAC3C,KAAK,aAAa;YAChB,4CAA4C;YAC5C,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAEhE,KAAK,YAAY;YACf,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC/D;AACH,CAAC;AAED;;GAEG;AACH,MAAa,MAAM;IAIjB,YAAY,QAAmB;QAC7B,IAAI,CAAC,IAAI,GAAG,gBAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,WAAW,CAAC,OAAwB;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;CACF;AAjBD,wBAiBC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,OAAwB,EAAE,IAAe;IACnE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;AACxD,CAAC;AAFD,kCAEC;AAED;;GAEG;AACI,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,IAAoB,EACpB,IAAe;IAEf,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,OAAO,IAAI,CAAC;KACb;IAED,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,OAAO,WAAW,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC;KACxD;SAAM;QACL,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAEhE,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE;YAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,QAAS,CAAC,CAAC;YAE9B,uDAAuD;YACvD,MAAM,uBAAuB,GAAG,IAAA,oBAAQ,EACtC,cAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAA,yBAAa,EAAC,IAAI,CAAC,CAAC,CACzC,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;SAC7C;QACD,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;KACxB;AACH,CAAC;AA5BD,kDA4BC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport crypto from 'crypto';\nimport path from 'path';\nimport {normalizePath, unixPath} from './PathUtils';\nimport FileRepository from './FileRepository';\nimport isUtf8 from 'isutf8';\n\nexport type HashOpts = {\n /**\n * What differences between files should we be insensitive to when generating\n * a hash? Defaults to line-ending insensitivity\n */\n insensitivity?: 'none' | 'line-ending' | 'whitespace';\n};\n\n/**\n * Normalize content according to insensitivty rules\n */\nfunction normalizeContent(\n content: string | Buffer,\n opts: HashOpts,\n): string | Buffer {\n if (\n opts.insensitivity === 'none' ||\n (typeof content !== 'string' && !isUtf8(content))\n ) {\n return content;\n }\n\n switch (opts.insensitivity || 'line-ending') {\n case 'line-ending':\n // Convert to CRLF for legacy hash stability\n return content.toString('utf8').replace(/(?<!\\r)\\n/g, '\\r\\n');\n\n case 'whitespace':\n return content.toString('utf8').trim().replace(/\\s+/g, ' ');\n }\n}\n\n/**\n * Creates a hash from content, attempting to normalize for line-feeds\n */\nexport class Hasher {\n private readonly hash: crypto.Hash;\n private readonly hashOpts: HashOpts;\n\n constructor(hashOpts?: HashOpts) {\n this.hash = crypto.createHash('sha1');\n this.hashOpts = hashOpts || {};\n }\n\n feedContent(content: string | Buffer): Hasher {\n this.hash.update(normalizeContent(content, this.hashOpts));\n return this;\n }\n\n digest(): string {\n return this.hash.digest('hex');\n }\n}\n\n/**\n * Convenience helper which hashes a single buffer\n */\nexport function hashContent(content: string | Buffer, opts?: HashOpts): string {\n return new Hasher(opts).feedContent(content).digest();\n}\n\n/**\n * Helper to hash a file/directory belonging to a repository\n */\nexport async function hashFileOrDirectory(\n name: string,\n repo: FileRepository,\n opts?: HashOpts,\n): Promise<string | null> {\n const type = await repo.stat(name);\n if (type === 'none') {\n return null;\n }\n\n if (type === 'file') {\n return hashContent((await repo.readFile(name))!, opts);\n } else {\n const hasher = new Hasher(opts);\n const subfiles = await repo.listFiles([`${unixPath(name)}/**`]);\n\n for (const file of subfiles.sort()) {\n const contents = await repo.readFile(file);\n hasher.feedContent(contents!);\n\n // Incorporate the filename to detect if renames happen\n const platformIndependentPath = unixPath(\n path.relative(name, normalizePath(file)),\n );\n hasher.feedContent(platformIndependentPath);\n }\n return hasher.digest();\n }\n}\n"]}
1
+ {"version":3,"file":"Hash.js","sourceRoot":"","sources":["../src/Hash.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;AAEH,oDAA4B;AAC5B,gDAAwB;AACxB,2CAAoD;AAEpD,oDAA4B;AAU5B;;GAEG;AACH,SAAS,gBAAgB,CACvB,OAAwB,EACxB,IAAc;IAEd,IACE,IAAI,CAAC,aAAa,KAAK,MAAM;QAC7B,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAA,gBAAM,EAAC,OAAO,CAAC,CAAC,EACjD;QACA,OAAO,OAAO,CAAC;KAChB;IAED,QAAQ,IAAI,CAAC,aAAa,IAAI,aAAa,EAAE;QAC3C,KAAK,aAAa;YAChB,4CAA4C;YAC5C,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAEhE,KAAK,YAAY;YACf,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC/D;AACH,CAAC;AAED;;GAEG;AACH,MAAa,MAAM;IAIjB,YAAY,QAAmB;QAC7B,IAAI,CAAC,IAAI,GAAG,gBAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,WAAW,CAAC,OAAwB;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;CACF;AAjBD,wBAiBC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,OAAwB,EAAE,IAAe;IACnE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;AACxD,CAAC;AAFD,kCAEC;AAED;;GAEG;AACI,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,IAAoB,EACpB,IAAe;IAEf,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,OAAO,IAAI,CAAC;KACb;IAED,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,OAAO,WAAW,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC;KACxD;SAAM;QACL,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAEhE,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE;YAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,QAAS,CAAC,CAAC;YAE9B,uDAAuD;YACvD,MAAM,uBAAuB,GAAG,IAAA,oBAAQ,EACtC,cAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAA,yBAAa,EAAC,IAAI,CAAC,CAAC,CACzC,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;SAC7C;QACD,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;KACxB;AACH,CAAC;AA5BD,kDA4BC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport crypto from 'crypto';\nimport path from 'path';\nimport {normalizePath, unixPath} from './PathUtils';\nimport FileRepository from './FileRepository';\nimport isUtf8 from 'isutf8';\n\nexport type HashOpts = {\n /**\n * What differences between files should we be insensitive to when generating\n * a hash? Defaults to line-ending insensitivity\n */\n insensitivity?: 'none' | 'line-ending' | 'whitespace';\n};\n\n/**\n * Normalize content according to insensitivity rules\n */\nfunction normalizeContent(\n content: string | Buffer,\n opts: HashOpts,\n): string | Buffer {\n if (\n opts.insensitivity === 'none' ||\n (typeof content !== 'string' && !isUtf8(content))\n ) {\n return content;\n }\n\n switch (opts.insensitivity || 'line-ending') {\n case 'line-ending':\n // Convert to CRLF for legacy hash stability\n return content.toString('utf8').replace(/(?<!\\r)\\n/g, '\\r\\n');\n\n case 'whitespace':\n return content.toString('utf8').trim().replace(/\\s+/g, ' ');\n }\n}\n\n/**\n * Creates a hash from content, attempting to normalize for line-feeds\n */\nexport class Hasher {\n private readonly hash: crypto.Hash;\n private readonly hashOpts: HashOpts;\n\n constructor(hashOpts?: HashOpts) {\n this.hash = crypto.createHash('sha1');\n this.hashOpts = hashOpts || {};\n }\n\n feedContent(content: string | Buffer): Hasher {\n this.hash.update(normalizeContent(content, this.hashOpts));\n return this;\n }\n\n digest(): string {\n return this.hash.digest('hex');\n }\n}\n\n/**\n * Convenience helper which hashes a single buffer\n */\nexport function hashContent(content: string | Buffer, opts?: HashOpts): string {\n return new Hasher(opts).feedContent(content).digest();\n}\n\n/**\n * Helper to hash a file/directory belonging to a repository\n */\nexport async function hashFileOrDirectory(\n name: string,\n repo: FileRepository,\n opts?: HashOpts,\n): Promise<string | null> {\n const type = await repo.stat(name);\n if (type === 'none') {\n return null;\n }\n\n if (type === 'file') {\n return hashContent((await repo.readFile(name))!, opts);\n } else {\n const hasher = new Hasher(opts);\n const subfiles = await repo.listFiles([`${unixPath(name)}/**`]);\n\n for (const file of subfiles.sort()) {\n const contents = await repo.readFile(file);\n hasher.feedContent(contents!);\n\n // Incorporate the filename to detect if renames happen\n const platformIndependentPath = unixPath(\n path.relative(name, normalizePath(file)),\n );\n hasher.feedContent(platformIndependentPath);\n }\n return hasher.digest();\n }\n}\n"]}
@@ -65,7 +65,7 @@ export default class Manifest {
65
65
  */
66
66
  serialize(): Serialized.Manifest;
67
67
  /**
68
- * Returns the overrides in the manfest
68
+ * Returns the overrides in the manifest
69
69
  */
70
70
  listOverrides(): Override[];
71
71
  /**
@@ -135,7 +135,7 @@ class Manifest {
135
135
  };
136
136
  }
137
137
  /**
138
- * Returns the overrides in the manfest
138
+ * Returns the overrides in the manifest
139
139
  */
140
140
  listOverrides() {
141
141
  return lodash_1.default.clone(this.overrides);
@@ -1 +1 @@
1
- {"version":3,"file":"Manifest.js","sourceRoot":"","sources":["../src/Manifest.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 Serialized from './Serialized';\nimport _ from 'lodash';\nimport path from 'path';\n\nimport Override, {deserializeOverride} from './Override';\nimport {ReactFileRepository, WritableFileRepository} from './FileRepository';\nimport OverrideFactory from './OverrideFactory';\nimport {ValidationError} from './ValidationStrategy';\nimport {eachLimit} from 'async';\nimport {normalizePath} from './PathUtils';\n\n/**\n * Represents a collection of overrides listed in an on-disk manifest. Allows\n * performing aggregate operations on the overrides.\n */\nexport default class Manifest {\n private readonly includePatterns?: string[];\n private readonly excludePatterns?: string[];\n private baseVersion?: string;\n private readonly overrides: Override[];\n\n /**\n * Construct the manifest\n *\n * @param overrides List of overrides to evaluate\n * @param opts Allows specifying globs to include or exclude paths to enforce\n * exist in the manifest\n */\n constructor(\n overrides: Override[],\n opts: {\n includePatterns?: string[];\n excludePatterns?: string[];\n baseVersion?: string;\n } = {},\n ) {\n const uniquelyNamed = _.uniqBy(overrides, ovr => ovr.name());\n if (uniquelyNamed.length !== overrides.length) {\n throw new Error('Cannot construct a manifest with duplicate overrides');\n }\n\n this.includePatterns = opts.includePatterns;\n this.excludePatterns = opts.excludePatterns;\n this.baseVersion = opts.baseVersion;\n this.overrides = _.clone(overrides);\n }\n\n static fromSerialized(man: Serialized.Manifest): Manifest {\n const overrides = man.overrides.map(ovr =>\n deserializeOverride(ovr, {defaultBaseVersion: man.baseVersion}),\n );\n return new Manifest(overrides, {\n includePatterns: man.includePatterns,\n excludePatterns: man.excludePatterns,\n baseVersion: man.baseVersion,\n });\n }\n\n /**\n * Check that overrides are accurately accounted for in the manifest. E.g.\n * all files should be accounted for, and base files should be up to date\n * with upstream.\n */\n async validate(\n overrideRepo: WritableFileRepository,\n reactRepo: ReactFileRepository,\n ): Promise<ValidationError[]> {\n const errors: ValidationError[] = [];\n\n const globs = [\n ...(this.includePatterns || ['**']),\n ...(this.excludePatterns || []).map(p => '!' + p),\n ];\n\n const overrideFiles = await overrideRepo.listFiles(globs);\n const missingFromManifest = overrideFiles.filter(\n file =>\n file !== 'overrides.json' &&\n path.relative('node_modules', file).startsWith('..') &&\n !this.overrides.some(override => override.includesFile(file)),\n );\n for (const missingFile of missingFromManifest) {\n errors.push({type: 'missingFromManifest', overrideName: missingFile});\n }\n\n const validationTasks = _.flatMap(this.overrides, ovr =>\n ovr.validationStrategies(),\n );\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n await eachLimit(validationTasks, 30, async task => {\n errors.push(...(await task.validate(overrideRepo, reactRepo)));\n });\n\n return errors.sort((a, b) =>\n a.overrideName.localeCompare(b.overrideName, 'en'),\n );\n }\n\n /**\n * Add an override to the manifest\n */\n addOverride(override: Override) {\n if (this.hasOverride(override.name())) {\n throw new Error(`Trying to add duplicate override '${override.name()}'`);\n }\n\n this.overrides.push(override);\n }\n\n /**\n * Whether the manifest contains a given override\n */\n hasOverride(overrideName: string): boolean {\n return this.overrides.some(\n ovr => ovr.name() === normalizePath(overrideName),\n );\n }\n\n /**\n * Try to remove an override.\n * @returns false if none is found with the given name\n */\n removeOverride(overrideName: string): boolean {\n const idx = this.findOverrideIndex(overrideName);\n if (idx === -1) {\n return false;\n }\n\n this.overrides.splice(idx, 1);\n return true;\n }\n\n /**\n * Returns the entry corresponding to the given override path, or null if none\n * exists.\n */\n findOverride(overrideName: string): Override | null {\n const idx = this.findOverrideIndex(overrideName);\n if (idx === -1) {\n return null;\n }\n\n return this.overrides[idx];\n }\n\n /**\n * Updates an override entry to mark it as up-to-date in regards to its\n * current base file.\n */\n async markUpToDate(overrideName: string, overrideFactory: OverrideFactory) {\n const override = this.findOverride(overrideName);\n if (override === null) {\n throw new Error(`Override '${overrideName}' does not exist`);\n }\n\n // Mutate the object instead of replacing by index because the index may no\n // longer be the same after awaiting.\n const upToDateOverride = await override.createUpdated(overrideFactory);\n Object.assign(override, upToDateOverride);\n }\n\n /**\n * Return a serialized representation of the manifest\n */\n serialize(): Serialized.Manifest {\n return {\n includePatterns: this.includePatterns,\n excludePatterns: this.excludePatterns,\n baseVersion: this.baseVersion,\n overrides: this.overrides\n .sort((a, b) => a.name().localeCompare(b.name(), 'en'))\n .map(override =>\n override.serialize({defaultBaseVersion: this.baseVersion}),\n ),\n };\n }\n\n /**\n * Returns the overrides in the manfest\n */\n listOverrides(): Override[] {\n return _.clone(this.overrides);\n }\n\n /**\n * Set the default baseVersion for the manifest\n */\n setBaseVersion(baseVersion?: string) {\n this.baseVersion = baseVersion;\n }\n\n /**\n * Find the index to a given override.\n * @returns -1 if it cannot be found\n */\n private findOverrideIndex(overrideName: string): number {\n return this.overrides.findIndex(\n ovr => ovr.name() === normalizePath(overrideName),\n );\n }\n}\n"]}
1
+ {"version":3,"file":"Manifest.js","sourceRoot":"","sources":["../src/Manifest.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 Serialized from './Serialized';\nimport _ from 'lodash';\nimport path from 'path';\n\nimport Override, {deserializeOverride} from './Override';\nimport {ReactFileRepository, WritableFileRepository} from './FileRepository';\nimport OverrideFactory from './OverrideFactory';\nimport {ValidationError} from './ValidationStrategy';\nimport {eachLimit} from 'async';\nimport {normalizePath} from './PathUtils';\n\n/**\n * Represents a collection of overrides listed in an on-disk manifest. Allows\n * performing aggregate operations on the overrides.\n */\nexport default class Manifest {\n private readonly includePatterns?: string[];\n private readonly excludePatterns?: string[];\n private baseVersion?: string;\n private readonly overrides: Override[];\n\n /**\n * Construct the manifest\n *\n * @param overrides List of overrides to evaluate\n * @param opts Allows specifying globs to include or exclude paths to enforce\n * exist in the manifest\n */\n constructor(\n overrides: Override[],\n opts: {\n includePatterns?: string[];\n excludePatterns?: string[];\n baseVersion?: string;\n } = {},\n ) {\n const uniquelyNamed = _.uniqBy(overrides, ovr => ovr.name());\n if (uniquelyNamed.length !== overrides.length) {\n throw new Error('Cannot construct a manifest with duplicate overrides');\n }\n\n this.includePatterns = opts.includePatterns;\n this.excludePatterns = opts.excludePatterns;\n this.baseVersion = opts.baseVersion;\n this.overrides = _.clone(overrides);\n }\n\n static fromSerialized(man: Serialized.Manifest): Manifest {\n const overrides = man.overrides.map(ovr =>\n deserializeOverride(ovr, {defaultBaseVersion: man.baseVersion}),\n );\n return new Manifest(overrides, {\n includePatterns: man.includePatterns,\n excludePatterns: man.excludePatterns,\n baseVersion: man.baseVersion,\n });\n }\n\n /**\n * Check that overrides are accurately accounted for in the manifest. E.g.\n * all files should be accounted for, and base files should be up to date\n * with upstream.\n */\n async validate(\n overrideRepo: WritableFileRepository,\n reactRepo: ReactFileRepository,\n ): Promise<ValidationError[]> {\n const errors: ValidationError[] = [];\n\n const globs = [\n ...(this.includePatterns || ['**']),\n ...(this.excludePatterns || []).map(p => '!' + p),\n ];\n\n const overrideFiles = await overrideRepo.listFiles(globs);\n const missingFromManifest = overrideFiles.filter(\n file =>\n file !== 'overrides.json' &&\n path.relative('node_modules', file).startsWith('..') &&\n !this.overrides.some(override => override.includesFile(file)),\n );\n for (const missingFile of missingFromManifest) {\n errors.push({type: 'missingFromManifest', overrideName: missingFile});\n }\n\n const validationTasks = _.flatMap(this.overrides, ovr =>\n ovr.validationStrategies(),\n );\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n await eachLimit(validationTasks, 30, async task => {\n errors.push(...(await task.validate(overrideRepo, reactRepo)));\n });\n\n return errors.sort((a, b) =>\n a.overrideName.localeCompare(b.overrideName, 'en'),\n );\n }\n\n /**\n * Add an override to the manifest\n */\n addOverride(override: Override) {\n if (this.hasOverride(override.name())) {\n throw new Error(`Trying to add duplicate override '${override.name()}'`);\n }\n\n this.overrides.push(override);\n }\n\n /**\n * Whether the manifest contains a given override\n */\n hasOverride(overrideName: string): boolean {\n return this.overrides.some(\n ovr => ovr.name() === normalizePath(overrideName),\n );\n }\n\n /**\n * Try to remove an override.\n * @returns false if none is found with the given name\n */\n removeOverride(overrideName: string): boolean {\n const idx = this.findOverrideIndex(overrideName);\n if (idx === -1) {\n return false;\n }\n\n this.overrides.splice(idx, 1);\n return true;\n }\n\n /**\n * Returns the entry corresponding to the given override path, or null if none\n * exists.\n */\n findOverride(overrideName: string): Override | null {\n const idx = this.findOverrideIndex(overrideName);\n if (idx === -1) {\n return null;\n }\n\n return this.overrides[idx];\n }\n\n /**\n * Updates an override entry to mark it as up-to-date in regards to its\n * current base file.\n */\n async markUpToDate(overrideName: string, overrideFactory: OverrideFactory) {\n const override = this.findOverride(overrideName);\n if (override === null) {\n throw new Error(`Override '${overrideName}' does not exist`);\n }\n\n // Mutate the object instead of replacing by index because the index may no\n // longer be the same after awaiting.\n const upToDateOverride = await override.createUpdated(overrideFactory);\n Object.assign(override, upToDateOverride);\n }\n\n /**\n * Return a serialized representation of the manifest\n */\n serialize(): Serialized.Manifest {\n return {\n includePatterns: this.includePatterns,\n excludePatterns: this.excludePatterns,\n baseVersion: this.baseVersion,\n overrides: this.overrides\n .sort((a, b) => a.name().localeCompare(b.name(), 'en'))\n .map(override =>\n override.serialize({defaultBaseVersion: this.baseVersion}),\n ),\n };\n }\n\n /**\n * Returns the overrides in the manifest\n */\n listOverrides(): Override[] {\n return _.clone(this.overrides);\n }\n\n /**\n * Set the default baseVersion for the manifest\n */\n setBaseVersion(baseVersion?: string) {\n this.baseVersion = baseVersion;\n }\n\n /**\n * Find the index to a given override.\n * @returns -1 if it cannot be found\n */\n private findOverrideIndex(overrideName: string): number {\n return this.overrides.findIndex(\n ovr => ovr.name() === normalizePath(overrideName),\n );\n }\n}\n"]}
@@ -22,7 +22,7 @@ export type FromSerializedOpts = {
22
22
  */
23
23
  export default interface Override {
24
24
  /**
25
- * Case sensitive identifer of the override (e.g. filename or directory name)
25
+ * Case sensitive identifier of the override (e.g. filename or directory name)
26
26
  */
27
27
  name(): string;
28
28
  /**
@@ -44,7 +44,7 @@ class PlatformOverride {
44
44
  return [ValidationStrategy_1.ValidationStrategies.overrideFileExists(this.overrideFile)];
45
45
  }
46
46
  diffStrategy() {
47
- return DiffStrategy_1.DiffStrategies.asssumeSame();
47
+ return DiffStrategy_1.DiffStrategies.assumeSame();
48
48
  }
49
49
  }
50
50
  exports.PlatformOverride = PlatformOverride;
@@ -219,7 +219,7 @@ class DirectoryCopyOverride {
219
219
  ];
220
220
  }
221
221
  diffStrategy() {
222
- return DiffStrategy_1.DiffStrategies.asssumeSame();
222
+ return DiffStrategy_1.DiffStrategies.assumeSame();
223
223
  }
224
224
  }
225
225
  exports.DirectoryCopyOverride = DirectoryCopyOverride;
@@ -1 +1 @@
1
- {"version":3,"file":"Override.js","sourceRoot":"","sources":["../src/Override.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 Serialized from './Serialized';\nimport path from 'path';\n\nimport DiffStrategy, {DiffStrategies} from './DiffStrategy';\nimport UpgradeStrategy, {UpgradeStrategies} from './UpgradeStrategy';\nimport ValidationStrategy, {ValidationStrategies} from './ValidationStrategy';\nimport {normalizePath, unixPath} from './PathUtils';\nimport OverrideFactory from './OverrideFactory';\n\nexport type SerializeOpts = {defaultBaseVersion?: string};\nexport type FromSerializedOpts = {defaultBaseVersion?: string};\n\n/**\n * Immutable programmatic representation of an override. This should remain\n * generic to files vs directories, different representations, different\n * validation rules, etc.\n */\nexport default interface Override {\n /**\n * Case sensitive identifer of the override (e.g. filename or directory name)\n */\n name(): string;\n\n /**\n * Does the override include the given file?\n */\n includesFile(filename: string): boolean;\n\n /**\n * Convert to a serialized representation\n */\n serialize(opts?: SerializeOpts): Serialized.Override;\n\n /**\n * Create a copy of the override which is considered \"up to date\" in regards\n * to the current React source tree. This does not change underlying content.\n */\n createUpdated(factory: OverrideFactory): Promise<Override>;\n\n /**\n * Specifies how the override should be modified to integrate new changes.\n */\n upgradeStrategy(): UpgradeStrategy;\n\n /**\n * Specifies how to check if the override contents are valid and up to date.\n */\n validationStrategies(): ValidationStrategy[];\n\n /**\n * Specifies how to diff an override against its base version\n */\n diffStrategy(): DiffStrategy;\n}\n\n/**\n * Platform overrides represent logic not derived from upstream sources.\n */\nexport class PlatformOverride implements Override {\n private readonly overrideFile: string;\n\n constructor(args: {file: string}) {\n this.overrideFile = normalizePath(args.file);\n }\n\n static fromSerialized(\n serialized: Serialized.PlatformOverride,\n _opts?: FromSerializedOpts,\n ): PlatformOverride {\n return new PlatformOverride(serialized);\n }\n\n serialize(): Serialized.PlatformOverride {\n return {type: 'platform', file: unixPath(this.overrideFile)};\n }\n\n name(): string {\n return this.overrideFile;\n }\n\n includesFile(filename: string): boolean {\n return normalizePath(filename) === this.overrideFile;\n }\n\n async createUpdated(factory: OverrideFactory): Promise<Override> {\n return factory.createPlatformOverride(this.overrideFile);\n }\n\n upgradeStrategy(): UpgradeStrategy {\n return UpgradeStrategies.assumeUpToDate(this.overrideFile);\n }\n\n validationStrategies(): ValidationStrategy[] {\n return [ValidationStrategies.overrideFileExists(this.overrideFile)];\n }\n\n diffStrategy(): DiffStrategy {\n return DiffStrategies.asssumeSame();\n }\n}\n\n/**\n * Base class for overrides which derive from an upstream file\n */\nabstract class BaseFileOverride implements Override {\n protected overrideFile: string;\n protected baseFile: string;\n protected baseVersion: string;\n protected baseHash: string;\n protected issueNumber?: number;\n\n constructor(args: {\n file: string;\n baseFile: string;\n baseVersion: string;\n baseHash: string;\n issue?: number;\n }) {\n this.overrideFile = normalizePath(args.file);\n this.baseFile = normalizePath(args.baseFile);\n this.baseVersion = args.baseVersion;\n this.baseHash = args.baseHash;\n this.issueNumber = args.issue;\n }\n\n name(): string {\n return this.overrideFile;\n }\n\n includesFile(filename: string): boolean {\n return normalizePath(filename) === this.overrideFile;\n }\n\n abstract serialize(): Serialized.Override;\n abstract createUpdated(factory: OverrideFactory): Promise<Override>;\n abstract upgradeStrategy(): UpgradeStrategy;\n\n validationStrategies(): ValidationStrategy[] {\n return [\n ValidationStrategies.baseFileExists(this.overrideFile, this.baseFile),\n ValidationStrategies.overrideFileExists(this.overrideFile),\n ValidationStrategies.baseUpToDate(\n this.overrideFile,\n this.baseFile,\n this.baseHash,\n ),\n ];\n }\n\n diffStrategy(): DiffStrategy {\n return DiffStrategies.compareBaseFile(\n this.overrideFile,\n this.baseFile,\n this.baseVersion,\n );\n }\n\n protected serializeBase<T>(type: T, opts?: SerializeOpts) {\n return {\n type,\n file: unixPath(this.overrideFile),\n baseFile: unixPath(this.baseFile),\n baseVersion:\n opts?.defaultBaseVersion === this.baseVersion\n ? undefined\n : this.baseVersion,\n baseHash: this.baseHash,\n issue: this.issueNumber,\n };\n }\n}\n\n/**\n * Copy overrides enforce that an override file is an exact copy of a base file\n */\nexport class CopyOverride extends BaseFileOverride {\n constructor(args: {\n file: string;\n baseFile: string;\n baseVersion: string;\n baseHash: string;\n issue?: number;\n }) {\n super(args);\n }\n\n static fromSerialized(\n serialized: Serialized.CopyOverride,\n opts?: FromSerializedOpts,\n ): CopyOverride {\n return new CopyOverride(mergeBaseVersion(serialized, opts));\n }\n\n serialize(opts?: SerializeOpts): Serialized.CopyOverride {\n return this.serializeBase('copy', opts);\n }\n\n async createUpdated(factory: OverrideFactory): Promise<Override> {\n return factory.createCopyOverride(\n this.overrideFile,\n this.baseFile,\n this.issueNumber as number,\n );\n }\n\n upgradeStrategy(): UpgradeStrategy {\n return UpgradeStrategies.copyFile(this.overrideFile, this.baseFile);\n }\n\n validationStrategies(): ValidationStrategy[] {\n return [\n ...super.validationStrategies(),\n ValidationStrategies.overrideCopyOfBase(this.overrideFile, this.baseFile),\n ];\n }\n}\n\n/**\n * Derived overrides represent files which are based off of an existing file in\n * the React Native source tree.\n */\nexport class DerivedOverride extends BaseFileOverride {\n constructor(args: {\n file: string;\n baseFile: string;\n baseVersion: string;\n baseHash: string;\n issue?: number;\n }) {\n super(args);\n }\n\n static fromSerialized(\n serialized: Serialized.DerivedOverride,\n opts?: FromSerializedOpts,\n ): DerivedOverride {\n return new DerivedOverride(mergeBaseVersion(serialized, opts));\n }\n\n serialize(opts?: SerializeOpts): Serialized.DerivedOverride {\n return this.serializeBase('derived', opts);\n }\n\n async createUpdated(factory: OverrideFactory): Promise<Override> {\n return factory.createDerivedOverride(\n this.overrideFile,\n this.baseFile,\n this.issueNumber || undefined,\n );\n }\n\n upgradeStrategy(): UpgradeStrategy {\n return UpgradeStrategies.threeWayMerge(\n this.overrideFile,\n this.baseFile,\n this.baseVersion,\n );\n }\n\n validationStrategies(): ValidationStrategy[] {\n return [\n ...super.validationStrategies(),\n ValidationStrategies.overrideDifferentFromBase(\n this.overrideFile,\n this.baseFile,\n ),\n ];\n }\n}\n\n/**\n * Patch overrides represent files which make minor modifications to existing\n * upstream sources.\n */\nexport class PatchOverride extends BaseFileOverride {\n constructor(args: {\n file: string;\n baseFile: string;\n baseVersion: string;\n baseHash: string;\n issue?: number;\n }) {\n super(args);\n }\n\n static fromSerialized(\n serialized: Serialized.PatchOverride,\n opts?: FromSerializedOpts,\n ): PatchOverride {\n return new PatchOverride(mergeBaseVersion(serialized, opts));\n }\n\n serialize(opts?: SerializeOpts): Serialized.PatchOverride {\n return this.serializeBase('patch', opts);\n }\n\n async createUpdated(factory: OverrideFactory): Promise<Override> {\n return factory.createPatchOverride(\n this.overrideFile,\n this.baseFile,\n this.issueNumber!,\n );\n }\n\n upgradeStrategy(): UpgradeStrategy {\n return UpgradeStrategies.threeWayMerge(\n this.overrideFile,\n this.baseFile,\n this.baseVersion,\n );\n }\n\n validationStrategies(): ValidationStrategy[] {\n return [\n ...super.validationStrategies(),\n ValidationStrategies.overrideDifferentFromBase(\n this.overrideFile,\n this.baseFile,\n ),\n ];\n }\n}\n\n/**\n * DirectoryCopy overrides copy files from an upstream directory\n */\nexport class DirectoryCopyOverride implements Override {\n private readonly directory: string;\n private readonly baseDirectory: string;\n private readonly baseVersion: string;\n private readonly baseHash: string;\n private readonly issue?: number;\n\n constructor(args: {\n directory: string;\n baseDirectory: string;\n baseVersion: string;\n baseHash: string;\n issue?: number;\n }) {\n this.directory = normalizePath(args.directory);\n this.baseDirectory = normalizePath(args.baseDirectory);\n this.baseVersion = args.baseVersion;\n this.baseHash = args.baseHash;\n this.issue = args.issue;\n }\n\n static fromSerialized(\n serialized: Serialized.DirectoryCopyOverride,\n opts?: FromSerializedOpts,\n ): DirectoryCopyOverride {\n return new DirectoryCopyOverride(mergeBaseVersion(serialized, opts));\n }\n\n serialize(opts?: SerializeOpts): Serialized.DirectoryCopyOverride {\n return {\n type: 'copy',\n directory: unixPath(this.directory),\n baseDirectory: unixPath(this.baseDirectory),\n baseVersion:\n opts?.defaultBaseVersion === this.baseVersion\n ? undefined\n : this.baseVersion,\n baseHash: this.baseHash,\n issue: this.issue,\n };\n }\n\n name(): string {\n return this.directory;\n }\n\n includesFile(filename: string): boolean {\n const relativeToDir = path.relative(\n this.directory,\n normalizePath(filename),\n );\n\n return relativeToDir.split(path.sep)[0] !== '..';\n }\n\n async createUpdated(factory: OverrideFactory): Promise<Override> {\n return factory.createDirectoryCopyOverride(\n this.directory,\n this.baseDirectory,\n this.issue,\n );\n }\n\n upgradeStrategy(): UpgradeStrategy {\n return UpgradeStrategies.copyDirectory(this.directory, this.baseDirectory);\n }\n\n validationStrategies(): ValidationStrategy[] {\n return [\n ValidationStrategies.overrideDirectoryExists(this.directory),\n ValidationStrategies.baseDirectoryExists(\n this.directory,\n this.baseDirectory,\n ),\n ValidationStrategies.baseUpToDate(\n this.directory,\n this.baseDirectory,\n this.baseHash,\n ),\n ValidationStrategies.overrideCopyOfBase(\n this.directory,\n this.baseDirectory,\n ),\n ];\n }\n\n diffStrategy(): DiffStrategy {\n return DiffStrategies.asssumeSame();\n }\n}\n\nexport function deserializeOverride(\n ovr: Serialized.Override,\n opts?: FromSerializedOpts,\n): Override {\n switch (ovr.type) {\n case 'platform':\n return PlatformOverride.fromSerialized(ovr, opts);\n case 'copy':\n return 'directory' in ovr\n ? DirectoryCopyOverride.fromSerialized(ovr, opts)\n : CopyOverride.fromSerialized(ovr, opts);\n case 'derived':\n return DerivedOverride.fromSerialized(ovr, opts);\n case 'patch':\n return PatchOverride.fromSerialized(ovr, opts);\n }\n}\n\nfunction mergeBaseVersion<T extends {baseVersion?: string}>(\n ovr: T,\n opts?: FromSerializedOpts,\n): T & {baseVersion: string} {\n if (!ovr.baseVersion && !opts?.defaultBaseVersion) {\n throw new Error(\n `The following override should declare a baseVersion if the manifest does not provide a default: ${JSON.stringify(\n ovr,\n null,\n 2,\n )}`,\n );\n }\n\n return Object.assign({}, ovr, {\n baseVersion: ovr.baseVersion || opts?.defaultBaseVersion!,\n });\n}\n"]}
1
+ {"version":3,"file":"Override.js","sourceRoot":"","sources":["../src/Override.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 Serialized from './Serialized';\nimport path from 'path';\n\nimport DiffStrategy, {DiffStrategies} from './DiffStrategy';\nimport UpgradeStrategy, {UpgradeStrategies} from './UpgradeStrategy';\nimport ValidationStrategy, {ValidationStrategies} from './ValidationStrategy';\nimport {normalizePath, unixPath} from './PathUtils';\nimport OverrideFactory from './OverrideFactory';\n\nexport type SerializeOpts = {defaultBaseVersion?: string};\nexport type FromSerializedOpts = {defaultBaseVersion?: string};\n\n/**\n * Immutable programmatic representation of an override. This should remain\n * generic to files vs directories, different representations, different\n * validation rules, etc.\n */\nexport default interface Override {\n /**\n * Case sensitive identifier of the override (e.g. filename or directory name)\n */\n name(): string;\n\n /**\n * Does the override include the given file?\n */\n includesFile(filename: string): boolean;\n\n /**\n * Convert to a serialized representation\n */\n serialize(opts?: SerializeOpts): Serialized.Override;\n\n /**\n * Create a copy of the override which is considered \"up to date\" in regards\n * to the current React source tree. This does not change underlying content.\n */\n createUpdated(factory: OverrideFactory): Promise<Override>;\n\n /**\n * Specifies how the override should be modified to integrate new changes.\n */\n upgradeStrategy(): UpgradeStrategy;\n\n /**\n * Specifies how to check if the override contents are valid and up to date.\n */\n validationStrategies(): ValidationStrategy[];\n\n /**\n * Specifies how to diff an override against its base version\n */\n diffStrategy(): DiffStrategy;\n}\n\n/**\n * Platform overrides represent logic not derived from upstream sources.\n */\nexport class PlatformOverride implements Override {\n private readonly overrideFile: string;\n\n constructor(args: {file: string}) {\n this.overrideFile = normalizePath(args.file);\n }\n\n static fromSerialized(\n serialized: Serialized.PlatformOverride,\n _opts?: FromSerializedOpts,\n ): PlatformOverride {\n return new PlatformOverride(serialized);\n }\n\n serialize(): Serialized.PlatformOverride {\n return {type: 'platform', file: unixPath(this.overrideFile)};\n }\n\n name(): string {\n return this.overrideFile;\n }\n\n includesFile(filename: string): boolean {\n return normalizePath(filename) === this.overrideFile;\n }\n\n async createUpdated(factory: OverrideFactory): Promise<Override> {\n return factory.createPlatformOverride(this.overrideFile);\n }\n\n upgradeStrategy(): UpgradeStrategy {\n return UpgradeStrategies.assumeUpToDate(this.overrideFile);\n }\n\n validationStrategies(): ValidationStrategy[] {\n return [ValidationStrategies.overrideFileExists(this.overrideFile)];\n }\n\n diffStrategy(): DiffStrategy {\n return DiffStrategies.assumeSame();\n }\n}\n\n/**\n * Base class for overrides which derive from an upstream file\n */\nabstract class BaseFileOverride implements Override {\n protected overrideFile: string;\n protected baseFile: string;\n protected baseVersion: string;\n protected baseHash: string;\n protected issueNumber?: number;\n\n constructor(args: {\n file: string;\n baseFile: string;\n baseVersion: string;\n baseHash: string;\n issue?: number;\n }) {\n this.overrideFile = normalizePath(args.file);\n this.baseFile = normalizePath(args.baseFile);\n this.baseVersion = args.baseVersion;\n this.baseHash = args.baseHash;\n this.issueNumber = args.issue;\n }\n\n name(): string {\n return this.overrideFile;\n }\n\n includesFile(filename: string): boolean {\n return normalizePath(filename) === this.overrideFile;\n }\n\n abstract serialize(): Serialized.Override;\n abstract createUpdated(factory: OverrideFactory): Promise<Override>;\n abstract upgradeStrategy(): UpgradeStrategy;\n\n validationStrategies(): ValidationStrategy[] {\n return [\n ValidationStrategies.baseFileExists(this.overrideFile, this.baseFile),\n ValidationStrategies.overrideFileExists(this.overrideFile),\n ValidationStrategies.baseUpToDate(\n this.overrideFile,\n this.baseFile,\n this.baseHash,\n ),\n ];\n }\n\n diffStrategy(): DiffStrategy {\n return DiffStrategies.compareBaseFile(\n this.overrideFile,\n this.baseFile,\n this.baseVersion,\n );\n }\n\n protected serializeBase<T>(type: T, opts?: SerializeOpts) {\n return {\n type,\n file: unixPath(this.overrideFile),\n baseFile: unixPath(this.baseFile),\n baseVersion:\n opts?.defaultBaseVersion === this.baseVersion\n ? undefined\n : this.baseVersion,\n baseHash: this.baseHash,\n issue: this.issueNumber,\n };\n }\n}\n\n/**\n * Copy overrides enforce that an override file is an exact copy of a base file\n */\nexport class CopyOverride extends BaseFileOverride {\n constructor(args: {\n file: string;\n baseFile: string;\n baseVersion: string;\n baseHash: string;\n issue?: number;\n }) {\n super(args);\n }\n\n static fromSerialized(\n serialized: Serialized.CopyOverride,\n opts?: FromSerializedOpts,\n ): CopyOverride {\n return new CopyOverride(mergeBaseVersion(serialized, opts));\n }\n\n serialize(opts?: SerializeOpts): Serialized.CopyOverride {\n return this.serializeBase('copy', opts);\n }\n\n async createUpdated(factory: OverrideFactory): Promise<Override> {\n return factory.createCopyOverride(\n this.overrideFile,\n this.baseFile,\n this.issueNumber as number,\n );\n }\n\n upgradeStrategy(): UpgradeStrategy {\n return UpgradeStrategies.copyFile(this.overrideFile, this.baseFile);\n }\n\n validationStrategies(): ValidationStrategy[] {\n return [\n ...super.validationStrategies(),\n ValidationStrategies.overrideCopyOfBase(this.overrideFile, this.baseFile),\n ];\n }\n}\n\n/**\n * Derived overrides represent files which are based off of an existing file in\n * the React Native source tree.\n */\nexport class DerivedOverride extends BaseFileOverride {\n constructor(args: {\n file: string;\n baseFile: string;\n baseVersion: string;\n baseHash: string;\n issue?: number;\n }) {\n super(args);\n }\n\n static fromSerialized(\n serialized: Serialized.DerivedOverride,\n opts?: FromSerializedOpts,\n ): DerivedOverride {\n return new DerivedOverride(mergeBaseVersion(serialized, opts));\n }\n\n serialize(opts?: SerializeOpts): Serialized.DerivedOverride {\n return this.serializeBase('derived', opts);\n }\n\n async createUpdated(factory: OverrideFactory): Promise<Override> {\n return factory.createDerivedOverride(\n this.overrideFile,\n this.baseFile,\n this.issueNumber || undefined,\n );\n }\n\n upgradeStrategy(): UpgradeStrategy {\n return UpgradeStrategies.threeWayMerge(\n this.overrideFile,\n this.baseFile,\n this.baseVersion,\n );\n }\n\n validationStrategies(): ValidationStrategy[] {\n return [\n ...super.validationStrategies(),\n ValidationStrategies.overrideDifferentFromBase(\n this.overrideFile,\n this.baseFile,\n ),\n ];\n }\n}\n\n/**\n * Patch overrides represent files which make minor modifications to existing\n * upstream sources.\n */\nexport class PatchOverride extends BaseFileOverride {\n constructor(args: {\n file: string;\n baseFile: string;\n baseVersion: string;\n baseHash: string;\n issue?: number;\n }) {\n super(args);\n }\n\n static fromSerialized(\n serialized: Serialized.PatchOverride,\n opts?: FromSerializedOpts,\n ): PatchOverride {\n return new PatchOverride(mergeBaseVersion(serialized, opts));\n }\n\n serialize(opts?: SerializeOpts): Serialized.PatchOverride {\n return this.serializeBase('patch', opts);\n }\n\n async createUpdated(factory: OverrideFactory): Promise<Override> {\n return factory.createPatchOverride(\n this.overrideFile,\n this.baseFile,\n this.issueNumber!,\n );\n }\n\n upgradeStrategy(): UpgradeStrategy {\n return UpgradeStrategies.threeWayMerge(\n this.overrideFile,\n this.baseFile,\n this.baseVersion,\n );\n }\n\n validationStrategies(): ValidationStrategy[] {\n return [\n ...super.validationStrategies(),\n ValidationStrategies.overrideDifferentFromBase(\n this.overrideFile,\n this.baseFile,\n ),\n ];\n }\n}\n\n/**\n * DirectoryCopy overrides copy files from an upstream directory\n */\nexport class DirectoryCopyOverride implements Override {\n private readonly directory: string;\n private readonly baseDirectory: string;\n private readonly baseVersion: string;\n private readonly baseHash: string;\n private readonly issue?: number;\n\n constructor(args: {\n directory: string;\n baseDirectory: string;\n baseVersion: string;\n baseHash: string;\n issue?: number;\n }) {\n this.directory = normalizePath(args.directory);\n this.baseDirectory = normalizePath(args.baseDirectory);\n this.baseVersion = args.baseVersion;\n this.baseHash = args.baseHash;\n this.issue = args.issue;\n }\n\n static fromSerialized(\n serialized: Serialized.DirectoryCopyOverride,\n opts?: FromSerializedOpts,\n ): DirectoryCopyOverride {\n return new DirectoryCopyOverride(mergeBaseVersion(serialized, opts));\n }\n\n serialize(opts?: SerializeOpts): Serialized.DirectoryCopyOverride {\n return {\n type: 'copy',\n directory: unixPath(this.directory),\n baseDirectory: unixPath(this.baseDirectory),\n baseVersion:\n opts?.defaultBaseVersion === this.baseVersion\n ? undefined\n : this.baseVersion,\n baseHash: this.baseHash,\n issue: this.issue,\n };\n }\n\n name(): string {\n return this.directory;\n }\n\n includesFile(filename: string): boolean {\n const relativeToDir = path.relative(\n this.directory,\n normalizePath(filename),\n );\n\n return relativeToDir.split(path.sep)[0] !== '..';\n }\n\n async createUpdated(factory: OverrideFactory): Promise<Override> {\n return factory.createDirectoryCopyOverride(\n this.directory,\n this.baseDirectory,\n this.issue,\n );\n }\n\n upgradeStrategy(): UpgradeStrategy {\n return UpgradeStrategies.copyDirectory(this.directory, this.baseDirectory);\n }\n\n validationStrategies(): ValidationStrategy[] {\n return [\n ValidationStrategies.overrideDirectoryExists(this.directory),\n ValidationStrategies.baseDirectoryExists(\n this.directory,\n this.baseDirectory,\n ),\n ValidationStrategies.baseUpToDate(\n this.directory,\n this.baseDirectory,\n this.baseHash,\n ),\n ValidationStrategies.overrideCopyOfBase(\n this.directory,\n this.baseDirectory,\n ),\n ];\n }\n\n diffStrategy(): DiffStrategy {\n return DiffStrategies.assumeSame();\n }\n}\n\nexport function deserializeOverride(\n ovr: Serialized.Override,\n opts?: FromSerializedOpts,\n): Override {\n switch (ovr.type) {\n case 'platform':\n return PlatformOverride.fromSerialized(ovr, opts);\n case 'copy':\n return 'directory' in ovr\n ? DirectoryCopyOverride.fromSerialized(ovr, opts)\n : CopyOverride.fromSerialized(ovr, opts);\n case 'derived':\n return DerivedOverride.fromSerialized(ovr, opts);\n case 'patch':\n return PatchOverride.fromSerialized(ovr, opts);\n }\n}\n\nfunction mergeBaseVersion<T extends {baseVersion?: string}>(\n ovr: T,\n opts?: FromSerializedOpts,\n): T & {baseVersion: string} {\n if (!ovr.baseVersion && !opts?.defaultBaseVersion) {\n throw new Error(\n `The following override should declare a baseVersion if the manifest does not provide a default: ${JSON.stringify(\n ovr,\n null,\n 2,\n )}`,\n );\n }\n\n return Object.assign({}, ovr, {\n baseVersion: ovr.baseVersion || opts?.defaultBaseVersion!,\n });\n}\n"]}
@@ -17,7 +17,7 @@ export default interface OverrideFactory {
17
17
  createDirectoryCopyOverride(directory: string, baseDirectory: string, issue?: number): Promise<DirectoryCopyOverride>;
18
18
  }
19
19
  /**
20
- * Conrete implementation of an OverrideFactory
20
+ * Concrete implementation of an OverrideFactory
21
21
  */
22
22
  export declare class OverrideFactoryImpl implements OverrideFactory {
23
23
  private readonly reactRepo;
@@ -14,7 +14,7 @@ const path_1 = __importDefault(require("path"));
14
14
  const Override_1 = require("./Override");
15
15
  const Hash_1 = require("./Hash");
16
16
  /**
17
- * Conrete implementation of an OverrideFactory
17
+ * Concrete implementation of an OverrideFactory
18
18
  */
19
19
  class OverrideFactoryImpl {
20
20
  constructor(reactRepo, overrideRepo) {
@@ -1 +1 @@
1
- {"version":3,"file":"OverrideFactory.js","sourceRoot":"","sources":["../src/OverrideFactory.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 path from 'path';\n\nimport {\n CopyOverride,\n DerivedOverride,\n DirectoryCopyOverride,\n PatchOverride,\n PlatformOverride,\n} from './Override';\nimport FileRepository, {ReactFileRepository} from './FileRepository';\nimport {hashFileOrDirectory} from './Hash';\n\n/**\n * Allows creation of overrides, taking care of guts such as hashing, version checking, etc.\n */\nexport default interface OverrideFactory {\n createPlatformOverride(file: string): Promise<PlatformOverride>;\n\n createCopyOverride(\n file: string,\n baseFile: string,\n issue?: number,\n ): Promise<CopyOverride>;\n\n createDerivedOverride(\n file: string,\n baseFile: string,\n issue?: number,\n ): Promise<DerivedOverride>;\n\n createPatchOverride(\n file: string,\n baseFile: string,\n issue?: number,\n ): Promise<PatchOverride>;\n\n createDirectoryCopyOverride(\n directory: string,\n baseDirectory: string,\n issue?: number,\n ): Promise<DirectoryCopyOverride>;\n}\n\n/**\n * Conrete implementation of an OverrideFactory\n */\nexport class OverrideFactoryImpl implements OverrideFactory {\n private readonly reactRepo: ReactFileRepository;\n private readonly overrideRepo: FileRepository;\n\n constructor(reactRepo: ReactFileRepository, overrideRepo: FileRepository) {\n this.reactRepo = reactRepo;\n this.overrideRepo = overrideRepo;\n }\n\n async createPlatformOverride(file: string): Promise<PlatformOverride> {\n await this.checkOverrideExists(file, 'file');\n return new PlatformOverride({file});\n }\n\n async createCopyOverride(\n file: string,\n baseFile: string,\n issue?: number,\n ): Promise<CopyOverride> {\n await this.checkOverrideExists(file, 'file');\n return new CopyOverride({\n file,\n baseFile,\n issue,\n ...(await this.getBaseInfo(baseFile)),\n });\n }\n\n async createDerivedOverride(\n file: string,\n baseFile: string,\n issue?: number,\n ): Promise<DerivedOverride> {\n await this.checkOverrideExists(file, 'file');\n return new DerivedOverride({\n file,\n baseFile,\n issue,\n ...(await this.getBaseInfo(baseFile)),\n });\n }\n\n async createPatchOverride(\n file: string,\n baseFile: string,\n issue?: number,\n ): Promise<PatchOverride> {\n await this.checkOverrideExists(file, 'file');\n return new PatchOverride({\n file,\n baseFile,\n issue,\n ...(await this.getBaseInfo(baseFile)),\n });\n }\n\n async createDirectoryCopyOverride(\n directory: string,\n baseDirectory: string,\n issue?: number,\n ): Promise<DirectoryCopyOverride> {\n await this.checkOverrideExists(directory, 'directory');\n return new DirectoryCopyOverride({\n directory,\n baseDirectory,\n issue,\n ...(await this.getBaseInfo(baseDirectory)),\n });\n }\n\n private async checkOverrideExists(\n overridePath: string,\n type: 'file' | 'directory',\n ) {\n if (path.isAbsolute(overridePath)) {\n throw new Error(\n `Expected override path to be repo relative. Got '${overridePath}'`,\n );\n }\n\n if ((await this.overrideRepo.stat(overridePath)) !== type) {\n throw new Error(\n `Could not find ${type} at repo relative path '${overridePath}'`,\n );\n }\n }\n\n private async getBaseInfo(\n basePath: string,\n ): Promise<{baseVersion: string; baseHash: string}> {\n if (path.isAbsolute(basePath)) {\n throw new Error(\n `Expected base path to be repo relative. Got '${basePath}'`,\n );\n }\n\n const baseType = await this.reactRepo.stat(basePath);\n if (baseType === 'none') {\n throw new Error(`Could not find base file/directory '${basePath}'`);\n }\n\n const baseVersion = this.reactRepo.getVersion();\n const baseHash = (await hashFileOrDirectory(basePath, this.reactRepo))!;\n\n return {baseVersion, baseHash};\n }\n}\n"]}
1
+ {"version":3,"file":"OverrideFactory.js","sourceRoot":"","sources":["../src/OverrideFactory.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 path from 'path';\n\nimport {\n CopyOverride,\n DerivedOverride,\n DirectoryCopyOverride,\n PatchOverride,\n PlatformOverride,\n} from './Override';\nimport FileRepository, {ReactFileRepository} from './FileRepository';\nimport {hashFileOrDirectory} from './Hash';\n\n/**\n * Allows creation of overrides, taking care of guts such as hashing, version checking, etc.\n */\nexport default interface OverrideFactory {\n createPlatformOverride(file: string): Promise<PlatformOverride>;\n\n createCopyOverride(\n file: string,\n baseFile: string,\n issue?: number,\n ): Promise<CopyOverride>;\n\n createDerivedOverride(\n file: string,\n baseFile: string,\n issue?: number,\n ): Promise<DerivedOverride>;\n\n createPatchOverride(\n file: string,\n baseFile: string,\n issue?: number,\n ): Promise<PatchOverride>;\n\n createDirectoryCopyOverride(\n directory: string,\n baseDirectory: string,\n issue?: number,\n ): Promise<DirectoryCopyOverride>;\n}\n\n/**\n * Concrete implementation of an OverrideFactory\n */\nexport class OverrideFactoryImpl implements OverrideFactory {\n private readonly reactRepo: ReactFileRepository;\n private readonly overrideRepo: FileRepository;\n\n constructor(reactRepo: ReactFileRepository, overrideRepo: FileRepository) {\n this.reactRepo = reactRepo;\n this.overrideRepo = overrideRepo;\n }\n\n async createPlatformOverride(file: string): Promise<PlatformOverride> {\n await this.checkOverrideExists(file, 'file');\n return new PlatformOverride({file});\n }\n\n async createCopyOverride(\n file: string,\n baseFile: string,\n issue?: number,\n ): Promise<CopyOverride> {\n await this.checkOverrideExists(file, 'file');\n return new CopyOverride({\n file,\n baseFile,\n issue,\n ...(await this.getBaseInfo(baseFile)),\n });\n }\n\n async createDerivedOverride(\n file: string,\n baseFile: string,\n issue?: number,\n ): Promise<DerivedOverride> {\n await this.checkOverrideExists(file, 'file');\n return new DerivedOverride({\n file,\n baseFile,\n issue,\n ...(await this.getBaseInfo(baseFile)),\n });\n }\n\n async createPatchOverride(\n file: string,\n baseFile: string,\n issue?: number,\n ): Promise<PatchOverride> {\n await this.checkOverrideExists(file, 'file');\n return new PatchOverride({\n file,\n baseFile,\n issue,\n ...(await this.getBaseInfo(baseFile)),\n });\n }\n\n async createDirectoryCopyOverride(\n directory: string,\n baseDirectory: string,\n issue?: number,\n ): Promise<DirectoryCopyOverride> {\n await this.checkOverrideExists(directory, 'directory');\n return new DirectoryCopyOverride({\n directory,\n baseDirectory,\n issue,\n ...(await this.getBaseInfo(baseDirectory)),\n });\n }\n\n private async checkOverrideExists(\n overridePath: string,\n type: 'file' | 'directory',\n ) {\n if (path.isAbsolute(overridePath)) {\n throw new Error(\n `Expected override path to be repo relative. Got '${overridePath}'`,\n );\n }\n\n if ((await this.overrideRepo.stat(overridePath)) !== type) {\n throw new Error(\n `Could not find ${type} at repo relative path '${overridePath}'`,\n );\n }\n }\n\n private async getBaseInfo(\n basePath: string,\n ): Promise<{baseVersion: string; baseHash: string}> {\n if (path.isAbsolute(basePath)) {\n throw new Error(\n `Expected base path to be repo relative. Got '${basePath}'`,\n );\n }\n\n const baseType = await this.reactRepo.stat(basePath);\n if (baseType === 'none') {\n throw new Error(`Could not find base file/directory '${basePath}'`);\n }\n\n const baseVersion = this.reactRepo.getVersion();\n const baseHash = (await hashFileOrDirectory(basePath, this.reactRepo))!;\n\n return {baseVersion, baseHash};\n }\n}\n"]}
@@ -21,7 +21,7 @@ async function getInstalledRNVersion() {
21
21
  const rnPackage = require('react-native/package.json');
22
22
  const version = rnPackage.version;
23
23
  if (typeof version !== 'string') {
24
- throw new Error('Unexpected formt of React Native package.json');
24
+ throw new Error('Unexpected format of React Native package.json');
25
25
  }
26
26
  return version;
27
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PackageUtils.js","sourceRoot":"","sources":["../src/PackageUtils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;AAEH,kEAA0C;AAC1C,6CAA6C;AAE7C,IAAI,UAAU,GAAQ,IAAI,CAAC;AAE3B;;;GAGG;AACI,KAAK,UAAU,qBAAqB;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAElC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;KAClE;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AATD,sDASC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa;IACjC,IAAI,UAAU,KAAK,IAAI,EAAE;QACvB,OAAO,UAAU,CAAC;KACnB;IAED,MAAM,cAAc,GAAG,MAAM,IAAA,4BAAe,GAAE,CAAC;IAC/C,UAAU,GAAG,MAAM,YAAE,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IAEnD,OAAO,UAAU,CAAC;AACpB,CAAC;AATD,sCASC","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 {findThisPackage} from './FileSearch';\n\nlet npmPackage: any = null;\n\n/**\n * Try to find the currently installed React Native version by searching for and\n * reading it's package.json.\n */\nexport async function getInstalledRNVersion(): Promise<string> {\n const rnPackage = require('react-native/package.json');\n const version = rnPackage.version;\n\n if (typeof version !== 'string') {\n throw new Error('Unexpected formt of React Native package.json');\n }\n\n return version;\n}\n\n/**\n * Return an object representing the package.json of our current package\n */\nexport async function getNpmPackage(): Promise<any> {\n if (npmPackage !== null) {\n return npmPackage;\n }\n\n const npmPackagePath = await findThisPackage();\n npmPackage = await fs.readJsonFile(npmPackagePath);\n\n return npmPackage;\n}\n"]}
1
+ {"version":3,"file":"PackageUtils.js","sourceRoot":"","sources":["../src/PackageUtils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;AAEH,kEAA0C;AAC1C,6CAA6C;AAE7C,IAAI,UAAU,GAAQ,IAAI,CAAC;AAE3B;;;GAGG;AACI,KAAK,UAAU,qBAAqB;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAElC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;KACnE;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AATD,sDASC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa;IACjC,IAAI,UAAU,KAAK,IAAI,EAAE;QACvB,OAAO,UAAU,CAAC;KACnB;IAED,MAAM,cAAc,GAAG,MAAM,IAAA,4BAAe,GAAE,CAAC;IAC/C,UAAU,GAAG,MAAM,YAAE,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IAEnD,OAAO,UAAU,CAAC;AACpB,CAAC;AATD,sCASC","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 {findThisPackage} from './FileSearch';\n\nlet npmPackage: any = null;\n\n/**\n * Try to find the currently installed React Native version by searching for and\n * reading it's package.json.\n */\nexport async function getInstalledRNVersion(): Promise<string> {\n const rnPackage = require('react-native/package.json');\n const version = rnPackage.version;\n\n if (typeof version !== 'string') {\n throw new Error('Unexpected format of React Native package.json');\n }\n\n return version;\n}\n\n/**\n * Return an object representing the package.json of our current package\n */\nexport async function getNpmPackage(): Promise<any> {\n if (npmPackage !== null) {\n return npmPackage;\n }\n\n const npmPackagePath = await findThisPackage();\n npmPackage = await fs.readJsonFile(npmPackagePath);\n\n return npmPackage;\n}\n"]}
@@ -24,7 +24,7 @@ export declare const UpgradeStrategies: {
24
24
  */
25
25
  assumeUpToDate: (overrideName: string) => UpgradeStrategy;
26
26
  /**
27
- * Perform a three way merge of the original base file, the overriden version
27
+ * Perform a three way merge of the original base file, the overridden version
28
28
  * of it, and the base file from a newwer version of React Native.
29
29
  */
30
30
  threeWayMerge: (overrideName: string, baseFile: string, baseVersion: string) => UpgradeStrategy;
@@ -27,7 +27,7 @@ exports.UpgradeStrategies = {
27
27
  }),
28
28
  }),
29
29
  /**
30
- * Perform a three way merge of the original base file, the overriden version
30
+ * Perform a three way merge of the original base file, the overridden version
31
31
  * of it, and the base file from a newwer version of React Native.
32
32
  */
33
33
  threeWayMerge: (overrideName, baseFile, baseVersion) => ({
@@ -77,7 +77,7 @@ exports.UpgradeStrategies = {
77
77
  upgrade: async (gitReactRepo, overrideRepo, newVersion) => {
78
78
  const baseFiles = (await gitReactRepo.listFiles([`${baseDirectory}/**`], newVersion)).map(f => path_1.default.relative(baseDirectory, f));
79
79
  const overrideFiles = (await overrideRepo.listFiles([`${overrideDirectory}/**`])).map(f => path_1.default.relative(overrideDirectory, f));
80
- // Note that this logic can lead emopty directories. This shouldn't
80
+ // Note that this logic can leave empty directories. This shouldn't
81
81
  // matter in practice as Git won't track them.
82
82
  const deleteTasks = lodash_1.default.difference(overrideFiles, baseFiles).map(f => overrideRepo.deleteFile(path_1.default.join(overrideDirectory, f)));
83
83
  const baseRepo = (0, FileRepository_1.bindVersion)(gitReactRepo, newVersion);
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeStrategy.js","sourceRoot":"","sources":["../src/UpgradeStrategy.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 _ from 'lodash';\nimport path from 'path';\nimport {WritableFileRepository, bindVersion} from './FileRepository';\nimport GitReactFileRepository from './GitReactFileRepository';\nimport {hashFileOrDirectory} from './Hash';\nimport isUtf8 from 'isutf8';\n\nexport interface UpgradeResult {\n overrideName: string;\n filesWritten: boolean;\n hasConflicts: boolean;\n}\n\n/**\n * An UpgradeStrategy describes the process to upgrade an individual override\n * to a new version of the React Native source tree.\n */\nexport default interface UpgradeStrategy {\n upgrade(\n gitReactRepo: GitReactFileRepository,\n overrideRepo: WritableFileRepository,\n newVersion: string,\n allowConflicts: boolean,\n ): Promise<UpgradeResult>;\n}\n\nexport const UpgradeStrategies = {\n /**\n * No work needed to upgrade\n */\n assumeUpToDate: (overrideName: string): UpgradeStrategy => ({\n upgrade: async () => ({\n overrideName,\n filesWritten: false,\n hasConflicts: false,\n }),\n }),\n\n /**\n * Perform a three way merge of the original base file, the overriden version\n * of it, and the base file from a newwer version of React Native.\n */\n threeWayMerge: (\n overrideName: string,\n baseFile: string,\n baseVersion: string,\n ): UpgradeStrategy => ({\n upgrade: async (gitReactRepo, overrideRepo, newVersion, allowConflicts) => {\n const ovrContent = await overrideRepo.readFile(overrideName);\n if (ovrContent === null) {\n throw new Error(`Could not read ${overrideName}`);\n }\n\n const ovrAsPatch = await gitReactRepo.generatePatch(\n baseFile,\n baseVersion,\n ovrContent,\n );\n\n if (ovrAsPatch.length === 0) {\n throw new Error(`Generated patch for ${overrideName} was empty`);\n }\n\n const {patchedFile, hasConflicts} = await gitReactRepo.getPatchedFile(\n baseFile,\n newVersion,\n ovrAsPatch,\n );\n\n if (!patchedFile) {\n return {overrideName, filesWritten: false, hasConflicts};\n }\n\n const prettyPatched =\n hasConflicts && isUtf8(patchedFile)\n ? patchedFile\n .toString('utf8')\n .replace(/<<<<<<< ours/g, '<<<<<<< Upstream')\n .replace(/>>>>>>> theirs/g, '>>>>>>> Override')\n : patchedFile;\n\n if (!hasConflicts || allowConflicts) {\n await overrideRepo.writeFile(overrideName, prettyPatched);\n return {overrideName, filesWritten: true, hasConflicts};\n }\n\n return {overrideName, filesWritten: false, hasConflicts};\n },\n }),\n\n /**\n * Overwrite our override with base file contents\n */\n copyFile: (overrideName: string, baseFile: string): UpgradeStrategy => ({\n upgrade: async (gitReactRepo, overrideRepo, newVersion) => {\n const newContent = await gitReactRepo.readFile(baseFile, newVersion);\n if (newContent === null) {\n throw new Error(`Could not read ${baseFile}@${newVersion}`);\n }\n\n await overrideRepo.writeFile(overrideName, newContent);\n return {overrideName, filesWritten: true, hasConflicts: false};\n },\n }),\n\n /**\n * Overwrite our override with base file contents\n */\n copyDirectory: (\n overrideDirectory: string,\n baseDirectory: string,\n ): UpgradeStrategy => ({\n upgrade: async (gitReactRepo, overrideRepo, newVersion) => {\n const baseFiles = (\n await gitReactRepo.listFiles([`${baseDirectory}/**`], newVersion)\n ).map(f => path.relative(baseDirectory, f));\n\n const overrideFiles = (\n await overrideRepo.listFiles([`${overrideDirectory}/**`])\n ).map(f => path.relative(overrideDirectory, f));\n\n // Note that this logic can lead emopty directories. This shouldn't\n // matter in practice as Git won't track them.\n const deleteTasks = _.difference(overrideFiles, baseFiles).map(f =>\n overrideRepo.deleteFile(path.join(overrideDirectory, f)),\n );\n\n const baseRepo = bindVersion(gitReactRepo, newVersion);\n const copyTasks = baseFiles.map(async f => {\n const basePath = path.join(baseDirectory, f);\n const overridePath = path.join(overrideDirectory, f);\n\n // Con't replace files of the same content but different line endings\n if (\n (await hashFileOrDirectory(basePath, baseRepo)) !==\n (await hashFileOrDirectory(overridePath, overrideRepo))\n ) {\n const content = await baseRepo.readFile(basePath);\n await overrideRepo.writeFile(overridePath, content!);\n }\n });\n\n await Promise.all([...deleteTasks, ...copyTasks]);\n\n return {\n overrideName: overrideDirectory,\n filesWritten: true,\n hasConflicts: false,\n };\n },\n }),\n};\n"]}
1
+ {"version":3,"file":"UpgradeStrategy.js","sourceRoot":"","sources":["../src/UpgradeStrategy.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 _ from 'lodash';\nimport path from 'path';\nimport {WritableFileRepository, bindVersion} from './FileRepository';\nimport GitReactFileRepository from './GitReactFileRepository';\nimport {hashFileOrDirectory} from './Hash';\nimport isUtf8 from 'isutf8';\n\nexport interface UpgradeResult {\n overrideName: string;\n filesWritten: boolean;\n hasConflicts: boolean;\n}\n\n/**\n * An UpgradeStrategy describes the process to upgrade an individual override\n * to a new version of the React Native source tree.\n */\nexport default interface UpgradeStrategy {\n upgrade(\n gitReactRepo: GitReactFileRepository,\n overrideRepo: WritableFileRepository,\n newVersion: string,\n allowConflicts: boolean,\n ): Promise<UpgradeResult>;\n}\n\nexport const UpgradeStrategies = {\n /**\n * No work needed to upgrade\n */\n assumeUpToDate: (overrideName: string): UpgradeStrategy => ({\n upgrade: async () => ({\n overrideName,\n filesWritten: false,\n hasConflicts: false,\n }),\n }),\n\n /**\n * Perform a three way merge of the original base file, the overridden version\n * of it, and the base file from a newwer version of React Native.\n */\n threeWayMerge: (\n overrideName: string,\n baseFile: string,\n baseVersion: string,\n ): UpgradeStrategy => ({\n upgrade: async (gitReactRepo, overrideRepo, newVersion, allowConflicts) => {\n const ovrContent = await overrideRepo.readFile(overrideName);\n if (ovrContent === null) {\n throw new Error(`Could not read ${overrideName}`);\n }\n\n const ovrAsPatch = await gitReactRepo.generatePatch(\n baseFile,\n baseVersion,\n ovrContent,\n );\n\n if (ovrAsPatch.length === 0) {\n throw new Error(`Generated patch for ${overrideName} was empty`);\n }\n\n const {patchedFile, hasConflicts} = await gitReactRepo.getPatchedFile(\n baseFile,\n newVersion,\n ovrAsPatch,\n );\n\n if (!patchedFile) {\n return {overrideName, filesWritten: false, hasConflicts};\n }\n\n const prettyPatched =\n hasConflicts && isUtf8(patchedFile)\n ? patchedFile\n .toString('utf8')\n .replace(/<<<<<<< ours/g, '<<<<<<< Upstream')\n .replace(/>>>>>>> theirs/g, '>>>>>>> Override')\n : patchedFile;\n\n if (!hasConflicts || allowConflicts) {\n await overrideRepo.writeFile(overrideName, prettyPatched);\n return {overrideName, filesWritten: true, hasConflicts};\n }\n\n return {overrideName, filesWritten: false, hasConflicts};\n },\n }),\n\n /**\n * Overwrite our override with base file contents\n */\n copyFile: (overrideName: string, baseFile: string): UpgradeStrategy => ({\n upgrade: async (gitReactRepo, overrideRepo, newVersion) => {\n const newContent = await gitReactRepo.readFile(baseFile, newVersion);\n if (newContent === null) {\n throw new Error(`Could not read ${baseFile}@${newVersion}`);\n }\n\n await overrideRepo.writeFile(overrideName, newContent);\n return {overrideName, filesWritten: true, hasConflicts: false};\n },\n }),\n\n /**\n * Overwrite our override with base file contents\n */\n copyDirectory: (\n overrideDirectory: string,\n baseDirectory: string,\n ): UpgradeStrategy => ({\n upgrade: async (gitReactRepo, overrideRepo, newVersion) => {\n const baseFiles = (\n await gitReactRepo.listFiles([`${baseDirectory}/**`], newVersion)\n ).map(f => path.relative(baseDirectory, f));\n\n const overrideFiles = (\n await overrideRepo.listFiles([`${overrideDirectory}/**`])\n ).map(f => path.relative(overrideDirectory, f));\n\n // Note that this logic can leave empty directories. This shouldn't\n // matter in practice as Git won't track them.\n const deleteTasks = _.difference(overrideFiles, baseFiles).map(f =>\n overrideRepo.deleteFile(path.join(overrideDirectory, f)),\n );\n\n const baseRepo = bindVersion(gitReactRepo, newVersion);\n const copyTasks = baseFiles.map(async f => {\n const basePath = path.join(baseDirectory, f);\n const overridePath = path.join(overrideDirectory, f);\n\n // Con't replace files of the same content but different line endings\n if (\n (await hashFileOrDirectory(basePath, baseRepo)) !==\n (await hashFileOrDirectory(overridePath, overrideRepo))\n ) {\n const content = await baseRepo.readFile(basePath);\n await overrideRepo.writeFile(overridePath, content!);\n }\n });\n\n await Promise.all([...deleteTasks, ...copyTasks]);\n\n return {\n overrideName: overrideDirectory,\n filesWritten: true,\n hasConflicts: false,\n };\n },\n }),\n};\n"]}
@@ -111,7 +111,7 @@ exports.ValidationStrategies = {
111
111
  return [];
112
112
  }
113
113
  // There can be whitespace differences from merges that lead to
114
- // semantically indentical files. Do a whitespace insensitive compare to
114
+ // semantically identical files. Do a whitespace insensitive compare to
115
115
  // determine if there is a difference.
116
116
  const hashOpts = { insensitivity: 'whitespace' };
117
117
  const overrideHash = await (0, Hash_1.hashFileOrDirectory)(overrideName, overrideRepo, hashOpts);
@@ -1 +1 @@
1
- {"version":3,"file":"ValidationStrategy.js","sourceRoot":"","sources":["../src/ValidationStrategy.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 {HashOpts, hashFileOrDirectory} from './Hash';\nimport {ReactFileRepository, WritableFileRepository} from './FileRepository';\n\nexport interface ValidationError {\n /**\n * Why did validation fail?\n */\n type:\n | 'missingFromManifest' // An override was found that isn't listed in the manifest\n | 'overrideNotFound' // The manifest describes a file which does not exist\n | 'baseNotFound' // The base file for a manifest entry cannot be found\n | 'expectedFile' // Expected the override to be a file but found a directory\n | 'expectedDirectory' // Expected the override to be a directory but found a file\n | 'outOfDate' // A base file has changed since the manifested version\n | 'overrideDifferentFromBase' // An override file is not an exact copy of the base file\n | 'overrideSameAsBase'; // An override file is an exact copy of the base file\n\n /**\n * What override failed validation\n */\n overrideName: string;\n}\n\n/**\n * A ValidationStrategy allows describing a process to ensure a specific\n * override meets constraints such as ensuring file existence, preventing\n * content modification, or being up to date.\n */\nexport default interface ValidationStrategy {\n validate(\n overrideRepo: WritableFileRepository,\n reactRepo: ReactFileRepository,\n ): Promise<ValidationError[]>;\n}\n\nexport const ValidationStrategies = {\n /**\n * Validate that an override file exists\n */\n overrideFileExists: (overrideName: string): ValidationStrategy => ({\n validate: async overrideRepo => {\n switch (await overrideRepo.stat(overrideName)) {\n case 'file':\n return [];\n case 'directory':\n return [{type: 'expectedFile', overrideName}];\n case 'none':\n return [{type: 'overrideNotFound', overrideName}];\n }\n },\n }),\n\n /**\n * Validate that a base file exists\n */\n baseFileExists: (\n overrideName: string,\n baseFile: string,\n ): ValidationStrategy => ({\n validate: async (_, reactRepo) => {\n switch (await reactRepo.stat(baseFile)) {\n case 'file':\n return [];\n case 'directory':\n return [{type: 'expectedFile', overrideName}];\n case 'none':\n return [{type: 'baseNotFound', overrideName}];\n }\n },\n }),\n\n /**\n * Validate that an override directory exists\n */\n overrideDirectoryExists: (overrideName: string): ValidationStrategy => ({\n validate: async overrideRepo => {\n switch (await overrideRepo.stat(overrideName)) {\n case 'file':\n return [{type: 'expectedDirectory', overrideName}];\n case 'directory':\n return [];\n case 'none':\n return [{type: 'overrideNotFound', overrideName}];\n }\n },\n }),\n\n /**\n * Validate that a base directory exists\n */\n baseDirectoryExists: (\n overrideName: string,\n baseDirectory: string,\n ): ValidationStrategy => ({\n validate: async (_, reactRepo) => {\n switch (await reactRepo.stat(baseDirectory)) {\n case 'file':\n return [{type: 'expectedDirectory', overrideName}];\n case 'directory':\n return [];\n case 'none':\n return [{type: 'baseNotFound', overrideName}];\n }\n },\n }),\n\n /**\n * Validate that a base file/folder matches an expected hash if it exists\n */\n baseUpToDate: (\n overrideName: string,\n base: string,\n expectedBaseHash: string,\n ): ValidationStrategy => ({\n validate: async (_, reactRepo) => {\n const hash = await hashFileOrDirectory(base, reactRepo);\n if (!hash) {\n return [];\n }\n\n return hash === expectedBaseHash\n ? []\n : [{type: 'outOfDate', overrideName}];\n },\n }),\n\n /**\n * Validate that an override meant to be a copy of a base file/folder has not\n * been tampered with\n */\n overrideCopyOfBase: (\n overrideName: string,\n base: string,\n ): ValidationStrategy => ({\n validate: async (overrideRepo, reactRepo) => {\n if (\n (await overrideRepo.stat(overrideName)) === 'none' ||\n (await reactRepo.stat(base)) === 'none'\n ) {\n return [];\n }\n\n const overrideHash = await hashFileOrDirectory(\n overrideName,\n overrideRepo,\n );\n const baseHash = await hashFileOrDirectory(base, reactRepo);\n return overrideHash === baseHash\n ? []\n : [{type: 'overrideDifferentFromBase', overrideName}];\n },\n }),\n\n /**\n * Validate that an override assumed to be different from its base is not\n * identical.\n */\n overrideDifferentFromBase: (\n overrideName: string,\n base: string,\n ): ValidationStrategy => ({\n validate: async (overrideRepo, reactRepo) => {\n if (\n (await overrideRepo.stat(overrideName)) === 'none' ||\n (await reactRepo.stat(base)) === 'none'\n ) {\n return [];\n }\n\n // There can be whitespace differences from merges that lead to\n // semantically indentical files. Do a whitespace insensitive compare to\n // determine if there is a difference.\n const hashOpts: HashOpts = {insensitivity: 'whitespace'};\n\n const overrideHash = await hashFileOrDirectory(\n overrideName,\n overrideRepo,\n hashOpts,\n );\n const baseHash = await hashFileOrDirectory(base, reactRepo, hashOpts);\n return overrideHash === baseHash\n ? [{type: 'overrideSameAsBase', overrideName}]\n : [];\n },\n }),\n};\n"]}
1
+ {"version":3,"file":"ValidationStrategy.js","sourceRoot":"","sources":["../src/ValidationStrategy.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 {HashOpts, hashFileOrDirectory} from './Hash';\nimport {ReactFileRepository, WritableFileRepository} from './FileRepository';\n\nexport interface ValidationError {\n /**\n * Why did validation fail?\n */\n type:\n | 'missingFromManifest' // An override was found that isn't listed in the manifest\n | 'overrideNotFound' // The manifest describes a file which does not exist\n | 'baseNotFound' // The base file for a manifest entry cannot be found\n | 'expectedFile' // Expected the override to be a file but found a directory\n | 'expectedDirectory' // Expected the override to be a directory but found a file\n | 'outOfDate' // A base file has changed since the manifested version\n | 'overrideDifferentFromBase' // An override file is not an exact copy of the base file\n | 'overrideSameAsBase'; // An override file is an exact copy of the base file\n\n /**\n * What override failed validation\n */\n overrideName: string;\n}\n\n/**\n * A ValidationStrategy allows describing a process to ensure a specific\n * override meets constraints such as ensuring file existence, preventing\n * content modification, or being up to date.\n */\nexport default interface ValidationStrategy {\n validate(\n overrideRepo: WritableFileRepository,\n reactRepo: ReactFileRepository,\n ): Promise<ValidationError[]>;\n}\n\nexport const ValidationStrategies = {\n /**\n * Validate that an override file exists\n */\n overrideFileExists: (overrideName: string): ValidationStrategy => ({\n validate: async overrideRepo => {\n switch (await overrideRepo.stat(overrideName)) {\n case 'file':\n return [];\n case 'directory':\n return [{type: 'expectedFile', overrideName}];\n case 'none':\n return [{type: 'overrideNotFound', overrideName}];\n }\n },\n }),\n\n /**\n * Validate that a base file exists\n */\n baseFileExists: (\n overrideName: string,\n baseFile: string,\n ): ValidationStrategy => ({\n validate: async (_, reactRepo) => {\n switch (await reactRepo.stat(baseFile)) {\n case 'file':\n return [];\n case 'directory':\n return [{type: 'expectedFile', overrideName}];\n case 'none':\n return [{type: 'baseNotFound', overrideName}];\n }\n },\n }),\n\n /**\n * Validate that an override directory exists\n */\n overrideDirectoryExists: (overrideName: string): ValidationStrategy => ({\n validate: async overrideRepo => {\n switch (await overrideRepo.stat(overrideName)) {\n case 'file':\n return [{type: 'expectedDirectory', overrideName}];\n case 'directory':\n return [];\n case 'none':\n return [{type: 'overrideNotFound', overrideName}];\n }\n },\n }),\n\n /**\n * Validate that a base directory exists\n */\n baseDirectoryExists: (\n overrideName: string,\n baseDirectory: string,\n ): ValidationStrategy => ({\n validate: async (_, reactRepo) => {\n switch (await reactRepo.stat(baseDirectory)) {\n case 'file':\n return [{type: 'expectedDirectory', overrideName}];\n case 'directory':\n return [];\n case 'none':\n return [{type: 'baseNotFound', overrideName}];\n }\n },\n }),\n\n /**\n * Validate that a base file/folder matches an expected hash if it exists\n */\n baseUpToDate: (\n overrideName: string,\n base: string,\n expectedBaseHash: string,\n ): ValidationStrategy => ({\n validate: async (_, reactRepo) => {\n const hash = await hashFileOrDirectory(base, reactRepo);\n if (!hash) {\n return [];\n }\n\n return hash === expectedBaseHash\n ? []\n : [{type: 'outOfDate', overrideName}];\n },\n }),\n\n /**\n * Validate that an override meant to be a copy of a base file/folder has not\n * been tampered with\n */\n overrideCopyOfBase: (\n overrideName: string,\n base: string,\n ): ValidationStrategy => ({\n validate: async (overrideRepo, reactRepo) => {\n if (\n (await overrideRepo.stat(overrideName)) === 'none' ||\n (await reactRepo.stat(base)) === 'none'\n ) {\n return [];\n }\n\n const overrideHash = await hashFileOrDirectory(\n overrideName,\n overrideRepo,\n );\n const baseHash = await hashFileOrDirectory(base, reactRepo);\n return overrideHash === baseHash\n ? []\n : [{type: 'overrideDifferentFromBase', overrideName}];\n },\n }),\n\n /**\n * Validate that an override assumed to be different from its base is not\n * identical.\n */\n overrideDifferentFromBase: (\n overrideName: string,\n base: string,\n ): ValidationStrategy => ({\n validate: async (overrideRepo, reactRepo) => {\n if (\n (await overrideRepo.stat(overrideName)) === 'none' ||\n (await reactRepo.stat(base)) === 'none'\n ) {\n return [];\n }\n\n // There can be whitespace differences from merges that lead to\n // semantically identical files. Do a whitespace insensitive compare to\n // determine if there is a difference.\n const hashOpts: HashOpts = {insensitivity: 'whitespace'};\n\n const overrideHash = await hashFileOrDirectory(\n overrideName,\n overrideRepo,\n hashOpts,\n );\n const baseHash = await hashFileOrDirectory(base, reactRepo, hashOpts);\n return overrideHash === baseHash\n ? [{type: 'overrideSameAsBase', overrideName}]\n : [];\n },\n }),\n};\n"]}
@@ -21,7 +21,7 @@ const CrossProcessLock_1 = __importDefault(require("../CrossProcessLock"));
21
21
  console.log('Lock acquired!');
22
22
  }
23
23
  else {
24
- console.log('Failed to acqurie lock. Waiting...');
24
+ console.log('Failed to acquire lock. Waiting...');
25
25
  await lock.lock();
26
26
  console.log('Lock acquired!');
27
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"testLocks.js","sourceRoot":"","sources":["../../src/scripts/testLocks.ts"],"names":[],"mappings":";;;;;AAAA;;;;;GAKG;AACH,2EAAmD;AAEnD;;;GAGG;AACH,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,IAAI,GAAG,IAAI,0BAAgB,CAAC,UAAU,CAAC,CAAC;IAE9C,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;KAC/B;SAAM;QACL,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;KAC/B;IAED,WAAW,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC,CAAC,EAAE,CAAC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\nimport CrossProcessLock from '../CrossProcessLock';\n\n/**\n * CrossProcessLock cannot easily be unit tested. In the absence of automated\n * tests, this utility program can be used for simple manual testing.\n */\n(async () => {\n const lock = new CrossProcessLock('TestLock');\n\n console.log('Trying to acquire lock');\n if (await lock.tryLock()) {\n console.log('Lock acquired!');\n } else {\n console.log('Failed to acqurie lock. Waiting...');\n await lock.lock();\n console.log('Lock acquired!');\n }\n\n setInterval(() => {}, 5000);\n})();\n"]}
1
+ {"version":3,"file":"testLocks.js","sourceRoot":"","sources":["../../src/scripts/testLocks.ts"],"names":[],"mappings":";;;;;AAAA;;;;;GAKG;AACH,2EAAmD;AAEnD;;;GAGG;AACH,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,IAAI,GAAG,IAAI,0BAAgB,CAAC,UAAU,CAAC,CAAC;IAE9C,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;KAC/B;SAAM;QACL,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;KAC/B;IAED,WAAW,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC,CAAC,EAAE,CAAC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\nimport CrossProcessLock from '../CrossProcessLock';\n\n/**\n * CrossProcessLock cannot easily be unit tested. In the absence of automated\n * tests, this utility program can be used for simple manual testing.\n */\n(async () => {\n const lock = new CrossProcessLock('TestLock');\n\n console.log('Trying to acquire lock');\n if (await lock.tryLock()) {\n console.log('Lock acquired!');\n } else {\n console.log('Failed to acquire lock. Waiting...');\n await lock.lock();\n console.log('Lock acquired!');\n }\n\n setInterval(() => {}, 5000);\n})();\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-platform-override",
3
- "version": "1.9.5",
3
+ "version": "1.9.6",
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": "^0.0.0-canary.18",
26
- "@react-native-windows/package-utils": "^0.0.0-canary.44",
25
+ "@react-native-windows/fs": "^0.0.0-canary.19",
26
+ "@react-native-windows/package-utils": "^0.0.0-canary.45",
27
27
  "@typescript-eslint/eslint-plugin": "^5.30.5",
28
28
  "@typescript-eslint/parser": "^5.30.5",
29
29
  "async": "^3.2.3",
@@ -48,7 +48,7 @@
48
48
  "@babel/preset-typescript": "^7.8.3",
49
49
  "@rnw-scripts/eslint-config": "1.1.16",
50
50
  "@rnw-scripts/jest-unittest-config": "1.5.2",
51
- "@rnw-scripts/just-task": "2.3.7",
51
+ "@rnw-scripts/just-task": "2.3.8",
52
52
  "@rnw-scripts/ts-config": "2.0.4",
53
53
  "@types/async": "^3.2.5",
54
54
  "@types/chalk": "^2.2.0",