react-native-platform-override 0.4.7 → 0.81.0-preview.10

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 (73) hide show
  1. package/bin.js +1 -2
  2. package/lib-commonjs/Api.d.ts +57 -56
  3. package/lib-commonjs/Api.js +187 -167
  4. package/lib-commonjs/Api.js.map +1 -1
  5. package/lib-commonjs/BatchingQueue.d.ts +15 -15
  6. package/lib-commonjs/BatchingQueue.js +57 -57
  7. package/lib-commonjs/BatchingQueue.js.map +1 -1
  8. package/lib-commonjs/Cli.d.ts +7 -7
  9. package/lib-commonjs/Cli.js +323 -291
  10. package/lib-commonjs/Cli.js.map +1 -1
  11. package/lib-commonjs/CrossProcessLock.d.ts +44 -44
  12. package/lib-commonjs/CrossProcessLock.js +147 -144
  13. package/lib-commonjs/CrossProcessLock.js.map +1 -1
  14. package/lib-commonjs/DiffStrategy.d.ts +24 -24
  15. package/lib-commonjs/DiffStrategy.js +34 -34
  16. package/lib-commonjs/DiffStrategy.js.map +1 -1
  17. package/lib-commonjs/FileRepository.d.ts +63 -62
  18. package/lib-commonjs/FileRepository.js +21 -21
  19. package/lib-commonjs/FileRepository.js.map +1 -1
  20. package/lib-commonjs/FileSearch.d.ts +21 -21
  21. package/lib-commonjs/FileSearch.js +77 -91
  22. package/lib-commonjs/FileSearch.js.map +1 -1
  23. package/lib-commonjs/FileSystemRepository.d.ts +21 -20
  24. package/lib-commonjs/FileSystemRepository.js +62 -59
  25. package/lib-commonjs/FileSystemRepository.js.map +1 -1
  26. package/lib-commonjs/GitReactFileRepository.d.ts +57 -58
  27. package/lib-commonjs/GitReactFileRepository.js +202 -208
  28. package/lib-commonjs/GitReactFileRepository.js.map +1 -1
  29. package/lib-commonjs/Hash.d.ts +34 -33
  30. package/lib-commonjs/Hash.js +81 -81
  31. package/lib-commonjs/Hash.js.map +1 -1
  32. package/lib-commonjs/Manifest.d.ts +80 -80
  33. package/lib-commonjs/Manifest.js +157 -154
  34. package/lib-commonjs/Manifest.js.map +1 -1
  35. package/lib-commonjs/Override.d.ts +182 -182
  36. package/lib-commonjs/Override.js +248 -245
  37. package/lib-commonjs/Override.js.map +1 -1
  38. package/lib-commonjs/OverrideFactory.d.ts +33 -33
  39. package/lib-commonjs/OverrideFactory.js +85 -70
  40. package/lib-commonjs/OverrideFactory.js.map +1 -1
  41. package/lib-commonjs/OverridePrompt.d.ts +30 -30
  42. package/lib-commonjs/OverridePrompt.js +130 -104
  43. package/lib-commonjs/OverridePrompt.js.map +1 -1
  44. package/lib-commonjs/PackageUtils.d.ts +15 -15
  45. package/lib-commonjs/PackageUtils.js +40 -38
  46. package/lib-commonjs/PackageUtils.js.map +1 -1
  47. package/lib-commonjs/PathUtils.d.ts +14 -14
  48. package/lib-commonjs/PathUtils.js +31 -28
  49. package/lib-commonjs/PathUtils.js.map +1 -1
  50. package/lib-commonjs/Serialized.d.ts +158 -158
  51. package/lib-commonjs/Serialized.js +145 -119
  52. package/lib-commonjs/Serialized.js.map +1 -1
  53. package/lib-commonjs/UpgradeStrategy.d.ts +39 -39
  54. package/lib-commonjs/UpgradeStrategy.js +102 -99
  55. package/lib-commonjs/UpgradeStrategy.js.map +1 -1
  56. package/lib-commonjs/ValidationStrategy.d.ts +57 -57
  57. package/lib-commonjs/ValidationStrategy.js +124 -124
  58. package/lib-commonjs/ValidationStrategy.js.map +1 -1
  59. package/lib-commonjs/refFromVersion.d.ts +10 -0
  60. package/lib-commonjs/refFromVersion.js +99 -0
  61. package/lib-commonjs/refFromVersion.js.map +1 -0
  62. package/lib-commonjs/scripts/generateManifest.d.ts +7 -7
  63. package/lib-commonjs/scripts/generateManifest.js +196 -170
  64. package/lib-commonjs/scripts/generateManifest.js.map +1 -1
  65. package/lib-commonjs/scripts/hashFile.d.ts +7 -7
  66. package/lib-commonjs/scripts/hashFile.js +17 -14
  67. package/lib-commonjs/scripts/hashFile.js.map +1 -1
  68. package/lib-commonjs/scripts/testLocks.d.ts +1 -1
  69. package/lib-commonjs/scripts/testLocks.js +29 -26
  70. package/lib-commonjs/scripts/testLocks.js.map +1 -1
  71. package/package.json +53 -43
  72. package/CHANGELOG.json +0 -554
  73. package/CHANGELOG.md +0 -238
@@ -1,57 +1,57 @@
1
- /**
2
- * Copyright (c) Microsoft Corporation.
3
- * Licensed under the MIT License.
4
- *
5
- * @format
6
- */
7
- import { ReactFileRepository, WritableFileRepository } from './FileRepository';
8
- export interface ValidationError {
9
- /**
10
- * Why did validation fail?
11
- */
12
- type: 'missingFromManifest' | 'overrideNotFound' | 'baseNotFound' | 'expectedFile' | 'expectedDirectory' | 'outOfDate' | 'overrideDifferentFromBase' | 'overrideSameAsBase';
13
- /**
14
- * What override failed validation
15
- */
16
- overrideName: string;
17
- }
18
- /**
19
- * A ValidationStrategy allows describing a process to ensure a specific
20
- * override meets constraints such as ensuring file existence, preventing
21
- * content modification, or being up to date.
22
- */
23
- export default interface ValidationStrategy {
24
- validate(overrideRepo: WritableFileRepository, reactRepo: ReactFileRepository): Promise<ValidationError[]>;
25
- }
26
- export declare const ValidationStrategies: {
27
- /**
28
- * Validate that an override file exists
29
- */
30
- overrideFileExists: (overrideName: string) => ValidationStrategy;
31
- /**
32
- * Validate that a base file exists
33
- */
34
- baseFileExists: (overrideName: string, baseFile: string) => ValidationStrategy;
35
- /**
36
- * Validate that an override directory exists
37
- */
38
- overrideDirectoryExists: (overrideName: string) => ValidationStrategy;
39
- /**
40
- * Validate that a base directory exists
41
- */
42
- baseDirectoryExists: (overrideName: string, baseDirectory: string) => ValidationStrategy;
43
- /**
44
- * Validate that a base file/folder matches an expected hash if it exists
45
- */
46
- baseUpToDate: (overrideName: string, base: string, expectedBaseHash: string) => ValidationStrategy;
47
- /**
48
- * Validate that an override meant to be a copy of a base file/folder has not
49
- * been tampered with
50
- */
51
- overrideCopyOfBase: (overrideName: string, base: string) => ValidationStrategy;
52
- /**
53
- * Validate that an override assumed to be different from its base is not
54
- * identical.
55
- */
56
- overrideDifferentFromBase: (overrideName: string, base: string) => ValidationStrategy;
57
- };
1
+ /**
2
+ * Copyright (c) Microsoft Corporation.
3
+ * Licensed under the MIT License.
4
+ *
5
+ * @format
6
+ */
7
+ import { ReactFileRepository, WritableFileRepository } from './FileRepository';
8
+ export interface ValidationError {
9
+ /**
10
+ * Why did validation fail?
11
+ */
12
+ type: 'missingFromManifest' | 'overrideNotFound' | 'baseNotFound' | 'expectedFile' | 'expectedDirectory' | 'outOfDate' | 'overrideDifferentFromBase' | 'overrideSameAsBase';
13
+ /**
14
+ * What override failed validation
15
+ */
16
+ overrideName: string;
17
+ }
18
+ /**
19
+ * A ValidationStrategy allows describing a process to ensure a specific
20
+ * override meets constraints such as ensuring file existence, preventing
21
+ * content modification, or being up to date.
22
+ */
23
+ export default interface ValidationStrategy {
24
+ validate(overrideRepo: WritableFileRepository, reactRepo: ReactFileRepository): Promise<ValidationError[]>;
25
+ }
26
+ export declare const ValidationStrategies: {
27
+ /**
28
+ * Validate that an override file exists
29
+ */
30
+ overrideFileExists: (overrideName: string) => ValidationStrategy;
31
+ /**
32
+ * Validate that a base file exists
33
+ */
34
+ baseFileExists: (overrideName: string, baseFile: string) => ValidationStrategy;
35
+ /**
36
+ * Validate that an override directory exists
37
+ */
38
+ overrideDirectoryExists: (overrideName: string) => ValidationStrategy;
39
+ /**
40
+ * Validate that a base directory exists
41
+ */
42
+ baseDirectoryExists: (overrideName: string, baseDirectory: string) => ValidationStrategy;
43
+ /**
44
+ * Validate that a base file/folder matches an expected hash if it exists
45
+ */
46
+ baseUpToDate: (overrideName: string, base: string, expectedBaseHash: string) => ValidationStrategy;
47
+ /**
48
+ * Validate that an override meant to be a copy of a base file/folder has not
49
+ * been tampered with
50
+ */
51
+ overrideCopyOfBase: (overrideName: string, base: string) => ValidationStrategy;
52
+ /**
53
+ * Validate that an override assumed to be different from its base is not
54
+ * identical.
55
+ */
56
+ overrideDifferentFromBase: (overrideName: string, base: string) => ValidationStrategy;
57
+ };
@@ -1,125 +1,125 @@
1
- "use strict";
2
- /**
3
- * Copyright (c) Microsoft Corporation.
4
- * Licensed under the MIT License.
5
- *
6
- * @format
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.ValidationStrategies = void 0;
10
- const Hash_1 = require("./Hash");
11
- exports.ValidationStrategies = {
12
- /**
13
- * Validate that an override file exists
14
- */
15
- overrideFileExists: (overrideName) => ({
16
- validate: async (overrideRepo) => {
17
- switch (await overrideRepo.stat(overrideName)) {
18
- case 'file':
19
- return [];
20
- case 'directory':
21
- return [{ type: 'expectedFile', overrideName }];
22
- case 'none':
23
- return [{ type: 'overrideNotFound', overrideName }];
24
- }
25
- },
26
- }),
27
- /**
28
- * Validate that a base file exists
29
- */
30
- baseFileExists: (overrideName, baseFile) => ({
31
- validate: async (_, reactRepo) => {
32
- switch (await reactRepo.stat(baseFile)) {
33
- case 'file':
34
- return [];
35
- case 'directory':
36
- return [{ type: 'expectedFile', overrideName }];
37
- case 'none':
38
- return [{ type: 'baseNotFound', overrideName }];
39
- }
40
- },
41
- }),
42
- /**
43
- * Validate that an override directory exists
44
- */
45
- overrideDirectoryExists: (overrideName) => ({
46
- validate: async (overrideRepo) => {
47
- switch (await overrideRepo.stat(overrideName)) {
48
- case 'file':
49
- return [{ type: 'expectedDirectory', overrideName }];
50
- case 'directory':
51
- return [];
52
- case 'none':
53
- return [{ type: 'overrideNotFound', overrideName }];
54
- }
55
- },
56
- }),
57
- /**
58
- * Validate that a base directory exists
59
- */
60
- baseDirectoryExists: (overrideName, baseDirectory) => ({
61
- validate: async (_, reactRepo) => {
62
- switch (await reactRepo.stat(baseDirectory)) {
63
- case 'file':
64
- return [{ type: 'expectedDirectory', overrideName }];
65
- case 'directory':
66
- return [];
67
- case 'none':
68
- return [{ type: 'baseNotFound', overrideName }];
69
- }
70
- },
71
- }),
72
- /**
73
- * Validate that a base file/folder matches an expected hash if it exists
74
- */
75
- baseUpToDate: (overrideName, base, expectedBaseHash) => ({
76
- validate: async (_, reactRepo) => {
77
- const hash = await Hash_1.hashFileOrDirectory(base, reactRepo);
78
- if (!hash) {
79
- return [];
80
- }
81
- return hash === expectedBaseHash
82
- ? []
83
- : [{ type: 'outOfDate', overrideName }];
84
- },
85
- }),
86
- /**
87
- * Validate that an override meant to be a copy of a base file/folder has not
88
- * been tampered with
89
- */
90
- overrideCopyOfBase: (overrideName, base) => ({
91
- validate: async (overrideRepo, reactRepo) => {
92
- if ((await overrideRepo.stat(overrideName)) === 'none' ||
93
- (await reactRepo.stat(base)) === 'none') {
94
- return [];
95
- }
96
- const overrideHash = await Hash_1.hashFileOrDirectory(overrideName, overrideRepo);
97
- const baseHash = await Hash_1.hashFileOrDirectory(base, reactRepo);
98
- return overrideHash === baseHash
99
- ? []
100
- : [{ type: 'overrideDifferentFromBase', overrideName }];
101
- },
102
- }),
103
- /**
104
- * Validate that an override assumed to be different from its base is not
105
- * identical.
106
- */
107
- overrideDifferentFromBase: (overrideName, base) => ({
108
- validate: async (overrideRepo, reactRepo) => {
109
- if ((await overrideRepo.stat(overrideName)) === 'none' ||
110
- (await reactRepo.stat(base)) === 'none') {
111
- return [];
112
- }
113
- // There can be whitespace differences from merges that lead to
114
- // semantically indentical files. Do a whitespace insensitive compare to
115
- // determine if there is a difference.
116
- const hashOpts = { insensitivity: 'whitespace' };
117
- const overrideHash = await Hash_1.hashFileOrDirectory(overrideName, overrideRepo, hashOpts);
118
- const baseHash = await Hash_1.hashFileOrDirectory(base, reactRepo, hashOpts);
119
- return overrideHash === baseHash
120
- ? [{ type: 'overrideSameAsBase', overrideName }]
121
- : [];
122
- },
123
- }),
124
- };
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Microsoft Corporation.
4
+ * Licensed under the MIT License.
5
+ *
6
+ * @format
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ValidationStrategies = void 0;
10
+ const Hash_1 = require("./Hash");
11
+ exports.ValidationStrategies = {
12
+ /**
13
+ * Validate that an override file exists
14
+ */
15
+ overrideFileExists: (overrideName) => ({
16
+ validate: async (overrideRepo) => {
17
+ switch (await overrideRepo.stat(overrideName)) {
18
+ case 'file':
19
+ return [];
20
+ case 'directory':
21
+ return [{ type: 'expectedFile', overrideName }];
22
+ case 'none':
23
+ return [{ type: 'overrideNotFound', overrideName }];
24
+ }
25
+ },
26
+ }),
27
+ /**
28
+ * Validate that a base file exists
29
+ */
30
+ baseFileExists: (overrideName, baseFile) => ({
31
+ validate: async (_, reactRepo) => {
32
+ switch (await reactRepo.stat(baseFile)) {
33
+ case 'file':
34
+ return [];
35
+ case 'directory':
36
+ return [{ type: 'expectedFile', overrideName }];
37
+ case 'none':
38
+ return [{ type: 'baseNotFound', overrideName }];
39
+ }
40
+ },
41
+ }),
42
+ /**
43
+ * Validate that an override directory exists
44
+ */
45
+ overrideDirectoryExists: (overrideName) => ({
46
+ validate: async (overrideRepo) => {
47
+ switch (await overrideRepo.stat(overrideName)) {
48
+ case 'file':
49
+ return [{ type: 'expectedDirectory', overrideName }];
50
+ case 'directory':
51
+ return [];
52
+ case 'none':
53
+ return [{ type: 'overrideNotFound', overrideName }];
54
+ }
55
+ },
56
+ }),
57
+ /**
58
+ * Validate that a base directory exists
59
+ */
60
+ baseDirectoryExists: (overrideName, baseDirectory) => ({
61
+ validate: async (_, reactRepo) => {
62
+ switch (await reactRepo.stat(baseDirectory)) {
63
+ case 'file':
64
+ return [{ type: 'expectedDirectory', overrideName }];
65
+ case 'directory':
66
+ return [];
67
+ case 'none':
68
+ return [{ type: 'baseNotFound', overrideName }];
69
+ }
70
+ },
71
+ }),
72
+ /**
73
+ * Validate that a base file/folder matches an expected hash if it exists
74
+ */
75
+ baseUpToDate: (overrideName, base, expectedBaseHash) => ({
76
+ validate: async (_, reactRepo) => {
77
+ const hash = await (0, Hash_1.hashFileOrDirectory)(base, reactRepo);
78
+ if (!hash) {
79
+ return [];
80
+ }
81
+ return hash === expectedBaseHash
82
+ ? []
83
+ : [{ type: 'outOfDate', overrideName }];
84
+ },
85
+ }),
86
+ /**
87
+ * Validate that an override meant to be a copy of a base file/folder has not
88
+ * been tampered with
89
+ */
90
+ overrideCopyOfBase: (overrideName, base) => ({
91
+ validate: async (overrideRepo, reactRepo) => {
92
+ if ((await overrideRepo.stat(overrideName)) === 'none' ||
93
+ (await reactRepo.stat(base)) === 'none') {
94
+ return [];
95
+ }
96
+ const overrideHash = await (0, Hash_1.hashFileOrDirectory)(overrideName, overrideRepo);
97
+ const baseHash = await (0, Hash_1.hashFileOrDirectory)(base, reactRepo);
98
+ return overrideHash === baseHash
99
+ ? []
100
+ : [{ type: 'overrideDifferentFromBase', overrideName }];
101
+ },
102
+ }),
103
+ /**
104
+ * Validate that an override assumed to be different from its base is not
105
+ * identical.
106
+ */
107
+ overrideDifferentFromBase: (overrideName, base) => ({
108
+ validate: async (overrideRepo, reactRepo) => {
109
+ if ((await overrideRepo.stat(overrideName)) === 'none' ||
110
+ (await reactRepo.stat(base)) === 'none') {
111
+ return [];
112
+ }
113
+ // There can be whitespace differences from merges that lead to
114
+ // semantically identical files. Do a whitespace insensitive compare to
115
+ // determine if there is a difference.
116
+ const hashOpts = { insensitivity: 'whitespace' };
117
+ const overrideHash = await (0, Hash_1.hashFileOrDirectory)(overrideName, overrideRepo, hashOpts);
118
+ const baseHash = await (0, Hash_1.hashFileOrDirectory)(base, reactRepo, hashOpts);
119
+ return overrideHash === baseHash
120
+ ? [{ type: 'overrideSameAsBase', overrideName }]
121
+ : [];
122
+ },
123
+ }),
124
+ };
125
125
  //# sourceMappingURL=ValidationStrategy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ValidationStrategy.js","sourceRoot":"","sources":["../src/ValidationStrategy.ts"],"names":[],"mappings":"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"}
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"]}
@@ -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,99 @@
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.ltr(reactNativeVersion, '0.0.0', { includePrerelease: true }) ||
20
+ reactNativeVersion.includes('nightly')) {
21
+ return extractHashFromNightlyVersion(reactNativeVersion);
22
+ }
23
+ else {
24
+ return `v${reactNativeVersion}`;
25
+ }
26
+ }
27
+ exports.getAbbreviatedRef = getAbbreviatedRef;
28
+ async function fetchFullRef(reactNativeVersion, opts) {
29
+ if (!semver_1.default.valid(reactNativeVersion)) {
30
+ throw new Error(`${reactNativeVersion} is not a valid semver version`);
31
+ }
32
+ if (semver_1.default.ltr(reactNativeVersion, '0.0.0', { includePrerelease: true }) ||
33
+ reactNativeVersion.includes('nightly')) {
34
+ const abbrevHash = extractHashFromNightlyVersion(reactNativeVersion);
35
+ return fetchFullCommitHash(abbrevHash, opts);
36
+ }
37
+ else {
38
+ return `refs/tags/v${reactNativeVersion}`;
39
+ }
40
+ }
41
+ exports.fetchFullRef = fetchFullRef;
42
+ // Nightly build have progressed from
43
+ // 1. 0.0.0-<commitHash>
44
+ // 2. 0.0.0-<commitHash>-<date>-<time> (transitional)
45
+ // 3. 0.0.0-<date>-<time>-<commitHash>
46
+ // 4. <version>-nightly-<date>-<commitHash>
47
+ function extractHashFromNightlyVersion(reactNativeVersion) {
48
+ // Several versions do not fall into the normal rule for positioning. Special
49
+ // case them.
50
+ const transitionalVersions = [
51
+ '0.0.0-2d2de744b-20210929-2246',
52
+ '0.0.0-1ee16fc2f-20210930-2008',
53
+ '0.0.0-34b7d22f3-20211001-2008',
54
+ '0.0.0-36f3bf2f5-20211002-2010',
55
+ '0.0.0-36f3bf2f5-20211003-2009',
56
+ '0.0.0-36f3bf2f5-20211004-2008',
57
+ '0.0.0-046b02628-20211005-2008',
58
+ '0.0.0-22801870f-20211006-2008',
59
+ '0.0.0-e612d3a11-20211007-2009',
60
+ '0.0.0-c901c43d1-20211008-2008',
61
+ '0.0.0-232d02c5f-20211009-2008',
62
+ '0.0.0-232d02c5f-20211009-2008',
63
+ '0.0.0-232d02c5f-20211009-2008',
64
+ '0.0.0-232d02c5f-20211009-2008',
65
+ '0.0.0-91adb761c-20211013-2010',
66
+ ];
67
+ const preSegment = String(semver_1.default.prerelease(reactNativeVersion)[0]);
68
+ const splitPre = preSegment.split('-');
69
+ // Handle #1
70
+ if (splitPre.length === 1) {
71
+ return splitPre[0];
72
+ }
73
+ // Handle #2
74
+ if (transitionalVersions.includes(reactNativeVersion)) {
75
+ return splitPre[0];
76
+ }
77
+ // Handle #3
78
+ if (splitPre.length === 3) {
79
+ return splitPre[2];
80
+ }
81
+ // Handle #4
82
+ return splitPre[3];
83
+ }
84
+ async function fetchFullCommitHash(abbrevHash, opts) {
85
+ // We cannot get abbreviated hash directly from a remote, so query Github's
86
+ // API for it.
87
+ const commitInfo = await (0, node_fetch_1.default)(`https://api.github.com/repos/facebook/react-native/commits/${abbrevHash}`, {
88
+ headers: {
89
+ 'Content-Type': 'application/json',
90
+ 'User-Agent': 'react-native-platform-override',
91
+ ...((opts === null || opts === void 0 ? void 0 : opts.githubToken) && { Authorization: `Token ${opts.githubToken}` }),
92
+ },
93
+ });
94
+ if (!commitInfo.ok) {
95
+ throw new Error(`Unable to query Github for commit '${abbrevHash}' Status: '${commitInfo.statusText}'`);
96
+ }
97
+ return (await commitInfo.json()).sha;
98
+ }
99
+ //# 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 (\n semver.ltr(reactNativeVersion, '0.0.0', {includePrerelease: true}) ||\n reactNativeVersion.includes('nightly')\n ) {\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 (\n semver.ltr(reactNativeVersion, '0.0.0', {includePrerelease: true}) ||\n reactNativeVersion.includes('nightly')\n ) {\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>\n// 4. <version>-nightly-<date>-<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 = String(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 if (splitPre.length === 3) {\n return splitPre[2];\n }\n\n // Handle #4\n return splitPre[3];\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"]}
@@ -1,7 +1,7 @@
1
- /**
2
- * Copyright (c) Microsoft Corporation.
3
- * Licensed under the MIT License.
4
- *
5
- * @format
6
- */
7
- export {};
1
+ /**
2
+ * Copyright (c) Microsoft Corporation.
3
+ * Licensed under the MIT License.
4
+ *
5
+ * @format
6
+ */
7
+ export {};