react-native-platform-override 1.5.1 → 1.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin.js +0 -0
- package/lib-commonjs/Api.d.ts +1 -0
- package/lib-commonjs/Api.js +8 -7
- package/lib-commonjs/Api.js.map +1 -1
- package/lib-commonjs/BatchingQueue.js.map +1 -1
- package/lib-commonjs/Cli.js +16 -16
- package/lib-commonjs/Cli.js.map +1 -1
- package/lib-commonjs/CrossProcessLock.js +3 -3
- package/lib-commonjs/CrossProcessLock.js.map +1 -1
- package/lib-commonjs/FileRepository.js +3 -3
- package/lib-commonjs/FileRepository.js.map +1 -1
- package/lib-commonjs/FileSearch.js +6 -23
- package/lib-commonjs/FileSearch.js.map +1 -1
- package/lib-commonjs/FileSystemRepository.js +6 -6
- package/lib-commonjs/FileSystemRepository.js.map +1 -1
- package/lib-commonjs/GitReactFileRepository.d.ts +0 -2
- package/lib-commonjs/GitReactFileRepository.js +8 -45
- package/lib-commonjs/GitReactFileRepository.js.map +1 -1
- package/lib-commonjs/Hash.js +1 -4
- package/lib-commonjs/Hash.js.map +1 -1
- package/lib-commonjs/Manifest.js +9 -9
- package/lib-commonjs/Manifest.js.map +1 -1
- package/lib-commonjs/OverridePrompt.js +4 -4
- package/lib-commonjs/OverridePrompt.js.map +1 -1
- package/lib-commonjs/PackageUtils.js +2 -3
- package/lib-commonjs/PackageUtils.js.map +1 -1
- package/lib-commonjs/Serialized.js +4 -4
- package/lib-commonjs/Serialized.js.map +1 -1
- package/lib-commonjs/UpgradeStrategy.js +3 -3
- package/lib-commonjs/UpgradeStrategy.js.map +1 -1
- package/lib-commonjs/ValidationStrategy.js.map +1 -1
- package/lib-commonjs/refFromVersion.d.ts +10 -0
- package/lib-commonjs/refFromVersion.js +92 -0
- package/lib-commonjs/refFromVersion.js.map +1 -0
- package/lib-commonjs/scripts/generateManifest.js +1 -1
- package/lib-commonjs/scripts/generateManifest.js.map +1 -1
- package/lib-commonjs/scripts/hashFile.js +2 -2
- package/lib-commonjs/scripts/hashFile.js.map +1 -1
- package/package.json +9 -8
- package/CHANGELOG.json +0 -916
- package/CHANGELOG.md +0 -380
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*
|
|
5
|
+
* @format
|
|
6
|
+
*/
|
|
7
|
+
export declare function getAbbreviatedRef(reactNativeVersion: string): string;
|
|
8
|
+
export declare function fetchFullRef(reactNativeVersion: string, opts?: {
|
|
9
|
+
githubToken?: string;
|
|
10
|
+
}): Promise<string>;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) Microsoft Corporation.
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*
|
|
6
|
+
* @format
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.fetchFullRef = exports.getAbbreviatedRef = void 0;
|
|
13
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
14
|
+
const semver_1 = __importDefault(require("semver"));
|
|
15
|
+
function getAbbreviatedRef(reactNativeVersion) {
|
|
16
|
+
if (!semver_1.default.valid(reactNativeVersion)) {
|
|
17
|
+
throw new Error(`${reactNativeVersion} is not a valid semver version`);
|
|
18
|
+
}
|
|
19
|
+
if (semver_1.default.lt(reactNativeVersion, '0.0.0', { includePrerelease: true })) {
|
|
20
|
+
return extractHashFromNightlyVersion(reactNativeVersion);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
return `v${reactNativeVersion}`;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.getAbbreviatedRef = getAbbreviatedRef;
|
|
27
|
+
async function fetchFullRef(reactNativeVersion, opts) {
|
|
28
|
+
if (!semver_1.default.valid(reactNativeVersion)) {
|
|
29
|
+
throw new Error(`${reactNativeVersion} is not a valid semver version`);
|
|
30
|
+
}
|
|
31
|
+
if (semver_1.default.lt(reactNativeVersion, '0.0.0', { includePrerelease: true })) {
|
|
32
|
+
const abbrevHash = extractHashFromNightlyVersion(reactNativeVersion);
|
|
33
|
+
return fetchFullCommitHash(abbrevHash, opts);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
return `refs/tags/v${reactNativeVersion}`;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.fetchFullRef = fetchFullRef;
|
|
40
|
+
// Nightly build have progressed from
|
|
41
|
+
// 1. 0.0.0-<commitHash>
|
|
42
|
+
// 2. 0.0.0-<commitHash>-<date>-<time> (transitional)
|
|
43
|
+
// 3. 0.0.0-<date>-<time>-<commitHash>
|
|
44
|
+
function extractHashFromNightlyVersion(reactNativeVersion) {
|
|
45
|
+
// Several versions do not fall into the normal rule for positioning. Special
|
|
46
|
+
// case them.
|
|
47
|
+
const transitionalVersions = [
|
|
48
|
+
'0.0.0-2d2de744b-20210929-2246',
|
|
49
|
+
'0.0.0-1ee16fc2f-20210930-2008',
|
|
50
|
+
'0.0.0-34b7d22f3-20211001-2008',
|
|
51
|
+
'0.0.0-36f3bf2f5-20211002-2010',
|
|
52
|
+
'0.0.0-36f3bf2f5-20211003-2009',
|
|
53
|
+
'0.0.0-36f3bf2f5-20211004-2008',
|
|
54
|
+
'0.0.0-046b02628-20211005-2008',
|
|
55
|
+
'0.0.0-22801870f-20211006-2008',
|
|
56
|
+
'0.0.0-e612d3a11-20211007-2009',
|
|
57
|
+
'0.0.0-c901c43d1-20211008-2008',
|
|
58
|
+
'0.0.0-232d02c5f-20211009-2008',
|
|
59
|
+
'0.0.0-232d02c5f-20211009-2008',
|
|
60
|
+
'0.0.0-232d02c5f-20211009-2008',
|
|
61
|
+
'0.0.0-232d02c5f-20211009-2008',
|
|
62
|
+
'0.0.0-91adb761c-20211013-2010',
|
|
63
|
+
];
|
|
64
|
+
const preSegment = semver_1.default.prerelease(reactNativeVersion)[0];
|
|
65
|
+
const splitPre = preSegment.split('-');
|
|
66
|
+
// Handle #1
|
|
67
|
+
if (splitPre.length === 1) {
|
|
68
|
+
return splitPre[0];
|
|
69
|
+
}
|
|
70
|
+
// Handle #2
|
|
71
|
+
if (transitionalVersions.includes(reactNativeVersion)) {
|
|
72
|
+
return splitPre[0];
|
|
73
|
+
}
|
|
74
|
+
// Handle #3
|
|
75
|
+
return splitPre[2];
|
|
76
|
+
}
|
|
77
|
+
async function fetchFullCommitHash(abbrevHash, opts) {
|
|
78
|
+
// We cannot get abbreviated hash directly from a remote, so query Github's
|
|
79
|
+
// API for it.
|
|
80
|
+
const commitInfo = await (0, node_fetch_1.default)(`https://api.github.com/repos/facebook/react-native/commits/${abbrevHash}`, {
|
|
81
|
+
headers: {
|
|
82
|
+
'Content-Type': 'application/json',
|
|
83
|
+
'User-Agent': 'react-native-platform-override',
|
|
84
|
+
...((opts === null || opts === void 0 ? void 0 : opts.githubToken) && { Authorization: `Token ${opts.githubToken}` }),
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
if (!commitInfo.ok) {
|
|
88
|
+
throw new Error(`Unable to query Github for commit '${abbrevHash}' Status: '${commitInfo.statusText}'`);
|
|
89
|
+
}
|
|
90
|
+
return (await commitInfo.json()).sha;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=refFromVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refFromVersion.js","sourceRoot":"","sources":["../src/refFromVersion.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 fetch from 'node-fetch';\nimport semver from 'semver';\n\nexport function getAbbreviatedRef(reactNativeVersion: string): string {\n if (!semver.valid(reactNativeVersion)) {\n throw new Error(`${reactNativeVersion} is not a valid semver version`);\n }\n\n if (semver.lt(reactNativeVersion, '0.0.0', {includePrerelease: true})) {\n return extractHashFromNightlyVersion(reactNativeVersion);\n } else {\n return `v${reactNativeVersion}`;\n }\n}\n\nexport async function fetchFullRef(\n reactNativeVersion: string,\n opts?: {githubToken?: string},\n): Promise<string> {\n if (!semver.valid(reactNativeVersion)) {\n throw new Error(`${reactNativeVersion} is not a valid semver version`);\n }\n\n if (semver.lt(reactNativeVersion, '0.0.0', {includePrerelease: true})) {\n const abbrevHash = extractHashFromNightlyVersion(reactNativeVersion);\n return fetchFullCommitHash(abbrevHash, opts);\n } else {\n return `refs/tags/v${reactNativeVersion}`;\n }\n}\n\n// Nightly build have progressed from\n// 1. 0.0.0-<commitHash>\n// 2. 0.0.0-<commitHash>-<date>-<time> (transitional)\n// 3. 0.0.0-<date>-<time>-<commitHash>\nfunction extractHashFromNightlyVersion(reactNativeVersion: string): string {\n // Several versions do not fall into the normal rule for positioning. Special\n // case them.\n const transitionalVersions = [\n '0.0.0-2d2de744b-20210929-2246',\n '0.0.0-1ee16fc2f-20210930-2008',\n '0.0.0-34b7d22f3-20211001-2008',\n '0.0.0-36f3bf2f5-20211002-2010',\n '0.0.0-36f3bf2f5-20211003-2009',\n '0.0.0-36f3bf2f5-20211004-2008',\n '0.0.0-046b02628-20211005-2008',\n '0.0.0-22801870f-20211006-2008',\n '0.0.0-e612d3a11-20211007-2009',\n '0.0.0-c901c43d1-20211008-2008',\n '0.0.0-232d02c5f-20211009-2008',\n '0.0.0-232d02c5f-20211009-2008',\n '0.0.0-232d02c5f-20211009-2008',\n '0.0.0-232d02c5f-20211009-2008',\n '0.0.0-91adb761c-20211013-2010',\n ];\n\n const preSegment = semver.prerelease(reactNativeVersion)![0];\n const splitPre = preSegment.split('-');\n\n // Handle #1\n if (splitPre.length === 1) {\n return splitPre[0];\n }\n\n // Handle #2\n if (transitionalVersions.includes(reactNativeVersion)) {\n return splitPre[0];\n }\n\n // Handle #3\n return splitPre[2];\n}\n\nasync function fetchFullCommitHash(\n abbrevHash: string,\n opts?: {githubToken?: string},\n): Promise<string> {\n // We cannot get abbreviated hash directly from a remote, so query Github's\n // API for it.\n const commitInfo = await fetch(\n `https://api.github.com/repos/facebook/react-native/commits/${abbrevHash}`,\n {\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': 'react-native-platform-override',\n ...(opts?.githubToken && {Authorization: `Token ${opts.githubToken}`}),\n },\n },\n );\n if (!commitInfo.ok) {\n throw new Error(\n `Unable to query Github for commit '${abbrevHash}' Status: '${commitInfo.statusText}'`,\n );\n }\n\n return (await commitInfo.json()).sha;\n}\n"]}
|
|
@@ -53,7 +53,7 @@ const { extensions, directory } = yargs_1.default
|
|
|
53
53
|
},
|
|
54
54
|
})
|
|
55
55
|
.version(false).argv;
|
|
56
|
-
const extensionsRegex = new RegExp(extensions.map(e => `\\.${e}`).join('|'));
|
|
56
|
+
const extensionsRegex = new RegExp(extensions.map((e) => `\\.${e}`).join('|'));
|
|
57
57
|
(async () => {
|
|
58
58
|
const spinner = (0, ora_1.default)();
|
|
59
59
|
spinner.start('Creating manifest');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateManifest.js","sourceRoot":"","sources":["../../src/scripts/generateManifest.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport * as FileRepository from '../FileRepository';\nimport * as Serialized from '../Serialized';\n\nimport ora from 'ora';\nimport path from 'path';\nimport yargs from 'yargs';\n\nimport FileSystemRepository from '../FileSystemRepository';\nimport GitReactFileRepository from '../GitReactFileRepository';\n\nimport {diff_match_patch} from 'diff-match-patch';\nimport {getInstalledRNVersion} from '../PackageUtils';\nimport {hashContent} from '../Hash';\n\nimport isUtf8 from 'isutf8';\n\nconst {extensions, directory} = yargs\n .options({\n directory: {\n description:\n 'The directory containing files that should be in the manifest',\n type: 'string',\n demandOption: true,\n },\n extensions: {\n description: 'A list of platform specific JS extensions to include',\n type: 'array',\n demandOption: true,\n },\n })\n .version(false).argv;\n\nconst extensionsRegex = new RegExp(extensions.map(e => `\\\\.${e}`).join('|'));\n\n(async () => {\n const spinner = ora();\n spinner.start('Creating manifest');\n\n const version = await getInstalledRNVersion();\n const [overrides, reactSources] = await getFileRepos(directory, version);\n const manifest: Serialized.Manifest = {\n includePatterns: undefined,\n excludePatterns: undefined,\n baseVersion: version,\n overrides: [],\n };\n const overrideFiles = await overrides.listFiles();\n\n let i = 0;\n for (const file of overrideFiles) {\n spinner.text = `Creating manifest (${++i}/${overrideFiles.length})`;\n\n const contents = (await overrides.readFile(file))!;\n (await tryAddCopy(file, contents, reactSources, manifest)) ||\n (await tryAddPatch(file, contents, reactSources, manifest)) ||\n (await tryAddDerived(file, contents, reactSources, manifest)) ||\n addUnknown(file, manifest);\n }\n\n const ovrFile = path.join(directory, 'overrides.json');\n await Serialized.writeManifestToFile(manifest, ovrFile);\n\n spinner.succeed();\n})();\n\nasync function tryAddCopy(\n filename: string,\n overrideContent: Buffer,\n reactSources: FileRepository.ReactFileRepository,\n manifest: Serialized.Manifest,\n): Promise<boolean> {\n const baseContent = await reactSources.readFile(filename);\n if (!baseContent) {\n return false;\n }\n\n if (hashContent(baseContent) !== hashContent(overrideContent)) {\n return false;\n }\n\n manifest.overrides.push({\n type: 'copy',\n file: filename,\n baseFile: filename,\n baseVersion: undefined,\n baseHash: hashContent(baseContent),\n issue: undefined,\n });\n\n return true;\n}\n\nasync function tryAddPatch(\n filename: string,\n overrideContent: Buffer,\n reactSources: FileRepository.ReactFileRepository,\n manifest: Serialized.Manifest,\n): Promise<boolean> {\n const baseFile = filename.replace(extensionsRegex, '');\n const baseContent = await reactSources.readFile(baseFile);\n\n if (!baseContent) {\n return false;\n }\n\n const {similar} = computeSimilarity(overrideContent, baseContent);\n if (similar) {\n manifest.overrides.push({\n type: 'patch',\n file: filename,\n baseFile: baseFile,\n baseVersion: undefined,\n baseHash: hashContent(baseContent),\n issue: undefined,\n });\n } else {\n addUnknown(filename, manifest);\n }\n\n return true;\n}\n\nasync function tryAddDerived(\n filename: string,\n overrideContent: Buffer,\n reactSources: FileRepository.ReactFileRepository,\n manifest: Serialized.Manifest,\n): Promise<boolean> {\n const matches: Array<{file: string; contents: Buffer; dist: number}> = [];\n\n const droidFile = filename.replace(extensionsRegex, '.android');\n const droidContents = await reactSources.readFile(droidFile);\n const droidSim =\n droidContents && computeSimilarity(overrideContent, droidContents);\n if (droidSim && droidSim.similar) {\n matches.push({\n file: droidFile,\n contents: droidContents!,\n dist: droidSim.editDistance,\n });\n }\n\n const iosFile = filename.replace(extensionsRegex, '.ios');\n const iosContents = await reactSources.readFile(iosFile);\n const iosSim = iosContents && computeSimilarity(overrideContent, iosContents);\n if (iosSim && iosSim.similar) {\n matches.push({\n file: iosFile,\n contents: iosContents!,\n dist: iosSim.editDistance,\n });\n }\n\n if (matches.length === 0) {\n return false;\n }\n\n const bestMatch = matches.reduce((a, b) => (a.dist < b.dist ? a : b));\n manifest.overrides.push({\n type: 'derived',\n file: filename,\n baseFile: bestMatch.file,\n baseVersion: undefined,\n baseHash: hashContent(bestMatch.contents),\n issue: undefined,\n });\n\n return true;\n}\n\nfunction addUnknown(filename: string, manifest: Serialized.Manifest) {\n (manifest.overrides as Array<any>).push({\n type: '???',\n file: filename,\n baseFile: '???',\n baseHash: '???',\n });\n}\n\nasync function getFileRepos(\n overrideovrPath: string,\n rnVersion: string,\n): Promise<\n [FileRepository.WritableFileRepository, FileRepository.ReactFileRepository]\n> {\n const overrides = new FileSystemRepository(overrideovrPath);\n\n const versionedReactSources = await GitReactFileRepository.createAndInit();\n const reactSources = FileRepository.bindVersion(\n versionedReactSources,\n rnVersion,\n );\n\n return [overrides, reactSources];\n}\n\nfunction computeSimilarity(\n override: Buffer,\n source: Buffer,\n): {similar: boolean; editDistance: number} {\n if (!isUtf8(override) || !isUtf8(source)) {\n return {similar: false, editDistance: NaN};\n }\n\n let overrideStr = override.toString();\n let sourceStr = source.toString();\n\n overrideStr = stripCopyrightHeaders(overrideStr);\n sourceStr = stripCopyrightHeaders(sourceStr);\n\n const differ = new diff_match_patch();\n const diffs = differ.diff_main(sourceStr, overrideStr);\n\n const editDistance = differ.diff_levenshtein(diffs);\n const similar =\n editDistance / Math.max(overrideStr.length, sourceStr.length) < 0.8;\n return {similar, editDistance};\n}\n\nfunction stripCopyrightHeaders(str: string): string {\n if (!str.startsWith('/*')) {\n return str;\n }\n\n const headerEnd = str.indexOf('*/') + 1;\n return str.slice(headerEnd);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"generateManifest.js","sourceRoot":"","sources":["../../src/scripts/generateManifest.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;AAEH,kEAAoD;AACpD,0DAA4C;AAE5C,8CAAsB;AACtB,gDAAwB;AACxB,kDAA0B;AAE1B,mFAA2D;AAC3D,uFAA+D;AAE/D,uDAAkD;AAClD,kDAAsD;AACtD,kCAAoC;AAEpC,oDAA4B;AAE5B,MAAM,EAAC,UAAU,EAAE,SAAS,EAAC,GAAG,eAAK;KAClC,OAAO,CAAC;IACP,SAAS,EAAE;QACT,WAAW,EACT,+DAA+D;QACjE,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,IAAI;KACnB;IACD,UAAU,EAAE;QACV,WAAW,EAAE,sDAAsD;QACnE,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;KACD,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AAEvB,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/E,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,OAAO,GAAG,IAAA,aAAG,GAAE,CAAC;IACtB,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,MAAM,IAAA,oCAAqB,GAAE,CAAC;IAC9C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAwB;QACpC,eAAe,EAAE,SAAS;QAC1B,eAAe,EAAE,SAAS;QAC1B,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,EAAE;KACd,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,CAAC;IAElD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE;QAChC,OAAO,CAAC,IAAI,GAAG,sBAAsB,EAAE,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;QAEpE,MAAM,QAAQ,GAAG,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAE,CAAC;QACnD,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YACxD,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC3D,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC7D,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KAC9B;IAED,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACvD,MAAM,UAAU,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAExD,OAAO,CAAC,OAAO,EAAE,CAAC;AACpB,CAAC,CAAC,EAAE,CAAC;AAEL,KAAK,UAAU,UAAU,CACvB,QAAgB,EAChB,eAAuB,EACvB,YAAgD,EAChD,QAA6B;IAE7B,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,CAAC,WAAW,EAAE;QAChB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,IAAA,kBAAW,EAAC,WAAW,CAAC,KAAK,IAAA,kBAAW,EAAC,eAAe,CAAC,EAAE;QAC7D,OAAO,KAAK,CAAC;KACd;IAED,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;QACtB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,SAAS;QACtB,QAAQ,EAAE,IAAA,kBAAW,EAAC,WAAW,CAAC;QAClC,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,QAAgB,EAChB,eAAuB,EACvB,YAAgD,EAChD,QAA6B;IAE7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE1D,IAAI,CAAC,WAAW,EAAE;QAChB,OAAO,KAAK,CAAC;KACd;IAED,MAAM,EAAC,OAAO,EAAC,GAAG,iBAAiB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAClE,IAAI,OAAO,EAAE;QACX,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,IAAA,kBAAW,EAAC,WAAW,CAAC;YAClC,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;KACJ;SAAM;QACL,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;KAChC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,QAAgB,EAChB,eAAuB,EACvB,YAAgD,EAChD,QAA6B;IAE7B,MAAM,OAAO,GAA0D,EAAE,CAAC;IAE1E,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7D,MAAM,QAAQ,GACZ,aAAa,IAAI,iBAAiB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IACrE,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE;QAChC,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,aAAc;YACxB,IAAI,EAAE,QAAQ,CAAC,YAAY;SAC5B,CAAC,CAAC;KACJ;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,WAAW,IAAI,iBAAiB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC9E,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;QAC5B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,WAAY;YACtB,IAAI,EAAE,MAAM,CAAC,YAAY;SAC1B,CAAC,CAAC;KACJ;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,OAAO,KAAK,CAAC;KACd;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;QACtB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,SAAS,CAAC,IAAI;QACxB,WAAW,EAAE,SAAS;QACtB,QAAQ,EAAE,IAAA,kBAAW,EAAC,SAAS,CAAC,QAAQ,CAAC;QACzC,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB,EAAE,QAA6B;IAChE,QAAQ,CAAC,SAAwB,CAAC,IAAI,CAAC;QACtC,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,eAAuB,EACvB,SAAiB;IAIjB,MAAM,SAAS,GAAG,IAAI,8BAAoB,CAAC,eAAe,CAAC,CAAC;IAE5D,MAAM,qBAAqB,GAAG,MAAM,gCAAsB,CAAC,aAAa,EAAE,CAAC;IAC3E,MAAM,YAAY,GAAG,cAAc,CAAC,WAAW,CAC7C,qBAAqB,EACrB,SAAS,CACV,CAAC;IAEF,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,iBAAiB,CACxB,QAAgB,EAChB,MAAc;IAEd,IAAI,CAAC,IAAA,gBAAM,EAAC,QAAQ,CAAC,IAAI,CAAC,IAAA,gBAAM,EAAC,MAAM,CAAC,EAAE;QACxC,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAC,CAAC;KAC5C;IAED,IAAI,WAAW,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACtC,IAAI,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAElC,WAAW,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACjD,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAG,IAAI,mCAAgB,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAEvD,MAAM,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,OAAO,GACX,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;IACtE,OAAO,EAAC,OAAO,EAAE,YAAY,EAAC,CAAC;AACjC,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW;IACxC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACzB,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,OAAO,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport * as FileRepository from '../FileRepository';\nimport * as Serialized from '../Serialized';\n\nimport ora from 'ora';\nimport path from 'path';\nimport yargs from 'yargs';\n\nimport FileSystemRepository from '../FileSystemRepository';\nimport GitReactFileRepository from '../GitReactFileRepository';\n\nimport {diff_match_patch} from 'diff-match-patch';\nimport {getInstalledRNVersion} from '../PackageUtils';\nimport {hashContent} from '../Hash';\n\nimport isUtf8 from 'isutf8';\n\nconst {extensions, directory} = yargs\n .options({\n directory: {\n description:\n 'The directory containing files that should be in the manifest',\n type: 'string',\n demandOption: true,\n },\n extensions: {\n description: 'A list of platform specific JS extensions to include',\n type: 'array',\n demandOption: true,\n },\n })\n .version(false).argv;\n\nconst extensionsRegex = new RegExp(extensions.map((e) => `\\\\.${e}`).join('|'));\n\n(async () => {\n const spinner = ora();\n spinner.start('Creating manifest');\n\n const version = await getInstalledRNVersion();\n const [overrides, reactSources] = await getFileRepos(directory, version);\n const manifest: Serialized.Manifest = {\n includePatterns: undefined,\n excludePatterns: undefined,\n baseVersion: version,\n overrides: [],\n };\n const overrideFiles = await overrides.listFiles();\n\n let i = 0;\n for (const file of overrideFiles) {\n spinner.text = `Creating manifest (${++i}/${overrideFiles.length})`;\n\n const contents = (await overrides.readFile(file))!;\n (await tryAddCopy(file, contents, reactSources, manifest)) ||\n (await tryAddPatch(file, contents, reactSources, manifest)) ||\n (await tryAddDerived(file, contents, reactSources, manifest)) ||\n addUnknown(file, manifest);\n }\n\n const ovrFile = path.join(directory, 'overrides.json');\n await Serialized.writeManifestToFile(manifest, ovrFile);\n\n spinner.succeed();\n})();\n\nasync function tryAddCopy(\n filename: string,\n overrideContent: Buffer,\n reactSources: FileRepository.ReactFileRepository,\n manifest: Serialized.Manifest,\n): Promise<boolean> {\n const baseContent = await reactSources.readFile(filename);\n if (!baseContent) {\n return false;\n }\n\n if (hashContent(baseContent) !== hashContent(overrideContent)) {\n return false;\n }\n\n manifest.overrides.push({\n type: 'copy',\n file: filename,\n baseFile: filename,\n baseVersion: undefined,\n baseHash: hashContent(baseContent),\n issue: undefined,\n });\n\n return true;\n}\n\nasync function tryAddPatch(\n filename: string,\n overrideContent: Buffer,\n reactSources: FileRepository.ReactFileRepository,\n manifest: Serialized.Manifest,\n): Promise<boolean> {\n const baseFile = filename.replace(extensionsRegex, '');\n const baseContent = await reactSources.readFile(baseFile);\n\n if (!baseContent) {\n return false;\n }\n\n const {similar} = computeSimilarity(overrideContent, baseContent);\n if (similar) {\n manifest.overrides.push({\n type: 'patch',\n file: filename,\n baseFile: baseFile,\n baseVersion: undefined,\n baseHash: hashContent(baseContent),\n issue: undefined,\n });\n } else {\n addUnknown(filename, manifest);\n }\n\n return true;\n}\n\nasync function tryAddDerived(\n filename: string,\n overrideContent: Buffer,\n reactSources: FileRepository.ReactFileRepository,\n manifest: Serialized.Manifest,\n): Promise<boolean> {\n const matches: Array<{file: string; contents: Buffer; dist: number}> = [];\n\n const droidFile = filename.replace(extensionsRegex, '.android');\n const droidContents = await reactSources.readFile(droidFile);\n const droidSim =\n droidContents && computeSimilarity(overrideContent, droidContents);\n if (droidSim && droidSim.similar) {\n matches.push({\n file: droidFile,\n contents: droidContents!,\n dist: droidSim.editDistance,\n });\n }\n\n const iosFile = filename.replace(extensionsRegex, '.ios');\n const iosContents = await reactSources.readFile(iosFile);\n const iosSim = iosContents && computeSimilarity(overrideContent, iosContents);\n if (iosSim && iosSim.similar) {\n matches.push({\n file: iosFile,\n contents: iosContents!,\n dist: iosSim.editDistance,\n });\n }\n\n if (matches.length === 0) {\n return false;\n }\n\n const bestMatch = matches.reduce((a, b) => (a.dist < b.dist ? a : b));\n manifest.overrides.push({\n type: 'derived',\n file: filename,\n baseFile: bestMatch.file,\n baseVersion: undefined,\n baseHash: hashContent(bestMatch.contents),\n issue: undefined,\n });\n\n return true;\n}\n\nfunction addUnknown(filename: string, manifest: Serialized.Manifest) {\n (manifest.overrides as Array<any>).push({\n type: '???',\n file: filename,\n baseFile: '???',\n baseHash: '???',\n });\n}\n\nasync function getFileRepos(\n overrideovrPath: string,\n rnVersion: string,\n): Promise<\n [FileRepository.WritableFileRepository, FileRepository.ReactFileRepository]\n> {\n const overrides = new FileSystemRepository(overrideovrPath);\n\n const versionedReactSources = await GitReactFileRepository.createAndInit();\n const reactSources = FileRepository.bindVersion(\n versionedReactSources,\n rnVersion,\n );\n\n return [overrides, reactSources];\n}\n\nfunction computeSimilarity(\n override: Buffer,\n source: Buffer,\n): {similar: boolean; editDistance: number} {\n if (!isUtf8(override) || !isUtf8(source)) {\n return {similar: false, editDistance: NaN};\n }\n\n let overrideStr = override.toString();\n let sourceStr = source.toString();\n\n overrideStr = stripCopyrightHeaders(overrideStr);\n sourceStr = stripCopyrightHeaders(sourceStr);\n\n const differ = new diff_match_patch();\n const diffs = differ.diff_main(sourceStr, overrideStr);\n\n const editDistance = differ.diff_levenshtein(diffs);\n const similar =\n editDistance / Math.max(overrideStr.length, sourceStr.length) < 0.8;\n return {similar, editDistance};\n}\n\nfunction stripCopyrightHeaders(str: string): string {\n if (!str.startsWith('/*')) {\n return str;\n }\n\n const headerEnd = str.indexOf('*/') + 1;\n return str.slice(headerEnd);\n}\n"]}
|
|
@@ -9,10 +9,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
9
9
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const fs_1 = __importDefault(require("@react-native-windows/fs"));
|
|
13
13
|
const Hash_1 = require("../Hash");
|
|
14
14
|
(async function () {
|
|
15
|
-
const content = await fs_1.default.
|
|
15
|
+
const content = await fs_1.default.readFile(process.argv[2]);
|
|
16
16
|
console.log((0, Hash_1.hashContent)(content));
|
|
17
17
|
})();
|
|
18
18
|
//# sourceMappingURL=hashFile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashFile.js","sourceRoot":"","sources":["../../src/scripts/hashFile.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAEH,
|
|
1
|
+
{"version":3,"file":"hashFile.js","sourceRoot":"","sources":["../../src/scripts/hashFile.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAEH,kEAA0C;AAC1C,kCAAoC;AAEpC,CAAC,KAAK;IACJ,MAAM,OAAO,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,IAAA,kBAAW,EAAC,OAAO,CAAC,CAAC,CAAC;AACpC,CAAC,CAAC,EAAE,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 {hashContent} from '../Hash';\n\n(async function () {\n const content = await fs.readFile(process.argv[2]);\n console.log(hashContent(content));\n})();\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-platform-override",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.3",
|
|
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,7 +22,8 @@
|
|
|
22
22
|
"react-native-platform-override": "./bin.js"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@react-native-windows/
|
|
25
|
+
"@react-native-windows/fs": "^1.0.1",
|
|
26
|
+
"@react-native-windows/package-utils": "^0.0.0-canary.24",
|
|
26
27
|
"async": "^3.2.0",
|
|
27
28
|
"chalk": "^4.1.0",
|
|
28
29
|
"fp-ts": "^2.5.0",
|
|
@@ -43,10 +44,10 @@
|
|
|
43
44
|
"@babel/core": "^7.14.0",
|
|
44
45
|
"@babel/preset-env": "^7.8.4",
|
|
45
46
|
"@babel/preset-typescript": "^7.8.3",
|
|
46
|
-
"@react-native-windows/package-utils": "0.0.0-canary.
|
|
47
|
-
"@rnw-scripts/eslint-config": "1.1.
|
|
48
|
-
"@rnw-scripts/jest-unittest-config": "1.2.
|
|
49
|
-
"@rnw-scripts/just-task": "2.2.
|
|
47
|
+
"@react-native-windows/package-utils": "0.0.0-canary.24",
|
|
48
|
+
"@rnw-scripts/eslint-config": "1.1.10",
|
|
49
|
+
"@rnw-scripts/jest-unittest-config": "1.2.5",
|
|
50
|
+
"@rnw-scripts/just-task": "2.2.2",
|
|
50
51
|
"@rnw-scripts/ts-config": "2.0.1",
|
|
51
52
|
"@types/async": "^3.2.5",
|
|
52
53
|
"@types/chalk": "^2.2.0",
|
|
@@ -63,11 +64,11 @@
|
|
|
63
64
|
"@types/yargs": "^16.0.0",
|
|
64
65
|
"babel-jest": "^26.3.0",
|
|
65
66
|
"diff-match-patch": "^1.0.4",
|
|
66
|
-
"eslint": "7.
|
|
67
|
+
"eslint": "^7.32.0",
|
|
67
68
|
"jest": "^26.6.3",
|
|
68
69
|
"just-scripts": "^1.3.3",
|
|
69
70
|
"minimatch": "^3.0.4",
|
|
70
|
-
"prettier": "
|
|
71
|
+
"prettier": "^2.4.1",
|
|
71
72
|
"typescript": "^4.4.4"
|
|
72
73
|
},
|
|
73
74
|
"peerDependencies": {
|