react-native-platform-override 0.84.0-preview.1 → 0.85.0-preview.1

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.
@@ -40,7 +40,7 @@ const BatchingQueue_1 = __importDefault(require("./BatchingQueue"));
40
40
  const FileSystemRepository_1 = __importDefault(require("./FileSystemRepository"));
41
41
  const PackageUtils_1 = require("./PackageUtils");
42
42
  const refFromVersion_1 = require("./refFromVersion");
43
- const RN_GITHUB_URL = 'https://github.com/facebook/react-native.git';
43
+ const RN_GITHUB_URL = 'https://github.com/react/react-native.git';
44
44
  /**
45
45
  * Retrieves React Native files using the React Native Github repo. Switching
46
46
  * between getting file contents of different versions may be slow.
@@ -65,6 +65,12 @@ class GitReactFileRepository {
65
65
  await gitClient.addConfig('core.filemode', 'false');
66
66
  await gitClient.addConfig('core.ignorecase', 'true');
67
67
  }
68
+ // Ensure long paths are supported. Newer React Native versions include
69
+ // deeply-nested upstream files whose paths exceed the historic
70
+ // 260-character MAX_PATH limit on Windows, causing `git checkout` to fail
71
+ // with "Filename too long". Applied unconditionally so pre-existing scratch
72
+ // repos pick it up as well.
73
+ await gitClient.addConfig('core.longpaths', 'true');
68
74
  return new GitReactFileRepository(dir, gitClient);
69
75
  }
70
76
  /**
@@ -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 * 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"]}
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/react/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 // Ensure long paths are supported. Newer React Native versions include\n // deeply-nested upstream files whose paths exceed the historic\n // 260-character MAX_PATH limit on Windows, causing `git checkout` to fail\n // with \"Filename too long\". Applied unconditionally so pre-existing scratch\n // repos pick it up as well.\n await gitClient.addConfig('core.longpaths', 'true');\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"]}
@@ -84,7 +84,7 @@ function extractHashFromNightlyVersion(reactNativeVersion) {
84
84
  async function fetchFullCommitHash(abbrevHash, opts) {
85
85
  // We cannot get abbreviated hash directly from a remote, so query Github's
86
86
  // API for it.
87
- const commitInfo = await (0, node_fetch_1.default)(`https://api.github.com/repos/facebook/react-native/commits/${abbrevHash}`, {
87
+ const commitInfo = await (0, node_fetch_1.default)(`https://api.github.com/repos/react/react-native/commits/${abbrevHash}`, {
88
88
  headers: {
89
89
  'Content-Type': 'application/json',
90
90
  'User-Agent': 'react-native-platform-override',
@@ -1 +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
+ {"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/react/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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-platform-override",
3
- "version": "0.84.0-preview.1",
3
+ "version": "0.85.0-preview.1",
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",
@@ -18,14 +18,12 @@
18
18
  "test": "rnw-scripts test",
19
19
  "watch": "rnw-scripts watch"
20
20
  },
21
- "bin": {
22
- "react-native-platform-override": "./bin.js"
23
- },
21
+ "bin": "./bin.js",
24
22
  "dependencies": {
25
- "@react-native-windows/fs": "0.84.0-preview.1",
26
- "@react-native-windows/package-utils": "0.84.0-preview.1",
27
- "@typescript-eslint/eslint-plugin": "^7.1.1",
28
- "@typescript-eslint/parser": "^7.1.1",
23
+ "@react-native-windows/fs": "0.85.0-preview.1",
24
+ "@react-native-windows/package-utils": "0.85.0-preview.1",
25
+ "@typescript-eslint/eslint-plugin": "^8.36.0",
26
+ "@typescript-eslint/parser": "^8.36.0",
29
27
  "async": "^3.2.3",
30
28
  "chalk": "^4.1.0",
31
29
  "fp-ts": "^2.5.0",