diff --git a/.github/actionlint.yaml b/.github/actionlint.yaml index 8ab0fa77e49f..43adedea1f2b 100644 --- a/.github/actionlint.yaml +++ b/.github/actionlint.yaml @@ -2,6 +2,6 @@ self-hosted-runner: labels: - ubuntu-latest-xl - - macos-12-xl + - macos-13-large - macos-13-xlarge - ubuntu-latest-reassure-tests diff --git a/.github/actions/javascript/awaitStagingDeploys/index.js b/.github/actions/javascript/awaitStagingDeploys/index.js index 4b76cc962968..1cb7934cfb91 100644 --- a/.github/actions/javascript/awaitStagingDeploys/index.js +++ b/.github/actions/javascript/awaitStagingDeploys/index.js @@ -12754,9 +12754,13 @@ function promiseDoWhile(condition, action) { console.info('[promiseWhile] promiseDoWhile() condition', condition); const actionResult = action?.(); console.info('[promiseWhile] promiseDoWhile() actionResult', actionResult); + if (!actionResult) { + resolve(); + return; + } actionResult - ?.then(() => promiseWhile(condition, action)) - .then(() => resolve()) + .then(() => promiseWhile(condition, action)) + .then(resolve) .catch(reject); }); } diff --git a/.github/actions/javascript/getGraphiteString/action.yml b/.github/actions/javascript/getGraphiteString/action.yml index 9101a410f24d..202f3d155232 100644 --- a/.github/actions/javascript/getGraphiteString/action.yml +++ b/.github/actions/javascript/getGraphiteString/action.yml @@ -1,5 +1,10 @@ name: 'Get and Save graphite string' description: 'Parse reassure output.json file and create string which can be sent to the graphite server' + +inputs: + PR_NUMBER: + description: Number of merged PR + required: true outputs: GRAPHITE_STRING: description: String with reassure data which can be directly sent to the graphite server diff --git a/.github/actions/javascript/getGraphiteString/getGraphiteString.ts b/.github/actions/javascript/getGraphiteString/getGraphiteString.ts index 54132ab8c322..2544fe05cddd 100644 --- a/.github/actions/javascript/getGraphiteString/getGraphiteString.ts +++ b/.github/actions/javascript/getGraphiteString/getGraphiteString.ts @@ -1,49 +1,49 @@ import * as core from '@actions/core'; -import * as github from '@actions/github'; import fs from 'fs'; const run = () => { // Prefix path to the graphite metric const GRAPHITE_PATH = 'reassure'; + const PR_NUMBER = core.getInput('PR_NUMBER', {required: true}); - let regressionOutput; - try { - regressionOutput = JSON.parse(fs.readFileSync('.reassure/output.json', 'utf8')); - } catch (err) { - // Handle errors that occur during file reading or parsing - if (err instanceof Error) { - console.error('Error while parsing output.json:', err.message); - core.setFailed(err); - } - } + // Read the contents of the file, the file is in the JSONL format + const regressionFile = fs.readFileSync('.reassure/baseline.perf', 'utf8'); + + // Split file contents by newline to get individual JSON entries + const regressionEntries = regressionFile.split('\n'); - const creationDate = regressionOutput.metadata.current.creationDate; - const timestampInMili = new Date(creationDate).getTime(); + // Initialize string to store Graphite metrics + let graphiteString = ''; - // Graphite accepts timestamp in seconds - const timestamp = Math.floor(timestampInMili / 1000); + // Iterate over each entry + regressionEntries.forEach((entry) => { + // Skip empty lines + if (entry.trim() === '') { + return; + } - // Get PR number from the github context - const prNumber = github.context.payload.pull_request?.number; + try { + const current = JSON.parse(entry); - // We need to combine all tests from the 4 buckets - const reassureTests = [...regressionOutput.meaningless, ...regressionOutput.significant, ...regressionOutput.countChanged, ...regressionOutput.added]; + // Extract timestamp, Graphite accepts timestamp in seconds + const timestamp = current.metadata?.creationDate ? Math.floor(new Date(current.metadata.creationDate).getTime() / 1000) : ''; - // Map through every test and create string for meanDuration and meanCount - // eslint-disable-next-line rulesdir/prefer-underscore-method - const graphiteString = reassureTests - .map((test) => { - const current = test.current; - // Graphite doesn't accept metrics name with space, we replace spaces with "-" - const formattedName = current.name.split(' ').join('-'); + if (current.name && current.meanDuration && current.meanCount && timestamp) { + const formattedName = current.name.split(' ').join('-'); - const renderDurationString = `${GRAPHITE_PATH}.${formattedName}.renderDuration ${current.meanDuration} ${timestamp}`; - const renderCountString = `${GRAPHITE_PATH}.${formattedName}.renderCount ${current.meanCount} ${timestamp}`; - const renderPRNumberString = `${GRAPHITE_PATH}.${formattedName}.prNumber ${prNumber} ${timestamp}`; + const renderDurationString = `${GRAPHITE_PATH}.${formattedName}.renderDuration ${current.meanDuration} ${timestamp}`; + const renderCountString = `${GRAPHITE_PATH}.${formattedName}.renderCount ${current.meanCount} ${timestamp}`; + const renderPRNumberString = `${GRAPHITE_PATH}.${formattedName}.prNumber ${PR_NUMBER} ${timestamp}`; - return `${renderDurationString}\n${renderCountString}\n${renderPRNumberString}`; - }) - .join('\n'); + // Concatenate Graphite strings + graphiteString += `${renderDurationString}\n${renderCountString}\n${renderPRNumberString}\n`; + } + } catch (e) { + const error = new Error('Error parsing baseline.perf JSON file'); + console.error(error.message); + core.setFailed(error); + } + }); // Set generated graphite string to the github variable core.setOutput('GRAPHITE_STRING', graphiteString); diff --git a/.github/actions/javascript/getGraphiteString/index.js b/.github/actions/javascript/getGraphiteString/index.js index 43d1de6724e3..7f512d575a23 100644 --- a/.github/actions/javascript/getGraphiteString/index.js +++ b/.github/actions/javascript/getGraphiteString/index.js @@ -4,7 +4,7 @@ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ -/***/ 7351: +/***/ 351: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -30,8 +30,8 @@ var __importStar = (this && this.__importStar) || function (mod) { }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.issue = exports.issueCommand = void 0; -const os = __importStar(__nccwpck_require__(2037)); -const utils_1 = __nccwpck_require__(5278); +const os = __importStar(__nccwpck_require__(37)); +const utils_1 = __nccwpck_require__(278); /** * Commands * @@ -103,7 +103,7 @@ function escapeProperty(s) { /***/ }), -/***/ 2186: +/***/ 186: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -138,12 +138,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0; -const command_1 = __nccwpck_require__(7351); -const file_command_1 = __nccwpck_require__(717); -const utils_1 = __nccwpck_require__(5278); -const os = __importStar(__nccwpck_require__(2037)); -const path = __importStar(__nccwpck_require__(1017)); -const oidc_utils_1 = __nccwpck_require__(8041); +const command_1 = __nccwpck_require__(351); +const file_command_1 = __nccwpck_require__(185); +const utils_1 = __nccwpck_require__(278); +const os = __importStar(__nccwpck_require__(37)); +const path = __importStar(__nccwpck_require__(17)); +const oidc_utils_1 = __nccwpck_require__(41); /** * The code to exit an action */ @@ -428,17 +428,17 @@ exports.getIDToken = getIDToken; /** * Summary exports */ -var summary_1 = __nccwpck_require__(1327); +var summary_1 = __nccwpck_require__(327); Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } })); /** * @deprecated use core.summary */ -var summary_2 = __nccwpck_require__(1327); +var summary_2 = __nccwpck_require__(327); Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } })); /** * Path exports */ -var path_utils_1 = __nccwpck_require__(2981); +var path_utils_1 = __nccwpck_require__(981); Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } })); Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } })); Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } })); @@ -446,7 +446,7 @@ Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: funct /***/ }), -/***/ 717: +/***/ 185: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -475,10 +475,10 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.prepareKeyValueMessage = exports.issueFileCommand = void 0; // We use any as a valid input type /* eslint-disable @typescript-eslint/no-explicit-any */ -const fs = __importStar(__nccwpck_require__(7147)); -const os = __importStar(__nccwpck_require__(2037)); -const uuid_1 = __nccwpck_require__(5840); -const utils_1 = __nccwpck_require__(5278); +const fs = __importStar(__nccwpck_require__(147)); +const os = __importStar(__nccwpck_require__(37)); +const uuid_1 = __nccwpck_require__(840); +const utils_1 = __nccwpck_require__(278); function issueFileCommand(command, message) { const filePath = process.env[`GITHUB_${command}`]; if (!filePath) { @@ -511,7 +511,7 @@ exports.prepareKeyValueMessage = prepareKeyValueMessage; /***/ }), -/***/ 8041: +/***/ 41: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -527,9 +527,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.OidcClient = void 0; -const http_client_1 = __nccwpck_require__(6255); -const auth_1 = __nccwpck_require__(5526); -const core_1 = __nccwpck_require__(2186); +const http_client_1 = __nccwpck_require__(255); +const auth_1 = __nccwpck_require__(526); +const core_1 = __nccwpck_require__(186); class OidcClient { static createHttpClient(allowRetry = true, maxRetry = 10) { const requestOptions = { @@ -595,7 +595,7 @@ exports.OidcClient = OidcClient; /***/ }), -/***/ 2981: +/***/ 981: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -621,7 +621,7 @@ var __importStar = (this && this.__importStar) || function (mod) { }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0; -const path = __importStar(__nccwpck_require__(1017)); +const path = __importStar(__nccwpck_require__(17)); /** * toPosixPath converts the given path to the posix form. On Windows, \\ will be * replaced with /. @@ -660,7 +660,7 @@ exports.toPlatformPath = toPlatformPath; /***/ }), -/***/ 1327: +/***/ 327: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -676,8 +676,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0; -const os_1 = __nccwpck_require__(2037); -const fs_1 = __nccwpck_require__(7147); +const os_1 = __nccwpck_require__(37); +const fs_1 = __nccwpck_require__(147); const { access, appendFile, writeFile } = fs_1.promises; exports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY'; exports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary'; @@ -950,7 +950,7 @@ exports.summary = _summary; /***/ }), -/***/ 5278: +/***/ 278: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -997,72 +997,100 @@ exports.toCommandProperties = toCommandProperties; /***/ }), -/***/ 4087: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { +/***/ 526: +/***/ (function(__unused_webpack_module, exports) { "use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Context = void 0; -const fs_1 = __nccwpck_require__(7147); -const os_1 = __nccwpck_require__(2037); -class Context { - /** - * Hydrate the context from the environment - */ - constructor() { - var _a, _b, _c; - this.payload = {}; - if (process.env.GITHUB_EVENT_PATH) { - if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) { - this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' })); - } - else { - const path = process.env.GITHUB_EVENT_PATH; - process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`); - } +exports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0; +class BasicCredentialHandler { + constructor(username, password) { + this.username = username; + this.password = password; + } + prepareRequest(options) { + if (!options.headers) { + throw Error('The request has no headers'); } - this.eventName = process.env.GITHUB_EVENT_NAME; - this.sha = process.env.GITHUB_SHA; - this.ref = process.env.GITHUB_REF; - this.workflow = process.env.GITHUB_WORKFLOW; - this.action = process.env.GITHUB_ACTION; - this.actor = process.env.GITHUB_ACTOR; - this.job = process.env.GITHUB_JOB; - this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10); - this.runId = parseInt(process.env.GITHUB_RUN_ID, 10); - this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`; - this.serverUrl = (_b = process.env.GITHUB_SERVER_URL) !== null && _b !== void 0 ? _b : `https://github.com`; - this.graphqlUrl = (_c = process.env.GITHUB_GRAPHQL_URL) !== null && _c !== void 0 ? _c : `https://api.github.com/graphql`; + options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`; + } + // This handler cannot handle 401 + canHandleAuthentication() { + return false; } - get issue() { - const payload = this.payload; - return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number }); + handleAuthentication() { + return __awaiter(this, void 0, void 0, function* () { + throw new Error('not implemented'); + }); + } +} +exports.BasicCredentialHandler = BasicCredentialHandler; +class BearerCredentialHandler { + constructor(token) { + this.token = token; } - get repo() { - if (process.env.GITHUB_REPOSITORY) { - const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/'); - return { owner, repo }; + // currently implements pre-authorization + // TODO: support preAuth = false where it hooks on 401 + prepareRequest(options) { + if (!options.headers) { + throw Error('The request has no headers'); } - if (this.payload.repository) { - return { - owner: this.payload.repository.owner.login, - repo: this.payload.repository.name - }; + options.headers['Authorization'] = `Bearer ${this.token}`; + } + // This handler cannot handle 401 + canHandleAuthentication() { + return false; + } + handleAuthentication() { + return __awaiter(this, void 0, void 0, function* () { + throw new Error('not implemented'); + }); + } +} +exports.BearerCredentialHandler = BearerCredentialHandler; +class PersonalAccessTokenCredentialHandler { + constructor(token) { + this.token = token; + } + // currently implements pre-authorization + // TODO: support preAuth = false where it hooks on 401 + prepareRequest(options) { + if (!options.headers) { + throw Error('The request has no headers'); } - throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'"); + options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`; + } + // This handler cannot handle 401 + canHandleAuthentication() { + return false; + } + handleAuthentication() { + return __awaiter(this, void 0, void 0, function* () { + throw new Error('not implemented'); + }); } } -exports.Context = Context; -//# sourceMappingURL=context.js.map +exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; +//# sourceMappingURL=auth.js.map /***/ }), -/***/ 5438: +/***/ 255: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; +/* eslint-disable @typescript-eslint/no-explicit-any */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); @@ -1082,7459 +1110,682 @@ var __importStar = (this && this.__importStar) || function (mod) { __setModuleDefault(result, mod); return result; }; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.getOctokit = exports.context = void 0; -const Context = __importStar(__nccwpck_require__(4087)); -const utils_1 = __nccwpck_require__(3030); -exports.context = new Context.Context(); +exports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0; +const http = __importStar(__nccwpck_require__(685)); +const https = __importStar(__nccwpck_require__(687)); +const pm = __importStar(__nccwpck_require__(835)); +const tunnel = __importStar(__nccwpck_require__(294)); +var HttpCodes; +(function (HttpCodes) { + HttpCodes[HttpCodes["OK"] = 200] = "OK"; + HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; + HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; + HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; + HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; + HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; + HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; + HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; + HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; + HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; + HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; + HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; + HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; + HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; + HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; + HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; + HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; + HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; + HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; + HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; + HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; + HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; + HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; + HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; + HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; + HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; +})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); +var Headers; +(function (Headers) { + Headers["Accept"] = "accept"; + Headers["ContentType"] = "content-type"; +})(Headers = exports.Headers || (exports.Headers = {})); +var MediaTypes; +(function (MediaTypes) { + MediaTypes["ApplicationJson"] = "application/json"; +})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); /** - * Returns a hydrated octokit ready to use for GitHub Actions - * - * @param token the repo PAT or GITHUB_TOKEN - * @param options other options to set + * Returns the proxy URL, depending upon the supplied url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com */ -function getOctokit(token, options, ...additionalPlugins) { - const GitHubWithPlugins = utils_1.GitHub.plugin(...additionalPlugins); - return new GitHubWithPlugins(utils_1.getOctokitOptions(token, options)); +function getProxyUrl(serverUrl) { + const proxyUrl = pm.getProxyUrl(new URL(serverUrl)); + return proxyUrl ? proxyUrl.href : ''; } -exports.getOctokit = getOctokit; -//# sourceMappingURL=github.js.map - -/***/ }), - -/***/ 7914: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"use strict"; - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.getApiBaseUrl = exports.getProxyAgent = exports.getAuthString = void 0; -const httpClient = __importStar(__nccwpck_require__(6255)); -function getAuthString(token, options) { - if (!token && !options.auth) { - throw new Error('Parameter token or opts.auth is required'); - } - else if (token && options.auth) { - throw new Error('Parameters token and opts.auth may not both be specified'); +exports.getProxyUrl = getProxyUrl; +const HttpRedirectCodes = [ + HttpCodes.MovedPermanently, + HttpCodes.ResourceMoved, + HttpCodes.SeeOther, + HttpCodes.TemporaryRedirect, + HttpCodes.PermanentRedirect +]; +const HttpResponseRetryCodes = [ + HttpCodes.BadGateway, + HttpCodes.ServiceUnavailable, + HttpCodes.GatewayTimeout +]; +const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; +const ExponentialBackoffCeiling = 10; +const ExponentialBackoffTimeSlice = 5; +class HttpClientError extends Error { + constructor(message, statusCode) { + super(message); + this.name = 'HttpClientError'; + this.statusCode = statusCode; + Object.setPrototypeOf(this, HttpClientError.prototype); } - return typeof options.auth === 'string' ? options.auth : `token ${token}`; } -exports.getAuthString = getAuthString; -function getProxyAgent(destinationUrl) { - const hc = new httpClient.HttpClient(); - return hc.getAgent(destinationUrl); -} -exports.getProxyAgent = getProxyAgent; -function getApiBaseUrl() { - return process.env['GITHUB_API_URL'] || 'https://api.github.com'; -} -exports.getApiBaseUrl = getApiBaseUrl; -//# sourceMappingURL=utils.js.map - -/***/ }), - -/***/ 3030: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"use strict"; - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.getOctokitOptions = exports.GitHub = exports.defaults = exports.context = void 0; -const Context = __importStar(__nccwpck_require__(4087)); -const Utils = __importStar(__nccwpck_require__(7914)); -// octokit + plugins -const core_1 = __nccwpck_require__(8525); -const plugin_rest_endpoint_methods_1 = __nccwpck_require__(3044); -const plugin_paginate_rest_1 = __nccwpck_require__(8945); -exports.context = new Context.Context(); -const baseUrl = Utils.getApiBaseUrl(); -exports.defaults = { - baseUrl, - request: { - agent: Utils.getProxyAgent(baseUrl) +exports.HttpClientError = HttpClientError; +class HttpClientResponse { + constructor(message) { + this.message = message; } -}; -exports.GitHub = core_1.Octokit.plugin(plugin_rest_endpoint_methods_1.restEndpointMethods, plugin_paginate_rest_1.paginateRest).defaults(exports.defaults); -/** - * Convience function to correctly format Octokit Options to pass into the constructor. - * - * @param token the repo PAT or GITHUB_TOKEN - * @param options other options to set - */ -function getOctokitOptions(token, options) { - const opts = Object.assign({}, options || {}); // Shallow clone - don't mutate the object provided by the caller - // Auth - const auth = Utils.getAuthString(token, opts); - if (auth) { - opts.auth = auth; + readBody() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { + let output = Buffer.alloc(0); + this.message.on('data', (chunk) => { + output = Buffer.concat([output, chunk]); + }); + this.message.on('end', () => { + resolve(output.toString()); + }); + })); + }); } - return opts; } -exports.getOctokitOptions = getOctokitOptions; -//# sourceMappingURL=utils.js.map - -/***/ }), - -/***/ 673: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -const REGEX_IS_INSTALLATION_LEGACY = /^v1\./; -const REGEX_IS_INSTALLATION = /^ghs_/; -const REGEX_IS_USER_TO_SERVER = /^ghu_/; -async function auth(token) { - const isApp = token.split(/\./).length === 3; - const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token); - const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token); - const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth"; - return { - type: "token", - token: token, - tokenType - }; +exports.HttpClientResponse = HttpClientResponse; +function isHttps(requestUrl) { + const parsedUrl = new URL(requestUrl); + return parsedUrl.protocol === 'https:'; } - -/** - * Prefix token for usage in the Authorization header - * - * @param token OAuth token or JSON Web Token - */ -function withAuthorizationPrefix(token) { - if (token.split(/\./).length === 3) { - return `bearer ${token}`; - } - - return `token ${token}`; -} - -async function hook(token, request, route, parameters) { - const endpoint = request.endpoint.merge(route, parameters); - endpoint.headers.authorization = withAuthorizationPrefix(token); - return request(endpoint); -} - -const createTokenAuth = function createTokenAuth(token) { - if (!token) { - throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); - } - - if (typeof token !== "string") { - throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string"); - } - - token = token.replace(/^(token|bearer) +/i, ""); - return Object.assign(auth.bind(null, token), { - hook: hook.bind(null, token) - }); -}; - -exports.createTokenAuth = createTokenAuth; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 8525: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var universalUserAgent = __nccwpck_require__(5030); -var beforeAfterHook = __nccwpck_require__(3682); -var request = __nccwpck_require__(9353); -var graphql = __nccwpck_require__(6422); -var authToken = __nccwpck_require__(673); - -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; -} - -function _objectWithoutProperties(source, excluded) { - if (source == null) return {}; - - var target = _objectWithoutPropertiesLoose(source, excluded); - - var key, i; - - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; -} - -const VERSION = "3.6.0"; - -const _excluded = ["authStrategy"]; -class Octokit { - constructor(options = {}) { - const hook = new beforeAfterHook.Collection(); - const requestDefaults = { - baseUrl: request.request.endpoint.DEFAULTS.baseUrl, - headers: {}, - request: Object.assign({}, options.request, { - // @ts-ignore internal usage only, no need to type - hook: hook.bind(null, "request") - }), - mediaType: { - previews: [], - format: "" - } - }; // prepend default user agent with `options.userAgent` if set - - requestDefaults.headers["user-agent"] = [options.userAgent, `octokit-core.js/${VERSION} ${universalUserAgent.getUserAgent()}`].filter(Boolean).join(" "); - - if (options.baseUrl) { - requestDefaults.baseUrl = options.baseUrl; +exports.isHttps = isHttps; +class HttpClient { + constructor(userAgent, handlers, requestOptions) { + this._ignoreSslError = false; + this._allowRedirects = true; + this._allowRedirectDowngrade = false; + this._maxRedirects = 50; + this._allowRetries = false; + this._maxRetries = 1; + this._keepAlive = false; + this._disposed = false; + this.userAgent = userAgent; + this.handlers = handlers || []; + this.requestOptions = requestOptions; + if (requestOptions) { + if (requestOptions.ignoreSslError != null) { + this._ignoreSslError = requestOptions.ignoreSslError; + } + this._socketTimeout = requestOptions.socketTimeout; + if (requestOptions.allowRedirects != null) { + this._allowRedirects = requestOptions.allowRedirects; + } + if (requestOptions.allowRedirectDowngrade != null) { + this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; + } + if (requestOptions.maxRedirects != null) { + this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); + } + if (requestOptions.keepAlive != null) { + this._keepAlive = requestOptions.keepAlive; + } + if (requestOptions.allowRetries != null) { + this._allowRetries = requestOptions.allowRetries; + } + if (requestOptions.maxRetries != null) { + this._maxRetries = requestOptions.maxRetries; + } + } } - - if (options.previews) { - requestDefaults.mediaType.previews = options.previews; + options(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); + }); } - - if (options.timeZone) { - requestDefaults.headers["time-zone"] = options.timeZone; + get(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request('GET', requestUrl, null, additionalHeaders || {}); + }); } - - this.request = request.request.defaults(requestDefaults); - this.graphql = graphql.withCustomRequest(this.request).defaults(requestDefaults); - this.log = Object.assign({ - debug: () => {}, - info: () => {}, - warn: console.warn.bind(console), - error: console.error.bind(console) - }, options.log); - this.hook = hook; // (1) If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance - // is unauthenticated. The `this.auth()` method is a no-op and no request hook is registered. - // (2) If only `options.auth` is set, use the default token authentication strategy. - // (3) If `options.authStrategy` is set then use it and pass in `options.auth`. Always pass own request as many strategies accept a custom request instance. - // TODO: type `options.auth` based on `options.authStrategy`. - - if (!options.authStrategy) { - if (!options.auth) { - // (1) - this.auth = async () => ({ - type: "unauthenticated" + del(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request('DELETE', requestUrl, null, additionalHeaders || {}); }); - } else { - // (2) - const auth = authToken.createTokenAuth(options.auth); // @ts-ignore ¯\_(ツ)_/¯ - - hook.wrap("request", auth.hook); - this.auth = auth; - } - } else { - const { - authStrategy - } = options, - otherOptions = _objectWithoutProperties(options, _excluded); - - const auth = authStrategy(Object.assign({ - request: this.request, - log: this.log, - // we pass the current octokit instance as well as its constructor options - // to allow for authentication strategies that return a new octokit instance - // that shares the same internal state as the current one. The original - // requirement for this was the "event-octokit" authentication strategy - // of https://github.com/probot/octokit-auth-probot. - octokit: this, - octokitOptions: otherOptions - }, options.auth)); // @ts-ignore ¯\_(ツ)_/¯ - - hook.wrap("request", auth.hook); - this.auth = auth; - } // apply plugins - // https://stackoverflow.com/a/16345172 - - - const classConstructor = this.constructor; - classConstructor.plugins.forEach(plugin => { - Object.assign(this, plugin(this, options)); - }); - } - - static defaults(defaults) { - const OctokitWithDefaults = class extends this { - constructor(...args) { - const options = args[0] || {}; - - if (typeof defaults === "function") { - super(defaults(options)); - return; - } - - super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent ? { - userAgent: `${options.userAgent} ${defaults.userAgent}` - } : null)); - } - - }; - return OctokitWithDefaults; - } - /** - * Attach a plugin (or many) to your Octokit instance. - * - * @example - * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...) - */ - - - static plugin(...newPlugins) { - var _a; - - const currentPlugins = this.plugins; - const NewOctokit = (_a = class extends this {}, _a.plugins = currentPlugins.concat(newPlugins.filter(plugin => !currentPlugins.includes(plugin))), _a); - return NewOctokit; - } - -} -Octokit.VERSION = VERSION; -Octokit.plugins = []; - -exports.Octokit = Octokit; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 8713: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var isPlainObject = __nccwpck_require__(3287); -var universalUserAgent = __nccwpck_require__(5030); - -function lowercaseKeys(object) { - if (!object) { - return {}; - } - - return Object.keys(object).reduce((newObj, key) => { - newObj[key.toLowerCase()] = object[key]; - return newObj; - }, {}); -} - -function mergeDeep(defaults, options) { - const result = Object.assign({}, defaults); - Object.keys(options).forEach(key => { - if (isPlainObject.isPlainObject(options[key])) { - if (!(key in defaults)) Object.assign(result, { - [key]: options[key] - });else result[key] = mergeDeep(defaults[key], options[key]); - } else { - Object.assign(result, { - [key]: options[key] - }); } - }); - return result; -} - -function removeUndefinedProperties(obj) { - for (const key in obj) { - if (obj[key] === undefined) { - delete obj[key]; + post(requestUrl, data, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request('POST', requestUrl, data, additionalHeaders || {}); + }); } - } - - return obj; -} - -function merge(defaults, route, options) { - if (typeof route === "string") { - let [method, url] = route.split(" "); - options = Object.assign(url ? { - method, - url - } : { - url: method - }, options); - } else { - options = Object.assign({}, route); - } // lowercase header names before merging with defaults to avoid duplicates - - - options.headers = lowercaseKeys(options.headers); // remove properties with undefined values before merging - - removeUndefinedProperties(options); - removeUndefinedProperties(options.headers); - const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten - - if (defaults && defaults.mediaType.previews.length) { - mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews); - } - - mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, "")); - return mergedOptions; -} - -function addQueryParameters(url, parameters) { - const separator = /\?/.test(url) ? "&" : "?"; - const names = Object.keys(parameters); - - if (names.length === 0) { - return url; - } - - return url + separator + names.map(name => { - if (name === "q") { - return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+"); + patch(requestUrl, data, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request('PATCH', requestUrl, data, additionalHeaders || {}); + }); } - - return `${name}=${encodeURIComponent(parameters[name])}`; - }).join("&"); -} - -const urlVariableRegex = /\{[^}]+\}/g; - -function removeNonChars(variableName) { - return variableName.replace(/^\W+|\W+$/g, "").split(/,/); -} - -function extractUrlVariableNames(url) { - const matches = url.match(urlVariableRegex); - - if (!matches) { - return []; - } - - return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []); -} - -function omit(object, keysToOmit) { - return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => { - obj[key] = object[key]; - return obj; - }, {}); -} - -// Based on https://github.com/bramstein/url-template, licensed under BSD -// TODO: create separate package. -// -// Copyright (c) 2012-2014, Bram Stein -// All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// 3. The name of the author may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED -// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -/* istanbul ignore file */ -function encodeReserved(str) { - return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) { - if (!/%[0-9A-Fa-f]/.test(part)) { - part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]"); + put(requestUrl, data, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request('PUT', requestUrl, data, additionalHeaders || {}); + }); } - - return part; - }).join(""); -} - -function encodeUnreserved(str) { - return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { - return "%" + c.charCodeAt(0).toString(16).toUpperCase(); - }); -} - -function encodeValue(operator, value, key) { - value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value); - - if (key) { - return encodeUnreserved(key) + "=" + value; - } else { - return value; - } -} - -function isDefined(value) { - return value !== undefined && value !== null; -} - -function isKeyOperator(operator) { - return operator === ";" || operator === "&" || operator === "?"; -} - -function getValues(context, operator, key, modifier) { - var value = context[key], - result = []; - - if (isDefined(value) && value !== "") { - if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { - value = value.toString(); - - if (modifier && modifier !== "*") { - value = value.substring(0, parseInt(modifier, 10)); - } - - result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); - } else { - if (modifier === "*") { - if (Array.isArray(value)) { - value.filter(isDefined).forEach(function (value) { - result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); - }); - } else { - Object.keys(value).forEach(function (k) { - if (isDefined(value[k])) { - result.push(encodeValue(operator, value[k], k)); - } - }); - } - } else { - const tmp = []; - - if (Array.isArray(value)) { - value.filter(isDefined).forEach(function (value) { - tmp.push(encodeValue(operator, value)); - }); - } else { - Object.keys(value).forEach(function (k) { - if (isDefined(value[k])) { - tmp.push(encodeUnreserved(k)); - tmp.push(encodeValue(operator, value[k].toString())); - } - }); - } - - if (isKeyOperator(operator)) { - result.push(encodeUnreserved(key) + "=" + tmp.join(",")); - } else if (tmp.length !== 0) { - result.push(tmp.join(",")); - } - } + head(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request('HEAD', requestUrl, null, additionalHeaders || {}); + }); } - } else { - if (operator === ";") { - if (isDefined(value)) { - result.push(encodeUnreserved(key)); - } - } else if (value === "" && (operator === "&" || operator === "?")) { - result.push(encodeUnreserved(key) + "="); - } else if (value === "") { - result.push(""); + sendStream(verb, requestUrl, stream, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request(verb, requestUrl, stream, additionalHeaders); + }); } - } - - return result; -} - -function parseUrl(template) { - return { - expand: expand.bind(null, template) - }; -} - -function expand(template, context) { - var operators = ["+", "#", ".", "/", ";", "?", "&"]; - return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) { - if (expression) { - let operator = ""; - const values = []; - - if (operators.indexOf(expression.charAt(0)) !== -1) { - operator = expression.charAt(0); - expression = expression.substr(1); - } - - expression.split(/,/g).forEach(function (variable) { - var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); - values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3])); - }); - - if (operator && operator !== "+") { - var separator = ","; - - if (operator === "?") { - separator = "&"; - } else if (operator !== "#") { - separator = operator; - } - - return (values.length !== 0 ? operator : "") + values.join(separator); - } else { - return values.join(","); - } - } else { - return encodeReserved(literal); + /** + * Gets a typed object from an endpoint + * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise + */ + getJson(requestUrl, additionalHeaders = {}) { + return __awaiter(this, void 0, void 0, function* () { + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + const res = yield this.get(requestUrl, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); } - }); -} - -function parse(options) { - // https://fetch.spec.whatwg.org/#methods - let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible - - let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}"); - let headers = Object.assign({}, options.headers); - let body; - let parameters = omit(options, ["method", "baseUrl", "url", "headers", "request", "mediaType"]); // extract variable names from URL to calculate remaining variables later - - const urlVariableNames = extractUrlVariableNames(url); - url = parseUrl(url).expand(parameters); - - if (!/^http/.test(url)) { - url = options.baseUrl + url; - } - - const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl"); - const remainingParameters = omit(parameters, omittedParameters); - const isBinaryRequest = /application\/octet-stream/i.test(headers.accept); - - if (!isBinaryRequest) { - if (options.mediaType.format) { - // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw - headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(","); + postJson(requestUrl, obj, additionalHeaders = {}) { + return __awaiter(this, void 0, void 0, function* () { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + const res = yield this.post(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); } - - if (options.mediaType.previews.length) { - const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || []; - headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => { - const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; - return `application/vnd.github.${preview}-preview${format}`; - }).join(","); - } - } // for GET/HEAD requests, set URL query parameters from remaining parameters - // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters - - - if (["GET", "HEAD"].includes(method)) { - url = addQueryParameters(url, remainingParameters); - } else { - if ("data" in remainingParameters) { - body = remainingParameters.data; - } else { - if (Object.keys(remainingParameters).length) { - body = remainingParameters; - } else { - headers["content-length"] = 0; - } - } - } // default content-type for JSON if body is set - - - if (!headers["content-type"] && typeof body !== "undefined") { - headers["content-type"] = "application/json; charset=utf-8"; - } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body. - // fetch does not allow to set `content-length` header, but we can set body to an empty string - - - if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") { - body = ""; - } // Only return body/request keys if present - - - return Object.assign({ - method, - url, - headers - }, typeof body !== "undefined" ? { - body - } : null, options.request ? { - request: options.request - } : null); -} - -function endpointWithDefaults(defaults, route, options) { - return parse(merge(defaults, route, options)); -} - -function withDefaults(oldDefaults, newDefaults) { - const DEFAULTS = merge(oldDefaults, newDefaults); - const endpoint = endpointWithDefaults.bind(null, DEFAULTS); - return Object.assign(endpoint, { - DEFAULTS, - defaults: withDefaults.bind(null, DEFAULTS), - merge: merge.bind(null, DEFAULTS), - parse - }); -} - -const VERSION = "6.0.12"; - -const userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url. -// So we use RequestParameters and add method as additional required property. - -const DEFAULTS = { - method: "GET", - baseUrl: "https://api.github.com", - headers: { - accept: "application/vnd.github.v3+json", - "user-agent": userAgent - }, - mediaType: { - format: "", - previews: [] - } -}; - -const endpoint = withDefaults(null, DEFAULTS); - -exports.endpoint = endpoint; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 6422: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var request = __nccwpck_require__(9353); -var universalUserAgent = __nccwpck_require__(5030); - -const VERSION = "4.8.0"; - -function _buildMessageForResponseErrors(data) { - return `Request failed due to following response errors:\n` + data.errors.map(e => ` - ${e.message}`).join("\n"); -} - -class GraphqlResponseError extends Error { - constructor(request, headers, response) { - super(_buildMessageForResponseErrors(response)); - this.request = request; - this.headers = headers; - this.response = response; - this.name = "GraphqlResponseError"; // Expose the errors and response data in their shorthand properties. - - this.errors = response.errors; - this.data = response.data; // Maintains proper stack trace (only available on V8) - - /* istanbul ignore next */ - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - } - -} - -const NON_VARIABLE_OPTIONS = ["method", "baseUrl", "url", "headers", "request", "query", "mediaType"]; -const FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"]; -const GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/; -function graphql(request, query, options) { - if (options) { - if (typeof query === "string" && "query" in options) { - return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`)); - } - - for (const key in options) { - if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue; - return Promise.reject(new Error(`[@octokit/graphql] "${key}" cannot be used as variable name`)); - } - } - - const parsedOptions = typeof query === "string" ? Object.assign({ - query - }, options) : query; - const requestOptions = Object.keys(parsedOptions).reduce((result, key) => { - if (NON_VARIABLE_OPTIONS.includes(key)) { - result[key] = parsedOptions[key]; - return result; - } - - if (!result.variables) { - result.variables = {}; + putJson(requestUrl, obj, additionalHeaders = {}) { + return __awaiter(this, void 0, void 0, function* () { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + const res = yield this.put(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); } - - result.variables[key] = parsedOptions[key]; - return result; - }, {}); // workaround for GitHub Enterprise baseUrl set with /api/v3 suffix - // https://github.com/octokit/auth-app.js/issues/111#issuecomment-657610451 - - const baseUrl = parsedOptions.baseUrl || request.endpoint.DEFAULTS.baseUrl; - - if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) { - requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql"); - } - - return request(requestOptions).then(response => { - if (response.data.errors) { - const headers = {}; - - for (const key of Object.keys(response.headers)) { - headers[key] = response.headers[key]; - } - - throw new GraphqlResponseError(requestOptions, headers, response.data); + patchJson(requestUrl, obj, additionalHeaders = {}) { + return __awaiter(this, void 0, void 0, function* () { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + const res = yield this.patch(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); } - - return response.data.data; - }); -} - -function withDefaults(request$1, newDefaults) { - const newRequest = request$1.defaults(newDefaults); - - const newApi = (query, options) => { - return graphql(newRequest, query, options); - }; - - return Object.assign(newApi, { - defaults: withDefaults.bind(null, newRequest), - endpoint: request.request.endpoint - }); -} - -const graphql$1 = withDefaults(request.request, { - headers: { - "user-agent": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}` - }, - method: "POST", - url: "/graphql" -}); -function withCustomRequest(customRequest) { - return withDefaults(customRequest, { - method: "POST", - url: "/graphql" - }); -} - -exports.GraphqlResponseError = GraphqlResponseError; -exports.graphql = graphql$1; -exports.withCustomRequest = withCustomRequest; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 8945: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -const VERSION = "2.21.3"; - -function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - enumerableOnly && (symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - })), keys.push.apply(keys, symbols); - } - - return keys; -} - -function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = null != arguments[i] ? arguments[i] : {}; - i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { - _defineProperty(target, key, source[key]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - - return target; -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -/** - * Some “list” response that can be paginated have a different response structure - * - * They have a `total_count` key in the response (search also has `incomplete_results`, - * /installation/repositories also has `repository_selection`), as well as a key with - * the list of the items which name varies from endpoint to endpoint. - * - * Octokit normalizes these responses so that paginated results are always returned following - * the same structure. One challenge is that if the list response has only one page, no Link - * header is provided, so this header alone is not sufficient to check wether a response is - * paginated or not. - * - * We check if a "total_count" key is present in the response data, but also make sure that - * a "url" property is not, as the "Get the combined status for a specific ref" endpoint would - * otherwise match: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref - */ -function normalizePaginatedListResponse(response) { - // endpoints can respond with 204 if repository is empty - if (!response.data) { - return _objectSpread2(_objectSpread2({}, response), {}, { - data: [] - }); - } - - const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data); - if (!responseNeedsNormalization) return response; // keep the additional properties intact as there is currently no other way - // to retrieve the same information. - - const incompleteResults = response.data.incomplete_results; - const repositorySelection = response.data.repository_selection; - const totalCount = response.data.total_count; - delete response.data.incomplete_results; - delete response.data.repository_selection; - delete response.data.total_count; - const namespaceKey = Object.keys(response.data)[0]; - const data = response.data[namespaceKey]; - response.data = data; - - if (typeof incompleteResults !== "undefined") { - response.data.incomplete_results = incompleteResults; - } - - if (typeof repositorySelection !== "undefined") { - response.data.repository_selection = repositorySelection; - } - - response.data.total_count = totalCount; - return response; -} - -function iterator(octokit, route, parameters) { - const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters); - const requestMethod = typeof route === "function" ? route : octokit.request; - const method = options.method; - const headers = options.headers; - let url = options.url; - return { - [Symbol.asyncIterator]: () => ({ - async next() { - if (!url) return { - done: true - }; - - try { - const response = await requestMethod({ - method, - url, - headers - }); - const normalizedResponse = normalizePaginatedListResponse(response); // `response.headers.link` format: - // '; rel="next", ; rel="last"' - // sets `url` to undefined if "next" URL is not present or `link` header is not set - - url = ((normalizedResponse.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1]; - return { - value: normalizedResponse - }; - } catch (error) { - if (error.status !== 409) throw error; - url = ""; - return { - value: { - status: 200, - headers: {}, - data: [] + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + request(verb, requestUrl, data, headers) { + return __awaiter(this, void 0, void 0, function* () { + if (this._disposed) { + throw new Error('Client has already been disposed.'); } - }; - } - } - - }) - }; -} - -function paginate(octokit, route, parameters, mapFn) { - if (typeof parameters === "function") { - mapFn = parameters; - parameters = undefined; - } - - return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn); -} - -function gather(octokit, results, iterator, mapFn) { - return iterator.next().then(result => { - if (result.done) { - return results; - } - - let earlyExit = false; - - function done() { - earlyExit = true; - } - - results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data); - - if (earlyExit) { - return results; - } - - return gather(octokit, results, iterator, mapFn); - }); -} - -const composePaginateRest = Object.assign(paginate, { - iterator -}); - -const paginatingEndpoints = ["GET /app/hook/deliveries", "GET /app/installations", "GET /applications/grants", "GET /authorizations", "GET /enterprises/{enterprise}/actions/permissions/organizations", "GET /enterprises/{enterprise}/actions/runner-groups", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners", "GET /enterprises/{enterprise}/actions/runners", "GET /enterprises/{enterprise}/audit-log", "GET /enterprises/{enterprise}/secret-scanning/alerts", "GET /enterprises/{enterprise}/settings/billing/advanced-security", "GET /events", "GET /gists", "GET /gists/public", "GET /gists/starred", "GET /gists/{gist_id}/comments", "GET /gists/{gist_id}/commits", "GET /gists/{gist_id}/forks", "GET /installation/repositories", "GET /issues", "GET /licenses", "GET /marketplace_listing/plans", "GET /marketplace_listing/plans/{plan_id}/accounts", "GET /marketplace_listing/stubbed/plans", "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts", "GET /networks/{owner}/{repo}/events", "GET /notifications", "GET /organizations", "GET /orgs/{org}/actions/cache/usage-by-repository", "GET /orgs/{org}/actions/permissions/repositories", "GET /orgs/{org}/actions/runner-groups", "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories", "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners", "GET /orgs/{org}/actions/runners", "GET /orgs/{org}/actions/secrets", "GET /orgs/{org}/actions/secrets/{secret_name}/repositories", "GET /orgs/{org}/audit-log", "GET /orgs/{org}/blocks", "GET /orgs/{org}/code-scanning/alerts", "GET /orgs/{org}/codespaces", "GET /orgs/{org}/credential-authorizations", "GET /orgs/{org}/dependabot/secrets", "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories", "GET /orgs/{org}/events", "GET /orgs/{org}/external-groups", "GET /orgs/{org}/failed_invitations", "GET /orgs/{org}/hooks", "GET /orgs/{org}/hooks/{hook_id}/deliveries", "GET /orgs/{org}/installations", "GET /orgs/{org}/invitations", "GET /orgs/{org}/invitations/{invitation_id}/teams", "GET /orgs/{org}/issues", "GET /orgs/{org}/members", "GET /orgs/{org}/migrations", "GET /orgs/{org}/migrations/{migration_id}/repositories", "GET /orgs/{org}/outside_collaborators", "GET /orgs/{org}/packages", "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", "GET /orgs/{org}/projects", "GET /orgs/{org}/public_members", "GET /orgs/{org}/repos", "GET /orgs/{org}/secret-scanning/alerts", "GET /orgs/{org}/settings/billing/advanced-security", "GET /orgs/{org}/team-sync/groups", "GET /orgs/{org}/teams", "GET /orgs/{org}/teams/{team_slug}/discussions", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions", "GET /orgs/{org}/teams/{team_slug}/invitations", "GET /orgs/{org}/teams/{team_slug}/members", "GET /orgs/{org}/teams/{team_slug}/projects", "GET /orgs/{org}/teams/{team_slug}/repos", "GET /orgs/{org}/teams/{team_slug}/teams", "GET /projects/columns/{column_id}/cards", "GET /projects/{project_id}/collaborators", "GET /projects/{project_id}/columns", "GET /repos/{owner}/{repo}/actions/artifacts", "GET /repos/{owner}/{repo}/actions/caches", "GET /repos/{owner}/{repo}/actions/runners", "GET /repos/{owner}/{repo}/actions/runs", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs", "GET /repos/{owner}/{repo}/actions/secrets", "GET /repos/{owner}/{repo}/actions/workflows", "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs", "GET /repos/{owner}/{repo}/assignees", "GET /repos/{owner}/{repo}/branches", "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations", "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs", "GET /repos/{owner}/{repo}/code-scanning/alerts", "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", "GET /repos/{owner}/{repo}/code-scanning/analyses", "GET /repos/{owner}/{repo}/codespaces", "GET /repos/{owner}/{repo}/codespaces/devcontainers", "GET /repos/{owner}/{repo}/codespaces/secrets", "GET /repos/{owner}/{repo}/collaborators", "GET /repos/{owner}/{repo}/comments", "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/commits", "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments", "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls", "GET /repos/{owner}/{repo}/commits/{ref}/check-runs", "GET /repos/{owner}/{repo}/commits/{ref}/check-suites", "GET /repos/{owner}/{repo}/commits/{ref}/status", "GET /repos/{owner}/{repo}/commits/{ref}/statuses", "GET /repos/{owner}/{repo}/contributors", "GET /repos/{owner}/{repo}/dependabot/secrets", "GET /repos/{owner}/{repo}/deployments", "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses", "GET /repos/{owner}/{repo}/environments", "GET /repos/{owner}/{repo}/events", "GET /repos/{owner}/{repo}/forks", "GET /repos/{owner}/{repo}/git/matching-refs/{ref}", "GET /repos/{owner}/{repo}/hooks", "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries", "GET /repos/{owner}/{repo}/invitations", "GET /repos/{owner}/{repo}/issues", "GET /repos/{owner}/{repo}/issues/comments", "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/issues/events", "GET /repos/{owner}/{repo}/issues/{issue_number}/comments", "GET /repos/{owner}/{repo}/issues/{issue_number}/events", "GET /repos/{owner}/{repo}/issues/{issue_number}/labels", "GET /repos/{owner}/{repo}/issues/{issue_number}/reactions", "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline", "GET /repos/{owner}/{repo}/keys", "GET /repos/{owner}/{repo}/labels", "GET /repos/{owner}/{repo}/milestones", "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels", "GET /repos/{owner}/{repo}/notifications", "GET /repos/{owner}/{repo}/pages/builds", "GET /repos/{owner}/{repo}/projects", "GET /repos/{owner}/{repo}/pulls", "GET /repos/{owner}/{repo}/pulls/comments", "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments", "GET /repos/{owner}/{repo}/pulls/{pull_number}/commits", "GET /repos/{owner}/{repo}/pulls/{pull_number}/files", "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers", "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews", "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments", "GET /repos/{owner}/{repo}/releases", "GET /repos/{owner}/{repo}/releases/{release_id}/assets", "GET /repos/{owner}/{repo}/releases/{release_id}/reactions", "GET /repos/{owner}/{repo}/secret-scanning/alerts", "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations", "GET /repos/{owner}/{repo}/stargazers", "GET /repos/{owner}/{repo}/subscribers", "GET /repos/{owner}/{repo}/tags", "GET /repos/{owner}/{repo}/teams", "GET /repos/{owner}/{repo}/topics", "GET /repositories", "GET /repositories/{repository_id}/environments/{environment_name}/secrets", "GET /search/code", "GET /search/commits", "GET /search/issues", "GET /search/labels", "GET /search/repositories", "GET /search/topics", "GET /search/users", "GET /teams/{team_id}/discussions", "GET /teams/{team_id}/discussions/{discussion_number}/comments", "GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions", "GET /teams/{team_id}/discussions/{discussion_number}/reactions", "GET /teams/{team_id}/invitations", "GET /teams/{team_id}/members", "GET /teams/{team_id}/projects", "GET /teams/{team_id}/repos", "GET /teams/{team_id}/teams", "GET /user/blocks", "GET /user/codespaces", "GET /user/codespaces/secrets", "GET /user/emails", "GET /user/followers", "GET /user/following", "GET /user/gpg_keys", "GET /user/installations", "GET /user/installations/{installation_id}/repositories", "GET /user/issues", "GET /user/keys", "GET /user/marketplace_purchases", "GET /user/marketplace_purchases/stubbed", "GET /user/memberships/orgs", "GET /user/migrations", "GET /user/migrations/{migration_id}/repositories", "GET /user/orgs", "GET /user/packages", "GET /user/packages/{package_type}/{package_name}/versions", "GET /user/public_emails", "GET /user/repos", "GET /user/repository_invitations", "GET /user/starred", "GET /user/subscriptions", "GET /user/teams", "GET /users", "GET /users/{username}/events", "GET /users/{username}/events/orgs/{org}", "GET /users/{username}/events/public", "GET /users/{username}/followers", "GET /users/{username}/following", "GET /users/{username}/gists", "GET /users/{username}/gpg_keys", "GET /users/{username}/keys", "GET /users/{username}/orgs", "GET /users/{username}/packages", "GET /users/{username}/projects", "GET /users/{username}/received_events", "GET /users/{username}/received_events/public", "GET /users/{username}/repos", "GET /users/{username}/starred", "GET /users/{username}/subscriptions"]; - -function isPaginatingEndpoint(arg) { - if (typeof arg === "string") { - return paginatingEndpoints.includes(arg); - } else { - return false; - } -} - -/** - * @param octokit Octokit instance - * @param options Options passed to Octokit constructor - */ - -function paginateRest(octokit) { - return { - paginate: Object.assign(paginate.bind(null, octokit), { - iterator: iterator.bind(null, octokit) - }) - }; -} -paginateRest.VERSION = VERSION; - -exports.composePaginateRest = composePaginateRest; -exports.isPaginatingEndpoint = isPaginatingEndpoint; -exports.paginateRest = paginateRest; -exports.paginatingEndpoints = paginatingEndpoints; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 7471: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var deprecation = __nccwpck_require__(8932); -var once = _interopDefault(__nccwpck_require__(1223)); - -const logOnceCode = once(deprecation => console.warn(deprecation)); -const logOnceHeaders = once(deprecation => console.warn(deprecation)); -/** - * Error with extra properties to help with debugging - */ - -class RequestError extends Error { - constructor(message, statusCode, options) { - super(message); // Maintains proper stack trace (only available on V8) - - /* istanbul ignore next */ - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - - this.name = "HttpError"; - this.status = statusCode; - let headers; - - if ("headers" in options && typeof options.headers !== "undefined") { - headers = options.headers; - } - - if ("response" in options) { - this.response = options.response; - headers = options.response.headers; - } // redact request credentials without mutating original request options - - - const requestCopy = Object.assign({}, options.request); - - if (options.request.headers.authorization) { - requestCopy.headers = Object.assign({}, options.request.headers, { - authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]") - }); - } - - requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit - // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications - .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended - // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header - .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); - this.request = requestCopy; // deprecations - - Object.defineProperty(this, "code", { - get() { - logOnceCode(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")); - return statusCode; - } - - }); - Object.defineProperty(this, "headers", { - get() { - logOnceHeaders(new deprecation.Deprecation("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`.")); - return headers || {}; - } - - }); - } - -} - -exports.RequestError = RequestError; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 9353: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var endpoint = __nccwpck_require__(8713); -var universalUserAgent = __nccwpck_require__(5030); -var isPlainObject = __nccwpck_require__(3287); -var nodeFetch = _interopDefault(__nccwpck_require__(467)); -var requestError = __nccwpck_require__(7471); - -const VERSION = "5.6.3"; - -function getBufferResponse(response) { - return response.arrayBuffer(); -} - -function fetchWrapper(requestOptions) { - const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console; - - if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) { - requestOptions.body = JSON.stringify(requestOptions.body); - } - - let headers = {}; - let status; - let url; - const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch; - return fetch(requestOptions.url, Object.assign({ - method: requestOptions.method, - body: requestOptions.body, - headers: requestOptions.headers, - redirect: requestOptions.redirect - }, // `requestOptions.request.agent` type is incompatible - // see https://github.com/octokit/types.ts/pull/264 - requestOptions.request)).then(async response => { - url = response.url; - status = response.status; - - for (const keyAndValue of response.headers) { - headers[keyAndValue[0]] = keyAndValue[1]; - } - - if ("deprecation" in headers) { - const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/); - const deprecationLink = matches && matches.pop(); - log.warn(`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`); - } - - if (status === 204 || status === 205) { - return; - } // GitHub API returns 200 for HEAD requests - - - if (requestOptions.method === "HEAD") { - if (status < 400) { - return; - } - - throw new requestError.RequestError(response.statusText, status, { - response: { - url, - status, - headers, - data: undefined - }, - request: requestOptions - }); - } - - if (status === 304) { - throw new requestError.RequestError("Not modified", status, { - response: { - url, - status, - headers, - data: await getResponseData(response) - }, - request: requestOptions - }); - } - - if (status >= 400) { - const data = await getResponseData(response); - const error = new requestError.RequestError(toErrorMessage(data), status, { - response: { - url, - status, - headers, - data - }, - request: requestOptions - }); - throw error; - } - - return getResponseData(response); - }).then(data => { - return { - status, - url, - headers, - data - }; - }).catch(error => { - if (error instanceof requestError.RequestError) throw error; - throw new requestError.RequestError(error.message, 500, { - request: requestOptions - }); - }); -} - -async function getResponseData(response) { - const contentType = response.headers.get("content-type"); - - if (/application\/json/.test(contentType)) { - return response.json(); - } - - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); - } - - return getBufferResponse(response); -} - -function toErrorMessage(data) { - if (typeof data === "string") return data; // istanbul ignore else - just in case - - if ("message" in data) { - if (Array.isArray(data.errors)) { - return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}`; - } - - return data.message; - } // istanbul ignore next - just in case - - - return `Unknown error: ${JSON.stringify(data)}`; -} - -function withDefaults(oldEndpoint, newDefaults) { - const endpoint = oldEndpoint.defaults(newDefaults); - - const newApi = function (route, parameters) { - const endpointOptions = endpoint.merge(route, parameters); - - if (!endpointOptions.request || !endpointOptions.request.hook) { - return fetchWrapper(endpoint.parse(endpointOptions)); - } - - const request = (route, parameters) => { - return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters))); - }; - - Object.assign(request, { - endpoint, - defaults: withDefaults.bind(null, endpoint) - }); - return endpointOptions.request.hook(request, endpointOptions); - }; - - return Object.assign(newApi, { - endpoint, - defaults: withDefaults.bind(null, endpoint) - }); -} - -const request = withDefaults(endpoint.endpoint, { - headers: { - "user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}` - } -}); - -exports.request = request; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 5526: -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0; -class BasicCredentialHandler { - constructor(username, password) { - this.username = username; - this.password = password; - } - prepareRequest(options) { - if (!options.headers) { - throw Error('The request has no headers'); - } - options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`; - } - // This handler cannot handle 401 - canHandleAuthentication() { - return false; - } - handleAuthentication() { - return __awaiter(this, void 0, void 0, function* () { - throw new Error('not implemented'); - }); - } -} -exports.BasicCredentialHandler = BasicCredentialHandler; -class BearerCredentialHandler { - constructor(token) { - this.token = token; - } - // currently implements pre-authorization - // TODO: support preAuth = false where it hooks on 401 - prepareRequest(options) { - if (!options.headers) { - throw Error('The request has no headers'); - } - options.headers['Authorization'] = `Bearer ${this.token}`; - } - // This handler cannot handle 401 - canHandleAuthentication() { - return false; - } - handleAuthentication() { - return __awaiter(this, void 0, void 0, function* () { - throw new Error('not implemented'); - }); - } -} -exports.BearerCredentialHandler = BearerCredentialHandler; -class PersonalAccessTokenCredentialHandler { - constructor(token) { - this.token = token; - } - // currently implements pre-authorization - // TODO: support preAuth = false where it hooks on 401 - prepareRequest(options) { - if (!options.headers) { - throw Error('The request has no headers'); - } - options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`; - } - // This handler cannot handle 401 - canHandleAuthentication() { - return false; - } - handleAuthentication() { - return __awaiter(this, void 0, void 0, function* () { - throw new Error('not implemented'); - }); - } -} -exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; -//# sourceMappingURL=auth.js.map - -/***/ }), - -/***/ 6255: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"use strict"; - -/* eslint-disable @typescript-eslint/no-explicit-any */ -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0; -const http = __importStar(__nccwpck_require__(3685)); -const https = __importStar(__nccwpck_require__(5687)); -const pm = __importStar(__nccwpck_require__(9835)); -const tunnel = __importStar(__nccwpck_require__(4294)); -var HttpCodes; -(function (HttpCodes) { - HttpCodes[HttpCodes["OK"] = 200] = "OK"; - HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; - HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; - HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; - HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; - HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; - HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; - HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; - HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; - HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; - HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; - HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; - HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; - HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; - HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; - HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; - HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; - HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; - HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; - HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; - HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; - HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; - HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; - HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; - HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; - HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; - HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; -})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); -var Headers; -(function (Headers) { - Headers["Accept"] = "accept"; - Headers["ContentType"] = "content-type"; -})(Headers = exports.Headers || (exports.Headers = {})); -var MediaTypes; -(function (MediaTypes) { - MediaTypes["ApplicationJson"] = "application/json"; -})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); -/** - * Returns the proxy URL, depending upon the supplied url and proxy environment variables. - * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com - */ -function getProxyUrl(serverUrl) { - const proxyUrl = pm.getProxyUrl(new URL(serverUrl)); - return proxyUrl ? proxyUrl.href : ''; -} -exports.getProxyUrl = getProxyUrl; -const HttpRedirectCodes = [ - HttpCodes.MovedPermanently, - HttpCodes.ResourceMoved, - HttpCodes.SeeOther, - HttpCodes.TemporaryRedirect, - HttpCodes.PermanentRedirect -]; -const HttpResponseRetryCodes = [ - HttpCodes.BadGateway, - HttpCodes.ServiceUnavailable, - HttpCodes.GatewayTimeout -]; -const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; -const ExponentialBackoffCeiling = 10; -const ExponentialBackoffTimeSlice = 5; -class HttpClientError extends Error { - constructor(message, statusCode) { - super(message); - this.name = 'HttpClientError'; - this.statusCode = statusCode; - Object.setPrototypeOf(this, HttpClientError.prototype); - } -} -exports.HttpClientError = HttpClientError; -class HttpClientResponse { - constructor(message) { - this.message = message; - } - readBody() { - return __awaiter(this, void 0, void 0, function* () { - return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { - let output = Buffer.alloc(0); - this.message.on('data', (chunk) => { - output = Buffer.concat([output, chunk]); - }); - this.message.on('end', () => { - resolve(output.toString()); - }); - })); - }); - } -} -exports.HttpClientResponse = HttpClientResponse; -function isHttps(requestUrl) { - const parsedUrl = new URL(requestUrl); - return parsedUrl.protocol === 'https:'; -} -exports.isHttps = isHttps; -class HttpClient { - constructor(userAgent, handlers, requestOptions) { - this._ignoreSslError = false; - this._allowRedirects = true; - this._allowRedirectDowngrade = false; - this._maxRedirects = 50; - this._allowRetries = false; - this._maxRetries = 1; - this._keepAlive = false; - this._disposed = false; - this.userAgent = userAgent; - this.handlers = handlers || []; - this.requestOptions = requestOptions; - if (requestOptions) { - if (requestOptions.ignoreSslError != null) { - this._ignoreSslError = requestOptions.ignoreSslError; - } - this._socketTimeout = requestOptions.socketTimeout; - if (requestOptions.allowRedirects != null) { - this._allowRedirects = requestOptions.allowRedirects; - } - if (requestOptions.allowRedirectDowngrade != null) { - this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; - } - if (requestOptions.maxRedirects != null) { - this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); - } - if (requestOptions.keepAlive != null) { - this._keepAlive = requestOptions.keepAlive; - } - if (requestOptions.allowRetries != null) { - this._allowRetries = requestOptions.allowRetries; - } - if (requestOptions.maxRetries != null) { - this._maxRetries = requestOptions.maxRetries; - } - } - } - options(requestUrl, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); - }); - } - get(requestUrl, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request('GET', requestUrl, null, additionalHeaders || {}); - }); - } - del(requestUrl, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request('DELETE', requestUrl, null, additionalHeaders || {}); - }); - } - post(requestUrl, data, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request('POST', requestUrl, data, additionalHeaders || {}); - }); - } - patch(requestUrl, data, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request('PATCH', requestUrl, data, additionalHeaders || {}); - }); - } - put(requestUrl, data, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request('PUT', requestUrl, data, additionalHeaders || {}); - }); - } - head(requestUrl, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request('HEAD', requestUrl, null, additionalHeaders || {}); - }); - } - sendStream(verb, requestUrl, stream, additionalHeaders) { - return __awaiter(this, void 0, void 0, function* () { - return this.request(verb, requestUrl, stream, additionalHeaders); - }); - } - /** - * Gets a typed object from an endpoint - * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise - */ - getJson(requestUrl, additionalHeaders = {}) { - return __awaiter(this, void 0, void 0, function* () { - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - const res = yield this.get(requestUrl, additionalHeaders); - return this._processResponse(res, this.requestOptions); - }); - } - postJson(requestUrl, obj, additionalHeaders = {}) { - return __awaiter(this, void 0, void 0, function* () { - const data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - const res = yield this.post(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); - }); - } - putJson(requestUrl, obj, additionalHeaders = {}) { - return __awaiter(this, void 0, void 0, function* () { - const data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - const res = yield this.put(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); - }); - } - patchJson(requestUrl, obj, additionalHeaders = {}) { - return __awaiter(this, void 0, void 0, function* () { - const data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - const res = yield this.patch(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); - }); - } - /** - * Makes a raw http request. - * All other methods such as get, post, patch, and request ultimately call this. - * Prefer get, del, post and patch - */ - request(verb, requestUrl, data, headers) { - return __awaiter(this, void 0, void 0, function* () { - if (this._disposed) { - throw new Error('Client has already been disposed.'); - } - const parsedUrl = new URL(requestUrl); - let info = this._prepareRequest(verb, parsedUrl, headers); - // Only perform retries on reads since writes may not be idempotent. - const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) - ? this._maxRetries + 1 - : 1; - let numTries = 0; - let response; - do { - response = yield this.requestRaw(info, data); - // Check if it's an authentication challenge - if (response && - response.message && - response.message.statusCode === HttpCodes.Unauthorized) { - let authenticationHandler; - for (const handler of this.handlers) { - if (handler.canHandleAuthentication(response)) { - authenticationHandler = handler; - break; - } - } - if (authenticationHandler) { - return authenticationHandler.handleAuthentication(this, info, data); - } - else { - // We have received an unauthorized response but have no handlers to handle it. - // Let the response return to the caller. - return response; - } - } - let redirectsRemaining = this._maxRedirects; - while (response.message.statusCode && - HttpRedirectCodes.includes(response.message.statusCode) && - this._allowRedirects && - redirectsRemaining > 0) { - const redirectUrl = response.message.headers['location']; - if (!redirectUrl) { - // if there's no location to redirect to, we won't - break; - } - const parsedRedirectUrl = new URL(redirectUrl); - if (parsedUrl.protocol === 'https:' && - parsedUrl.protocol !== parsedRedirectUrl.protocol && - !this._allowRedirectDowngrade) { - throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); - } - // we need to finish reading the response before reassigning response - // which will leak the open socket. - yield response.readBody(); - // strip authorization header if redirected to a different hostname - if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { - for (const header in headers) { - // header names are case insensitive - if (header.toLowerCase() === 'authorization') { - delete headers[header]; - } - } - } - // let's make the request with the new redirectUrl - info = this._prepareRequest(verb, parsedRedirectUrl, headers); - response = yield this.requestRaw(info, data); - redirectsRemaining--; - } - if (!response.message.statusCode || - !HttpResponseRetryCodes.includes(response.message.statusCode)) { - // If not a retry code, return immediately instead of retrying - return response; - } - numTries += 1; - if (numTries < maxTries) { - yield response.readBody(); - yield this._performExponentialBackoff(numTries); - } - } while (numTries < maxTries); - return response; - }); - } - /** - * Needs to be called if keepAlive is set to true in request options. - */ - dispose() { - if (this._agent) { - this._agent.destroy(); - } - this._disposed = true; - } - /** - * Raw request. - * @param info - * @param data - */ - requestRaw(info, data) { - return __awaiter(this, void 0, void 0, function* () { - return new Promise((resolve, reject) => { - function callbackForResult(err, res) { - if (err) { - reject(err); - } - else if (!res) { - // If `err` is not passed, then `res` must be passed. - reject(new Error('Unknown error')); - } - else { - resolve(res); - } - } - this.requestRawWithCallback(info, data, callbackForResult); - }); - }); - } - /** - * Raw request with callback. - * @param info - * @param data - * @param onResult - */ - requestRawWithCallback(info, data, onResult) { - if (typeof data === 'string') { - if (!info.options.headers) { - info.options.headers = {}; - } - info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); - } - let callbackCalled = false; - function handleResult(err, res) { - if (!callbackCalled) { - callbackCalled = true; - onResult(err, res); - } - } - const req = info.httpModule.request(info.options, (msg) => { - const res = new HttpClientResponse(msg); - handleResult(undefined, res); - }); - let socket; - req.on('socket', sock => { - socket = sock; - }); - // If we ever get disconnected, we want the socket to timeout eventually - req.setTimeout(this._socketTimeout || 3 * 60000, () => { - if (socket) { - socket.end(); - } - handleResult(new Error(`Request timeout: ${info.options.path}`)); - }); - req.on('error', function (err) { - // err has statusCode property - // res should have headers - handleResult(err); - }); - if (data && typeof data === 'string') { - req.write(data, 'utf8'); - } - if (data && typeof data !== 'string') { - data.on('close', function () { - req.end(); - }); - data.pipe(req); - } - else { - req.end(); - } - } - /** - * Gets an http agent. This function is useful when you need an http agent that handles - * routing through a proxy server - depending upon the url and proxy environment variables. - * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com - */ - getAgent(serverUrl) { - const parsedUrl = new URL(serverUrl); - return this._getAgent(parsedUrl); - } - _prepareRequest(method, requestUrl, headers) { - const info = {}; - info.parsedUrl = requestUrl; - const usingSsl = info.parsedUrl.protocol === 'https:'; - info.httpModule = usingSsl ? https : http; - const defaultPort = usingSsl ? 443 : 80; - info.options = {}; - info.options.host = info.parsedUrl.hostname; - info.options.port = info.parsedUrl.port - ? parseInt(info.parsedUrl.port) - : defaultPort; - info.options.path = - (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); - info.options.method = method; - info.options.headers = this._mergeHeaders(headers); - if (this.userAgent != null) { - info.options.headers['user-agent'] = this.userAgent; - } - info.options.agent = this._getAgent(info.parsedUrl); - // gives handlers an opportunity to participate - if (this.handlers) { - for (const handler of this.handlers) { - handler.prepareRequest(info.options); - } - } - return info; - } - _mergeHeaders(headers) { - if (this.requestOptions && this.requestOptions.headers) { - return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {})); - } - return lowercaseKeys(headers || {}); - } - _getExistingOrDefaultHeader(additionalHeaders, header, _default) { - let clientHeader; - if (this.requestOptions && this.requestOptions.headers) { - clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; - } - return additionalHeaders[header] || clientHeader || _default; - } - _getAgent(parsedUrl) { - let agent; - const proxyUrl = pm.getProxyUrl(parsedUrl); - const useProxy = proxyUrl && proxyUrl.hostname; - if (this._keepAlive && useProxy) { - agent = this._proxyAgent; - } - if (this._keepAlive && !useProxy) { - agent = this._agent; - } - // if agent is already assigned use that agent. - if (agent) { - return agent; - } - const usingSsl = parsedUrl.protocol === 'https:'; - let maxSockets = 100; - if (this.requestOptions) { - maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; - } - // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis. - if (proxyUrl && proxyUrl.hostname) { - const agentOptions = { - maxSockets, - keepAlive: this._keepAlive, - proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && { - proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` - })), { host: proxyUrl.hostname, port: proxyUrl.port }) - }; - let tunnelAgent; - const overHttps = proxyUrl.protocol === 'https:'; - if (usingSsl) { - tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; - } - else { - tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; - } - agent = tunnelAgent(agentOptions); - this._proxyAgent = agent; - } - // if reusing agent across request and tunneling agent isn't assigned create a new agent - if (this._keepAlive && !agent) { - const options = { keepAlive: this._keepAlive, maxSockets }; - agent = usingSsl ? new https.Agent(options) : new http.Agent(options); - this._agent = agent; - } - // if not using private agent and tunnel agent isn't setup then use global agent - if (!agent) { - agent = usingSsl ? https.globalAgent : http.globalAgent; - } - if (usingSsl && this._ignoreSslError) { - // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process - // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options - // we have to cast it to any and change it directly - agent.options = Object.assign(agent.options || {}, { - rejectUnauthorized: false - }); - } - return agent; - } - _performExponentialBackoff(retryNumber) { - return __awaiter(this, void 0, void 0, function* () { - retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); - const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); - return new Promise(resolve => setTimeout(() => resolve(), ms)); - }); - } - _processResponse(res, options) { - return __awaiter(this, void 0, void 0, function* () { - return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { - const statusCode = res.message.statusCode || 0; - const response = { - statusCode, - result: null, - headers: {} - }; - // not found leads to null obj returned - if (statusCode === HttpCodes.NotFound) { - resolve(response); - } - // get the result from the body - function dateTimeDeserializer(key, value) { - if (typeof value === 'string') { - const a = new Date(value); - if (!isNaN(a.valueOf())) { - return a; - } - } - return value; - } - let obj; - let contents; - try { - contents = yield res.readBody(); - if (contents && contents.length > 0) { - if (options && options.deserializeDates) { - obj = JSON.parse(contents, dateTimeDeserializer); - } - else { - obj = JSON.parse(contents); - } - response.result = obj; - } - response.headers = res.message.headers; - } - catch (err) { - // Invalid resource (contents not json); leaving result obj null - } - // note that 3xx redirects are handled by the http layer. - if (statusCode > 299) { - let msg; - // if exception/error in body, attempt to get better error - if (obj && obj.message) { - msg = obj.message; - } - else if (contents && contents.length > 0) { - // it may be the case that the exception is in the body message as string - msg = contents; - } - else { - msg = `Failed request: (${statusCode})`; - } - const err = new HttpClientError(msg, statusCode); - err.result = response.result; - reject(err); - } - else { - resolve(response); - } - })); - }); - } -} -exports.HttpClient = HttpClient; -const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); -//# sourceMappingURL=index.js.map - -/***/ }), - -/***/ 9835: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.checkBypass = exports.getProxyUrl = void 0; -function getProxyUrl(reqUrl) { - const usingSsl = reqUrl.protocol === 'https:'; - if (checkBypass(reqUrl)) { - return undefined; - } - const proxyVar = (() => { - if (usingSsl) { - return process.env['https_proxy'] || process.env['HTTPS_PROXY']; - } - else { - return process.env['http_proxy'] || process.env['HTTP_PROXY']; - } - })(); - if (proxyVar) { - return new URL(proxyVar); - } - else { - return undefined; - } -} -exports.getProxyUrl = getProxyUrl; -function checkBypass(reqUrl) { - if (!reqUrl.hostname) { - return false; - } - const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; - if (!noProxy) { - return false; - } - // Determine the request port - let reqPort; - if (reqUrl.port) { - reqPort = Number(reqUrl.port); - } - else if (reqUrl.protocol === 'http:') { - reqPort = 80; - } - else if (reqUrl.protocol === 'https:') { - reqPort = 443; - } - // Format the request hostname and hostname with port - const upperReqHosts = [reqUrl.hostname.toUpperCase()]; - if (typeof reqPort === 'number') { - upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); - } - // Compare request host against noproxy - for (const upperNoProxyItem of noProxy - .split(',') - .map(x => x.trim().toUpperCase()) - .filter(x => x)) { - if (upperReqHosts.some(x => x === upperNoProxyItem)) { - return true; - } - } - return false; -} -exports.checkBypass = checkBypass; -//# sourceMappingURL=proxy.js.map - -/***/ }), - -/***/ 3044: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - - if (enumerableOnly) { - symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - } - - keys.push.apply(keys, symbols); - } - - return keys; -} - -function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -const Endpoints = { - actions: { - addCustomLabelsToSelfHostedRunnerForOrg: ["POST /orgs/{org}/actions/runners/{runner_id}/labels"], - addCustomLabelsToSelfHostedRunnerForRepo: ["POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"], - addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"], - approveWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"], - cancelWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"], - createOrUpdateEnvironmentSecret: ["PUT /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"], - createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"], - createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"], - createRegistrationTokenForOrg: ["POST /orgs/{org}/actions/runners/registration-token"], - createRegistrationTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/registration-token"], - createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"], - createRemoveTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/remove-token"], - createWorkflowDispatch: ["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"], - deleteActionsCacheById: ["DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}"], - deleteActionsCacheByKey: ["DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}"], - deleteArtifact: ["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], - deleteEnvironmentSecret: ["DELETE /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"], - deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"], - deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"], - deleteSelfHostedRunnerFromOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}"], - deleteSelfHostedRunnerFromRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"], - deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"], - deleteWorkflowRunLogs: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"], - disableSelectedRepositoryGithubActionsOrganization: ["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"], - disableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"], - downloadArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"], - downloadJobLogsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"], - downloadWorkflowRunAttemptLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs"], - downloadWorkflowRunLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"], - enableSelectedRepositoryGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"], - enableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"], - getActionsCacheList: ["GET /repos/{owner}/{repo}/actions/caches"], - getActionsCacheUsage: ["GET /repos/{owner}/{repo}/actions/cache/usage"], - getActionsCacheUsageByRepoForOrg: ["GET /orgs/{org}/actions/cache/usage-by-repository"], - getActionsCacheUsageForEnterprise: ["GET /enterprises/{enterprise}/actions/cache/usage"], - getActionsCacheUsageForOrg: ["GET /orgs/{org}/actions/cache/usage"], - getAllowedActionsOrganization: ["GET /orgs/{org}/actions/permissions/selected-actions"], - getAllowedActionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"], - getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], - getEnvironmentPublicKey: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key"], - getEnvironmentSecret: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"], - getGithubActionsDefaultWorkflowPermissionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/workflow"], - getGithubActionsDefaultWorkflowPermissionsOrganization: ["GET /orgs/{org}/actions/permissions/workflow"], - getGithubActionsDefaultWorkflowPermissionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions/workflow"], - getGithubActionsPermissionsOrganization: ["GET /orgs/{org}/actions/permissions"], - getGithubActionsPermissionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions"], - getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"], - getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"], - getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"], - getPendingDeploymentsForRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"], - getRepoPermissions: ["GET /repos/{owner}/{repo}/actions/permissions", {}, { - renamed: ["actions", "getGithubActionsPermissionsRepository"] - }], - getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"], - getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"], - getReviewsForRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"], - getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"], - getSelfHostedRunnerForRepo: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"], - getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"], - getWorkflowAccessToRepository: ["GET /repos/{owner}/{repo}/actions/permissions/access"], - getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"], - getWorkflowRunAttempt: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}"], - getWorkflowRunUsage: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"], - getWorkflowUsage: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"], - listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"], - listEnvironmentSecrets: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets"], - listJobsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"], - listJobsForWorkflowRunAttempt: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs"], - listLabelsForSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}/labels"], - listLabelsForSelfHostedRunnerForRepo: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"], - listOrgSecrets: ["GET /orgs/{org}/actions/secrets"], - listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"], - listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"], - listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"], - listRunnerApplicationsForRepo: ["GET /repos/{owner}/{repo}/actions/runners/downloads"], - listSelectedReposForOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"], - listSelectedRepositoriesEnabledGithubActionsOrganization: ["GET /orgs/{org}/actions/permissions/repositories"], - listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"], - listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"], - listWorkflowRunArtifacts: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"], - listWorkflowRuns: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"], - listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"], - reRunJobForWorkflowRun: ["POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun"], - reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"], - reRunWorkflowFailedJobs: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs"], - removeAllCustomLabelsFromSelfHostedRunnerForOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}/labels"], - removeAllCustomLabelsFromSelfHostedRunnerForRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"], - removeCustomLabelFromSelfHostedRunnerForOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}"], - removeCustomLabelFromSelfHostedRunnerForRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"], - removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"], - reviewPendingDeploymentsForRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"], - setAllowedActionsOrganization: ["PUT /orgs/{org}/actions/permissions/selected-actions"], - setAllowedActionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"], - setCustomLabelsForSelfHostedRunnerForOrg: ["PUT /orgs/{org}/actions/runners/{runner_id}/labels"], - setCustomLabelsForSelfHostedRunnerForRepo: ["PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"], - setGithubActionsDefaultWorkflowPermissionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/workflow"], - setGithubActionsDefaultWorkflowPermissionsOrganization: ["PUT /orgs/{org}/actions/permissions/workflow"], - setGithubActionsDefaultWorkflowPermissionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/workflow"], - setGithubActionsPermissionsOrganization: ["PUT /orgs/{org}/actions/permissions"], - setGithubActionsPermissionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions"], - setSelectedReposForOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"], - setSelectedRepositoriesEnabledGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories"], - setWorkflowAccessToRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/access"] - }, - activity: { - checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"], - deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"], - deleteThreadSubscription: ["DELETE /notifications/threads/{thread_id}/subscription"], - getFeeds: ["GET /feeds"], - getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"], - getThread: ["GET /notifications/threads/{thread_id}"], - getThreadSubscriptionForAuthenticatedUser: ["GET /notifications/threads/{thread_id}/subscription"], - listEventsForAuthenticatedUser: ["GET /users/{username}/events"], - listNotificationsForAuthenticatedUser: ["GET /notifications"], - listOrgEventsForAuthenticatedUser: ["GET /users/{username}/events/orgs/{org}"], - listPublicEvents: ["GET /events"], - listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"], - listPublicEventsForUser: ["GET /users/{username}/events/public"], - listPublicOrgEvents: ["GET /orgs/{org}/events"], - listReceivedEventsForUser: ["GET /users/{username}/received_events"], - listReceivedPublicEventsForUser: ["GET /users/{username}/received_events/public"], - listRepoEvents: ["GET /repos/{owner}/{repo}/events"], - listRepoNotificationsForAuthenticatedUser: ["GET /repos/{owner}/{repo}/notifications"], - listReposStarredByAuthenticatedUser: ["GET /user/starred"], - listReposStarredByUser: ["GET /users/{username}/starred"], - listReposWatchedByUser: ["GET /users/{username}/subscriptions"], - listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"], - listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"], - listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], - markNotificationsAsRead: ["PUT /notifications"], - markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], - markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], - setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], - setThreadSubscription: ["PUT /notifications/threads/{thread_id}/subscription"], - starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"], - unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"] - }, - apps: { - addRepoToInstallation: ["PUT /user/installations/{installation_id}/repositories/{repository_id}", {}, { - renamed: ["apps", "addRepoToInstallationForAuthenticatedUser"] - }], - addRepoToInstallationForAuthenticatedUser: ["PUT /user/installations/{installation_id}/repositories/{repository_id}"], - checkToken: ["POST /applications/{client_id}/token"], - createFromManifest: ["POST /app-manifests/{code}/conversions"], - createInstallationAccessToken: ["POST /app/installations/{installation_id}/access_tokens"], - deleteAuthorization: ["DELETE /applications/{client_id}/grant"], - deleteInstallation: ["DELETE /app/installations/{installation_id}"], - deleteToken: ["DELETE /applications/{client_id}/token"], - getAuthenticated: ["GET /app"], - getBySlug: ["GET /apps/{app_slug}"], - getInstallation: ["GET /app/installations/{installation_id}"], - getOrgInstallation: ["GET /orgs/{org}/installation"], - getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"], - getSubscriptionPlanForAccount: ["GET /marketplace_listing/accounts/{account_id}"], - getSubscriptionPlanForAccountStubbed: ["GET /marketplace_listing/stubbed/accounts/{account_id}"], - getUserInstallation: ["GET /users/{username}/installation"], - getWebhookConfigForApp: ["GET /app/hook/config"], - getWebhookDelivery: ["GET /app/hook/deliveries/{delivery_id}"], - listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"], - listAccountsForPlanStubbed: ["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"], - listInstallationReposForAuthenticatedUser: ["GET /user/installations/{installation_id}/repositories"], - listInstallations: ["GET /app/installations"], - listInstallationsForAuthenticatedUser: ["GET /user/installations"], - listPlans: ["GET /marketplace_listing/plans"], - listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"], - listReposAccessibleToInstallation: ["GET /installation/repositories"], - listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"], - listSubscriptionsForAuthenticatedUserStubbed: ["GET /user/marketplace_purchases/stubbed"], - listWebhookDeliveries: ["GET /app/hook/deliveries"], - redeliverWebhookDelivery: ["POST /app/hook/deliveries/{delivery_id}/attempts"], - removeRepoFromInstallation: ["DELETE /user/installations/{installation_id}/repositories/{repository_id}", {}, { - renamed: ["apps", "removeRepoFromInstallationForAuthenticatedUser"] - }], - removeRepoFromInstallationForAuthenticatedUser: ["DELETE /user/installations/{installation_id}/repositories/{repository_id}"], - resetToken: ["PATCH /applications/{client_id}/token"], - revokeInstallationAccessToken: ["DELETE /installation/token"], - scopeToken: ["POST /applications/{client_id}/token/scoped"], - suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"], - unsuspendInstallation: ["DELETE /app/installations/{installation_id}/suspended"], - updateWebhookConfigForApp: ["PATCH /app/hook/config"] - }, - billing: { - getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"], - getGithubActionsBillingUser: ["GET /users/{username}/settings/billing/actions"], - getGithubAdvancedSecurityBillingGhe: ["GET /enterprises/{enterprise}/settings/billing/advanced-security"], - getGithubAdvancedSecurityBillingOrg: ["GET /orgs/{org}/settings/billing/advanced-security"], - getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"], - getGithubPackagesBillingUser: ["GET /users/{username}/settings/billing/packages"], - getSharedStorageBillingOrg: ["GET /orgs/{org}/settings/billing/shared-storage"], - getSharedStorageBillingUser: ["GET /users/{username}/settings/billing/shared-storage"] - }, - checks: { - create: ["POST /repos/{owner}/{repo}/check-runs"], - createSuite: ["POST /repos/{owner}/{repo}/check-suites"], - get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"], - getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"], - listAnnotations: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"], - listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"], - listForSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"], - listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"], - rerequestRun: ["POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest"], - rerequestSuite: ["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"], - setSuitesPreferences: ["PATCH /repos/{owner}/{repo}/check-suites/preferences"], - update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"] - }, - codeScanning: { - deleteAnalysis: ["DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"], - getAlert: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}", {}, { - renamedParameters: { - alert_id: "alert_number" - } - }], - getAnalysis: ["GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"], - getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"], - listAlertInstances: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"], - listAlertsForOrg: ["GET /orgs/{org}/code-scanning/alerts"], - listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"], - listAlertsInstances: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", {}, { - renamed: ["codeScanning", "listAlertInstances"] - }], - listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"], - updateAlert: ["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"], - uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"] - }, - codesOfConduct: { - getAllCodesOfConduct: ["GET /codes_of_conduct"], - getConductCode: ["GET /codes_of_conduct/{key}"] - }, - codespaces: { - addRepositoryForSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"], - codespaceMachinesForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}/machines"], - createForAuthenticatedUser: ["POST /user/codespaces"], - createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"], - createOrUpdateSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}"], - createWithPrForAuthenticatedUser: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces"], - createWithRepoForAuthenticatedUser: ["POST /repos/{owner}/{repo}/codespaces"], - deleteForAuthenticatedUser: ["DELETE /user/codespaces/{codespace_name}"], - deleteFromOrganization: ["DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}"], - deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"], - deleteSecretForAuthenticatedUser: ["DELETE /user/codespaces/secrets/{secret_name}"], - exportForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/exports"], - getExportDetailsForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}/exports/{export_id}"], - getForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}"], - getPublicKeyForAuthenticatedUser: ["GET /user/codespaces/secrets/public-key"], - getRepoPublicKey: ["GET /repos/{owner}/{repo}/codespaces/secrets/public-key"], - getRepoSecret: ["GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"], - getSecretForAuthenticatedUser: ["GET /user/codespaces/secrets/{secret_name}"], - listDevcontainersInRepositoryForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces/devcontainers"], - listForAuthenticatedUser: ["GET /user/codespaces"], - listInOrganization: ["GET /orgs/{org}/codespaces", {}, { - renamedParameters: { - org_id: "org" - } - }], - listInRepositoryForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces"], - listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"], - listRepositoriesForSecretForAuthenticatedUser: ["GET /user/codespaces/secrets/{secret_name}/repositories"], - listSecretsForAuthenticatedUser: ["GET /user/codespaces/secrets"], - removeRepositoryForSecretForAuthenticatedUser: ["DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"], - repoMachinesForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces/machines"], - setRepositoriesForSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}/repositories"], - startForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/start"], - stopForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/stop"], - stopInOrganization: ["POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop"], - updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"] - }, - dependabot: { - addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"], - createOrUpdateOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}"], - createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"], - deleteOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"], - deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"], - getOrgPublicKey: ["GET /orgs/{org}/dependabot/secrets/public-key"], - getOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}"], - getRepoPublicKey: ["GET /repos/{owner}/{repo}/dependabot/secrets/public-key"], - getRepoSecret: ["GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"], - listOrgSecrets: ["GET /orgs/{org}/dependabot/secrets"], - listRepoSecrets: ["GET /repos/{owner}/{repo}/dependabot/secrets"], - listSelectedReposForOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories"], - removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"], - setSelectedReposForOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories"] - }, - dependencyGraph: { - createRepositorySnapshot: ["POST /repos/{owner}/{repo}/dependency-graph/snapshots"], - diffRange: ["GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}"] - }, - emojis: { - get: ["GET /emojis"] - }, - enterpriseAdmin: { - addCustomLabelsToSelfHostedRunnerForEnterprise: ["POST /enterprises/{enterprise}/actions/runners/{runner_id}/labels"], - disableSelectedOrganizationGithubActionsEnterprise: ["DELETE /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"], - enableSelectedOrganizationGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"], - getAllowedActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/selected-actions"], - getGithubActionsPermissionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions"], - getServerStatistics: ["GET /enterprise-installation/{enterprise_or_org}/server-statistics"], - listLabelsForSelfHostedRunnerForEnterprise: ["GET /enterprises/{enterprise}/actions/runners/{runner_id}/labels"], - listSelectedOrganizationsEnabledGithubActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/organizations"], - removeAllCustomLabelsFromSelfHostedRunnerForEnterprise: ["DELETE /enterprises/{enterprise}/actions/runners/{runner_id}/labels"], - removeCustomLabelFromSelfHostedRunnerForEnterprise: ["DELETE /enterprises/{enterprise}/actions/runners/{runner_id}/labels/{name}"], - setAllowedActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/selected-actions"], - setCustomLabelsForSelfHostedRunnerForEnterprise: ["PUT /enterprises/{enterprise}/actions/runners/{runner_id}/labels"], - setGithubActionsPermissionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions"], - setSelectedOrganizationsEnabledGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations"] - }, - gists: { - checkIsStarred: ["GET /gists/{gist_id}/star"], - create: ["POST /gists"], - createComment: ["POST /gists/{gist_id}/comments"], - delete: ["DELETE /gists/{gist_id}"], - deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"], - fork: ["POST /gists/{gist_id}/forks"], - get: ["GET /gists/{gist_id}"], - getComment: ["GET /gists/{gist_id}/comments/{comment_id}"], - getRevision: ["GET /gists/{gist_id}/{sha}"], - list: ["GET /gists"], - listComments: ["GET /gists/{gist_id}/comments"], - listCommits: ["GET /gists/{gist_id}/commits"], - listForUser: ["GET /users/{username}/gists"], - listForks: ["GET /gists/{gist_id}/forks"], - listPublic: ["GET /gists/public"], - listStarred: ["GET /gists/starred"], - star: ["PUT /gists/{gist_id}/star"], - unstar: ["DELETE /gists/{gist_id}/star"], - update: ["PATCH /gists/{gist_id}"], - updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"] - }, - git: { - createBlob: ["POST /repos/{owner}/{repo}/git/blobs"], - createCommit: ["POST /repos/{owner}/{repo}/git/commits"], - createRef: ["POST /repos/{owner}/{repo}/git/refs"], - createTag: ["POST /repos/{owner}/{repo}/git/tags"], - createTree: ["POST /repos/{owner}/{repo}/git/trees"], - deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"], - getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"], - getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"], - getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"], - getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"], - getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"], - listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"], - updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"] - }, - gitignore: { - getAllTemplates: ["GET /gitignore/templates"], - getTemplate: ["GET /gitignore/templates/{name}"] - }, - interactions: { - getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"], - getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"], - getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"], - getRestrictionsForYourPublicRepos: ["GET /user/interaction-limits", {}, { - renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] - }], - removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"], - removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"], - removeRestrictionsForRepo: ["DELETE /repos/{owner}/{repo}/interaction-limits"], - removeRestrictionsForYourPublicRepos: ["DELETE /user/interaction-limits", {}, { - renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] - }], - setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"], - setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"], - setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"], - setRestrictionsForYourPublicRepos: ["PUT /user/interaction-limits", {}, { - renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] - }] - }, - issues: { - addAssignees: ["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"], - addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"], - checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"], - create: ["POST /repos/{owner}/{repo}/issues"], - createComment: ["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"], - createLabel: ["POST /repos/{owner}/{repo}/labels"], - createMilestone: ["POST /repos/{owner}/{repo}/milestones"], - deleteComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"], - deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"], - deleteMilestone: ["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"], - get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"], - getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"], - getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"], - getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"], - getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"], - list: ["GET /issues"], - listAssignees: ["GET /repos/{owner}/{repo}/assignees"], - listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"], - listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"], - listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"], - listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"], - listEventsForTimeline: ["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline"], - listForAuthenticatedUser: ["GET /user/issues"], - listForOrg: ["GET /orgs/{org}/issues"], - listForRepo: ["GET /repos/{owner}/{repo}/issues"], - listLabelsForMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"], - listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"], - listLabelsOnIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"], - listMilestones: ["GET /repos/{owner}/{repo}/milestones"], - lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"], - removeAllLabels: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"], - removeAssignees: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"], - removeLabel: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"], - setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"], - unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"], - update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"], - updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"], - updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"], - updateMilestone: ["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"] - }, - licenses: { - get: ["GET /licenses/{license}"], - getAllCommonlyUsed: ["GET /licenses"], - getForRepo: ["GET /repos/{owner}/{repo}/license"] - }, - markdown: { - render: ["POST /markdown"], - renderRaw: ["POST /markdown/raw", { - headers: { - "content-type": "text/plain; charset=utf-8" - } - }] - }, - meta: { - get: ["GET /meta"], - getOctocat: ["GET /octocat"], - getZen: ["GET /zen"], - root: ["GET /"] - }, - migrations: { - cancelImport: ["DELETE /repos/{owner}/{repo}/import"], - deleteArchiveForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/archive"], - deleteArchiveForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/archive"], - downloadArchiveForOrg: ["GET /orgs/{org}/migrations/{migration_id}/archive"], - getArchiveForAuthenticatedUser: ["GET /user/migrations/{migration_id}/archive"], - getCommitAuthors: ["GET /repos/{owner}/{repo}/import/authors"], - getImportStatus: ["GET /repos/{owner}/{repo}/import"], - getLargeFiles: ["GET /repos/{owner}/{repo}/import/large_files"], - getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}"], - getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}"], - listForAuthenticatedUser: ["GET /user/migrations"], - listForOrg: ["GET /orgs/{org}/migrations"], - listReposForAuthenticatedUser: ["GET /user/migrations/{migration_id}/repositories"], - listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories"], - listReposForUser: ["GET /user/migrations/{migration_id}/repositories", {}, { - renamed: ["migrations", "listReposForAuthenticatedUser"] - }], - mapCommitAuthor: ["PATCH /repos/{owner}/{repo}/import/authors/{author_id}"], - setLfsPreference: ["PATCH /repos/{owner}/{repo}/import/lfs"], - startForAuthenticatedUser: ["POST /user/migrations"], - startForOrg: ["POST /orgs/{org}/migrations"], - startImport: ["PUT /repos/{owner}/{repo}/import"], - unlockRepoForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock"], - unlockRepoForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock"], - updateImport: ["PATCH /repos/{owner}/{repo}/import"] - }, - orgs: { - blockUser: ["PUT /orgs/{org}/blocks/{username}"], - cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], - checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], - checkMembershipForUser: ["GET /orgs/{org}/members/{username}"], - checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"], - convertMemberToOutsideCollaborator: ["PUT /orgs/{org}/outside_collaborators/{username}"], - createInvitation: ["POST /orgs/{org}/invitations"], - createWebhook: ["POST /orgs/{org}/hooks"], - deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], - get: ["GET /orgs/{org}"], - getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], - getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], - getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], - getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], - getWebhookDelivery: ["GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}"], - list: ["GET /organizations"], - listAppInstallations: ["GET /orgs/{org}/installations"], - listBlockedUsers: ["GET /orgs/{org}/blocks"], - listCustomRoles: ["GET /organizations/{organization_id}/custom_roles"], - listFailedInvitations: ["GET /orgs/{org}/failed_invitations"], - listForAuthenticatedUser: ["GET /user/orgs"], - listForUser: ["GET /users/{username}/orgs"], - listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], - listMembers: ["GET /orgs/{org}/members"], - listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], - listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], - listPendingInvitations: ["GET /orgs/{org}/invitations"], - listPublicMembers: ["GET /orgs/{org}/public_members"], - listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"], - listWebhooks: ["GET /orgs/{org}/hooks"], - pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], - redeliverWebhookDelivery: ["POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"], - removeMember: ["DELETE /orgs/{org}/members/{username}"], - removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"], - removeOutsideCollaborator: ["DELETE /orgs/{org}/outside_collaborators/{username}"], - removePublicMembershipForAuthenticatedUser: ["DELETE /orgs/{org}/public_members/{username}"], - setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], - setPublicMembershipForAuthenticatedUser: ["PUT /orgs/{org}/public_members/{username}"], - unblockUser: ["DELETE /orgs/{org}/blocks/{username}"], - update: ["PATCH /orgs/{org}"], - updateMembershipForAuthenticatedUser: ["PATCH /user/memberships/orgs/{org}"], - updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"], - updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"] - }, - packages: { - deletePackageForAuthenticatedUser: ["DELETE /user/packages/{package_type}/{package_name}"], - deletePackageForOrg: ["DELETE /orgs/{org}/packages/{package_type}/{package_name}"], - deletePackageForUser: ["DELETE /users/{username}/packages/{package_type}/{package_name}"], - deletePackageVersionForAuthenticatedUser: ["DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"], - deletePackageVersionForOrg: ["DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"], - deletePackageVersionForUser: ["DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"], - getAllPackageVersionsForAPackageOwnedByAnOrg: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions", {}, { - renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"] - }], - getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions", {}, { - renamed: ["packages", "getAllPackageVersionsForPackageOwnedByAuthenticatedUser"] - }], - getAllPackageVersionsForPackageOwnedByAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions"], - getAllPackageVersionsForPackageOwnedByOrg: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions"], - getAllPackageVersionsForPackageOwnedByUser: ["GET /users/{username}/packages/{package_type}/{package_name}/versions"], - getPackageForAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}"], - getPackageForOrganization: ["GET /orgs/{org}/packages/{package_type}/{package_name}"], - getPackageForUser: ["GET /users/{username}/packages/{package_type}/{package_name}"], - getPackageVersionForAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"], - getPackageVersionForOrganization: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"], - getPackageVersionForUser: ["GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"], - listPackagesForAuthenticatedUser: ["GET /user/packages"], - listPackagesForOrganization: ["GET /orgs/{org}/packages"], - listPackagesForUser: ["GET /users/{username}/packages"], - restorePackageForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/restore{?token}"], - restorePackageForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"], - restorePackageForUser: ["POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}"], - restorePackageVersionForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"], - restorePackageVersionForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"], - restorePackageVersionForUser: ["POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"] - }, - projects: { - addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}"], - createCard: ["POST /projects/columns/{column_id}/cards"], - createColumn: ["POST /projects/{project_id}/columns"], - createForAuthenticatedUser: ["POST /user/projects"], - createForOrg: ["POST /orgs/{org}/projects"], - createForRepo: ["POST /repos/{owner}/{repo}/projects"], - delete: ["DELETE /projects/{project_id}"], - deleteCard: ["DELETE /projects/columns/cards/{card_id}"], - deleteColumn: ["DELETE /projects/columns/{column_id}"], - get: ["GET /projects/{project_id}"], - getCard: ["GET /projects/columns/cards/{card_id}"], - getColumn: ["GET /projects/columns/{column_id}"], - getPermissionForUser: ["GET /projects/{project_id}/collaborators/{username}/permission"], - listCards: ["GET /projects/columns/{column_id}/cards"], - listCollaborators: ["GET /projects/{project_id}/collaborators"], - listColumns: ["GET /projects/{project_id}/columns"], - listForOrg: ["GET /orgs/{org}/projects"], - listForRepo: ["GET /repos/{owner}/{repo}/projects"], - listForUser: ["GET /users/{username}/projects"], - moveCard: ["POST /projects/columns/cards/{card_id}/moves"], - moveColumn: ["POST /projects/columns/{column_id}/moves"], - removeCollaborator: ["DELETE /projects/{project_id}/collaborators/{username}"], - update: ["PATCH /projects/{project_id}"], - updateCard: ["PATCH /projects/columns/cards/{card_id}"], - updateColumn: ["PATCH /projects/columns/{column_id}"] - }, - pulls: { - checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"], - create: ["POST /repos/{owner}/{repo}/pulls"], - createReplyForReviewComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"], - createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], - createReviewComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"], - deletePendingReview: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"], - deleteReviewComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"], - dismissReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"], - get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"], - getReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"], - getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"], - list: ["GET /repos/{owner}/{repo}/pulls"], - listCommentsForReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"], - listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"], - listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"], - listRequestedReviewers: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"], - listReviewComments: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"], - listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"], - listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], - merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"], - removeRequestedReviewers: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"], - requestReviewers: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"], - submitReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"], - update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"], - updateBranch: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch"], - updateReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"], - updateReviewComment: ["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"] - }, - rateLimit: { - get: ["GET /rate_limit"] - }, - reactions: { - createForCommitComment: ["POST /repos/{owner}/{repo}/comments/{comment_id}/reactions"], - createForIssue: ["POST /repos/{owner}/{repo}/issues/{issue_number}/reactions"], - createForIssueComment: ["POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"], - createForPullRequestReviewComment: ["POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"], - createForRelease: ["POST /repos/{owner}/{repo}/releases/{release_id}/reactions"], - createForTeamDiscussionCommentInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"], - createForTeamDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"], - deleteForCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}"], - deleteForIssue: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}"], - deleteForIssueComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}"], - deleteForPullRequestComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}"], - deleteForRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}"], - deleteForTeamDiscussion: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}"], - deleteForTeamDiscussionComment: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}"], - listForCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions"], - listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"], - listForIssueComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"], - listForPullRequestReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"], - listForRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}/reactions"], - listForTeamDiscussionCommentInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"], - listForTeamDiscussionInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"] - }, - repos: { - acceptInvitation: ["PATCH /user/repository_invitations/{invitation_id}", {}, { - renamed: ["repos", "acceptInvitationForAuthenticatedUser"] - }], - acceptInvitationForAuthenticatedUser: ["PATCH /user/repository_invitations/{invitation_id}"], - addAppAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, { - mapToData: "apps" - }], - addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"], - addStatusCheckContexts: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, { - mapToData: "contexts" - }], - addTeamAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, { - mapToData: "teams" - }], - addUserAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, { - mapToData: "users" - }], - checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"], - checkVulnerabilityAlerts: ["GET /repos/{owner}/{repo}/vulnerability-alerts"], - codeownersErrors: ["GET /repos/{owner}/{repo}/codeowners/errors"], - compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"], - compareCommitsWithBasehead: ["GET /repos/{owner}/{repo}/compare/{basehead}"], - createAutolink: ["POST /repos/{owner}/{repo}/autolinks"], - createCommitComment: ["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"], - createCommitSignatureProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"], - createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"], - createDeployKey: ["POST /repos/{owner}/{repo}/keys"], - createDeployment: ["POST /repos/{owner}/{repo}/deployments"], - createDeploymentStatus: ["POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"], - createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"], - createForAuthenticatedUser: ["POST /user/repos"], - createFork: ["POST /repos/{owner}/{repo}/forks"], - createInOrg: ["POST /orgs/{org}/repos"], - createOrUpdateEnvironment: ["PUT /repos/{owner}/{repo}/environments/{environment_name}"], - createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"], - createPagesSite: ["POST /repos/{owner}/{repo}/pages"], - createRelease: ["POST /repos/{owner}/{repo}/releases"], - createTagProtection: ["POST /repos/{owner}/{repo}/tags/protection"], - createUsingTemplate: ["POST /repos/{template_owner}/{template_repo}/generate"], - createWebhook: ["POST /repos/{owner}/{repo}/hooks"], - declineInvitation: ["DELETE /user/repository_invitations/{invitation_id}", {}, { - renamed: ["repos", "declineInvitationForAuthenticatedUser"] - }], - declineInvitationForAuthenticatedUser: ["DELETE /user/repository_invitations/{invitation_id}"], - delete: ["DELETE /repos/{owner}/{repo}"], - deleteAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"], - deleteAdminBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"], - deleteAnEnvironment: ["DELETE /repos/{owner}/{repo}/environments/{environment_name}"], - deleteAutolink: ["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"], - deleteBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"], - deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"], - deleteCommitSignatureProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"], - deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"], - deleteDeployment: ["DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"], - deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"], - deleteInvitation: ["DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"], - deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages"], - deletePullRequestReviewProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"], - deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"], - deleteReleaseAsset: ["DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"], - deleteTagProtection: ["DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}"], - deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"], - disableAutomatedSecurityFixes: ["DELETE /repos/{owner}/{repo}/automated-security-fixes"], - disableLfsForRepo: ["DELETE /repos/{owner}/{repo}/lfs"], - disableVulnerabilityAlerts: ["DELETE /repos/{owner}/{repo}/vulnerability-alerts"], - downloadArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}", {}, { - renamed: ["repos", "downloadZipballArchive"] - }], - downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"], - downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"], - enableAutomatedSecurityFixes: ["PUT /repos/{owner}/{repo}/automated-security-fixes"], - enableLfsForRepo: ["PUT /repos/{owner}/{repo}/lfs"], - enableVulnerabilityAlerts: ["PUT /repos/{owner}/{repo}/vulnerability-alerts"], - generateReleaseNotes: ["POST /repos/{owner}/{repo}/releases/generate-notes"], - get: ["GET /repos/{owner}/{repo}"], - getAccessRestrictions: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"], - getAdminBranchProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"], - getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"], - getAllStatusCheckContexts: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"], - getAllTopics: ["GET /repos/{owner}/{repo}/topics"], - getAppsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"], - getAutolink: ["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"], - getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"], - getBranchProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection"], - getClones: ["GET /repos/{owner}/{repo}/traffic/clones"], - getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"], - getCollaboratorPermissionLevel: ["GET /repos/{owner}/{repo}/collaborators/{username}/permission"], - getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"], - getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"], - getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"], - getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"], - getCommitSignatureProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"], - getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"], - getContent: ["GET /repos/{owner}/{repo}/contents/{path}"], - getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"], - getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"], - getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"], - getDeploymentStatus: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"], - getEnvironment: ["GET /repos/{owner}/{repo}/environments/{environment_name}"], - getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"], - getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"], - getPages: ["GET /repos/{owner}/{repo}/pages"], - getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"], - getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"], - getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"], - getPullRequestReviewProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"], - getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"], - getReadme: ["GET /repos/{owner}/{repo}/readme"], - getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"], - getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"], - getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"], - getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"], - getStatusChecksProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"], - getTeamsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"], - getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"], - getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"], - getUsersWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"], - getViews: ["GET /repos/{owner}/{repo}/traffic/views"], - getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"], - getWebhookConfigForRepo: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/config"], - getWebhookDelivery: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}"], - listAutolinks: ["GET /repos/{owner}/{repo}/autolinks"], - listBranches: ["GET /repos/{owner}/{repo}/branches"], - listBranchesForHeadCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head"], - listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"], - listCommentsForCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"], - listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"], - listCommitStatusesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/statuses"], - listCommits: ["GET /repos/{owner}/{repo}/commits"], - listContributors: ["GET /repos/{owner}/{repo}/contributors"], - listDeployKeys: ["GET /repos/{owner}/{repo}/keys"], - listDeploymentStatuses: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"], - listDeployments: ["GET /repos/{owner}/{repo}/deployments"], - listForAuthenticatedUser: ["GET /user/repos"], - listForOrg: ["GET /orgs/{org}/repos"], - listForUser: ["GET /users/{username}/repos"], - listForks: ["GET /repos/{owner}/{repo}/forks"], - listInvitations: ["GET /repos/{owner}/{repo}/invitations"], - listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"], - listLanguages: ["GET /repos/{owner}/{repo}/languages"], - listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"], - listPublic: ["GET /repositories"], - listPullRequestsAssociatedWithCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls"], - listReleaseAssets: ["GET /repos/{owner}/{repo}/releases/{release_id}/assets"], - listReleases: ["GET /repos/{owner}/{repo}/releases"], - listTagProtection: ["GET /repos/{owner}/{repo}/tags/protection"], - listTags: ["GET /repos/{owner}/{repo}/tags"], - listTeams: ["GET /repos/{owner}/{repo}/teams"], - listWebhookDeliveries: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries"], - listWebhooks: ["GET /repos/{owner}/{repo}/hooks"], - merge: ["POST /repos/{owner}/{repo}/merges"], - mergeUpstream: ["POST /repos/{owner}/{repo}/merge-upstream"], - pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"], - redeliverWebhookDelivery: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"], - removeAppAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, { - mapToData: "apps" - }], - removeCollaborator: ["DELETE /repos/{owner}/{repo}/collaborators/{username}"], - removeStatusCheckContexts: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, { - mapToData: "contexts" - }], - removeStatusCheckProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"], - removeTeamAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, { - mapToData: "teams" - }], - removeUserAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, { - mapToData: "users" - }], - renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"], - replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics"], - requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"], - setAdminBranchProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"], - setAppAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, { - mapToData: "apps" - }], - setStatusCheckContexts: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, { - mapToData: "contexts" - }], - setTeamAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, { - mapToData: "teams" - }], - setUserAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, { - mapToData: "users" - }], - testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"], - transfer: ["POST /repos/{owner}/{repo}/transfer"], - update: ["PATCH /repos/{owner}/{repo}"], - updateBranchProtection: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection"], - updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"], - updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"], - updateInvitation: ["PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"], - updatePullRequestReviewProtection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"], - updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"], - updateReleaseAsset: ["PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"], - updateStatusCheckPotection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks", {}, { - renamed: ["repos", "updateStatusCheckProtection"] - }], - updateStatusCheckProtection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"], - updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"], - updateWebhookConfigForRepo: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"], - uploadReleaseAsset: ["POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", { - baseUrl: "https://uploads.github.com" - }] - }, - search: { - code: ["GET /search/code"], - commits: ["GET /search/commits"], - issuesAndPullRequests: ["GET /search/issues"], - labels: ["GET /search/labels"], - repos: ["GET /search/repositories"], - topics: ["GET /search/topics"], - users: ["GET /search/users"] - }, - secretScanning: { - getAlert: ["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"], - listAlertsForEnterprise: ["GET /enterprises/{enterprise}/secret-scanning/alerts"], - listAlertsForOrg: ["GET /orgs/{org}/secret-scanning/alerts"], - listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"], - listLocationsForAlert: ["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations"], - updateAlert: ["PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"] - }, - teams: { - addOrUpdateMembershipForUserInOrg: ["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"], - addOrUpdateProjectPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}"], - addOrUpdateRepoPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"], - checkPermissionsForProjectInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects/{project_id}"], - checkPermissionsForRepoInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"], - create: ["POST /orgs/{org}/teams"], - createDiscussionCommentInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"], - createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"], - deleteDiscussionCommentInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"], - deleteDiscussionInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"], - deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"], - getByName: ["GET /orgs/{org}/teams/{team_slug}"], - getDiscussionCommentInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"], - getDiscussionInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"], - getMembershipForUserInOrg: ["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"], - list: ["GET /orgs/{org}/teams"], - listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"], - listDiscussionCommentsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"], - listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"], - listForAuthenticatedUser: ["GET /user/teams"], - listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"], - listPendingInvitationsInOrg: ["GET /orgs/{org}/teams/{team_slug}/invitations"], - listProjectsInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects"], - listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"], - removeMembershipForUserInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"], - removeProjectInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}"], - removeRepoInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"], - updateDiscussionCommentInOrg: ["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"], - updateDiscussionInOrg: ["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"], - updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"] - }, - users: { - addEmailForAuthenticated: ["POST /user/emails", {}, { - renamed: ["users", "addEmailForAuthenticatedUser"] - }], - addEmailForAuthenticatedUser: ["POST /user/emails"], - block: ["PUT /user/blocks/{username}"], - checkBlocked: ["GET /user/blocks/{username}"], - checkFollowingForUser: ["GET /users/{username}/following/{target_user}"], - checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"], - createGpgKeyForAuthenticated: ["POST /user/gpg_keys", {}, { - renamed: ["users", "createGpgKeyForAuthenticatedUser"] - }], - createGpgKeyForAuthenticatedUser: ["POST /user/gpg_keys"], - createPublicSshKeyForAuthenticated: ["POST /user/keys", {}, { - renamed: ["users", "createPublicSshKeyForAuthenticatedUser"] - }], - createPublicSshKeyForAuthenticatedUser: ["POST /user/keys"], - deleteEmailForAuthenticated: ["DELETE /user/emails", {}, { - renamed: ["users", "deleteEmailForAuthenticatedUser"] - }], - deleteEmailForAuthenticatedUser: ["DELETE /user/emails"], - deleteGpgKeyForAuthenticated: ["DELETE /user/gpg_keys/{gpg_key_id}", {}, { - renamed: ["users", "deleteGpgKeyForAuthenticatedUser"] - }], - deleteGpgKeyForAuthenticatedUser: ["DELETE /user/gpg_keys/{gpg_key_id}"], - deletePublicSshKeyForAuthenticated: ["DELETE /user/keys/{key_id}", {}, { - renamed: ["users", "deletePublicSshKeyForAuthenticatedUser"] - }], - deletePublicSshKeyForAuthenticatedUser: ["DELETE /user/keys/{key_id}"], - follow: ["PUT /user/following/{username}"], - getAuthenticated: ["GET /user"], - getByUsername: ["GET /users/{username}"], - getContextForUser: ["GET /users/{username}/hovercard"], - getGpgKeyForAuthenticated: ["GET /user/gpg_keys/{gpg_key_id}", {}, { - renamed: ["users", "getGpgKeyForAuthenticatedUser"] - }], - getGpgKeyForAuthenticatedUser: ["GET /user/gpg_keys/{gpg_key_id}"], - getPublicSshKeyForAuthenticated: ["GET /user/keys/{key_id}", {}, { - renamed: ["users", "getPublicSshKeyForAuthenticatedUser"] - }], - getPublicSshKeyForAuthenticatedUser: ["GET /user/keys/{key_id}"], - list: ["GET /users"], - listBlockedByAuthenticated: ["GET /user/blocks", {}, { - renamed: ["users", "listBlockedByAuthenticatedUser"] - }], - listBlockedByAuthenticatedUser: ["GET /user/blocks"], - listEmailsForAuthenticated: ["GET /user/emails", {}, { - renamed: ["users", "listEmailsForAuthenticatedUser"] - }], - listEmailsForAuthenticatedUser: ["GET /user/emails"], - listFollowedByAuthenticated: ["GET /user/following", {}, { - renamed: ["users", "listFollowedByAuthenticatedUser"] - }], - listFollowedByAuthenticatedUser: ["GET /user/following"], - listFollowersForAuthenticatedUser: ["GET /user/followers"], - listFollowersForUser: ["GET /users/{username}/followers"], - listFollowingForUser: ["GET /users/{username}/following"], - listGpgKeysForAuthenticated: ["GET /user/gpg_keys", {}, { - renamed: ["users", "listGpgKeysForAuthenticatedUser"] - }], - listGpgKeysForAuthenticatedUser: ["GET /user/gpg_keys"], - listGpgKeysForUser: ["GET /users/{username}/gpg_keys"], - listPublicEmailsForAuthenticated: ["GET /user/public_emails", {}, { - renamed: ["users", "listPublicEmailsForAuthenticatedUser"] - }], - listPublicEmailsForAuthenticatedUser: ["GET /user/public_emails"], - listPublicKeysForUser: ["GET /users/{username}/keys"], - listPublicSshKeysForAuthenticated: ["GET /user/keys", {}, { - renamed: ["users", "listPublicSshKeysForAuthenticatedUser"] - }], - listPublicSshKeysForAuthenticatedUser: ["GET /user/keys"], - setPrimaryEmailVisibilityForAuthenticated: ["PATCH /user/email/visibility", {}, { - renamed: ["users", "setPrimaryEmailVisibilityForAuthenticatedUser"] - }], - setPrimaryEmailVisibilityForAuthenticatedUser: ["PATCH /user/email/visibility"], - unblock: ["DELETE /user/blocks/{username}"], - unfollow: ["DELETE /user/following/{username}"], - updateAuthenticated: ["PATCH /user"] - } -}; - -const VERSION = "5.16.2"; - -function endpointsToMethods(octokit, endpointsMap) { - const newMethods = {}; - - for (const [scope, endpoints] of Object.entries(endpointsMap)) { - for (const [methodName, endpoint] of Object.entries(endpoints)) { - const [route, defaults, decorations] = endpoint; - const [method, url] = route.split(/ /); - const endpointDefaults = Object.assign({ - method, - url - }, defaults); - - if (!newMethods[scope]) { - newMethods[scope] = {}; - } - - const scopeMethods = newMethods[scope]; - - if (decorations) { - scopeMethods[methodName] = decorate(octokit, scope, methodName, endpointDefaults, decorations); - continue; - } - - scopeMethods[methodName] = octokit.request.defaults(endpointDefaults); - } - } - - return newMethods; -} - -function decorate(octokit, scope, methodName, defaults, decorations) { - const requestWithDefaults = octokit.request.defaults(defaults); - /* istanbul ignore next */ - - function withDecorations(...args) { - // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 - let options = requestWithDefaults.endpoint.merge(...args); // There are currently no other decorations than `.mapToData` - - if (decorations.mapToData) { - options = Object.assign({}, options, { - data: options[decorations.mapToData], - [decorations.mapToData]: undefined - }); - return requestWithDefaults(options); - } - - if (decorations.renamed) { - const [newScope, newMethodName] = decorations.renamed; - octokit.log.warn(`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`); - } - - if (decorations.deprecated) { - octokit.log.warn(decorations.deprecated); - } - - if (decorations.renamedParameters) { - // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 - const options = requestWithDefaults.endpoint.merge(...args); - - for (const [name, alias] of Object.entries(decorations.renamedParameters)) { - if (name in options) { - octokit.log.warn(`"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`); - - if (!(alias in options)) { - options[alias] = options[name]; - } - - delete options[name]; - } - } - - return requestWithDefaults(options); - } // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 - - - return requestWithDefaults(...args); - } - - return Object.assign(withDecorations, requestWithDefaults); -} - -function restEndpointMethods(octokit) { - const api = endpointsToMethods(octokit, Endpoints); - return { - rest: api - }; -} -restEndpointMethods.VERSION = VERSION; -function legacyRestEndpointMethods(octokit) { - const api = endpointsToMethods(octokit, Endpoints); - return _objectSpread2(_objectSpread2({}, api), {}, { - rest: api - }); -} -legacyRestEndpointMethods.VERSION = VERSION; - -exports.legacyRestEndpointMethods = legacyRestEndpointMethods; -exports.restEndpointMethods = restEndpointMethods; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 3682: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -var register = __nccwpck_require__(4670) -var addHook = __nccwpck_require__(5549) -var removeHook = __nccwpck_require__(6819) - -// bind with array of arguments: https://stackoverflow.com/a/21792913 -var bind = Function.bind -var bindable = bind.bind(bind) - -function bindApi (hook, state, name) { - var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state]) - hook.api = { remove: removeHookRef } - hook.remove = removeHookRef - - ;['before', 'error', 'after', 'wrap'].forEach(function (kind) { - var args = name ? [state, kind, name] : [state, kind] - hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args) - }) -} - -function HookSingular () { - var singularHookName = 'h' - var singularHookState = { - registry: {} - } - var singularHook = register.bind(null, singularHookState, singularHookName) - bindApi(singularHook, singularHookState, singularHookName) - return singularHook -} - -function HookCollection () { - var state = { - registry: {} - } - - var hook = register.bind(null, state) - bindApi(hook, state) - - return hook -} - -var collectionHookDeprecationMessageDisplayed = false -function Hook () { - if (!collectionHookDeprecationMessageDisplayed) { - console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4') - collectionHookDeprecationMessageDisplayed = true - } - return HookCollection() -} - -Hook.Singular = HookSingular.bind() -Hook.Collection = HookCollection.bind() - -module.exports = Hook -// expose constructors as a named property for TypeScript -module.exports.Hook = Hook -module.exports.Singular = Hook.Singular -module.exports.Collection = Hook.Collection - - -/***/ }), - -/***/ 5549: -/***/ ((module) => { - -module.exports = addHook; - -function addHook(state, kind, name, hook) { - var orig = hook; - if (!state.registry[name]) { - state.registry[name] = []; - } - - if (kind === "before") { - hook = function (method, options) { - return Promise.resolve() - .then(orig.bind(null, options)) - .then(method.bind(null, options)); - }; - } - - if (kind === "after") { - hook = function (method, options) { - var result; - return Promise.resolve() - .then(method.bind(null, options)) - .then(function (result_) { - result = result_; - return orig(result, options); - }) - .then(function () { - return result; - }); - }; - } - - if (kind === "error") { - hook = function (method, options) { - return Promise.resolve() - .then(method.bind(null, options)) - .catch(function (error) { - return orig(error, options); - }); - }; - } - - state.registry[name].push({ - hook: hook, - orig: orig, - }); -} - - -/***/ }), - -/***/ 4670: -/***/ ((module) => { - -module.exports = register; - -function register(state, name, method, options) { - if (typeof method !== "function") { - throw new Error("method for before hook must be a function"); - } - - if (!options) { - options = {}; - } - - if (Array.isArray(name)) { - return name.reverse().reduce(function (callback, name) { - return register.bind(null, state, name, callback, options); - }, method)(); - } - - return Promise.resolve().then(function () { - if (!state.registry[name]) { - return method(options); - } - - return state.registry[name].reduce(function (method, registered) { - return registered.hook.bind(null, method, options); - }, method)(); - }); -} - - -/***/ }), - -/***/ 6819: -/***/ ((module) => { - -module.exports = removeHook; - -function removeHook(state, name, method) { - if (!state.registry[name]) { - return; - } - - var index = state.registry[name] - .map(function (registered) { - return registered.orig; - }) - .indexOf(method); - - if (index === -1) { - return; - } - - state.registry[name].splice(index, 1); -} - - -/***/ }), - -/***/ 8932: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -class Deprecation extends Error { - constructor(message) { - super(message); // Maintains proper stack trace (only available on V8) - - /* istanbul ignore next */ - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - - this.name = 'Deprecation'; - } - -} - -exports.Deprecation = Deprecation; - - -/***/ }), - -/***/ 3287: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -/*! - * is-plain-object - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -function isObject(o) { - return Object.prototype.toString.call(o) === '[object Object]'; -} - -function isPlainObject(o) { - var ctor,prot; - - if (isObject(o) === false) return false; - - // If has modified constructor - ctor = o.constructor; - if (ctor === undefined) return true; - - // If has modified prototype - prot = ctor.prototype; - if (isObject(prot) === false) return false; - - // If constructor does not have an Object-specific method - if (prot.hasOwnProperty('isPrototypeOf') === false) { - return false; - } - - // Most likely a plain Object - return true; -} - -exports.isPlainObject = isPlainObject; - - -/***/ }), - -/***/ 467: -/***/ ((module, exports, __nccwpck_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var Stream = _interopDefault(__nccwpck_require__(2781)); -var http = _interopDefault(__nccwpck_require__(3685)); -var Url = _interopDefault(__nccwpck_require__(7310)); -var whatwgUrl = _interopDefault(__nccwpck_require__(3323)); -var https = _interopDefault(__nccwpck_require__(5687)); -var zlib = _interopDefault(__nccwpck_require__(9796)); - -// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js - -// fix for "Readable" isn't a named export issue -const Readable = Stream.Readable; - -const BUFFER = Symbol('buffer'); -const TYPE = Symbol('type'); - -class Blob { - constructor() { - this[TYPE] = ''; - - const blobParts = arguments[0]; - const options = arguments[1]; - - const buffers = []; - let size = 0; - - if (blobParts) { - const a = blobParts; - const length = Number(a.length); - for (let i = 0; i < length; i++) { - const element = a[i]; - let buffer; - if (element instanceof Buffer) { - buffer = element; - } else if (ArrayBuffer.isView(element)) { - buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); - } else if (element instanceof ArrayBuffer) { - buffer = Buffer.from(element); - } else if (element instanceof Blob) { - buffer = element[BUFFER]; - } else { - buffer = Buffer.from(typeof element === 'string' ? element : String(element)); - } - size += buffer.length; - buffers.push(buffer); - } - } - - this[BUFFER] = Buffer.concat(buffers); - - let type = options && options.type !== undefined && String(options.type).toLowerCase(); - if (type && !/[^\u0020-\u007E]/.test(type)) { - this[TYPE] = type; - } - } - get size() { - return this[BUFFER].length; - } - get type() { - return this[TYPE]; - } - text() { - return Promise.resolve(this[BUFFER].toString()); - } - arrayBuffer() { - const buf = this[BUFFER]; - const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - return Promise.resolve(ab); - } - stream() { - const readable = new Readable(); - readable._read = function () {}; - readable.push(this[BUFFER]); - readable.push(null); - return readable; - } - toString() { - return '[object Blob]'; - } - slice() { - const size = this.size; - - const start = arguments[0]; - const end = arguments[1]; - let relativeStart, relativeEnd; - if (start === undefined) { - relativeStart = 0; - } else if (start < 0) { - relativeStart = Math.max(size + start, 0); - } else { - relativeStart = Math.min(start, size); - } - if (end === undefined) { - relativeEnd = size; - } else if (end < 0) { - relativeEnd = Math.max(size + end, 0); - } else { - relativeEnd = Math.min(end, size); - } - const span = Math.max(relativeEnd - relativeStart, 0); - - const buffer = this[BUFFER]; - const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); - const blob = new Blob([], { type: arguments[2] }); - blob[BUFFER] = slicedBuffer; - return blob; - } -} - -Object.defineProperties(Blob.prototype, { - size: { enumerable: true }, - type: { enumerable: true }, - slice: { enumerable: true } -}); - -Object.defineProperty(Blob.prototype, Symbol.toStringTag, { - value: 'Blob', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * fetch-error.js - * - * FetchError interface for operational errors - */ - -/** - * Create FetchError instance - * - * @param String message Error message for human - * @param String type Error type for machine - * @param String systemError For Node.js system error - * @return FetchError - */ -function FetchError(message, type, systemError) { - Error.call(this, message); - - this.message = message; - this.type = type; - - // when err.type is `system`, err.code contains system error code - if (systemError) { - this.code = this.errno = systemError.code; - } - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -FetchError.prototype = Object.create(Error.prototype); -FetchError.prototype.constructor = FetchError; -FetchError.prototype.name = 'FetchError'; - -let convert; -try { - convert = (__nccwpck_require__(2877).convert); -} catch (e) {} - -const INTERNALS = Symbol('Body internals'); - -// fix an issue where "PassThrough" isn't a named export for node <10 -const PassThrough = Stream.PassThrough; - -/** - * Body mixin - * - * Ref: https://fetch.spec.whatwg.org/#body - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -function Body(body) { - var _this = this; - - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - _ref$size = _ref.size; - - let size = _ref$size === undefined ? 0 : _ref$size; - var _ref$timeout = _ref.timeout; - let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; - - if (body == null) { - // body is undefined or null - body = null; - } else if (isURLSearchParams(body)) { - // body is a URLSearchParams - body = Buffer.from(body.toString()); - } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { - // body is ArrayBuffer - body = Buffer.from(body); - } else if (ArrayBuffer.isView(body)) { - // body is ArrayBufferView - body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); - } else if (body instanceof Stream) ; else { - // none of the above - // coerce to string then buffer - body = Buffer.from(String(body)); - } - this[INTERNALS] = { - body, - disturbed: false, - error: null - }; - this.size = size; - this.timeout = timeout; - - if (body instanceof Stream) { - body.on('error', function (err) { - const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); - _this[INTERNALS].error = error; - }); - } -} - -Body.prototype = { - get body() { - return this[INTERNALS].body; - }, - - get bodyUsed() { - return this[INTERNALS].disturbed; - }, - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - arrayBuffer() { - return consumeBody.call(this).then(function (buf) { - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - }); - }, - - /** - * Return raw response as Blob - * - * @return Promise - */ - blob() { - let ct = this.headers && this.headers.get('content-type') || ''; - return consumeBody.call(this).then(function (buf) { - return Object.assign( - // Prevent copying - new Blob([], { - type: ct.toLowerCase() - }), { - [BUFFER]: buf - }); - }); - }, - - /** - * Decode response as json - * - * @return Promise - */ - json() { - var _this2 = this; - - return consumeBody.call(this).then(function (buffer) { - try { - return JSON.parse(buffer.toString()); - } catch (err) { - return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); - } - }); - }, - - /** - * Decode response as text - * - * @return Promise - */ - text() { - return consumeBody.call(this).then(function (buffer) { - return buffer.toString(); - }); - }, - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ - buffer() { - return consumeBody.call(this); - }, - - /** - * Decode response as text, while automatically detecting the encoding and - * trying to decode to UTF-8 (non-spec api) - * - * @return Promise - */ - textConverted() { - var _this3 = this; - - return consumeBody.call(this).then(function (buffer) { - return convertBody(buffer, _this3.headers); - }); - } -}; - -// In browsers, all properties are enumerable. -Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true } -}); - -Body.mixIn = function (proto) { - for (const name of Object.getOwnPropertyNames(Body.prototype)) { - // istanbul ignore else: future proof - if (!(name in proto)) { - const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); - Object.defineProperty(proto, name, desc); - } - } -}; - -/** - * Consume and convert an entire Body to a Buffer. - * - * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body - * - * @return Promise - */ -function consumeBody() { - var _this4 = this; - - if (this[INTERNALS].disturbed) { - return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); - } - - this[INTERNALS].disturbed = true; - - if (this[INTERNALS].error) { - return Body.Promise.reject(this[INTERNALS].error); - } - - let body = this.body; - - // body is null - if (body === null) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is blob - if (isBlob(body)) { - body = body.stream(); - } - - // body is buffer - if (Buffer.isBuffer(body)) { - return Body.Promise.resolve(body); - } - - // istanbul ignore if: should never happen - if (!(body instanceof Stream)) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is stream - // get ready to actually consume the body - let accum = []; - let accumBytes = 0; - let abort = false; - - return new Body.Promise(function (resolve, reject) { - let resTimeout; - - // allow timeout on slow response body - if (_this4.timeout) { - resTimeout = setTimeout(function () { - abort = true; - reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); - }, _this4.timeout); - } - - // handle stream errors - body.on('error', function (err) { - if (err.name === 'AbortError') { - // if the request was aborted, reject with this Error - abort = true; - reject(err); - } else { - // other errors, such as incorrect content-encoding - reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - - body.on('data', function (chunk) { - if (abort || chunk === null) { - return; - } - - if (_this4.size && accumBytes + chunk.length > _this4.size) { - abort = true; - reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); - return; - } - - accumBytes += chunk.length; - accum.push(chunk); - }); - - body.on('end', function () { - if (abort) { - return; - } - - clearTimeout(resTimeout); - - try { - resolve(Buffer.concat(accum, accumBytes)); - } catch (err) { - // handle streams that have accumulated too much data (issue #414) - reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - }); -} - -/** - * Detect buffer encoding and convert to target encoding - * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding - * - * @param Buffer buffer Incoming buffer - * @param String encoding Target encoding - * @return String - */ -function convertBody(buffer, headers) { - if (typeof convert !== 'function') { - throw new Error('The package `encoding` must be installed to use the textConverted() function'); - } - - const ct = headers.get('content-type'); - let charset = 'utf-8'; - let res, str; - - // header - if (ct) { - res = /charset=([^;]*)/i.exec(ct); - } - - // no charset in content type, peek at response body for at most 1024 bytes - str = buffer.slice(0, 1024).toString(); - - // html5 - if (!res && str) { - res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; - - this[MAP] = Object.create(null); - - if (init instanceof Headers) { - const rawHeaders = init.raw(); - const headerNames = Object.keys(rawHeaders); - - for (const headerName of headerNames) { - for (const value of rawHeaders[headerName]) { - this.append(headerName, value); - } - } - - return; - } - - // We don't worry about converting prop to ByteString here as append() - // will handle it. - if (init == null) ; else if (typeof init === 'object') { - const method = init[Symbol.iterator]; - if (method != null) { - if (typeof method !== 'function') { - throw new TypeError('Header pairs must be iterable'); - } - - // sequence> - // Note: per spec we have to first exhaust the lists then process them - const pairs = []; - for (const pair of init) { - if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { - throw new TypeError('Each header pair must be iterable'); - } - pairs.push(Array.from(pair)); - } - - for (const pair of pairs) { - if (pair.length !== 2) { - throw new TypeError('Each header pair must be a name/value tuple'); - } - this.append(pair[0], pair[1]); - } - } else { - // record - for (const key of Object.keys(init)) { - const value = init[key]; - this.append(key, value); - } - } - } else { - throw new TypeError('Provided initializer must be an object'); - } - } - - /** - * Return combined header value given name - * - * @param String name Header name - * @return Mixed - */ - get(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key === undefined) { - return null; - } - - return this[MAP][key].join(', '); - } - - /** - * Iterate over all headers - * - * @param Function callback Executed for each item with parameters (value, name, thisArg) - * @param Boolean thisArg `this` context for callback function - * @return Void - */ - forEach(callback) { - let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - - let pairs = getHeaders(this); - let i = 0; - while (i < pairs.length) { - var _pairs$i = pairs[i]; - const name = _pairs$i[0], - value = _pairs$i[1]; - - callback.call(thisArg, value, name, this); - pairs = getHeaders(this); - i++; - } - } - - /** - * Overwrite header values given name - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - set(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - this[MAP][key !== undefined ? key : name] = [value]; - } - - /** - * Append a value onto existing header - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - append(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - if (key !== undefined) { - this[MAP][key].push(value); - } else { - this[MAP][name] = [value]; - } - } - - /** - * Check for header name existence - * - * @param String name Header name - * @return Boolean - */ - has(name) { - name = `${name}`; - validateName(name); - return find(this[MAP], name) !== undefined; - } - - /** - * Delete all header values given name - * - * @param String name Header name - * @return Void - */ - delete(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key !== undefined) { - delete this[MAP][key]; - } - } - - /** - * Return raw headers (non-spec api) - * - * @return Object - */ - raw() { - return this[MAP]; - } - - /** - * Get an iterator on keys. - * - * @return Iterator - */ - keys() { - return createHeadersIterator(this, 'key'); - } - - /** - * Get an iterator on values. - * - * @return Iterator - */ - values() { - return createHeadersIterator(this, 'value'); - } - - /** - * Get an iterator on entries. - * - * This is the default iterator of the Headers object. - * - * @return Iterator - */ - [Symbol.iterator]() { - return createHeadersIterator(this, 'key+value'); - } -} -Headers.prototype.entries = Headers.prototype[Symbol.iterator]; - -Object.defineProperty(Headers.prototype, Symbol.toStringTag, { - value: 'Headers', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Headers.prototype, { - get: { enumerable: true }, - forEach: { enumerable: true }, - set: { enumerable: true }, - append: { enumerable: true }, - has: { enumerable: true }, - delete: { enumerable: true }, - keys: { enumerable: true }, - values: { enumerable: true }, - entries: { enumerable: true } -}); - -function getHeaders(headers) { - let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; - - const keys = Object.keys(headers[MAP]).sort(); - return keys.map(kind === 'key' ? function (k) { - return k.toLowerCase(); - } : kind === 'value' ? function (k) { - return headers[MAP][k].join(', '); - } : function (k) { - return [k.toLowerCase(), headers[MAP][k].join(', ')]; - }); -} - -const INTERNAL = Symbol('internal'); - -function createHeadersIterator(target, kind) { - const iterator = Object.create(HeadersIteratorPrototype); - iterator[INTERNAL] = { - target, - kind, - index: 0 - }; - return iterator; -} - -const HeadersIteratorPrototype = Object.setPrototypeOf({ - next() { - // istanbul ignore if - if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { - throw new TypeError('Value of `this` is not a HeadersIterator'); - } - - var _INTERNAL = this[INTERNAL]; - const target = _INTERNAL.target, - kind = _INTERNAL.kind, - index = _INTERNAL.index; - - const values = getHeaders(target, kind); - const len = values.length; - if (index >= len) { - return { - value: undefined, - done: true - }; - } - - this[INTERNAL].index = index + 1; - - return { - value: values[index], - done: false - }; - } -}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); - -Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { - value: 'HeadersIterator', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * Export the Headers object in a form that Node.js can consume. - * - * @param Headers headers - * @return Object - */ -function exportNodeCompatibleHeaders(headers) { - const obj = Object.assign({ __proto__: null }, headers[MAP]); - - // http.request() only supports string as Host header. This hack makes - // specifying custom Host header possible. - const hostHeaderKey = find(headers[MAP], 'Host'); - if (hostHeaderKey !== undefined) { - obj[hostHeaderKey] = obj[hostHeaderKey][0]; - } - - return obj; -} - -/** - * Create a Headers object from an object of headers, ignoring those that do - * not conform to HTTP grammar productions. - * - * @param Object obj Object of headers - * @return Headers - */ -function createHeadersLenient(obj) { - const headers = new Headers(); - for (const name of Object.keys(obj)) { - if (invalidTokenRegex.test(name)) { - continue; - } - if (Array.isArray(obj[name])) { - for (const val of obj[name]) { - if (invalidHeaderCharRegex.test(val)) { - continue; - } - if (headers[MAP][name] === undefined) { - headers[MAP][name] = [val]; - } else { - headers[MAP][name].push(val); - } - } - } else if (!invalidHeaderCharRegex.test(obj[name])) { - headers[MAP][name] = [obj[name]]; - } - } - return headers; -} - -const INTERNALS$1 = Symbol('Response internals'); - -// fix an issue where "STATUS_CODES" aren't a named export for node <10 -const STATUS_CODES = http.STATUS_CODES; - -/** - * Response class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class Response { - constructor() { - let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - Body.call(this, body, opts); - - const status = opts.status || 200; - const headers = new Headers(opts.headers); - - if (body != null && !headers.has('Content-Type')) { - const contentType = extractContentType(body); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - this[INTERNALS$1] = { - url: opts.url, - status, - statusText: opts.statusText || STATUS_CODES[status], - headers, - counter: opts.counter - }; - } - - get url() { - return this[INTERNALS$1].url || ''; - } - - get status() { - return this[INTERNALS$1].status; - } - - /** - * Convenience property representing if the request ended normally - */ - get ok() { - return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; - } - - get redirected() { - return this[INTERNALS$1].counter > 0; - } - - get statusText() { - return this[INTERNALS$1].statusText; - } - - get headers() { - return this[INTERNALS$1].headers; - } - - /** - * Clone this response - * - * @return Response - */ - clone() { - return new Response(clone(this), { - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected - }); - } -} - -Body.mixIn(Response.prototype); - -Object.defineProperties(Response.prototype, { - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true } -}); - -Object.defineProperty(Response.prototype, Symbol.toStringTag, { - value: 'Response', - writable: false, - enumerable: false, - configurable: true -}); - -const INTERNALS$2 = Symbol('Request internals'); -const URL = Url.URL || whatwgUrl.URL; - -// fix an issue where "format", "parse" aren't a named export for node <10 -const parse_url = Url.parse; -const format_url = Url.format; - -/** - * Wrapper around `new URL` to handle arbitrary URLs - * - * @param {string} urlStr - * @return {void} - */ -function parseURL(urlStr) { - /* - Check whether the URL is absolute or not - Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 - Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 - */ - if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) { - urlStr = new URL(urlStr).toString(); - } - - // Fallback to old implementation for arbitrary URLs - return parse_url(urlStr); -} - -const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; - -/** - * Check if a value is an instance of Request. - * - * @param Mixed input - * @return Boolean - */ -function isRequest(input) { - return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; -} - -function isAbortSignal(signal) { - const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); - return !!(proto && proto.constructor.name === 'AbortSignal'); -} - -/** - * Request class - * - * @param Mixed input Url or Request instance - * @param Object init Custom options - * @return Void - */ -class Request { - constructor(input) { - let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - let parsedURL; - - // normalize input - if (!isRequest(input)) { - if (input && input.href) { - // in order to support Node.js' Url objects; though WHATWG's URL objects - // will fall into this branch also (since their `toString()` will return - // `href` property anyway) - parsedURL = parseURL(input.href); - } else { - // coerce input to a string before attempting to parse - parsedURL = parseURL(`${input}`); - } - input = {}; - } else { - parsedURL = parseURL(input.url); - } - - let method = init.method || input.method || 'GET'; - method = method.toUpperCase(); - - if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { - throw new TypeError('Request with GET/HEAD method cannot have body'); - } - - let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; - - Body.call(this, inputBody, { - timeout: init.timeout || input.timeout || 0, - size: init.size || input.size || 0 - }); - - const headers = new Headers(init.headers || input.headers || {}); - - if (inputBody != null && !headers.has('Content-Type')) { - const contentType = extractContentType(inputBody); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - let signal = isRequest(input) ? input.signal : null; - if ('signal' in init) signal = init.signal; - - if (signal != null && !isAbortSignal(signal)) { - throw new TypeError('Expected signal to be an instanceof AbortSignal'); - } - - this[INTERNALS$2] = { - method, - redirect: init.redirect || input.redirect || 'follow', - headers, - parsedURL, - signal - }; - - // node-fetch-only options - this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; - this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; - this.counter = init.counter || input.counter || 0; - this.agent = init.agent || input.agent; - } - - get method() { - return this[INTERNALS$2].method; - } - - get url() { - return format_url(this[INTERNALS$2].parsedURL); - } - - get headers() { - return this[INTERNALS$2].headers; - } - - get redirect() { - return this[INTERNALS$2].redirect; - } - - get signal() { - return this[INTERNALS$2].signal; - } - - /** - * Clone this request - * - * @return Request - */ - clone() { - return new Request(this); - } -} - -Body.mixIn(Request.prototype); - -Object.defineProperty(Request.prototype, Symbol.toStringTag, { - value: 'Request', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Request.prototype, { - method: { enumerable: true }, - url: { enumerable: true }, - headers: { enumerable: true }, - redirect: { enumerable: true }, - clone: { enumerable: true }, - signal: { enumerable: true } -}); - -/** - * Convert a Request to Node.js http request options. - * - * @param Request A Request instance - * @return Object The options object to be passed to http.request - */ -function getNodeRequestOptions(request) { - const parsedURL = request[INTERNALS$2].parsedURL; - const headers = new Headers(request[INTERNALS$2].headers); - - // fetch step 1.3 - if (!headers.has('Accept')) { - headers.set('Accept', '*/*'); - } - - // Basic fetch - if (!parsedURL.protocol || !parsedURL.hostname) { - throw new TypeError('Only absolute URLs are supported'); - } - - if (!/^https?:$/.test(parsedURL.protocol)) { - throw new TypeError('Only HTTP(S) protocols are supported'); - } - - if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { - throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); - } - - // HTTP-network-or-cache fetch steps 2.4-2.7 - let contentLengthValue = null; - if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { - contentLengthValue = '0'; - } - if (request.body != null) { - const totalBytes = getTotalBytes(request); - if (typeof totalBytes === 'number') { - contentLengthValue = String(totalBytes); - } - } - if (contentLengthValue) { - headers.set('Content-Length', contentLengthValue); - } - - // HTTP-network-or-cache fetch step 2.11 - if (!headers.has('User-Agent')) { - headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); - } - - // HTTP-network-or-cache fetch step 2.15 - if (request.compress && !headers.has('Accept-Encoding')) { - headers.set('Accept-Encoding', 'gzip,deflate'); - } - - let agent = request.agent; - if (typeof agent === 'function') { - agent = agent(parsedURL); - } - - if (!headers.has('Connection') && !agent) { - headers.set('Connection', 'close'); - } - - // HTTP-network fetch step 4.2 - // chunked encoding is handled by Node.js - - return Object.assign({}, parsedURL, { - method: request.method, - headers: exportNodeCompatibleHeaders(headers), - agent - }); -} - -/** - * abort-error.js - * - * AbortError interface for cancelled requests - */ - -/** - * Create AbortError instance - * - * @param String message Error message for human - * @return AbortError - */ -function AbortError(message) { - Error.call(this, message); - - this.type = 'aborted'; - this.message = message; - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -AbortError.prototype = Object.create(Error.prototype); -AbortError.prototype.constructor = AbortError; -AbortError.prototype.name = 'AbortError'; - -const URL$1 = Url.URL || whatwgUrl.URL; - -// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 -const PassThrough$1 = Stream.PassThrough; - -const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) { - const orig = new URL$1(original).hostname; - const dest = new URL$1(destination).hostname; - - return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest); -}; - -/** - * Fetch function - * - * @param Mixed url Absolute url or Request instance - * @param Object opts Fetch options - * @return Promise - */ -function fetch(url, opts) { - - // allow custom promise - if (!fetch.Promise) { - throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); - } - - Body.Promise = fetch.Promise; - - // wrap http.request into fetch - return new fetch.Promise(function (resolve, reject) { - // build request object - const request = new Request(url, opts); - const options = getNodeRequestOptions(request); - - const send = (options.protocol === 'https:' ? https : http).request; - const signal = request.signal; - - let response = null; - - const abort = function abort() { - let error = new AbortError('The user aborted a request.'); - reject(error); - if (request.body && request.body instanceof Stream.Readable) { - request.body.destroy(error); - } - if (!response || !response.body) return; - response.body.emit('error', error); - }; - - if (signal && signal.aborted) { - abort(); - return; - } - - const abortAndFinalize = function abortAndFinalize() { - abort(); - finalize(); - }; - - // send request - const req = send(options); - let reqTimeout; - - if (signal) { - signal.addEventListener('abort', abortAndFinalize); - } - - function finalize() { - req.abort(); - if (signal) signal.removeEventListener('abort', abortAndFinalize); - clearTimeout(reqTimeout); - } - - if (request.timeout) { - req.once('socket', function (socket) { - reqTimeout = setTimeout(function () { - reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); - finalize(); - }, request.timeout); - }); - } - - req.on('error', function (err) { - reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); - finalize(); - }); - - req.on('response', function (res) { - clearTimeout(reqTimeout); - - const headers = createHeadersLenient(res.headers); - - // HTTP fetch step 5 - if (fetch.isRedirect(res.statusCode)) { - // HTTP fetch step 5.2 - const location = headers.get('Location'); - - // HTTP fetch step 5.3 - let locationURL = null; - try { - locationURL = location === null ? null : new URL$1(location, request.url).toString(); - } catch (err) { - // error here can only be invalid URL in Location: header - // do not throw when options.redirect == manual - // let the user extract the errorneous redirect URL - if (request.redirect !== 'manual') { - reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')); - finalize(); - return; - } - } - - // HTTP fetch step 5.5 - switch (request.redirect) { - case 'error': - reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); - finalize(); - return; - case 'manual': - // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. - if (locationURL !== null) { - // handle corrupted header - try { - headers.set('Location', locationURL); - } catch (err) { - // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request - reject(err); - } - } - break; - case 'follow': - // HTTP-redirect fetch step 2 - if (locationURL === null) { - break; - } - - // HTTP-redirect fetch step 5 - if (request.counter >= request.follow) { - reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 6 (counter increment) - // Create a new Request object. - const requestOpts = { - headers: new Headers(request.headers), - follow: request.follow, - counter: request.counter + 1, - agent: request.agent, - compress: request.compress, - method: request.method, - body: request.body, - signal: request.signal, - timeout: request.timeout, - size: request.size - }; - - if (!isDomainOrSubdomain(request.url, locationURL)) { - for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) { - requestOpts.headers.delete(name); - } - } - - // HTTP-redirect fetch step 9 - if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { - reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 11 - if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { - requestOpts.method = 'GET'; - requestOpts.body = undefined; - requestOpts.headers.delete('content-length'); - } - - // HTTP-redirect fetch step 15 - resolve(fetch(new Request(locationURL, requestOpts))); - finalize(); - return; - } - } - - // prepare response - res.once('end', function () { - if (signal) signal.removeEventListener('abort', abortAndFinalize); - }); - let body = res.pipe(new PassThrough$1()); - - const response_options = { - url: request.url, - status: res.statusCode, - statusText: res.statusMessage, - headers: headers, - size: request.size, - timeout: request.timeout, - counter: request.counter - }; - - // HTTP-network fetch step 12.1.1.3 - const codings = headers.get('Content-Encoding'); - - // HTTP-network fetch step 12.1.1.4: handle content codings - - // in following scenarios we ignore compression support - // 1. compression support is disabled - // 2. HEAD request - // 3. no Content-Encoding header - // 4. no content response (204) - // 5. content not modified response (304) - if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { - response = new Response(body, response_options); - resolve(response); - return; - } - - // For Node v6+ - // Be less strict when decoding compressed responses, since sometimes - // servers send slightly invalid responses that are still accepted - // by common browsers. - // Always using Z_SYNC_FLUSH is what cURL does. - const zlibOptions = { - flush: zlib.Z_SYNC_FLUSH, - finishFlush: zlib.Z_SYNC_FLUSH - }; - - // for gzip - if (codings == 'gzip' || codings == 'x-gzip') { - body = body.pipe(zlib.createGunzip(zlibOptions)); - response = new Response(body, response_options); - resolve(response); - return; - } - - // for deflate - if (codings == 'deflate' || codings == 'x-deflate') { - // handle the infamous raw deflate response from old servers - // a hack for old IIS and Apache servers - const raw = res.pipe(new PassThrough$1()); - raw.once('data', function (chunk) { - // see http://stackoverflow.com/questions/37519828 - if ((chunk[0] & 0x0F) === 0x08) { - body = body.pipe(zlib.createInflate()); - } else { - body = body.pipe(zlib.createInflateRaw()); - } - response = new Response(body, response_options); - resolve(response); - }); - return; - } - - // for br - if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { - body = body.pipe(zlib.createBrotliDecompress()); - response = new Response(body, response_options); - resolve(response); - return; - } - - // otherwise, use response as-is - response = new Response(body, response_options); - resolve(response); - }); - - writeToStream(req, request); - }); -} -/** - * Redirect code matching - * - * @param Number code Status code - * @return Boolean - */ -fetch.isRedirect = function (code) { - return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; -}; - -// expose Promise -fetch.Promise = global.Promise; - -module.exports = exports = fetch; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports["default"] = exports; -exports.Headers = Headers; -exports.Request = Request; -exports.Response = Response; -exports.FetchError = FetchError; - - -/***/ }), - -/***/ 2299: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -var punycode = __nccwpck_require__(5477); -var mappingTable = __nccwpck_require__(1907); - -var PROCESSING_OPTIONS = { - TRANSITIONAL: 0, - NONTRANSITIONAL: 1 -}; - -function normalize(str) { // fix bug in v8 - return str.split('\u0000').map(function (s) { return s.normalize('NFC'); }).join('\u0000'); -} - -function findStatus(val) { - var start = 0; - var end = mappingTable.length - 1; - - while (start <= end) { - var mid = Math.floor((start + end) / 2); - - var target = mappingTable[mid]; - if (target[0][0] <= val && target[0][1] >= val) { - return target; - } else if (target[0][0] > val) { - end = mid - 1; - } else { - start = mid + 1; + const parsedUrl = new URL(requestUrl); + let info = this._prepareRequest(verb, parsedUrl, headers); + // Only perform retries on reads since writes may not be idempotent. + const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) + ? this._maxRetries + 1 + : 1; + let numTries = 0; + let response; + do { + response = yield this.requestRaw(info, data); + // Check if it's an authentication challenge + if (response && + response.message && + response.message.statusCode === HttpCodes.Unauthorized) { + let authenticationHandler; + for (const handler of this.handlers) { + if (handler.canHandleAuthentication(response)) { + authenticationHandler = handler; + break; + } + } + if (authenticationHandler) { + return authenticationHandler.handleAuthentication(this, info, data); + } + else { + // We have received an unauthorized response but have no handlers to handle it. + // Let the response return to the caller. + return response; + } + } + let redirectsRemaining = this._maxRedirects; + while (response.message.statusCode && + HttpRedirectCodes.includes(response.message.statusCode) && + this._allowRedirects && + redirectsRemaining > 0) { + const redirectUrl = response.message.headers['location']; + if (!redirectUrl) { + // if there's no location to redirect to, we won't + break; + } + const parsedRedirectUrl = new URL(redirectUrl); + if (parsedUrl.protocol === 'https:' && + parsedUrl.protocol !== parsedRedirectUrl.protocol && + !this._allowRedirectDowngrade) { + throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); + } + // we need to finish reading the response before reassigning response + // which will leak the open socket. + yield response.readBody(); + // strip authorization header if redirected to a different hostname + if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { + for (const header in headers) { + // header names are case insensitive + if (header.toLowerCase() === 'authorization') { + delete headers[header]; + } + } + } + // let's make the request with the new redirectUrl + info = this._prepareRequest(verb, parsedRedirectUrl, headers); + response = yield this.requestRaw(info, data); + redirectsRemaining--; + } + if (!response.message.statusCode || + !HttpResponseRetryCodes.includes(response.message.statusCode)) { + // If not a retry code, return immediately instead of retrying + return response; + } + numTries += 1; + if (numTries < maxTries) { + yield response.readBody(); + yield this._performExponentialBackoff(numTries); + } + } while (numTries < maxTries); + return response; + }); } - } - - return null; -} - -var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; - -function countSymbols(string) { - return string - // replace every surrogate pair with a BMP symbol - .replace(regexAstralSymbols, '_') - // then get the length - .length; -} - -function mapChars(domain_name, useSTD3, processing_option) { - var hasError = false; - var processed = ""; - - var len = countSymbols(domain_name); - for (var i = 0; i < len; ++i) { - var codePoint = domain_name.codePointAt(i); - var status = findStatus(codePoint); - - switch (status[1]) { - case "disallowed": - hasError = true; - processed += String.fromCodePoint(codePoint); - break; - case "ignored": - break; - case "mapped": - processed += String.fromCodePoint.apply(String, status[2]); - break; - case "deviation": - if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) { - processed += String.fromCodePoint.apply(String, status[2]); - } else { - processed += String.fromCodePoint(codePoint); - } - break; - case "valid": - processed += String.fromCodePoint(codePoint); - break; - case "disallowed_STD3_mapped": - if (useSTD3) { - hasError = true; - processed += String.fromCodePoint(codePoint); - } else { - processed += String.fromCodePoint.apply(String, status[2]); - } - break; - case "disallowed_STD3_valid": - if (useSTD3) { - hasError = true; + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose() { + if (this._agent) { + this._agent.destroy(); } - - processed += String.fromCodePoint(codePoint); - break; - } - } - - return { - string: processed, - error: hasError - }; -} - -var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/; - -function validateLabel(label, processing_option) { - if (label.substr(0, 4) === "xn--") { - label = punycode.toUnicode(label); - processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL; - } - - var error = false; - - if (normalize(label) !== label || - (label[3] === "-" && label[4] === "-") || - label[0] === "-" || label[label.length - 1] === "-" || - label.indexOf(".") !== -1 || - label.search(combiningMarksRegex) === 0) { - error = true; - } - - var len = countSymbols(label); - for (var i = 0; i < len; ++i) { - var status = findStatus(label.codePointAt(i)); - if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid") || - (processing === PROCESSING_OPTIONS.NONTRANSITIONAL && - status[1] !== "valid" && status[1] !== "deviation")) { - error = true; - break; + this._disposed = true; } - } - - return { - label: label, - error: error - }; -} - -function processing(domain_name, useSTD3, processing_option) { - var result = mapChars(domain_name, useSTD3, processing_option); - result.string = normalize(result.string); - - var labels = result.string.split("."); - for (var i = 0; i < labels.length; ++i) { - try { - var validation = validateLabel(labels[i]); - labels[i] = validation.label; - result.error = result.error || validation.error; - } catch(e) { - result.error = true; + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info, data) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => { + function callbackForResult(err, res) { + if (err) { + reject(err); + } + else if (!res) { + // If `err` is not passed, then `res` must be passed. + reject(new Error('Unknown error')); + } + else { + resolve(res); + } + } + this.requestRawWithCallback(info, data, callbackForResult); + }); + }); } - } - - return { - string: labels.join("."), - error: result.error - }; -} - -module.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) { - var result = processing(domain_name, useSTD3, processing_option); - var labels = result.string.split("."); - labels = labels.map(function(l) { - try { - return punycode.toASCII(l); - } catch(e) { - result.error = true; - return l; + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info, data, onResult) { + if (typeof data === 'string') { + if (!info.options.headers) { + info.options.headers = {}; + } + info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); + } + let callbackCalled = false; + function handleResult(err, res) { + if (!callbackCalled) { + callbackCalled = true; + onResult(err, res); + } + } + const req = info.httpModule.request(info.options, (msg) => { + const res = new HttpClientResponse(msg); + handleResult(undefined, res); + }); + let socket; + req.on('socket', sock => { + socket = sock; + }); + // If we ever get disconnected, we want the socket to timeout eventually + req.setTimeout(this._socketTimeout || 3 * 60000, () => { + if (socket) { + socket.end(); + } + handleResult(new Error(`Request timeout: ${info.options.path}`)); + }); + req.on('error', function (err) { + // err has statusCode property + // res should have headers + handleResult(err); + }); + if (data && typeof data === 'string') { + req.write(data, 'utf8'); + } + if (data && typeof data !== 'string') { + data.on('close', function () { + req.end(); + }); + data.pipe(req); + } + else { + req.end(); + } } - }); - - if (verifyDnsLength) { - var total = labels.slice(0, labels.length - 1).join(".").length; - if (total.length > 253 || total.length === 0) { - result.error = true; + /** + * Gets an http agent. This function is useful when you need an http agent that handles + * routing through a proxy server - depending upon the url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ + getAgent(serverUrl) { + const parsedUrl = new URL(serverUrl); + return this._getAgent(parsedUrl); } - - for (var i=0; i < labels.length; ++i) { - if (labels.length > 63 || labels.length === 0) { - result.error = true; - break; - } + _prepareRequest(method, requestUrl, headers) { + const info = {}; + info.parsedUrl = requestUrl; + const usingSsl = info.parsedUrl.protocol === 'https:'; + info.httpModule = usingSsl ? https : http; + const defaultPort = usingSsl ? 443 : 80; + info.options = {}; + info.options.host = info.parsedUrl.hostname; + info.options.port = info.parsedUrl.port + ? parseInt(info.parsedUrl.port) + : defaultPort; + info.options.path = + (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); + info.options.method = method; + info.options.headers = this._mergeHeaders(headers); + if (this.userAgent != null) { + info.options.headers['user-agent'] = this.userAgent; + } + info.options.agent = this._getAgent(info.parsedUrl); + // gives handlers an opportunity to participate + if (this.handlers) { + for (const handler of this.handlers) { + handler.prepareRequest(info.options); + } + } + return info; } - } - - if (result.error) return null; - return labels.join("."); -}; - -module.exports.toUnicode = function(domain_name, useSTD3) { - var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL); - - return { - domain: result.string, - error: result.error - }; -}; - -module.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS; - - -/***/ }), - -/***/ 5871: -/***/ ((module) => { - -"use strict"; - - -var conversions = {}; -module.exports = conversions; - -function sign(x) { - return x < 0 ? -1 : 1; -} - -function evenRound(x) { - // Round x to the nearest integer, choosing the even integer if it lies halfway between two. - if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor) - return Math.floor(x); - } else { - return Math.round(x); + _mergeHeaders(headers) { + if (this.requestOptions && this.requestOptions.headers) { + return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {})); + } + return lowercaseKeys(headers || {}); } -} - -function createNumberConversion(bitLength, typeOpts) { - if (!typeOpts.unsigned) { - --bitLength; + _getExistingOrDefaultHeader(additionalHeaders, header, _default) { + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; + } + return additionalHeaders[header] || clientHeader || _default; } - const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength); - const upperBound = Math.pow(2, bitLength) - 1; - - const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength); - const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1); - - return function(V, opts) { - if (!opts) opts = {}; - - let x = +V; - - if (opts.enforceRange) { - if (!Number.isFinite(x)) { - throw new TypeError("Argument is not a finite number"); - } - - x = sign(x) * Math.floor(Math.abs(x)); - if (x < lowerBound || x > upperBound) { - throw new TypeError("Argument is not in byte range"); - } - - return x; + _getAgent(parsedUrl) { + let agent; + const proxyUrl = pm.getProxyUrl(parsedUrl); + const useProxy = proxyUrl && proxyUrl.hostname; + if (this._keepAlive && useProxy) { + agent = this._proxyAgent; } - - if (!isNaN(x) && opts.clamp) { - x = evenRound(x); - - if (x < lowerBound) x = lowerBound; - if (x > upperBound) x = upperBound; - return x; + if (this._keepAlive && !useProxy) { + agent = this._agent; } - - if (!Number.isFinite(x) || x === 0) { - return 0; + // if agent is already assigned use that agent. + if (agent) { + return agent; } - - x = sign(x) * Math.floor(Math.abs(x)); - x = x % moduloVal; - - if (!typeOpts.unsigned && x >= moduloBound) { - return x - moduloVal; - } else if (typeOpts.unsigned) { - if (x < 0) { - x += moduloVal; - } else if (x === -0) { // don't return negative zero - return 0; + const usingSsl = parsedUrl.protocol === 'https:'; + let maxSockets = 100; + if (this.requestOptions) { + maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; + } + // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis. + if (proxyUrl && proxyUrl.hostname) { + const agentOptions = { + maxSockets, + keepAlive: this._keepAlive, + proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && { + proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` + })), { host: proxyUrl.hostname, port: proxyUrl.port }) + }; + let tunnelAgent; + const overHttps = proxyUrl.protocol === 'https:'; + if (usingSsl) { + tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; } + else { + tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; + } + agent = tunnelAgent(agentOptions); + this._proxyAgent = agent; } - - return x; - } -} - -conversions["void"] = function () { - return undefined; -}; - -conversions["boolean"] = function (val) { - return !!val; -}; - -conversions["byte"] = createNumberConversion(8, { unsigned: false }); -conversions["octet"] = createNumberConversion(8, { unsigned: true }); - -conversions["short"] = createNumberConversion(16, { unsigned: false }); -conversions["unsigned short"] = createNumberConversion(16, { unsigned: true }); - -conversions["long"] = createNumberConversion(32, { unsigned: false }); -conversions["unsigned long"] = createNumberConversion(32, { unsigned: true }); - -conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 }); -conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 }); - -conversions["double"] = function (V) { - const x = +V; - - if (!Number.isFinite(x)) { - throw new TypeError("Argument is not a finite floating-point value"); - } - - return x; -}; - -conversions["unrestricted double"] = function (V) { - const x = +V; - - if (isNaN(x)) { - throw new TypeError("Argument is NaN"); - } - - return x; -}; - -// not quite valid, but good enough for JS -conversions["float"] = conversions["double"]; -conversions["unrestricted float"] = conversions["unrestricted double"]; - -conversions["DOMString"] = function (V, opts) { - if (!opts) opts = {}; - - if (opts.treatNullAsEmptyString && V === null) { - return ""; - } - - return String(V); -}; - -conversions["ByteString"] = function (V, opts) { - const x = String(V); - let c = undefined; - for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) { - if (c > 255) { - throw new TypeError("Argument is not a valid bytestring"); + // if reusing agent across request and tunneling agent isn't assigned create a new agent + if (this._keepAlive && !agent) { + const options = { keepAlive: this._keepAlive, maxSockets }; + agent = usingSsl ? new https.Agent(options) : new http.Agent(options); + this._agent = agent; } - } - - return x; -}; - -conversions["USVString"] = function (V) { - const S = String(V); - const n = S.length; - const U = []; - for (let i = 0; i < n; ++i) { - const c = S.charCodeAt(i); - if (c < 0xD800 || c > 0xDFFF) { - U.push(String.fromCodePoint(c)); - } else if (0xDC00 <= c && c <= 0xDFFF) { - U.push(String.fromCodePoint(0xFFFD)); - } else { - if (i === n - 1) { - U.push(String.fromCodePoint(0xFFFD)); - } else { - const d = S.charCodeAt(i + 1); - if (0xDC00 <= d && d <= 0xDFFF) { - const a = c & 0x3FF; - const b = d & 0x3FF; - U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b)); - ++i; - } else { - U.push(String.fromCodePoint(0xFFFD)); - } - } + // if not using private agent and tunnel agent isn't setup then use global agent + if (!agent) { + agent = usingSsl ? https.globalAgent : http.globalAgent; } + if (usingSsl && this._ignoreSslError) { + // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process + // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options + // we have to cast it to any and change it directly + agent.options = Object.assign(agent.options || {}, { + rejectUnauthorized: false + }); + } + return agent; } - - return U.join(''); -}; - -conversions["Date"] = function (V, opts) { - if (!(V instanceof Date)) { - throw new TypeError("Argument is not a Date object"); - } - if (isNaN(V)) { - return undefined; - } - - return V; -}; - -conversions["RegExp"] = function (V, opts) { - if (!(V instanceof RegExp)) { - V = new RegExp(V); - } - - return V; -}; - - -/***/ }), - -/***/ 8262: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - -const usm = __nccwpck_require__(33); - -exports.implementation = class URLImpl { - constructor(constructorArgs) { - const url = constructorArgs[0]; - const base = constructorArgs[1]; - - let parsedBase = null; - if (base !== undefined) { - parsedBase = usm.basicURLParse(base); - if (parsedBase === "failure") { - throw new TypeError("Invalid base URL"); - } - } - - const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase }); - if (parsedURL === "failure") { - throw new TypeError("Invalid URL"); - } - - this._url = parsedURL; - - // TODO: query stuff - } - - get href() { - return usm.serializeURL(this._url); - } - - set href(v) { - const parsedURL = usm.basicURLParse(v); - if (parsedURL === "failure") { - throw new TypeError("Invalid URL"); - } - - this._url = parsedURL; - } - - get origin() { - return usm.serializeURLOrigin(this._url); - } - - get protocol() { - return this._url.scheme + ":"; - } - - set protocol(v) { - usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" }); - } - - get username() { - return this._url.username; - } - - set username(v) { - if (usm.cannotHaveAUsernamePasswordPort(this._url)) { - return; - } - - usm.setTheUsername(this._url, v); - } - - get password() { - return this._url.password; - } - - set password(v) { - if (usm.cannotHaveAUsernamePasswordPort(this._url)) { - return; - } - - usm.setThePassword(this._url, v); - } - - get host() { - const url = this._url; - - if (url.host === null) { - return ""; - } - - if (url.port === null) { - return usm.serializeHost(url.host); - } - - return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port); - } - - set host(v) { - if (this._url.cannotBeABaseURL) { - return; - } - - usm.basicURLParse(v, { url: this._url, stateOverride: "host" }); - } - - get hostname() { - if (this._url.host === null) { - return ""; - } - - return usm.serializeHost(this._url.host); - } - - set hostname(v) { - if (this._url.cannotBeABaseURL) { - return; - } - - usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" }); - } - - get port() { - if (this._url.port === null) { - return ""; - } - - return usm.serializeInteger(this._url.port); - } - - set port(v) { - if (usm.cannotHaveAUsernamePasswordPort(this._url)) { - return; - } - - if (v === "") { - this._url.port = null; - } else { - usm.basicURLParse(v, { url: this._url, stateOverride: "port" }); - } - } - - get pathname() { - if (this._url.cannotBeABaseURL) { - return this._url.path[0]; - } - - if (this._url.path.length === 0) { - return ""; - } - - return "/" + this._url.path.join("/"); - } - - set pathname(v) { - if (this._url.cannotBeABaseURL) { - return; - } - - this._url.path = []; - usm.basicURLParse(v, { url: this._url, stateOverride: "path start" }); - } - - get search() { - if (this._url.query === null || this._url.query === "") { - return ""; - } - - return "?" + this._url.query; - } - - set search(v) { - // TODO: query stuff - - const url = this._url; - - if (v === "") { - url.query = null; - return; - } - - const input = v[0] === "?" ? v.substring(1) : v; - url.query = ""; - usm.basicURLParse(input, { url, stateOverride: "query" }); - } - - get hash() { - if (this._url.fragment === null || this._url.fragment === "") { - return ""; + _performExponentialBackoff(retryNumber) { + return __awaiter(this, void 0, void 0, function* () { + retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); + const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); + return new Promise(resolve => setTimeout(() => resolve(), ms)); + }); } - - return "#" + this._url.fragment; - } - - set hash(v) { - if (v === "") { - this._url.fragment = null; - return; + _processResponse(res, options) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { + const statusCode = res.message.statusCode || 0; + const response = { + statusCode, + result: null, + headers: {} + }; + // not found leads to null obj returned + if (statusCode === HttpCodes.NotFound) { + resolve(response); + } + // get the result from the body + function dateTimeDeserializer(key, value) { + if (typeof value === 'string') { + const a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } + } + return value; + } + let obj; + let contents; + try { + contents = yield res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, dateTimeDeserializer); + } + else { + obj = JSON.parse(contents); + } + response.result = obj; + } + response.headers = res.message.headers; + } + catch (err) { + // Invalid resource (contents not json); leaving result obj null + } + // note that 3xx redirects are handled by the http layer. + if (statusCode > 299) { + let msg; + // if exception/error in body, attempt to get better error + if (obj && obj.message) { + msg = obj.message; + } + else if (contents && contents.length > 0) { + // it may be the case that the exception is in the body message as string + msg = contents; + } + else { + msg = `Failed request: (${statusCode})`; + } + const err = new HttpClientError(msg, statusCode); + err.result = response.result; + reject(err); + } + else { + resolve(response); + } + })); + }); } - - const input = v[0] === "#" ? v.substring(1) : v; - this._url.fragment = ""; - usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" }); - } - - toJSON() { - return this.href; - } -}; - - -/***/ }), - -/***/ 653: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -const conversions = __nccwpck_require__(5871); -const utils = __nccwpck_require__(276); -const Impl = __nccwpck_require__(8262); - -const impl = utils.implSymbol; - -function URL(url) { - if (!this || this[impl] || !(this instanceof URL)) { - throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function."); - } - if (arguments.length < 1) { - throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present."); - } - const args = []; - for (let i = 0; i < arguments.length && i < 2; ++i) { - args[i] = arguments[i]; - } - args[0] = conversions["USVString"](args[0]); - if (args[1] !== undefined) { - args[1] = conversions["USVString"](args[1]); - } - - module.exports.setup(this, args); } - -URL.prototype.toJSON = function toJSON() { - if (!this || !module.exports.is(this)) { - throw new TypeError("Illegal invocation"); - } - const args = []; - for (let i = 0; i < arguments.length && i < 0; ++i) { - args[i] = arguments[i]; - } - return this[impl].toJSON.apply(this[impl], args); -}; -Object.defineProperty(URL.prototype, "href", { - get() { - return this[impl].href; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].href = V; - }, - enumerable: true, - configurable: true -}); - -URL.prototype.toString = function () { - if (!this || !module.exports.is(this)) { - throw new TypeError("Illegal invocation"); - } - return this.href; -}; - -Object.defineProperty(URL.prototype, "origin", { - get() { - return this[impl].origin; - }, - enumerable: true, - configurable: true -}); - -Object.defineProperty(URL.prototype, "protocol", { - get() { - return this[impl].protocol; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].protocol = V; - }, - enumerable: true, - configurable: true -}); - -Object.defineProperty(URL.prototype, "username", { - get() { - return this[impl].username; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].username = V; - }, - enumerable: true, - configurable: true -}); - -Object.defineProperty(URL.prototype, "password", { - get() { - return this[impl].password; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].password = V; - }, - enumerable: true, - configurable: true -}); - -Object.defineProperty(URL.prototype, "host", { - get() { - return this[impl].host; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].host = V; - }, - enumerable: true, - configurable: true -}); - -Object.defineProperty(URL.prototype, "hostname", { - get() { - return this[impl].hostname; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].hostname = V; - }, - enumerable: true, - configurable: true -}); - -Object.defineProperty(URL.prototype, "port", { - get() { - return this[impl].port; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].port = V; - }, - enumerable: true, - configurable: true -}); - -Object.defineProperty(URL.prototype, "pathname", { - get() { - return this[impl].pathname; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].pathname = V; - }, - enumerable: true, - configurable: true -}); - -Object.defineProperty(URL.prototype, "search", { - get() { - return this[impl].search; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].search = V; - }, - enumerable: true, - configurable: true -}); - -Object.defineProperty(URL.prototype, "hash", { - get() { - return this[impl].hash; - }, - set(V) { - V = conversions["USVString"](V); - this[impl].hash = V; - }, - enumerable: true, - configurable: true -}); - - -module.exports = { - is(obj) { - return !!obj && obj[impl] instanceof Impl.implementation; - }, - create(constructorArgs, privateData) { - let obj = Object.create(URL.prototype); - this.setup(obj, constructorArgs, privateData); - return obj; - }, - setup(obj, constructorArgs, privateData) { - if (!privateData) privateData = {}; - privateData.wrapper = obj; - - obj[impl] = new Impl.implementation(constructorArgs, privateData); - obj[impl][utils.wrapperSymbol] = obj; - }, - interface: URL, - expose: { - Window: { URL: URL }, - Worker: { URL: URL } - } -}; - - - -/***/ }), - -/***/ 3323: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - - -exports.URL = __nccwpck_require__(653)["interface"]; -exports.serializeURL = __nccwpck_require__(33).serializeURL; -exports.serializeURLOrigin = __nccwpck_require__(33).serializeURLOrigin; -exports.basicURLParse = __nccwpck_require__(33).basicURLParse; -exports.setTheUsername = __nccwpck_require__(33).setTheUsername; -exports.setThePassword = __nccwpck_require__(33).setThePassword; -exports.serializeHost = __nccwpck_require__(33).serializeHost; -exports.serializeInteger = __nccwpck_require__(33).serializeInteger; -exports.parseURL = __nccwpck_require__(33).parseURL; - - -/***/ }), - -/***/ 33: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - -const punycode = __nccwpck_require__(5477); -const tr46 = __nccwpck_require__(2299); - -const specialSchemes = { - ftp: 21, - file: null, - gopher: 70, - http: 80, - https: 443, - ws: 80, - wss: 443 -}; - -const failure = Symbol("failure"); - -function countSymbols(str) { - return punycode.ucs2.decode(str).length; -} - -function at(input, idx) { - const c = input[idx]; - return isNaN(c) ? undefined : String.fromCodePoint(c); -} - -function isASCIIDigit(c) { - return c >= 0x30 && c <= 0x39; -} - -function isASCIIAlpha(c) { - return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A); -} - -function isASCIIAlphanumeric(c) { - return isASCIIAlpha(c) || isASCIIDigit(c); -} - -function isASCIIHex(c) { - return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66); -} - -function isSingleDot(buffer) { - return buffer === "." || buffer.toLowerCase() === "%2e"; -} - -function isDoubleDot(buffer) { - buffer = buffer.toLowerCase(); - return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e"; -} - -function isWindowsDriveLetterCodePoints(cp1, cp2) { - return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124); -} - -function isWindowsDriveLetterString(string) { - return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|"); -} - -function isNormalizedWindowsDriveLetterString(string) { - return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":"; -} - -function containsForbiddenHostCodePoint(string) { - return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1; -} - -function containsForbiddenHostCodePointExcludingPercent(string) { - return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1; -} - -function isSpecialScheme(scheme) { - return specialSchemes[scheme] !== undefined; -} - -function isSpecial(url) { - return isSpecialScheme(url.scheme); -} - -function defaultPort(scheme) { - return specialSchemes[scheme]; -} - -function percentEncode(c) { - let hex = c.toString(16).toUpperCase(); - if (hex.length === 1) { - hex = "0" + hex; - } - - return "%" + hex; -} - -function utf8PercentEncode(c) { - const buf = new Buffer(c); - - let str = ""; - - for (let i = 0; i < buf.length; ++i) { - str += percentEncode(buf[i]); - } - - return str; -} - -function utf8PercentDecode(str) { - const input = new Buffer(str); - const output = []; - for (let i = 0; i < input.length; ++i) { - if (input[i] !== 37) { - output.push(input[i]); - } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) { - output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16)); - i += 2; - } else { - output.push(input[i]); - } - } - return new Buffer(output).toString(); -} - -function isC0ControlPercentEncode(c) { - return c <= 0x1F || c > 0x7E; -} - -const extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]); -function isPathPercentEncode(c) { - return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c); -} - -const extraUserinfoPercentEncodeSet = - new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]); -function isUserinfoPercentEncode(c) { - return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c); -} - -function percentEncodeChar(c, encodeSetPredicate) { - const cStr = String.fromCodePoint(c); - - if (encodeSetPredicate(c)) { - return utf8PercentEncode(cStr); - } - - return cStr; -} - -function parseIPv4Number(input) { - let R = 10; - - if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") { - input = input.substring(2); - R = 16; - } else if (input.length >= 2 && input.charAt(0) === "0") { - input = input.substring(1); - R = 8; - } - - if (input === "") { - return 0; - } - - const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/); - if (regex.test(input)) { - return failure; - } - - return parseInt(input, R); -} - -function parseIPv4(input) { - const parts = input.split("."); - if (parts[parts.length - 1] === "") { - if (parts.length > 1) { - parts.pop(); - } - } - - if (parts.length > 4) { - return input; - } - - const numbers = []; - for (const part of parts) { - if (part === "") { - return input; - } - const n = parseIPv4Number(part); - if (n === failure) { - return input; - } - - numbers.push(n); - } - - for (let i = 0; i < numbers.length - 1; ++i) { - if (numbers[i] > 255) { - return failure; - } - } - if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) { - return failure; - } - - let ipv4 = numbers.pop(); - let counter = 0; - - for (const n of numbers) { - ipv4 += n * Math.pow(256, 3 - counter); - ++counter; - } - - return ipv4; -} - -function serializeIPv4(address) { - let output = ""; - let n = address; - - for (let i = 1; i <= 4; ++i) { - output = String(n % 256) + output; - if (i !== 4) { - output = "." + output; - } - n = Math.floor(n / 256); - } - - return output; -} - -function parseIPv6(input) { - const address = [0, 0, 0, 0, 0, 0, 0, 0]; - let pieceIndex = 0; - let compress = null; - let pointer = 0; - - input = punycode.ucs2.decode(input); - - if (input[pointer] === 58) { - if (input[pointer + 1] !== 58) { - return failure; - } - - pointer += 2; - ++pieceIndex; - compress = pieceIndex; - } - - while (pointer < input.length) { - if (pieceIndex === 8) { - return failure; - } - - if (input[pointer] === 58) { - if (compress !== null) { - return failure; - } - ++pointer; - ++pieceIndex; - compress = pieceIndex; - continue; - } - - let value = 0; - let length = 0; - - while (length < 4 && isASCIIHex(input[pointer])) { - value = value * 0x10 + parseInt(at(input, pointer), 16); - ++pointer; - ++length; - } - - if (input[pointer] === 46) { - if (length === 0) { - return failure; - } - - pointer -= length; - - if (pieceIndex > 6) { - return failure; - } - - let numbersSeen = 0; - - while (input[pointer] !== undefined) { - let ipv4Piece = null; - - if (numbersSeen > 0) { - if (input[pointer] === 46 && numbersSeen < 4) { - ++pointer; - } else { - return failure; - } - } - - if (!isASCIIDigit(input[pointer])) { - return failure; - } - - while (isASCIIDigit(input[pointer])) { - const number = parseInt(at(input, pointer)); - if (ipv4Piece === null) { - ipv4Piece = number; - } else if (ipv4Piece === 0) { - return failure; - } else { - ipv4Piece = ipv4Piece * 10 + number; - } - if (ipv4Piece > 255) { - return failure; - } - ++pointer; - } - - address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece; - - ++numbersSeen; - - if (numbersSeen === 2 || numbersSeen === 4) { - ++pieceIndex; - } - } - - if (numbersSeen !== 4) { - return failure; - } - - break; - } else if (input[pointer] === 58) { - ++pointer; - if (input[pointer] === undefined) { - return failure; - } - } else if (input[pointer] !== undefined) { - return failure; - } - - address[pieceIndex] = value; - ++pieceIndex; - } - - if (compress !== null) { - let swaps = pieceIndex - compress; - pieceIndex = 7; - while (pieceIndex !== 0 && swaps > 0) { - const temp = address[compress + swaps - 1]; - address[compress + swaps - 1] = address[pieceIndex]; - address[pieceIndex] = temp; - --pieceIndex; - --swaps; - } - } else if (compress === null && pieceIndex !== 8) { - return failure; - } - - return address; -} - -function serializeIPv6(address) { - let output = ""; - const seqResult = findLongestZeroSequence(address); - const compress = seqResult.idx; - let ignore0 = false; - - for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) { - if (ignore0 && address[pieceIndex] === 0) { - continue; - } else if (ignore0) { - ignore0 = false; - } - - if (compress === pieceIndex) { - const separator = pieceIndex === 0 ? "::" : ":"; - output += separator; - ignore0 = true; - continue; - } - - output += address[pieceIndex].toString(16); - - if (pieceIndex !== 7) { - output += ":"; - } - } - - return output; -} - -function parseHost(input, isSpecialArg) { - if (input[0] === "[") { - if (input[input.length - 1] !== "]") { - return failure; - } - - return parseIPv6(input.substring(1, input.length - 1)); - } - - if (!isSpecialArg) { - return parseOpaqueHost(input); - } - - const domain = utf8PercentDecode(input); - const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false); - if (asciiDomain === null) { - return failure; - } - - if (containsForbiddenHostCodePoint(asciiDomain)) { - return failure; - } - - const ipv4Host = parseIPv4(asciiDomain); - if (typeof ipv4Host === "number" || ipv4Host === failure) { - return ipv4Host; - } - - return asciiDomain; -} - -function parseOpaqueHost(input) { - if (containsForbiddenHostCodePointExcludingPercent(input)) { - return failure; - } - - let output = ""; - const decoded = punycode.ucs2.decode(input); - for (let i = 0; i < decoded.length; ++i) { - output += percentEncodeChar(decoded[i], isC0ControlPercentEncode); - } - return output; -} - -function findLongestZeroSequence(arr) { - let maxIdx = null; - let maxLen = 1; // only find elements > 1 - let currStart = null; - let currLen = 0; - - for (let i = 0; i < arr.length; ++i) { - if (arr[i] !== 0) { - if (currLen > maxLen) { - maxIdx = currStart; - maxLen = currLen; - } - - currStart = null; - currLen = 0; - } else { - if (currStart === null) { - currStart = i; - } - ++currLen; - } - } - - // if trailing zeros - if (currLen > maxLen) { - maxIdx = currStart; - maxLen = currLen; - } - - return { - idx: maxIdx, - len: maxLen - }; -} - -function serializeHost(host) { - if (typeof host === "number") { - return serializeIPv4(host); - } - - // IPv6 serializer - if (host instanceof Array) { - return "[" + serializeIPv6(host) + "]"; - } - - return host; -} - -function trimControlChars(url) { - return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, ""); -} - -function trimTabAndNewline(url) { - return url.replace(/\u0009|\u000A|\u000D/g, ""); -} - -function shortenPath(url) { - const path = url.path; - if (path.length === 0) { - return; - } - if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) { - return; - } - - path.pop(); -} - -function includesCredentials(url) { - return url.username !== "" || url.password !== ""; -} - -function cannotHaveAUsernamePasswordPort(url) { - return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file"; -} - -function isNormalizedWindowsDriveLetter(string) { - return /^[A-Za-z]:$/.test(string); -} - -function URLStateMachine(input, base, encodingOverride, url, stateOverride) { - this.pointer = 0; - this.input = input; - this.base = base || null; - this.encodingOverride = encodingOverride || "utf-8"; - this.stateOverride = stateOverride; - this.url = url; - this.failure = false; - this.parseError = false; - - if (!this.url) { - this.url = { - scheme: "", - username: "", - password: "", - host: null, - port: null, - path: [], - query: null, - fragment: null, - - cannotBeABaseURL: false - }; - - const res = trimControlChars(this.input); - if (res !== this.input) { - this.parseError = true; - } - this.input = res; - } - - const res = trimTabAndNewline(this.input); - if (res !== this.input) { - this.parseError = true; - } - this.input = res; - - this.state = stateOverride || "scheme start"; - - this.buffer = ""; - this.atFlag = false; - this.arrFlag = false; - this.passwordTokenSeenFlag = false; - - this.input = punycode.ucs2.decode(this.input); - - for (; this.pointer <= this.input.length; ++this.pointer) { - const c = this.input[this.pointer]; - const cStr = isNaN(c) ? undefined : String.fromCodePoint(c); - - // exec state machine - const ret = this["parse " + this.state](c, cStr); - if (!ret) { - break; // terminate algorithm - } else if (ret === failure) { - this.failure = true; - break; - } - } -} - -URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) { - if (isASCIIAlpha(c)) { - this.buffer += cStr.toLowerCase(); - this.state = "scheme"; - } else if (!this.stateOverride) { - this.state = "no scheme"; - --this.pointer; - } else { - this.parseError = true; - return failure; - } - - return true; -}; - -URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) { - if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) { - this.buffer += cStr.toLowerCase(); - } else if (c === 58) { - if (this.stateOverride) { - if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) { - return false; - } - - if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) { - return false; - } - - if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") { - return false; - } - - if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) { - return false; - } - } - this.url.scheme = this.buffer; - this.buffer = ""; - if (this.stateOverride) { - return false; - } - if (this.url.scheme === "file") { - if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) { - this.parseError = true; - } - this.state = "file"; - } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) { - this.state = "special relative or authority"; - } else if (isSpecial(this.url)) { - this.state = "special authority slashes"; - } else if (this.input[this.pointer + 1] === 47) { - this.state = "path or authority"; - ++this.pointer; - } else { - this.url.cannotBeABaseURL = true; - this.url.path.push(""); - this.state = "cannot-be-a-base-URL path"; - } - } else if (!this.stateOverride) { - this.buffer = ""; - this.state = "no scheme"; - this.pointer = -1; - } else { - this.parseError = true; - return failure; - } - - return true; -}; - -URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) { - if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) { - return failure; - } else if (this.base.cannotBeABaseURL && c === 35) { - this.url.scheme = this.base.scheme; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - this.url.fragment = ""; - this.url.cannotBeABaseURL = true; - this.state = "fragment"; - } else if (this.base.scheme === "file") { - this.state = "file"; - --this.pointer; - } else { - this.state = "relative"; - --this.pointer; - } - - return true; -}; - -URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) { - if (c === 47 && this.input[this.pointer + 1] === 47) { - this.state = "special authority ignore slashes"; - ++this.pointer; - } else { - this.parseError = true; - this.state = "relative"; - --this.pointer; - } - - return true; -}; - -URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) { - if (c === 47) { - this.state = "authority"; - } else { - this.state = "path"; - --this.pointer; - } - - return true; -}; - -URLStateMachine.prototype["parse relative"] = function parseRelative(c) { - this.url.scheme = this.base.scheme; - if (isNaN(c)) { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - } else if (c === 47) { - this.state = "relative slash"; - } else if (c === 63) { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.url.path = this.base.path.slice(); - this.url.query = ""; - this.state = "query"; - } else if (c === 35) { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - this.url.fragment = ""; - this.state = "fragment"; - } else if (isSpecial(this.url) && c === 92) { - this.parseError = true; - this.state = "relative slash"; - } else { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.url.path = this.base.path.slice(0, this.base.path.length - 1); - - this.state = "path"; - --this.pointer; - } - - return true; -}; - -URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) { - if (isSpecial(this.url) && (c === 47 || c === 92)) { - if (c === 92) { - this.parseError = true; - } - this.state = "special authority ignore slashes"; - } else if (c === 47) { - this.state = "authority"; - } else { - this.url.username = this.base.username; - this.url.password = this.base.password; - this.url.host = this.base.host; - this.url.port = this.base.port; - this.state = "path"; - --this.pointer; - } - - return true; -}; - -URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) { - if (c === 47 && this.input[this.pointer + 1] === 47) { - this.state = "special authority ignore slashes"; - ++this.pointer; - } else { - this.parseError = true; - this.state = "special authority ignore slashes"; - --this.pointer; - } - - return true; -}; - -URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) { - if (c !== 47 && c !== 92) { - this.state = "authority"; - --this.pointer; - } else { - this.parseError = true; - } - - return true; -}; - -URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) { - if (c === 64) { - this.parseError = true; - if (this.atFlag) { - this.buffer = "%40" + this.buffer; - } - this.atFlag = true; - - // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars - const len = countSymbols(this.buffer); - for (let pointer = 0; pointer < len; ++pointer) { - const codePoint = this.buffer.codePointAt(pointer); - - if (codePoint === 58 && !this.passwordTokenSeenFlag) { - this.passwordTokenSeenFlag = true; - continue; - } - const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode); - if (this.passwordTokenSeenFlag) { - this.url.password += encodedCodePoints; - } else { - this.url.username += encodedCodePoints; - } - } - this.buffer = ""; - } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || - (isSpecial(this.url) && c === 92)) { - if (this.atFlag && this.buffer === "") { - this.parseError = true; - return failure; - } - this.pointer -= countSymbols(this.buffer) + 1; - this.buffer = ""; - this.state = "host"; - } else { - this.buffer += cStr; - } - - return true; -}; - -URLStateMachine.prototype["parse hostname"] = -URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) { - if (this.stateOverride && this.url.scheme === "file") { - --this.pointer; - this.state = "file host"; - } else if (c === 58 && !this.arrFlag) { - if (this.buffer === "") { - this.parseError = true; - return failure; - } - - const host = parseHost(this.buffer, isSpecial(this.url)); - if (host === failure) { - return failure; - } - - this.url.host = host; - this.buffer = ""; - this.state = "port"; - if (this.stateOverride === "hostname") { - return false; - } - } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || - (isSpecial(this.url) && c === 92)) { - --this.pointer; - if (isSpecial(this.url) && this.buffer === "") { - this.parseError = true; - return failure; - } else if (this.stateOverride && this.buffer === "" && - (includesCredentials(this.url) || this.url.port !== null)) { - this.parseError = true; - return false; - } - - const host = parseHost(this.buffer, isSpecial(this.url)); - if (host === failure) { - return failure; - } - - this.url.host = host; - this.buffer = ""; - this.state = "path start"; - if (this.stateOverride) { - return false; - } - } else { - if (c === 91) { - this.arrFlag = true; - } else if (c === 93) { - this.arrFlag = false; - } - this.buffer += cStr; - } - - return true; -}; - -URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) { - if (isASCIIDigit(c)) { - this.buffer += cStr; - } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || - (isSpecial(this.url) && c === 92) || - this.stateOverride) { - if (this.buffer !== "") { - const port = parseInt(this.buffer); - if (port > Math.pow(2, 16) - 1) { - this.parseError = true; - return failure; - } - this.url.port = port === defaultPort(this.url.scheme) ? null : port; - this.buffer = ""; - } - if (this.stateOverride) { - return false; - } - this.state = "path start"; - --this.pointer; - } else { - this.parseError = true; - return failure; - } - - return true; -}; - -const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]); - -URLStateMachine.prototype["parse file"] = function parseFile(c) { - this.url.scheme = "file"; - - if (c === 47 || c === 92) { - if (c === 92) { - this.parseError = true; - } - this.state = "file slash"; - } else if (this.base !== null && this.base.scheme === "file") { - if (isNaN(c)) { - this.url.host = this.base.host; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - } else if (c === 63) { - this.url.host = this.base.host; - this.url.path = this.base.path.slice(); - this.url.query = ""; - this.state = "query"; - } else if (c === 35) { - this.url.host = this.base.host; - this.url.path = this.base.path.slice(); - this.url.query = this.base.query; - this.url.fragment = ""; - this.state = "fragment"; - } else { - if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points - !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) || - (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points - !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) { - this.url.host = this.base.host; - this.url.path = this.base.path.slice(); - shortenPath(this.url); - } else { - this.parseError = true; - } - - this.state = "path"; - --this.pointer; - } - } else { - this.state = "path"; - --this.pointer; - } - - return true; -}; - -URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) { - if (c === 47 || c === 92) { - if (c === 92) { - this.parseError = true; - } - this.state = "file host"; - } else { - if (this.base !== null && this.base.scheme === "file") { - if (isNormalizedWindowsDriveLetterString(this.base.path[0])) { - this.url.path.push(this.base.path[0]); - } else { - this.url.host = this.base.host; - } - } - this.state = "path"; - --this.pointer; - } - - return true; -}; - -URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) { - if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) { - --this.pointer; - if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) { - this.parseError = true; - this.state = "path"; - } else if (this.buffer === "") { - this.url.host = ""; - if (this.stateOverride) { - return false; - } - this.state = "path start"; - } else { - let host = parseHost(this.buffer, isSpecial(this.url)); - if (host === failure) { - return failure; - } - if (host === "localhost") { - host = ""; - } - this.url.host = host; - - if (this.stateOverride) { - return false; - } - - this.buffer = ""; - this.state = "path start"; - } - } else { - this.buffer += cStr; - } - - return true; -}; - -URLStateMachine.prototype["parse path start"] = function parsePathStart(c) { - if (isSpecial(this.url)) { - if (c === 92) { - this.parseError = true; - } - this.state = "path"; - - if (c !== 47 && c !== 92) { - --this.pointer; - } - } else if (!this.stateOverride && c === 63) { - this.url.query = ""; - this.state = "query"; - } else if (!this.stateOverride && c === 35) { - this.url.fragment = ""; - this.state = "fragment"; - } else if (c !== undefined) { - this.state = "path"; - if (c !== 47) { - --this.pointer; - } - } - - return true; -}; - -URLStateMachine.prototype["parse path"] = function parsePath(c) { - if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) || - (!this.stateOverride && (c === 63 || c === 35))) { - if (isSpecial(this.url) && c === 92) { - this.parseError = true; - } - - if (isDoubleDot(this.buffer)) { - shortenPath(this.url); - if (c !== 47 && !(isSpecial(this.url) && c === 92)) { - this.url.path.push(""); - } - } else if (isSingleDot(this.buffer) && c !== 47 && - !(isSpecial(this.url) && c === 92)) { - this.url.path.push(""); - } else if (!isSingleDot(this.buffer)) { - if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) { - if (this.url.host !== "" && this.url.host !== null) { - this.parseError = true; - this.url.host = ""; - } - this.buffer = this.buffer[0] + ":"; - } - this.url.path.push(this.buffer); - } - this.buffer = ""; - if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) { - while (this.url.path.length > 1 && this.url.path[0] === "") { - this.parseError = true; - this.url.path.shift(); - } - } - if (c === 63) { - this.url.query = ""; - this.state = "query"; - } - if (c === 35) { - this.url.fragment = ""; - this.state = "fragment"; - } - } else { - // TODO: If c is not a URL code point and not "%", parse error. - - if (c === 37 && - (!isASCIIHex(this.input[this.pointer + 1]) || - !isASCIIHex(this.input[this.pointer + 2]))) { - this.parseError = true; - } - - this.buffer += percentEncodeChar(c, isPathPercentEncode); - } - - return true; -}; - -URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) { - if (c === 63) { - this.url.query = ""; - this.state = "query"; - } else if (c === 35) { - this.url.fragment = ""; - this.state = "fragment"; - } else { - // TODO: Add: not a URL code point - if (!isNaN(c) && c !== 37) { - this.parseError = true; - } - - if (c === 37 && - (!isASCIIHex(this.input[this.pointer + 1]) || - !isASCIIHex(this.input[this.pointer + 2]))) { - this.parseError = true; - } - - if (!isNaN(c)) { - this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode); - } - } - - return true; -}; - -URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) { - if (isNaN(c) || (!this.stateOverride && c === 35)) { - if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") { - this.encodingOverride = "utf-8"; - } - - const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead - for (let i = 0; i < buffer.length; ++i) { - if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 || - buffer[i] === 0x3C || buffer[i] === 0x3E) { - this.url.query += percentEncode(buffer[i]); - } else { - this.url.query += String.fromCodePoint(buffer[i]); - } - } - - this.buffer = ""; - if (c === 35) { - this.url.fragment = ""; - this.state = "fragment"; - } - } else { - // TODO: If c is not a URL code point and not "%", parse error. - if (c === 37 && - (!isASCIIHex(this.input[this.pointer + 1]) || - !isASCIIHex(this.input[this.pointer + 2]))) { - this.parseError = true; - } - - this.buffer += cStr; - } - - return true; -}; - -URLStateMachine.prototype["parse fragment"] = function parseFragment(c) { - if (isNaN(c)) { // do nothing - } else if (c === 0x0) { - this.parseError = true; - } else { - // TODO: If c is not a URL code point and not "%", parse error. - if (c === 37 && - (!isASCIIHex(this.input[this.pointer + 1]) || - !isASCIIHex(this.input[this.pointer + 2]))) { - this.parseError = true; - } - - this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode); - } - - return true; -}; - -function serializeURL(url, excludeFragment) { - let output = url.scheme + ":"; - if (url.host !== null) { - output += "//"; - - if (url.username !== "" || url.password !== "") { - output += url.username; - if (url.password !== "") { - output += ":" + url.password; - } - output += "@"; - } - - output += serializeHost(url.host); - - if (url.port !== null) { - output += ":" + url.port; - } - } else if (url.host === null && url.scheme === "file") { - output += "//"; - } - - if (url.cannotBeABaseURL) { - output += url.path[0]; - } else { - for (const string of url.path) { - output += "/" + string; - } - } - - if (url.query !== null) { - output += "?" + url.query; - } - - if (!excludeFragment && url.fragment !== null) { - output += "#" + url.fragment; - } - - return output; -} - -function serializeOrigin(tuple) { - let result = tuple.scheme + "://"; - result += serializeHost(tuple.host); - - if (tuple.port !== null) { - result += ":" + tuple.port; - } - - return result; -} - -module.exports.serializeURL = serializeURL; - -module.exports.serializeURLOrigin = function (url) { - // https://url.spec.whatwg.org/#concept-url-origin - switch (url.scheme) { - case "blob": - try { - return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0])); - } catch (e) { - // serializing an opaque origin returns "null" - return "null"; - } - case "ftp": - case "gopher": - case "http": - case "https": - case "ws": - case "wss": - return serializeOrigin({ - scheme: url.scheme, - host: url.host, - port: url.port - }); - case "file": - // spec says "exercise to the reader", chrome says "file://" - return "file://"; - default: - // serializing an opaque origin returns "null" - return "null"; - } -}; - -module.exports.basicURLParse = function (input, options) { - if (options === undefined) { - options = {}; - } - - const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride); - if (usm.failure) { - return "failure"; - } - - return usm.url; -}; - -module.exports.setTheUsername = function (url, username) { - url.username = ""; - const decoded = punycode.ucs2.decode(username); - for (let i = 0; i < decoded.length; ++i) { - url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode); - } -}; - -module.exports.setThePassword = function (url, password) { - url.password = ""; - const decoded = punycode.ucs2.decode(password); - for (let i = 0; i < decoded.length; ++i) { - url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode); - } -}; - -module.exports.serializeHost = serializeHost; - -module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort; - -module.exports.serializeInteger = function (integer) { - return String(integer); -}; - -module.exports.parseURL = function (input, options) { - if (options === undefined) { - options = {}; - } - - // We don't handle blobs, so this just delegates: - return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride }); -}; - +exports.HttpClient = HttpClient; +const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); +//# sourceMappingURL=index.js.map /***/ }), -/***/ 276: -/***/ ((module) => { +/***/ 835: +/***/ ((__unused_webpack_module, exports) => { "use strict"; - -module.exports.mixin = function mixin(target, source) { - const keys = Object.getOwnPropertyNames(source); - for (let i = 0; i < keys.length; ++i) { - Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i])); - } -}; - -module.exports.wrapperSymbol = Symbol("wrapper"); -module.exports.implSymbol = Symbol("impl"); - -module.exports.wrapperForImpl = function (impl) { - return impl[module.exports.wrapperSymbol]; -}; - -module.exports.implForWrapper = function (wrapper) { - return wrapper[module.exports.implSymbol]; -}; - - - -/***/ }), - -/***/ 1223: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -var wrappy = __nccwpck_require__(2940) -module.exports = wrappy(once) -module.exports.strict = wrappy(onceStrict) - -once.proto = once(function () { - Object.defineProperty(Function.prototype, 'once', { - value: function () { - return once(this) - }, - configurable: true - }) - - Object.defineProperty(Function.prototype, 'onceStrict', { - value: function () { - return onceStrict(this) - }, - configurable: true - }) -}) - -function once (fn) { - var f = function () { - if (f.called) return f.value - f.called = true - return f.value = fn.apply(this, arguments) - } - f.called = false - return f +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.checkBypass = exports.getProxyUrl = void 0; +function getProxyUrl(reqUrl) { + const usingSsl = reqUrl.protocol === 'https:'; + if (checkBypass(reqUrl)) { + return undefined; + } + const proxyVar = (() => { + if (usingSsl) { + return process.env['https_proxy'] || process.env['HTTPS_PROXY']; + } + else { + return process.env['http_proxy'] || process.env['HTTP_PROXY']; + } + })(); + if (proxyVar) { + return new URL(proxyVar); + } + else { + return undefined; + } } - -function onceStrict (fn) { - var f = function () { - if (f.called) - throw new Error(f.onceError) - f.called = true - return f.value = fn.apply(this, arguments) - } - var name = fn.name || 'Function wrapped with `once`' - f.onceError = name + " shouldn't be called more than once" - f.called = false - return f +exports.getProxyUrl = getProxyUrl; +function checkBypass(reqUrl) { + if (!reqUrl.hostname) { + return false; + } + const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; + if (!noProxy) { + return false; + } + // Determine the request port + let reqPort; + if (reqUrl.port) { + reqPort = Number(reqUrl.port); + } + else if (reqUrl.protocol === 'http:') { + reqPort = 80; + } + else if (reqUrl.protocol === 'https:') { + reqPort = 443; + } + // Format the request hostname and hostname with port + const upperReqHosts = [reqUrl.hostname.toUpperCase()]; + if (typeof reqPort === 'number') { + upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); + } + // Compare request host against noproxy + for (const upperNoProxyItem of noProxy + .split(',') + .map(x => x.trim().toUpperCase()) + .filter(x => x)) { + if (upperReqHosts.some(x => x === upperNoProxyItem)) { + return true; + } + } + return false; } - +exports.checkBypass = checkBypass; +//# sourceMappingURL=proxy.js.map /***/ }), -/***/ 4294: +/***/ 294: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -module.exports = __nccwpck_require__(4219); +module.exports = __nccwpck_require__(219); /***/ }), -/***/ 4219: +/***/ 219: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -var net = __nccwpck_require__(1808); -var tls = __nccwpck_require__(4404); -var http = __nccwpck_require__(3685); -var https = __nccwpck_require__(5687); -var events = __nccwpck_require__(2361); -var assert = __nccwpck_require__(9491); -var util = __nccwpck_require__(3837); +var net = __nccwpck_require__(808); +var tls = __nccwpck_require__(404); +var http = __nccwpck_require__(685); +var https = __nccwpck_require__(687); +var events = __nccwpck_require__(361); +var assert = __nccwpck_require__(491); +var util = __nccwpck_require__(837); exports.httpOverHttp = httpOverHttp; @@ -8794,33 +2045,7 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } - - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } - - return ""; -} - -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 5840: +/***/ 840: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -8884,29 +2109,29 @@ Object.defineProperty(exports, "parse", ({ } })); -var _v = _interopRequireDefault(__nccwpck_require__(8628)); +var _v = _interopRequireDefault(__nccwpck_require__(628)); -var _v2 = _interopRequireDefault(__nccwpck_require__(6409)); +var _v2 = _interopRequireDefault(__nccwpck_require__(409)); -var _v3 = _interopRequireDefault(__nccwpck_require__(5122)); +var _v3 = _interopRequireDefault(__nccwpck_require__(122)); -var _v4 = _interopRequireDefault(__nccwpck_require__(9120)); +var _v4 = _interopRequireDefault(__nccwpck_require__(120)); -var _nil = _interopRequireDefault(__nccwpck_require__(5332)); +var _nil = _interopRequireDefault(__nccwpck_require__(332)); -var _version = _interopRequireDefault(__nccwpck_require__(1595)); +var _version = _interopRequireDefault(__nccwpck_require__(595)); -var _validate = _interopRequireDefault(__nccwpck_require__(6900)); +var _validate = _interopRequireDefault(__nccwpck_require__(900)); -var _stringify = _interopRequireDefault(__nccwpck_require__(8950)); +var _stringify = _interopRequireDefault(__nccwpck_require__(950)); -var _parse = _interopRequireDefault(__nccwpck_require__(2746)); +var _parse = _interopRequireDefault(__nccwpck_require__(746)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /***/ }), -/***/ 4569: +/***/ 569: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -8917,7 +2142,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _crypto = _interopRequireDefault(__nccwpck_require__(6113)); +var _crypto = _interopRequireDefault(__nccwpck_require__(113)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -8936,7 +2161,7 @@ exports["default"] = _default; /***/ }), -/***/ 5332: +/***/ 332: /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -8951,7 +2176,7 @@ exports["default"] = _default; /***/ }), -/***/ 2746: +/***/ 746: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -8962,7 +2187,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _validate = _interopRequireDefault(__nccwpck_require__(6900)); +var _validate = _interopRequireDefault(__nccwpck_require__(900)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -9029,7 +2254,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = rng; -var _crypto = _interopRequireDefault(__nccwpck_require__(6113)); +var _crypto = _interopRequireDefault(__nccwpck_require__(113)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -9049,7 +2274,7 @@ function rng() { /***/ }), -/***/ 5274: +/***/ 274: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -9060,7 +2285,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _crypto = _interopRequireDefault(__nccwpck_require__(6113)); +var _crypto = _interopRequireDefault(__nccwpck_require__(113)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -9079,7 +2304,7 @@ exports["default"] = _default; /***/ }), -/***/ 8950: +/***/ 950: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -9090,7 +2315,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _validate = _interopRequireDefault(__nccwpck_require__(6900)); +var _validate = _interopRequireDefault(__nccwpck_require__(900)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -9125,7 +2350,7 @@ exports["default"] = _default; /***/ }), -/***/ 8628: +/***/ 628: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -9138,7 +2363,7 @@ exports["default"] = void 0; var _rng = _interopRequireDefault(__nccwpck_require__(807)); -var _stringify = _interopRequireDefault(__nccwpck_require__(8950)); +var _stringify = _interopRequireDefault(__nccwpck_require__(950)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -9239,7 +2464,7 @@ exports["default"] = _default; /***/ }), -/***/ 6409: +/***/ 409: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -9250,9 +2475,9 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _v = _interopRequireDefault(__nccwpck_require__(5998)); +var _v = _interopRequireDefault(__nccwpck_require__(998)); -var _md = _interopRequireDefault(__nccwpck_require__(4569)); +var _md = _interopRequireDefault(__nccwpck_require__(569)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -9262,7 +2487,7 @@ exports["default"] = _default; /***/ }), -/***/ 5998: +/***/ 998: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -9274,9 +2499,9 @@ Object.defineProperty(exports, "__esModule", ({ exports["default"] = _default; exports.URL = exports.DNS = void 0; -var _stringify = _interopRequireDefault(__nccwpck_require__(8950)); +var _stringify = _interopRequireDefault(__nccwpck_require__(950)); -var _parse = _interopRequireDefault(__nccwpck_require__(2746)); +var _parse = _interopRequireDefault(__nccwpck_require__(746)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -9347,7 +2572,7 @@ function _default(name, version, hashfunc) { /***/ }), -/***/ 5122: +/***/ 122: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -9360,7 +2585,7 @@ exports["default"] = void 0; var _rng = _interopRequireDefault(__nccwpck_require__(807)); -var _stringify = _interopRequireDefault(__nccwpck_require__(8950)); +var _stringify = _interopRequireDefault(__nccwpck_require__(950)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -9391,7 +2616,7 @@ exports["default"] = _default; /***/ }), -/***/ 9120: +/***/ 120: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -9402,9 +2627,9 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _v = _interopRequireDefault(__nccwpck_require__(5998)); +var _v = _interopRequireDefault(__nccwpck_require__(998)); -var _sha = _interopRequireDefault(__nccwpck_require__(5274)); +var _sha = _interopRequireDefault(__nccwpck_require__(274)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -9414,7 +2639,7 @@ exports["default"] = _default; /***/ }), -/***/ 6900: +/***/ 900: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -9438,7 +2663,7 @@ exports["default"] = _default; /***/ }), -/***/ 1595: +/***/ 595: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -9449,7 +2674,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports["default"] = void 0; -var _validate = _interopRequireDefault(__nccwpck_require__(6900)); +var _validate = _interopRequireDefault(__nccwpck_require__(900)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -9466,47 +2691,7 @@ exports["default"] = _default; /***/ }), -/***/ 2940: -/***/ ((module) => { - -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - - return wrapper - - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } -} - - -/***/ }), - -/***/ 7717: +/***/ 717: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -9538,44 +2723,43 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -const core = __importStar(__nccwpck_require__(2186)); -const github = __importStar(__nccwpck_require__(5438)); -const fs_1 = __importDefault(__nccwpck_require__(7147)); +const core = __importStar(__nccwpck_require__(186)); +const fs_1 = __importDefault(__nccwpck_require__(147)); const run = () => { // Prefix path to the graphite metric const GRAPHITE_PATH = 'reassure'; - let regressionOutput; - try { - regressionOutput = JSON.parse(fs_1.default.readFileSync('.reassure/output.json', 'utf8')); - } - catch (err) { - // Handle errors that occur during file reading or parsing - if (err instanceof Error) { - console.error('Error while parsing output.json:', err.message); - core.setFailed(err); + const PR_NUMBER = core.getInput('PR_NUMBER', { required: true }); + // Read the contents of the file, the file is in the JSONL format + const regressionFile = fs_1.default.readFileSync('.reassure/baseline.perf', 'utf8'); + // Split file contents by newline to get individual JSON entries + const regressionEntries = regressionFile.split('\n'); + // Initialize string to store Graphite metrics + let graphiteString = ''; + // Iterate over each entry + regressionEntries.forEach((entry) => { + // Skip empty lines + if (entry.trim() === '') { + return; } - } - const creationDate = regressionOutput.metadata.current.creationDate; - const timestampInMili = new Date(creationDate).getTime(); - // Graphite accepts timestamp in seconds - const timestamp = Math.floor(timestampInMili / 1000); - // Get PR number from the github context - const prNumber = github.context.payload.pull_request?.number; - // We need to combine all tests from the 4 buckets - const reassureTests = [...regressionOutput.meaningless, ...regressionOutput.significant, ...regressionOutput.countChanged, ...regressionOutput.added]; - // Map through every test and create string for meanDuration and meanCount - // eslint-disable-next-line rulesdir/prefer-underscore-method - const graphiteString = reassureTests - .map((test) => { - const current = test.current; - // Graphite doesn't accept metrics name with space, we replace spaces with "-" - const formattedName = current.name.split(' ').join('-'); - const renderDurationString = `${GRAPHITE_PATH}.${formattedName}.renderDuration ${current.meanDuration} ${timestamp}`; - const renderCountString = `${GRAPHITE_PATH}.${formattedName}.renderCount ${current.meanCount} ${timestamp}`; - const renderPRNumberString = `${GRAPHITE_PATH}.${formattedName}.prNumber ${prNumber} ${timestamp}`; - return `${renderDurationString}\n${renderCountString}\n${renderPRNumberString}`; - }) - .join('\n'); + try { + const current = JSON.parse(entry); + // Extract timestamp, Graphite accepts timestamp in seconds + const timestamp = current.metadata?.creationDate ? Math.floor(new Date(current.metadata.creationDate).getTime() / 1000) : ''; + if (current.name && current.meanDuration && current.meanCount && timestamp) { + const formattedName = current.name.split(' ').join('-'); + const renderDurationString = `${GRAPHITE_PATH}.${formattedName}.renderDuration ${current.meanDuration} ${timestamp}`; + const renderCountString = `${GRAPHITE_PATH}.${formattedName}.renderCount ${current.meanCount} ${timestamp}`; + const renderPRNumberString = `${GRAPHITE_PATH}.${formattedName}.prNumber ${PR_NUMBER} ${timestamp}`; + // Concatenate Graphite strings + graphiteString += `${renderDurationString}\n${renderCountString}\n${renderPRNumberString}\n`; + } + } + catch (e) { + const error = new Error('Error parsing baseline.perf JSON file'); + console.error(error.message); + core.setFailed(error); + } + }); // Set generated graphite string to the github variable core.setOutput('GRAPHITE_STRING', graphiteString); }; @@ -9587,15 +2771,7 @@ exports["default"] = run; /***/ }), -/***/ 2877: -/***/ ((module) => { - -module.exports = eval("require")("encoding"); - - -/***/ }), - -/***/ 9491: +/***/ 491: /***/ ((module) => { "use strict"; @@ -9603,7 +2779,7 @@ module.exports = require("assert"); /***/ }), -/***/ 6113: +/***/ 113: /***/ ((module) => { "use strict"; @@ -9611,7 +2787,7 @@ module.exports = require("crypto"); /***/ }), -/***/ 2361: +/***/ 361: /***/ ((module) => { "use strict"; @@ -9619,7 +2795,7 @@ module.exports = require("events"); /***/ }), -/***/ 7147: +/***/ 147: /***/ ((module) => { "use strict"; @@ -9627,7 +2803,7 @@ module.exports = require("fs"); /***/ }), -/***/ 3685: +/***/ 685: /***/ ((module) => { "use strict"; @@ -9635,7 +2811,7 @@ module.exports = require("http"); /***/ }), -/***/ 5687: +/***/ 687: /***/ ((module) => { "use strict"; @@ -9643,7 +2819,7 @@ module.exports = require("https"); /***/ }), -/***/ 1808: +/***/ 808: /***/ ((module) => { "use strict"; @@ -9651,7 +2827,7 @@ module.exports = require("net"); /***/ }), -/***/ 2037: +/***/ 37: /***/ ((module) => { "use strict"; @@ -9659,7 +2835,7 @@ module.exports = require("os"); /***/ }), -/***/ 1017: +/***/ 17: /***/ ((module) => { "use strict"; @@ -9667,23 +2843,7 @@ module.exports = require("path"); /***/ }), -/***/ 5477: -/***/ ((module) => { - -"use strict"; -module.exports = require("punycode"); - -/***/ }), - -/***/ 2781: -/***/ ((module) => { - -"use strict"; -module.exports = require("stream"); - -/***/ }), - -/***/ 4404: +/***/ 404: /***/ ((module) => { "use strict"; @@ -9691,36 +2851,12 @@ module.exports = require("tls"); /***/ }), -/***/ 7310: -/***/ ((module) => { - -"use strict"; -module.exports = require("url"); - -/***/ }), - -/***/ 3837: +/***/ 837: /***/ ((module) => { "use strict"; module.exports = require("util"); -/***/ }), - -/***/ 9796: -/***/ ((module) => { - -"use strict"; -module.exports = require("zlib"); - -/***/ }), - -/***/ 1907: -/***/ ((module) => { - -"use strict"; -module.exports = JSON.parse('[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped",[97]],[[66,66],"mapped",[98]],[[67,67],"mapped",[99]],[[68,68],"mapped",[100]],[[69,69],"mapped",[101]],[[70,70],"mapped",[102]],[[71,71],"mapped",[103]],[[72,72],"mapped",[104]],[[73,73],"mapped",[105]],[[74,74],"mapped",[106]],[[75,75],"mapped",[107]],[[76,76],"mapped",[108]],[[77,77],"mapped",[109]],[[78,78],"mapped",[110]],[[79,79],"mapped",[111]],[[80,80],"mapped",[112]],[[81,81],"mapped",[113]],[[82,82],"mapped",[114]],[[83,83],"mapped",[115]],[[84,84],"mapped",[116]],[[85,85],"mapped",[117]],[[86,86],"mapped",[118]],[[87,87],"mapped",[119]],[[88,88],"mapped",[120]],[[89,89],"mapped",[121]],[[90,90],"mapped",[122]],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped",[32]],[[161,167],"valid",[],"NV8"],[[168,168],"disallowed_STD3_mapped",[32,776]],[[169,169],"valid",[],"NV8"],[[170,170],"mapped",[97]],[[171,172],"valid",[],"NV8"],[[173,173],"ignored"],[[174,174],"valid",[],"NV8"],[[175,175],"disallowed_STD3_mapped",[32,772]],[[176,177],"valid",[],"NV8"],[[178,178],"mapped",[50]],[[179,179],"mapped",[51]],[[180,180],"disallowed_STD3_mapped",[32,769]],[[181,181],"mapped",[956]],[[182,182],"valid",[],"NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped",[32,807]],[[185,185],"mapped",[49]],[[186,186],"mapped",[111]],[[187,187],"valid",[],"NV8"],[[188,188],"mapped",[49,8260,52]],[[189,189],"mapped",[49,8260,50]],[[190,190],"mapped",[51,8260,52]],[[191,191],"valid",[],"NV8"],[[192,192],"mapped",[224]],[[193,193],"mapped",[225]],[[194,194],"mapped",[226]],[[195,195],"mapped",[227]],[[196,196],"mapped",[228]],[[197,197],"mapped",[229]],[[198,198],"mapped",[230]],[[199,199],"mapped",[231]],[[200,200],"mapped",[232]],[[201,201],"mapped",[233]],[[202,202],"mapped",[234]],[[203,203],"mapped",[235]],[[204,204],"mapped",[236]],[[205,205],"mapped",[237]],[[206,206],"mapped",[238]],[[207,207],"mapped",[239]],[[208,208],"mapped",[240]],[[209,209],"mapped",[241]],[[210,210],"mapped",[242]],[[211,211],"mapped",[243]],[[212,212],"mapped",[244]],[[213,213],"mapped",[245]],[[214,214],"mapped",[246]],[[215,215],"valid",[],"NV8"],[[216,216],"mapped",[248]],[[217,217],"mapped",[249]],[[218,218],"mapped",[250]],[[219,219],"mapped",[251]],[[220,220],"mapped",[252]],[[221,221],"mapped",[253]],[[222,222],"mapped",[254]],[[223,223],"deviation",[115,115]],[[224,246],"valid"],[[247,247],"valid",[],"NV8"],[[248,255],"valid"],[[256,256],"mapped",[257]],[[257,257],"valid"],[[258,258],"mapped",[259]],[[259,259],"valid"],[[260,260],"mapped",[261]],[[261,261],"valid"],[[262,262],"mapped",[263]],[[263,263],"valid"],[[264,264],"mapped",[265]],[[265,265],"valid"],[[266,266],"mapped",[267]],[[267,267],"valid"],[[268,268],"mapped",[269]],[[269,269],"valid"],[[270,270],"mapped",[271]],[[271,271],"valid"],[[272,272],"mapped",[273]],[[273,273],"valid"],[[274,274],"mapped",[275]],[[275,275],"valid"],[[276,276],"mapped",[277]],[[277,277],"valid"],[[278,278],"mapped",[279]],[[279,279],"valid"],[[280,280],"mapped",[281]],[[281,281],"valid"],[[282,282],"mapped",[283]],[[283,283],"valid"],[[284,284],"mapped",[285]],[[285,285],"valid"],[[286,286],"mapped",[287]],[[287,287],"valid"],[[288,288],"mapped",[289]],[[289,289],"valid"],[[290,290],"mapped",[291]],[[291,291],"valid"],[[292,292],"mapped",[293]],[[293,293],"valid"],[[294,294],"mapped",[295]],[[295,295],"valid"],[[296,296],"mapped",[297]],[[297,297],"valid"],[[298,298],"mapped",[299]],[[299,299],"valid"],[[300,300],"mapped",[301]],[[301,301],"valid"],[[302,302],"mapped",[303]],[[303,303],"valid"],[[304,304],"mapped",[105,775]],[[305,305],"valid"],[[306,307],"mapped",[105,106]],[[308,308],"mapped",[309]],[[309,309],"valid"],[[310,310],"mapped",[311]],[[311,312],"valid"],[[313,313],"mapped",[314]],[[314,314],"valid"],[[315,315],"mapped",[316]],[[316,316],"valid"],[[317,317],"mapped",[318]],[[318,318],"valid"],[[319,320],"mapped",[108,183]],[[321,321],"mapped",[322]],[[322,322],"valid"],[[323,323],"mapped",[324]],[[324,324],"valid"],[[325,325],"mapped",[326]],[[326,326],"valid"],[[327,327],"mapped",[328]],[[328,328],"valid"],[[329,329],"mapped",[700,110]],[[330,330],"mapped",[331]],[[331,331],"valid"],[[332,332],"mapped",[333]],[[333,333],"valid"],[[334,334],"mapped",[335]],[[335,335],"valid"],[[336,336],"mapped",[337]],[[337,337],"valid"],[[338,338],"mapped",[339]],[[339,339],"valid"],[[340,340],"mapped",[341]],[[341,341],"valid"],[[342,342],"mapped",[343]],[[343,343],"valid"],[[344,344],"mapped",[345]],[[345,345],"valid"],[[346,346],"mapped",[347]],[[347,347],"valid"],[[348,348],"mapped",[349]],[[349,349],"valid"],[[350,350],"mapped",[351]],[[351,351],"valid"],[[352,352],"mapped",[353]],[[353,353],"valid"],[[354,354],"mapped",[355]],[[355,355],"valid"],[[356,356],"mapped",[357]],[[357,357],"valid"],[[358,358],"mapped",[359]],[[359,359],"valid"],[[360,360],"mapped",[361]],[[361,361],"valid"],[[362,362],"mapped",[363]],[[363,363],"valid"],[[364,364],"mapped",[365]],[[365,365],"valid"],[[366,366],"mapped",[367]],[[367,367],"valid"],[[368,368],"mapped",[369]],[[369,369],"valid"],[[370,370],"mapped",[371]],[[371,371],"valid"],[[372,372],"mapped",[373]],[[373,373],"valid"],[[374,374],"mapped",[375]],[[375,375],"valid"],[[376,376],"mapped",[255]],[[377,377],"mapped",[378]],[[378,378],"valid"],[[379,379],"mapped",[380]],[[380,380],"valid"],[[381,381],"mapped",[382]],[[382,382],"valid"],[[383,383],"mapped",[115]],[[384,384],"valid"],[[385,385],"mapped",[595]],[[386,386],"mapped",[387]],[[387,387],"valid"],[[388,388],"mapped",[389]],[[389,389],"valid"],[[390,390],"mapped",[596]],[[391,391],"mapped",[392]],[[392,392],"valid"],[[393,393],"mapped",[598]],[[394,394],"mapped",[599]],[[395,395],"mapped",[396]],[[396,397],"valid"],[[398,398],"mapped",[477]],[[399,399],"mapped",[601]],[[400,400],"mapped",[603]],[[401,401],"mapped",[402]],[[402,402],"valid"],[[403,403],"mapped",[608]],[[404,404],"mapped",[611]],[[405,405],"valid"],[[406,406],"mapped",[617]],[[407,407],"mapped",[616]],[[408,408],"mapped",[409]],[[409,411],"valid"],[[412,412],"mapped",[623]],[[413,413],"mapped",[626]],[[414,414],"valid"],[[415,415],"mapped",[629]],[[416,416],"mapped",[417]],[[417,417],"valid"],[[418,418],"mapped",[419]],[[419,419],"valid"],[[420,420],"mapped",[421]],[[421,421],"valid"],[[422,422],"mapped",[640]],[[423,423],"mapped",[424]],[[424,424],"valid"],[[425,425],"mapped",[643]],[[426,427],"valid"],[[428,428],"mapped",[429]],[[429,429],"valid"],[[430,430],"mapped",[648]],[[431,431],"mapped",[432]],[[432,432],"valid"],[[433,433],"mapped",[650]],[[434,434],"mapped",[651]],[[435,435],"mapped",[436]],[[436,436],"valid"],[[437,437],"mapped",[438]],[[438,438],"valid"],[[439,439],"mapped",[658]],[[440,440],"mapped",[441]],[[441,443],"valid"],[[444,444],"mapped",[445]],[[445,451],"valid"],[[452,454],"mapped",[100,382]],[[455,457],"mapped",[108,106]],[[458,460],"mapped",[110,106]],[[461,461],"mapped",[462]],[[462,462],"valid"],[[463,463],"mapped",[464]],[[464,464],"valid"],[[465,465],"mapped",[466]],[[466,466],"valid"],[[467,467],"mapped",[468]],[[468,468],"valid"],[[469,469],"mapped",[470]],[[470,470],"valid"],[[471,471],"mapped",[472]],[[472,472],"valid"],[[473,473],"mapped",[474]],[[474,474],"valid"],[[475,475],"mapped",[476]],[[476,477],"valid"],[[478,478],"mapped",[479]],[[479,479],"valid"],[[480,480],"mapped",[481]],[[481,481],"valid"],[[482,482],"mapped",[483]],[[483,483],"valid"],[[484,484],"mapped",[485]],[[485,485],"valid"],[[486,486],"mapped",[487]],[[487,487],"valid"],[[488,488],"mapped",[489]],[[489,489],"valid"],[[490,490],"mapped",[491]],[[491,491],"valid"],[[492,492],"mapped",[493]],[[493,493],"valid"],[[494,494],"mapped",[495]],[[495,496],"valid"],[[497,499],"mapped",[100,122]],[[500,500],"mapped",[501]],[[501,501],"valid"],[[502,502],"mapped",[405]],[[503,503],"mapped",[447]],[[504,504],"mapped",[505]],[[505,505],"valid"],[[506,506],"mapped",[507]],[[507,507],"valid"],[[508,508],"mapped",[509]],[[509,509],"valid"],[[510,510],"mapped",[511]],[[511,511],"valid"],[[512,512],"mapped",[513]],[[513,513],"valid"],[[514,514],"mapped",[515]],[[515,515],"valid"],[[516,516],"mapped",[517]],[[517,517],"valid"],[[518,518],"mapped",[519]],[[519,519],"valid"],[[520,520],"mapped",[521]],[[521,521],"valid"],[[522,522],"mapped",[523]],[[523,523],"valid"],[[524,524],"mapped",[525]],[[525,525],"valid"],[[526,526],"mapped",[527]],[[527,527],"valid"],[[528,528],"mapped",[529]],[[529,529],"valid"],[[530,530],"mapped",[531]],[[531,531],"valid"],[[532,532],"mapped",[533]],[[533,533],"valid"],[[534,534],"mapped",[535]],[[535,535],"valid"],[[536,536],"mapped",[537]],[[537,537],"valid"],[[538,538],"mapped",[539]],[[539,539],"valid"],[[540,540],"mapped",[541]],[[541,541],"valid"],[[542,542],"mapped",[543]],[[543,543],"valid"],[[544,544],"mapped",[414]],[[545,545],"valid"],[[546,546],"mapped",[547]],[[547,547],"valid"],[[548,548],"mapped",[549]],[[549,549],"valid"],[[550,550],"mapped",[551]],[[551,551],"valid"],[[552,552],"mapped",[553]],[[553,553],"valid"],[[554,554],"mapped",[555]],[[555,555],"valid"],[[556,556],"mapped",[557]],[[557,557],"valid"],[[558,558],"mapped",[559]],[[559,559],"valid"],[[560,560],"mapped",[561]],[[561,561],"valid"],[[562,562],"mapped",[563]],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped",[11365]],[[571,571],"mapped",[572]],[[572,572],"valid"],[[573,573],"mapped",[410]],[[574,574],"mapped",[11366]],[[575,576],"valid"],[[577,577],"mapped",[578]],[[578,578],"valid"],[[579,579],"mapped",[384]],[[580,580],"mapped",[649]],[[581,581],"mapped",[652]],[[582,582],"mapped",[583]],[[583,583],"valid"],[[584,584],"mapped",[585]],[[585,585],"valid"],[[586,586],"mapped",[587]],[[587,587],"valid"],[[588,588],"mapped",[589]],[[589,589],"valid"],[[590,590],"mapped",[591]],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped",[104]],[[689,689],"mapped",[614]],[[690,690],"mapped",[106]],[[691,691],"mapped",[114]],[[692,692],"mapped",[633]],[[693,693],"mapped",[635]],[[694,694],"mapped",[641]],[[695,695],"mapped",[119]],[[696,696],"mapped",[121]],[[697,705],"valid"],[[706,709],"valid",[],"NV8"],[[710,721],"valid"],[[722,727],"valid",[],"NV8"],[[728,728],"disallowed_STD3_mapped",[32,774]],[[729,729],"disallowed_STD3_mapped",[32,775]],[[730,730],"disallowed_STD3_mapped",[32,778]],[[731,731],"disallowed_STD3_mapped",[32,808]],[[732,732],"disallowed_STD3_mapped",[32,771]],[[733,733],"disallowed_STD3_mapped",[32,779]],[[734,734],"valid",[],"NV8"],[[735,735],"valid",[],"NV8"],[[736,736],"mapped",[611]],[[737,737],"mapped",[108]],[[738,738],"mapped",[115]],[[739,739],"mapped",[120]],[[740,740],"mapped",[661]],[[741,745],"valid",[],"NV8"],[[746,747],"valid",[],"NV8"],[[748,748],"valid"],[[749,749],"valid",[],"NV8"],[[750,750],"valid"],[[751,767],"valid",[],"NV8"],[[768,831],"valid"],[[832,832],"mapped",[768]],[[833,833],"mapped",[769]],[[834,834],"valid"],[[835,835],"mapped",[787]],[[836,836],"mapped",[776,769]],[[837,837],"mapped",[953]],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped",[881]],[[881,881],"valid"],[[882,882],"mapped",[883]],[[883,883],"valid"],[[884,884],"mapped",[697]],[[885,885],"valid"],[[886,886],"mapped",[887]],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped",[32,953]],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",[59]],[[895,895],"mapped",[1011]],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped",[32,769]],[[901,901],"disallowed_STD3_mapped",[32,776,769]],[[902,902],"mapped",[940]],[[903,903],"mapped",[183]],[[904,904],"mapped",[941]],[[905,905],"mapped",[942]],[[906,906],"mapped",[943]],[[907,907],"disallowed"],[[908,908],"mapped",[972]],[[909,909],"disallowed"],[[910,910],"mapped",[973]],[[911,911],"mapped",[974]],[[912,912],"valid"],[[913,913],"mapped",[945]],[[914,914],"mapped",[946]],[[915,915],"mapped",[947]],[[916,916],"mapped",[948]],[[917,917],"mapped",[949]],[[918,918],"mapped",[950]],[[919,919],"mapped",[951]],[[920,920],"mapped",[952]],[[921,921],"mapped",[953]],[[922,922],"mapped",[954]],[[923,923],"mapped",[955]],[[924,924],"mapped",[956]],[[925,925],"mapped",[957]],[[926,926],"mapped",[958]],[[927,927],"mapped",[959]],[[928,928],"mapped",[960]],[[929,929],"mapped",[961]],[[930,930],"disallowed"],[[931,931],"mapped",[963]],[[932,932],"mapped",[964]],[[933,933],"mapped",[965]],[[934,934],"mapped",[966]],[[935,935],"mapped",[967]],[[936,936],"mapped",[968]],[[937,937],"mapped",[969]],[[938,938],"mapped",[970]],[[939,939],"mapped",[971]],[[940,961],"valid"],[[962,962],"deviation",[963]],[[963,974],"valid"],[[975,975],"mapped",[983]],[[976,976],"mapped",[946]],[[977,977],"mapped",[952]],[[978,978],"mapped",[965]],[[979,979],"mapped",[973]],[[980,980],"mapped",[971]],[[981,981],"mapped",[966]],[[982,982],"mapped",[960]],[[983,983],"valid"],[[984,984],"mapped",[985]],[[985,985],"valid"],[[986,986],"mapped",[987]],[[987,987],"valid"],[[988,988],"mapped",[989]],[[989,989],"valid"],[[990,990],"mapped",[991]],[[991,991],"valid"],[[992,992],"mapped",[993]],[[993,993],"valid"],[[994,994],"mapped",[995]],[[995,995],"valid"],[[996,996],"mapped",[997]],[[997,997],"valid"],[[998,998],"mapped",[999]],[[999,999],"valid"],[[1000,1000],"mapped",[1001]],[[1001,1001],"valid"],[[1002,1002],"mapped",[1003]],[[1003,1003],"valid"],[[1004,1004],"mapped",[1005]],[[1005,1005],"valid"],[[1006,1006],"mapped",[1007]],[[1007,1007],"valid"],[[1008,1008],"mapped",[954]],[[1009,1009],"mapped",[961]],[[1010,1010],"mapped",[963]],[[1011,1011],"valid"],[[1012,1012],"mapped",[952]],[[1013,1013],"mapped",[949]],[[1014,1014],"valid",[],"NV8"],[[1015,1015],"mapped",[1016]],[[1016,1016],"valid"],[[1017,1017],"mapped",[963]],[[1018,1018],"mapped",[1019]],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped",[891]],[[1022,1022],"mapped",[892]],[[1023,1023],"mapped",[893]],[[1024,1024],"mapped",[1104]],[[1025,1025],"mapped",[1105]],[[1026,1026],"mapped",[1106]],[[1027,1027],"mapped",[1107]],[[1028,1028],"mapped",[1108]],[[1029,1029],"mapped",[1109]],[[1030,1030],"mapped",[1110]],[[1031,1031],"mapped",[1111]],[[1032,1032],"mapped",[1112]],[[1033,1033],"mapped",[1113]],[[1034,1034],"mapped",[1114]],[[1035,1035],"mapped",[1115]],[[1036,1036],"mapped",[1116]],[[1037,1037],"mapped",[1117]],[[1038,1038],"mapped",[1118]],[[1039,1039],"mapped",[1119]],[[1040,1040],"mapped",[1072]],[[1041,1041],"mapped",[1073]],[[1042,1042],"mapped",[1074]],[[1043,1043],"mapped",[1075]],[[1044,1044],"mapped",[1076]],[[1045,1045],"mapped",[1077]],[[1046,1046],"mapped",[1078]],[[1047,1047],"mapped",[1079]],[[1048,1048],"mapped",[1080]],[[1049,1049],"mapped",[1081]],[[1050,1050],"mapped",[1082]],[[1051,1051],"mapped",[1083]],[[1052,1052],"mapped",[1084]],[[1053,1053],"mapped",[1085]],[[1054,1054],"mapped",[1086]],[[1055,1055],"mapped",[1087]],[[1056,1056],"mapped",[1088]],[[1057,1057],"mapped",[1089]],[[1058,1058],"mapped",[1090]],[[1059,1059],"mapped",[1091]],[[1060,1060],"mapped",[1092]],[[1061,1061],"mapped",[1093]],[[1062,1062],"mapped",[1094]],[[1063,1063],"mapped",[1095]],[[1064,1064],"mapped",[1096]],[[1065,1065],"mapped",[1097]],[[1066,1066],"mapped",[1098]],[[1067,1067],"mapped",[1099]],[[1068,1068],"mapped",[1100]],[[1069,1069],"mapped",[1101]],[[1070,1070],"mapped",[1102]],[[1071,1071],"mapped",[1103]],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped",[1121]],[[1121,1121],"valid"],[[1122,1122],"mapped",[1123]],[[1123,1123],"valid"],[[1124,1124],"mapped",[1125]],[[1125,1125],"valid"],[[1126,1126],"mapped",[1127]],[[1127,1127],"valid"],[[1128,1128],"mapped",[1129]],[[1129,1129],"valid"],[[1130,1130],"mapped",[1131]],[[1131,1131],"valid"],[[1132,1132],"mapped",[1133]],[[1133,1133],"valid"],[[1134,1134],"mapped",[1135]],[[1135,1135],"valid"],[[1136,1136],"mapped",[1137]],[[1137,1137],"valid"],[[1138,1138],"mapped",[1139]],[[1139,1139],"valid"],[[1140,1140],"mapped",[1141]],[[1141,1141],"valid"],[[1142,1142],"mapped",[1143]],[[1143,1143],"valid"],[[1144,1144],"mapped",[1145]],[[1145,1145],"valid"],[[1146,1146],"mapped",[1147]],[[1147,1147],"valid"],[[1148,1148],"mapped",[1149]],[[1149,1149],"valid"],[[1150,1150],"mapped",[1151]],[[1151,1151],"valid"],[[1152,1152],"mapped",[1153]],[[1153,1153],"valid"],[[1154,1154],"valid",[],"NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid",[],"NV8"],[[1162,1162],"mapped",[1163]],[[1163,1163],"valid"],[[1164,1164],"mapped",[1165]],[[1165,1165],"valid"],[[1166,1166],"mapped",[1167]],[[1167,1167],"valid"],[[1168,1168],"mapped",[1169]],[[1169,1169],"valid"],[[1170,1170],"mapped",[1171]],[[1171,1171],"valid"],[[1172,1172],"mapped",[1173]],[[1173,1173],"valid"],[[1174,1174],"mapped",[1175]],[[1175,1175],"valid"],[[1176,1176],"mapped",[1177]],[[1177,1177],"valid"],[[1178,1178],"mapped",[1179]],[[1179,1179],"valid"],[[1180,1180],"mapped",[1181]],[[1181,1181],"valid"],[[1182,1182],"mapped",[1183]],[[1183,1183],"valid"],[[1184,1184],"mapped",[1185]],[[1185,1185],"valid"],[[1186,1186],"mapped",[1187]],[[1187,1187],"valid"],[[1188,1188],"mapped",[1189]],[[1189,1189],"valid"],[[1190,1190],"mapped",[1191]],[[1191,1191],"valid"],[[1192,1192],"mapped",[1193]],[[1193,1193],"valid"],[[1194,1194],"mapped",[1195]],[[1195,1195],"valid"],[[1196,1196],"mapped",[1197]],[[1197,1197],"valid"],[[1198,1198],"mapped",[1199]],[[1199,1199],"valid"],[[1200,1200],"mapped",[1201]],[[1201,1201],"valid"],[[1202,1202],"mapped",[1203]],[[1203,1203],"valid"],[[1204,1204],"mapped",[1205]],[[1205,1205],"valid"],[[1206,1206],"mapped",[1207]],[[1207,1207],"valid"],[[1208,1208],"mapped",[1209]],[[1209,1209],"valid"],[[1210,1210],"mapped",[1211]],[[1211,1211],"valid"],[[1212,1212],"mapped",[1213]],[[1213,1213],"valid"],[[1214,1214],"mapped",[1215]],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped",[1218]],[[1218,1218],"valid"],[[1219,1219],"mapped",[1220]],[[1220,1220],"valid"],[[1221,1221],"mapped",[1222]],[[1222,1222],"valid"],[[1223,1223],"mapped",[1224]],[[1224,1224],"valid"],[[1225,1225],"mapped",[1226]],[[1226,1226],"valid"],[[1227,1227],"mapped",[1228]],[[1228,1228],"valid"],[[1229,1229],"mapped",[1230]],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped",[1233]],[[1233,1233],"valid"],[[1234,1234],"mapped",[1235]],[[1235,1235],"valid"],[[1236,1236],"mapped",[1237]],[[1237,1237],"valid"],[[1238,1238],"mapped",[1239]],[[1239,1239],"valid"],[[1240,1240],"mapped",[1241]],[[1241,1241],"valid"],[[1242,1242],"mapped",[1243]],[[1243,1243],"valid"],[[1244,1244],"mapped",[1245]],[[1245,1245],"valid"],[[1246,1246],"mapped",[1247]],[[1247,1247],"valid"],[[1248,1248],"mapped",[1249]],[[1249,1249],"valid"],[[1250,1250],"mapped",[1251]],[[1251,1251],"valid"],[[1252,1252],"mapped",[1253]],[[1253,1253],"valid"],[[1254,1254],"mapped",[1255]],[[1255,1255],"valid"],[[1256,1256],"mapped",[1257]],[[1257,1257],"valid"],[[1258,1258],"mapped",[1259]],[[1259,1259],"valid"],[[1260,1260],"mapped",[1261]],[[1261,1261],"valid"],[[1262,1262],"mapped",[1263]],[[1263,1263],"valid"],[[1264,1264],"mapped",[1265]],[[1265,1265],"valid"],[[1266,1266],"mapped",[1267]],[[1267,1267],"valid"],[[1268,1268],"mapped",[1269]],[[1269,1269],"valid"],[[1270,1270],"mapped",[1271]],[[1271,1271],"valid"],[[1272,1272],"mapped",[1273]],[[1273,1273],"valid"],[[1274,1274],"mapped",[1275]],[[1275,1275],"valid"],[[1276,1276],"mapped",[1277]],[[1277,1277],"valid"],[[1278,1278],"mapped",[1279]],[[1279,1279],"valid"],[[1280,1280],"mapped",[1281]],[[1281,1281],"valid"],[[1282,1282],"mapped",[1283]],[[1283,1283],"valid"],[[1284,1284],"mapped",[1285]],[[1285,1285],"valid"],[[1286,1286],"mapped",[1287]],[[1287,1287],"valid"],[[1288,1288],"mapped",[1289]],[[1289,1289],"valid"],[[1290,1290],"mapped",[1291]],[[1291,1291],"valid"],[[1292,1292],"mapped",[1293]],[[1293,1293],"valid"],[[1294,1294],"mapped",[1295]],[[1295,1295],"valid"],[[1296,1296],"mapped",[1297]],[[1297,1297],"valid"],[[1298,1298],"mapped",[1299]],[[1299,1299],"valid"],[[1300,1300],"mapped",[1301]],[[1301,1301],"valid"],[[1302,1302],"mapped",[1303]],[[1303,1303],"valid"],[[1304,1304],"mapped",[1305]],[[1305,1305],"valid"],[[1306,1306],"mapped",[1307]],[[1307,1307],"valid"],[[1308,1308],"mapped",[1309]],[[1309,1309],"valid"],[[1310,1310],"mapped",[1311]],[[1311,1311],"valid"],[[1312,1312],"mapped",[1313]],[[1313,1313],"valid"],[[1314,1314],"mapped",[1315]],[[1315,1315],"valid"],[[1316,1316],"mapped",[1317]],[[1317,1317],"valid"],[[1318,1318],"mapped",[1319]],[[1319,1319],"valid"],[[1320,1320],"mapped",[1321]],[[1321,1321],"valid"],[[1322,1322],"mapped",[1323]],[[1323,1323],"valid"],[[1324,1324],"mapped",[1325]],[[1325,1325],"valid"],[[1326,1326],"mapped",[1327]],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped",[1377]],[[1330,1330],"mapped",[1378]],[[1331,1331],"mapped",[1379]],[[1332,1332],"mapped",[1380]],[[1333,1333],"mapped",[1381]],[[1334,1334],"mapped",[1382]],[[1335,1335],"mapped",[1383]],[[1336,1336],"mapped",[1384]],[[1337,1337],"mapped",[1385]],[[1338,1338],"mapped",[1386]],[[1339,1339],"mapped",[1387]],[[1340,1340],"mapped",[1388]],[[1341,1341],"mapped",[1389]],[[1342,1342],"mapped",[1390]],[[1343,1343],"mapped",[1391]],[[1344,1344],"mapped",[1392]],[[1345,1345],"mapped",[1393]],[[1346,1346],"mapped",[1394]],[[1347,1347],"mapped",[1395]],[[1348,1348],"mapped",[1396]],[[1349,1349],"mapped",[1397]],[[1350,1350],"mapped",[1398]],[[1351,1351],"mapped",[1399]],[[1352,1352],"mapped",[1400]],[[1353,1353],"mapped",[1401]],[[1354,1354],"mapped",[1402]],[[1355,1355],"mapped",[1403]],[[1356,1356],"mapped",[1404]],[[1357,1357],"mapped",[1405]],[[1358,1358],"mapped",[1406]],[[1359,1359],"mapped",[1407]],[[1360,1360],"mapped",[1408]],[[1361,1361],"mapped",[1409]],[[1362,1362],"mapped",[1410]],[[1363,1363],"mapped",[1411]],[[1364,1364],"mapped",[1412]],[[1365,1365],"mapped",[1413]],[[1366,1366],"mapped",[1414]],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid",[],"NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped",[1381,1410]],[[1416,1416],"disallowed"],[[1417,1417],"valid",[],"NV8"],[[1418,1418],"valid",[],"NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid",[],"NV8"],[[1423,1423],"valid",[],"NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid",[],"NV8"],[[1471,1471],"valid"],[[1472,1472],"valid",[],"NV8"],[[1473,1474],"valid"],[[1475,1475],"valid",[],"NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid",[],"NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid",[],"NV8"],[[1547,1547],"valid",[],"NV8"],[[1548,1548],"valid",[],"NV8"],[[1549,1551],"valid",[],"NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid",[],"NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid",[],"NV8"],[[1567,1567],"valid",[],"NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid",[],"NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid",[],"NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped",[1575,1652]],[[1654,1654],"mapped",[1608,1652]],[[1655,1655],"mapped",[1735,1652]],[[1656,1656],"mapped",[1610,1652]],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid",[],"NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid",[],"NV8"],[[1759,1768],"valid"],[[1769,1769],"valid",[],"NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid",[],"NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid",[],"NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid",[],"NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid",[],"NV8"],[[2143,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped",[2325,2364]],[[2393,2393],"mapped",[2326,2364]],[[2394,2394],"mapped",[2327,2364]],[[2395,2395],"mapped",[2332,2364]],[[2396,2396],"mapped",[2337,2364]],[[2397,2397],"mapped",[2338,2364]],[[2398,2398],"mapped",[2347,2364]],[[2399,2399],"mapped",[2351,2364]],[[2400,2403],"valid"],[[2404,2405],"valid",[],"NV8"],[[2406,2415],"valid"],[[2416,2416],"valid",[],"NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped",[2465,2492]],[[2525,2525],"mapped",[2466,2492]],[[2526,2526],"disallowed"],[[2527,2527],"mapped",[2479,2492]],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid",[],"NV8"],[[2555,2555],"valid",[],"NV8"],[[2556,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped",[2610,2620]],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped",[2616,2620]],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped",[2582,2620]],[[2650,2650],"mapped",[2583,2620]],[[2651,2651],"mapped",[2588,2620]],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped",[2603,2620]],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid",[],"NV8"],[[2801,2801],"valid",[],"NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped",[2849,2876]],[[2909,2909],"mapped",[2850,2876]],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid",[],"NV8"],[[2929,2929],"valid"],[[2930,2935],"valid",[],"NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid",[],"NV8"],[[3059,3066],"valid",[],"NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid",[],"NV8"],[[3200,3200],"disallowed"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3328],"disallowed"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"disallowed"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3414],"disallowed"],[[3415,3415],"valid"],[[3416,3422],"disallowed"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid",[],"NV8"],[[3446,3448],"disallowed"],[[3449,3449],"valid",[],"NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid",[],"NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped",[3661,3634]],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid",[],"NV8"],[[3648,3662],"valid"],[[3663,3663],"valid",[],"NV8"],[[3664,3673],"valid"],[[3674,3675],"valid",[],"NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped",[3789,3762]],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped",[3755,3737]],[[3805,3805],"mapped",[3755,3745]],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid",[],"NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped",[3851]],[[3853,3863],"valid",[],"NV8"],[[3864,3865],"valid"],[[3866,3871],"valid",[],"NV8"],[[3872,3881],"valid"],[[3882,3892],"valid",[],"NV8"],[[3893,3893],"valid"],[[3894,3894],"valid",[],"NV8"],[[3895,3895],"valid"],[[3896,3896],"valid",[],"NV8"],[[3897,3897],"valid"],[[3898,3901],"valid",[],"NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped",[3906,4023]],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped",[3916,4023]],[[3918,3921],"valid"],[[3922,3922],"mapped",[3921,4023]],[[3923,3926],"valid"],[[3927,3927],"mapped",[3926,4023]],[[3928,3931],"valid"],[[3932,3932],"mapped",[3931,4023]],[[3933,3944],"valid"],[[3945,3945],"mapped",[3904,4021]],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped",[3953,3954]],[[3956,3956],"valid"],[[3957,3957],"mapped",[3953,3956]],[[3958,3958],"mapped",[4018,3968]],[[3959,3959],"mapped",[4018,3953,3968]],[[3960,3960],"mapped",[4019,3968]],[[3961,3961],"mapped",[4019,3953,3968]],[[3962,3968],"valid"],[[3969,3969],"mapped",[3953,3968]],[[3970,3972],"valid"],[[3973,3973],"valid",[],"NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped",[3986,4023]],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped",[3996,4023]],[[3998,4001],"valid"],[[4002,4002],"mapped",[4001,4023]],[[4003,4006],"valid"],[[4007,4007],"mapped",[4006,4023]],[[4008,4011],"valid"],[[4012,4012],"mapped",[4011,4023]],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped",[3984,4021]],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid",[],"NV8"],[[4038,4038],"valid"],[[4039,4044],"valid",[],"NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid",[],"NV8"],[[4047,4047],"valid",[],"NV8"],[[4048,4049],"valid",[],"NV8"],[[4050,4052],"valid",[],"NV8"],[[4053,4056],"valid",[],"NV8"],[[4057,4058],"valid",[],"NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid",[],"NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid",[],"NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped",[11559]],[[4296,4300],"disallowed"],[[4301,4301],"mapped",[11565]],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid",[],"NV8"],[[4348,4348],"mapped",[4316]],[[4349,4351],"valid"],[[4352,4441],"valid",[],"NV8"],[[4442,4446],"valid",[],"NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid",[],"NV8"],[[4515,4519],"valid",[],"NV8"],[[4520,4601],"valid",[],"NV8"],[[4602,4607],"valid",[],"NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid",[],"NV8"],[[4961,4988],"valid",[],"NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid",[],"NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped",[5104]],[[5113,5113],"mapped",[5105]],[[5114,5114],"mapped",[5106]],[[5115,5115],"mapped",[5107]],[[5116,5116],"mapped",[5108]],[[5117,5117],"mapped",[5109]],[[5118,5119],"disallowed"],[[5120,5120],"valid",[],"NV8"],[[5121,5740],"valid"],[[5741,5742],"valid",[],"NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid",[],"NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid",[],"NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid",[],"NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6000],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid",[],"NV8"],[[6103,6103],"valid"],[[6104,6107],"valid",[],"NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid",[],"NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid",[],"NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid",[],"NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid",[],"NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid",[],"NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid",[],"XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid",[],"NV8"],[[6624,6655],"valid",[],"NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid",[],"NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid",[],"NV8"],[[6823,6823],"valid"],[[6824,6829],"valid",[],"NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid",[],"NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid",[],"NV8"],[[7019,7027],"valid"],[[7028,7036],"valid",[],"NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid",[],"NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid",[],"NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid",[],"NV8"],[[7296,7359],"disallowed"],[[7360,7367],"valid",[],"NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid",[],"NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"disallowed"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped",[97]],[[7469,7469],"mapped",[230]],[[7470,7470],"mapped",[98]],[[7471,7471],"valid"],[[7472,7472],"mapped",[100]],[[7473,7473],"mapped",[101]],[[7474,7474],"mapped",[477]],[[7475,7475],"mapped",[103]],[[7476,7476],"mapped",[104]],[[7477,7477],"mapped",[105]],[[7478,7478],"mapped",[106]],[[7479,7479],"mapped",[107]],[[7480,7480],"mapped",[108]],[[7481,7481],"mapped",[109]],[[7482,7482],"mapped",[110]],[[7483,7483],"valid"],[[7484,7484],"mapped",[111]],[[7485,7485],"mapped",[547]],[[7486,7486],"mapped",[112]],[[7487,7487],"mapped",[114]],[[7488,7488],"mapped",[116]],[[7489,7489],"mapped",[117]],[[7490,7490],"mapped",[119]],[[7491,7491],"mapped",[97]],[[7492,7492],"mapped",[592]],[[7493,7493],"mapped",[593]],[[7494,7494],"mapped",[7426]],[[7495,7495],"mapped",[98]],[[7496,7496],"mapped",[100]],[[7497,7497],"mapped",[101]],[[7498,7498],"mapped",[601]],[[7499,7499],"mapped",[603]],[[7500,7500],"mapped",[604]],[[7501,7501],"mapped",[103]],[[7502,7502],"valid"],[[7503,7503],"mapped",[107]],[[7504,7504],"mapped",[109]],[[7505,7505],"mapped",[331]],[[7506,7506],"mapped",[111]],[[7507,7507],"mapped",[596]],[[7508,7508],"mapped",[7446]],[[7509,7509],"mapped",[7447]],[[7510,7510],"mapped",[112]],[[7511,7511],"mapped",[116]],[[7512,7512],"mapped",[117]],[[7513,7513],"mapped",[7453]],[[7514,7514],"mapped",[623]],[[7515,7515],"mapped",[118]],[[7516,7516],"mapped",[7461]],[[7517,7517],"mapped",[946]],[[7518,7518],"mapped",[947]],[[7519,7519],"mapped",[948]],[[7520,7520],"mapped",[966]],[[7521,7521],"mapped",[967]],[[7522,7522],"mapped",[105]],[[7523,7523],"mapped",[114]],[[7524,7524],"mapped",[117]],[[7525,7525],"mapped",[118]],[[7526,7526],"mapped",[946]],[[7527,7527],"mapped",[947]],[[7528,7528],"mapped",[961]],[[7529,7529],"mapped",[966]],[[7530,7530],"mapped",[967]],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped",[1085]],[[7545,7578],"valid"],[[7579,7579],"mapped",[594]],[[7580,7580],"mapped",[99]],[[7581,7581],"mapped",[597]],[[7582,7582],"mapped",[240]],[[7583,7583],"mapped",[604]],[[7584,7584],"mapped",[102]],[[7585,7585],"mapped",[607]],[[7586,7586],"mapped",[609]],[[7587,7587],"mapped",[613]],[[7588,7588],"mapped",[616]],[[7589,7589],"mapped",[617]],[[7590,7590],"mapped",[618]],[[7591,7591],"mapped",[7547]],[[7592,7592],"mapped",[669]],[[7593,7593],"mapped",[621]],[[7594,7594],"mapped",[7557]],[[7595,7595],"mapped",[671]],[[7596,7596],"mapped",[625]],[[7597,7597],"mapped",[624]],[[7598,7598],"mapped",[626]],[[7599,7599],"mapped",[627]],[[7600,7600],"mapped",[628]],[[7601,7601],"mapped",[629]],[[7602,7602],"mapped",[632]],[[7603,7603],"mapped",[642]],[[7604,7604],"mapped",[643]],[[7605,7605],"mapped",[427]],[[7606,7606],"mapped",[649]],[[7607,7607],"mapped",[650]],[[7608,7608],"mapped",[7452]],[[7609,7609],"mapped",[651]],[[7610,7610],"mapped",[652]],[[7611,7611],"mapped",[122]],[[7612,7612],"mapped",[656]],[[7613,7613],"mapped",[657]],[[7614,7614],"mapped",[658]],[[7615,7615],"mapped",[952]],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7675],"disallowed"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped",[7681]],[[7681,7681],"valid"],[[7682,7682],"mapped",[7683]],[[7683,7683],"valid"],[[7684,7684],"mapped",[7685]],[[7685,7685],"valid"],[[7686,7686],"mapped",[7687]],[[7687,7687],"valid"],[[7688,7688],"mapped",[7689]],[[7689,7689],"valid"],[[7690,7690],"mapped",[7691]],[[7691,7691],"valid"],[[7692,7692],"mapped",[7693]],[[7693,7693],"valid"],[[7694,7694],"mapped",[7695]],[[7695,7695],"valid"],[[7696,7696],"mapped",[7697]],[[7697,7697],"valid"],[[7698,7698],"mapped",[7699]],[[7699,7699],"valid"],[[7700,7700],"mapped",[7701]],[[7701,7701],"valid"],[[7702,7702],"mapped",[7703]],[[7703,7703],"valid"],[[7704,7704],"mapped",[7705]],[[7705,7705],"valid"],[[7706,7706],"mapped",[7707]],[[7707,7707],"valid"],[[7708,7708],"mapped",[7709]],[[7709,7709],"valid"],[[7710,7710],"mapped",[7711]],[[7711,7711],"valid"],[[7712,7712],"mapped",[7713]],[[7713,7713],"valid"],[[7714,7714],"mapped",[7715]],[[7715,7715],"valid"],[[7716,7716],"mapped",[7717]],[[7717,7717],"valid"],[[7718,7718],"mapped",[7719]],[[7719,7719],"valid"],[[7720,7720],"mapped",[7721]],[[7721,7721],"valid"],[[7722,7722],"mapped",[7723]],[[7723,7723],"valid"],[[7724,7724],"mapped",[7725]],[[7725,7725],"valid"],[[7726,7726],"mapped",[7727]],[[7727,7727],"valid"],[[7728,7728],"mapped",[7729]],[[7729,7729],"valid"],[[7730,7730],"mapped",[7731]],[[7731,7731],"valid"],[[7732,7732],"mapped",[7733]],[[7733,7733],"valid"],[[7734,7734],"mapped",[7735]],[[7735,7735],"valid"],[[7736,7736],"mapped",[7737]],[[7737,7737],"valid"],[[7738,7738],"mapped",[7739]],[[7739,7739],"valid"],[[7740,7740],"mapped",[7741]],[[7741,7741],"valid"],[[7742,7742],"mapped",[7743]],[[7743,7743],"valid"],[[7744,7744],"mapped",[7745]],[[7745,7745],"valid"],[[7746,7746],"mapped",[7747]],[[7747,7747],"valid"],[[7748,7748],"mapped",[7749]],[[7749,7749],"valid"],[[7750,7750],"mapped",[7751]],[[7751,7751],"valid"],[[7752,7752],"mapped",[7753]],[[7753,7753],"valid"],[[7754,7754],"mapped",[7755]],[[7755,7755],"valid"],[[7756,7756],"mapped",[7757]],[[7757,7757],"valid"],[[7758,7758],"mapped",[7759]],[[7759,7759],"valid"],[[7760,7760],"mapped",[7761]],[[7761,7761],"valid"],[[7762,7762],"mapped",[7763]],[[7763,7763],"valid"],[[7764,7764],"mapped",[7765]],[[7765,7765],"valid"],[[7766,7766],"mapped",[7767]],[[7767,7767],"valid"],[[7768,7768],"mapped",[7769]],[[7769,7769],"valid"],[[7770,7770],"mapped",[7771]],[[7771,7771],"valid"],[[7772,7772],"mapped",[7773]],[[7773,7773],"valid"],[[7774,7774],"mapped",[7775]],[[7775,7775],"valid"],[[7776,7776],"mapped",[7777]],[[7777,7777],"valid"],[[7778,7778],"mapped",[7779]],[[7779,7779],"valid"],[[7780,7780],"mapped",[7781]],[[7781,7781],"valid"],[[7782,7782],"mapped",[7783]],[[7783,7783],"valid"],[[7784,7784],"mapped",[7785]],[[7785,7785],"valid"],[[7786,7786],"mapped",[7787]],[[7787,7787],"valid"],[[7788,7788],"mapped",[7789]],[[7789,7789],"valid"],[[7790,7790],"mapped",[7791]],[[7791,7791],"valid"],[[7792,7792],"mapped",[7793]],[[7793,7793],"valid"],[[7794,7794],"mapped",[7795]],[[7795,7795],"valid"],[[7796,7796],"mapped",[7797]],[[7797,7797],"valid"],[[7798,7798],"mapped",[7799]],[[7799,7799],"valid"],[[7800,7800],"mapped",[7801]],[[7801,7801],"valid"],[[7802,7802],"mapped",[7803]],[[7803,7803],"valid"],[[7804,7804],"mapped",[7805]],[[7805,7805],"valid"],[[7806,7806],"mapped",[7807]],[[7807,7807],"valid"],[[7808,7808],"mapped",[7809]],[[7809,7809],"valid"],[[7810,7810],"mapped",[7811]],[[7811,7811],"valid"],[[7812,7812],"mapped",[7813]],[[7813,7813],"valid"],[[7814,7814],"mapped",[7815]],[[7815,7815],"valid"],[[7816,7816],"mapped",[7817]],[[7817,7817],"valid"],[[7818,7818],"mapped",[7819]],[[7819,7819],"valid"],[[7820,7820],"mapped",[7821]],[[7821,7821],"valid"],[[7822,7822],"mapped",[7823]],[[7823,7823],"valid"],[[7824,7824],"mapped",[7825]],[[7825,7825],"valid"],[[7826,7826],"mapped",[7827]],[[7827,7827],"valid"],[[7828,7828],"mapped",[7829]],[[7829,7833],"valid"],[[7834,7834],"mapped",[97,702]],[[7835,7835],"mapped",[7777]],[[7836,7837],"valid"],[[7838,7838],"mapped",[115,115]],[[7839,7839],"valid"],[[7840,7840],"mapped",[7841]],[[7841,7841],"valid"],[[7842,7842],"mapped",[7843]],[[7843,7843],"valid"],[[7844,7844],"mapped",[7845]],[[7845,7845],"valid"],[[7846,7846],"mapped",[7847]],[[7847,7847],"valid"],[[7848,7848],"mapped",[7849]],[[7849,7849],"valid"],[[7850,7850],"mapped",[7851]],[[7851,7851],"valid"],[[7852,7852],"mapped",[7853]],[[7853,7853],"valid"],[[7854,7854],"mapped",[7855]],[[7855,7855],"valid"],[[7856,7856],"mapped",[7857]],[[7857,7857],"valid"],[[7858,7858],"mapped",[7859]],[[7859,7859],"valid"],[[7860,7860],"mapped",[7861]],[[7861,7861],"valid"],[[7862,7862],"mapped",[7863]],[[7863,7863],"valid"],[[7864,7864],"mapped",[7865]],[[7865,7865],"valid"],[[7866,7866],"mapped",[7867]],[[7867,7867],"valid"],[[7868,7868],"mapped",[7869]],[[7869,7869],"valid"],[[7870,7870],"mapped",[7871]],[[7871,7871],"valid"],[[7872,7872],"mapped",[7873]],[[7873,7873],"valid"],[[7874,7874],"mapped",[7875]],[[7875,7875],"valid"],[[7876,7876],"mapped",[7877]],[[7877,7877],"valid"],[[7878,7878],"mapped",[7879]],[[7879,7879],"valid"],[[7880,7880],"mapped",[7881]],[[7881,7881],"valid"],[[7882,7882],"mapped",[7883]],[[7883,7883],"valid"],[[7884,7884],"mapped",[7885]],[[7885,7885],"valid"],[[7886,7886],"mapped",[7887]],[[7887,7887],"valid"],[[7888,7888],"mapped",[7889]],[[7889,7889],"valid"],[[7890,7890],"mapped",[7891]],[[7891,7891],"valid"],[[7892,7892],"mapped",[7893]],[[7893,7893],"valid"],[[7894,7894],"mapped",[7895]],[[7895,7895],"valid"],[[7896,7896],"mapped",[7897]],[[7897,7897],"valid"],[[7898,7898],"mapped",[7899]],[[7899,7899],"valid"],[[7900,7900],"mapped",[7901]],[[7901,7901],"valid"],[[7902,7902],"mapped",[7903]],[[7903,7903],"valid"],[[7904,7904],"mapped",[7905]],[[7905,7905],"valid"],[[7906,7906],"mapped",[7907]],[[7907,7907],"valid"],[[7908,7908],"mapped",[7909]],[[7909,7909],"valid"],[[7910,7910],"mapped",[7911]],[[7911,7911],"valid"],[[7912,7912],"mapped",[7913]],[[7913,7913],"valid"],[[7914,7914],"mapped",[7915]],[[7915,7915],"valid"],[[7916,7916],"mapped",[7917]],[[7917,7917],"valid"],[[7918,7918],"mapped",[7919]],[[7919,7919],"valid"],[[7920,7920],"mapped",[7921]],[[7921,7921],"valid"],[[7922,7922],"mapped",[7923]],[[7923,7923],"valid"],[[7924,7924],"mapped",[7925]],[[7925,7925],"valid"],[[7926,7926],"mapped",[7927]],[[7927,7927],"valid"],[[7928,7928],"mapped",[7929]],[[7929,7929],"valid"],[[7930,7930],"mapped",[7931]],[[7931,7931],"valid"],[[7932,7932],"mapped",[7933]],[[7933,7933],"valid"],[[7934,7934],"mapped",[7935]],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped",[7936]],[[7945,7945],"mapped",[7937]],[[7946,7946],"mapped",[7938]],[[7947,7947],"mapped",[7939]],[[7948,7948],"mapped",[7940]],[[7949,7949],"mapped",[7941]],[[7950,7950],"mapped",[7942]],[[7951,7951],"mapped",[7943]],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped",[7952]],[[7961,7961],"mapped",[7953]],[[7962,7962],"mapped",[7954]],[[7963,7963],"mapped",[7955]],[[7964,7964],"mapped",[7956]],[[7965,7965],"mapped",[7957]],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped",[7968]],[[7977,7977],"mapped",[7969]],[[7978,7978],"mapped",[7970]],[[7979,7979],"mapped",[7971]],[[7980,7980],"mapped",[7972]],[[7981,7981],"mapped",[7973]],[[7982,7982],"mapped",[7974]],[[7983,7983],"mapped",[7975]],[[7984,7991],"valid"],[[7992,7992],"mapped",[7984]],[[7993,7993],"mapped",[7985]],[[7994,7994],"mapped",[7986]],[[7995,7995],"mapped",[7987]],[[7996,7996],"mapped",[7988]],[[7997,7997],"mapped",[7989]],[[7998,7998],"mapped",[7990]],[[7999,7999],"mapped",[7991]],[[8000,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped",[8000]],[[8009,8009],"mapped",[8001]],[[8010,8010],"mapped",[8002]],[[8011,8011],"mapped",[8003]],[[8012,8012],"mapped",[8004]],[[8013,8013],"mapped",[8005]],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped",[8017]],[[8026,8026],"disallowed"],[[8027,8027],"mapped",[8019]],[[8028,8028],"disallowed"],[[8029,8029],"mapped",[8021]],[[8030,8030],"disallowed"],[[8031,8031],"mapped",[8023]],[[8032,8039],"valid"],[[8040,8040],"mapped",[8032]],[[8041,8041],"mapped",[8033]],[[8042,8042],"mapped",[8034]],[[8043,8043],"mapped",[8035]],[[8044,8044],"mapped",[8036]],[[8045,8045],"mapped",[8037]],[[8046,8046],"mapped",[8038]],[[8047,8047],"mapped",[8039]],[[8048,8048],"valid"],[[8049,8049],"mapped",[940]],[[8050,8050],"valid"],[[8051,8051],"mapped",[941]],[[8052,8052],"valid"],[[8053,8053],"mapped",[942]],[[8054,8054],"valid"],[[8055,8055],"mapped",[943]],[[8056,8056],"valid"],[[8057,8057],"mapped",[972]],[[8058,8058],"valid"],[[8059,8059],"mapped",[973]],[[8060,8060],"valid"],[[8061,8061],"mapped",[974]],[[8062,8063],"disallowed"],[[8064,8064],"mapped",[7936,953]],[[8065,8065],"mapped",[7937,953]],[[8066,8066],"mapped",[7938,953]],[[8067,8067],"mapped",[7939,953]],[[8068,8068],"mapped",[7940,953]],[[8069,8069],"mapped",[7941,953]],[[8070,8070],"mapped",[7942,953]],[[8071,8071],"mapped",[7943,953]],[[8072,8072],"mapped",[7936,953]],[[8073,8073],"mapped",[7937,953]],[[8074,8074],"mapped",[7938,953]],[[8075,8075],"mapped",[7939,953]],[[8076,8076],"mapped",[7940,953]],[[8077,8077],"mapped",[7941,953]],[[8078,8078],"mapped",[7942,953]],[[8079,8079],"mapped",[7943,953]],[[8080,8080],"mapped",[7968,953]],[[8081,8081],"mapped",[7969,953]],[[8082,8082],"mapped",[7970,953]],[[8083,8083],"mapped",[7971,953]],[[8084,8084],"mapped",[7972,953]],[[8085,8085],"mapped",[7973,953]],[[8086,8086],"mapped",[7974,953]],[[8087,8087],"mapped",[7975,953]],[[8088,8088],"mapped",[7968,953]],[[8089,8089],"mapped",[7969,953]],[[8090,8090],"mapped",[7970,953]],[[8091,8091],"mapped",[7971,953]],[[8092,8092],"mapped",[7972,953]],[[8093,8093],"mapped",[7973,953]],[[8094,8094],"mapped",[7974,953]],[[8095,8095],"mapped",[7975,953]],[[8096,8096],"mapped",[8032,953]],[[8097,8097],"mapped",[8033,953]],[[8098,8098],"mapped",[8034,953]],[[8099,8099],"mapped",[8035,953]],[[8100,8100],"mapped",[8036,953]],[[8101,8101],"mapped",[8037,953]],[[8102,8102],"mapped",[8038,953]],[[8103,8103],"mapped",[8039,953]],[[8104,8104],"mapped",[8032,953]],[[8105,8105],"mapped",[8033,953]],[[8106,8106],"mapped",[8034,953]],[[8107,8107],"mapped",[8035,953]],[[8108,8108],"mapped",[8036,953]],[[8109,8109],"mapped",[8037,953]],[[8110,8110],"mapped",[8038,953]],[[8111,8111],"mapped",[8039,953]],[[8112,8113],"valid"],[[8114,8114],"mapped",[8048,953]],[[8115,8115],"mapped",[945,953]],[[8116,8116],"mapped",[940,953]],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped",[8118,953]],[[8120,8120],"mapped",[8112]],[[8121,8121],"mapped",[8113]],[[8122,8122],"mapped",[8048]],[[8123,8123],"mapped",[940]],[[8124,8124],"mapped",[945,953]],[[8125,8125],"disallowed_STD3_mapped",[32,787]],[[8126,8126],"mapped",[953]],[[8127,8127],"disallowed_STD3_mapped",[32,787]],[[8128,8128],"disallowed_STD3_mapped",[32,834]],[[8129,8129],"disallowed_STD3_mapped",[32,776,834]],[[8130,8130],"mapped",[8052,953]],[[8131,8131],"mapped",[951,953]],[[8132,8132],"mapped",[942,953]],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped",[8134,953]],[[8136,8136],"mapped",[8050]],[[8137,8137],"mapped",[941]],[[8138,8138],"mapped",[8052]],[[8139,8139],"mapped",[942]],[[8140,8140],"mapped",[951,953]],[[8141,8141],"disallowed_STD3_mapped",[32,787,768]],[[8142,8142],"disallowed_STD3_mapped",[32,787,769]],[[8143,8143],"disallowed_STD3_mapped",[32,787,834]],[[8144,8146],"valid"],[[8147,8147],"mapped",[912]],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped",[8144]],[[8153,8153],"mapped",[8145]],[[8154,8154],"mapped",[8054]],[[8155,8155],"mapped",[943]],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped",[32,788,768]],[[8158,8158],"disallowed_STD3_mapped",[32,788,769]],[[8159,8159],"disallowed_STD3_mapped",[32,788,834]],[[8160,8162],"valid"],[[8163,8163],"mapped",[944]],[[8164,8167],"valid"],[[8168,8168],"mapped",[8160]],[[8169,8169],"mapped",[8161]],[[8170,8170],"mapped",[8058]],[[8171,8171],"mapped",[973]],[[8172,8172],"mapped",[8165]],[[8173,8173],"disallowed_STD3_mapped",[32,776,768]],[[8174,8174],"disallowed_STD3_mapped",[32,776,769]],[[8175,8175],"disallowed_STD3_mapped",[96]],[[8176,8177],"disallowed"],[[8178,8178],"mapped",[8060,953]],[[8179,8179],"mapped",[969,953]],[[8180,8180],"mapped",[974,953]],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped",[8182,953]],[[8184,8184],"mapped",[8056]],[[8185,8185],"mapped",[972]],[[8186,8186],"mapped",[8060]],[[8187,8187],"mapped",[974]],[[8188,8188],"mapped",[969,953]],[[8189,8189],"disallowed_STD3_mapped",[32,769]],[[8190,8190],"disallowed_STD3_mapped",[32,788]],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped",[32]],[[8203,8203],"ignored"],[[8204,8205],"deviation",[]],[[8206,8207],"disallowed"],[[8208,8208],"valid",[],"NV8"],[[8209,8209],"mapped",[8208]],[[8210,8214],"valid",[],"NV8"],[[8215,8215],"disallowed_STD3_mapped",[32,819]],[[8216,8227],"valid",[],"NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid",[],"NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped",[32]],[[8240,8242],"valid",[],"NV8"],[[8243,8243],"mapped",[8242,8242]],[[8244,8244],"mapped",[8242,8242,8242]],[[8245,8245],"valid",[],"NV8"],[[8246,8246],"mapped",[8245,8245]],[[8247,8247],"mapped",[8245,8245,8245]],[[8248,8251],"valid",[],"NV8"],[[8252,8252],"disallowed_STD3_mapped",[33,33]],[[8253,8253],"valid",[],"NV8"],[[8254,8254],"disallowed_STD3_mapped",[32,773]],[[8255,8262],"valid",[],"NV8"],[[8263,8263],"disallowed_STD3_mapped",[63,63]],[[8264,8264],"disallowed_STD3_mapped",[63,33]],[[8265,8265],"disallowed_STD3_mapped",[33,63]],[[8266,8269],"valid",[],"NV8"],[[8270,8274],"valid",[],"NV8"],[[8275,8276],"valid",[],"NV8"],[[8277,8278],"valid",[],"NV8"],[[8279,8279],"mapped",[8242,8242,8242,8242]],[[8280,8286],"valid",[],"NV8"],[[8287,8287],"disallowed_STD3_mapped",[32]],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped",[48]],[[8305,8305],"mapped",[105]],[[8306,8307],"disallowed"],[[8308,8308],"mapped",[52]],[[8309,8309],"mapped",[53]],[[8310,8310],"mapped",[54]],[[8311,8311],"mapped",[55]],[[8312,8312],"mapped",[56]],[[8313,8313],"mapped",[57]],[[8314,8314],"disallowed_STD3_mapped",[43]],[[8315,8315],"mapped",[8722]],[[8316,8316],"disallowed_STD3_mapped",[61]],[[8317,8317],"disallowed_STD3_mapped",[40]],[[8318,8318],"disallowed_STD3_mapped",[41]],[[8319,8319],"mapped",[110]],[[8320,8320],"mapped",[48]],[[8321,8321],"mapped",[49]],[[8322,8322],"mapped",[50]],[[8323,8323],"mapped",[51]],[[8324,8324],"mapped",[52]],[[8325,8325],"mapped",[53]],[[8326,8326],"mapped",[54]],[[8327,8327],"mapped",[55]],[[8328,8328],"mapped",[56]],[[8329,8329],"mapped",[57]],[[8330,8330],"disallowed_STD3_mapped",[43]],[[8331,8331],"mapped",[8722]],[[8332,8332],"disallowed_STD3_mapped",[61]],[[8333,8333],"disallowed_STD3_mapped",[40]],[[8334,8334],"disallowed_STD3_mapped",[41]],[[8335,8335],"disallowed"],[[8336,8336],"mapped",[97]],[[8337,8337],"mapped",[101]],[[8338,8338],"mapped",[111]],[[8339,8339],"mapped",[120]],[[8340,8340],"mapped",[601]],[[8341,8341],"mapped",[104]],[[8342,8342],"mapped",[107]],[[8343,8343],"mapped",[108]],[[8344,8344],"mapped",[109]],[[8345,8345],"mapped",[110]],[[8346,8346],"mapped",[112]],[[8347,8347],"mapped",[115]],[[8348,8348],"mapped",[116]],[[8349,8351],"disallowed"],[[8352,8359],"valid",[],"NV8"],[[8360,8360],"mapped",[114,115]],[[8361,8362],"valid",[],"NV8"],[[8363,8363],"valid",[],"NV8"],[[8364,8364],"valid",[],"NV8"],[[8365,8367],"valid",[],"NV8"],[[8368,8369],"valid",[],"NV8"],[[8370,8373],"valid",[],"NV8"],[[8374,8376],"valid",[],"NV8"],[[8377,8377],"valid",[],"NV8"],[[8378,8378],"valid",[],"NV8"],[[8379,8381],"valid",[],"NV8"],[[8382,8382],"valid",[],"NV8"],[[8383,8399],"disallowed"],[[8400,8417],"valid",[],"NV8"],[[8418,8419],"valid",[],"NV8"],[[8420,8426],"valid",[],"NV8"],[[8427,8427],"valid",[],"NV8"],[[8428,8431],"valid",[],"NV8"],[[8432,8432],"valid",[],"NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped",[97,47,99]],[[8449,8449],"disallowed_STD3_mapped",[97,47,115]],[[8450,8450],"mapped",[99]],[[8451,8451],"mapped",[176,99]],[[8452,8452],"valid",[],"NV8"],[[8453,8453],"disallowed_STD3_mapped",[99,47,111]],[[8454,8454],"disallowed_STD3_mapped",[99,47,117]],[[8455,8455],"mapped",[603]],[[8456,8456],"valid",[],"NV8"],[[8457,8457],"mapped",[176,102]],[[8458,8458],"mapped",[103]],[[8459,8462],"mapped",[104]],[[8463,8463],"mapped",[295]],[[8464,8465],"mapped",[105]],[[8466,8467],"mapped",[108]],[[8468,8468],"valid",[],"NV8"],[[8469,8469],"mapped",[110]],[[8470,8470],"mapped",[110,111]],[[8471,8472],"valid",[],"NV8"],[[8473,8473],"mapped",[112]],[[8474,8474],"mapped",[113]],[[8475,8477],"mapped",[114]],[[8478,8479],"valid",[],"NV8"],[[8480,8480],"mapped",[115,109]],[[8481,8481],"mapped",[116,101,108]],[[8482,8482],"mapped",[116,109]],[[8483,8483],"valid",[],"NV8"],[[8484,8484],"mapped",[122]],[[8485,8485],"valid",[],"NV8"],[[8486,8486],"mapped",[969]],[[8487,8487],"valid",[],"NV8"],[[8488,8488],"mapped",[122]],[[8489,8489],"valid",[],"NV8"],[[8490,8490],"mapped",[107]],[[8491,8491],"mapped",[229]],[[8492,8492],"mapped",[98]],[[8493,8493],"mapped",[99]],[[8494,8494],"valid",[],"NV8"],[[8495,8496],"mapped",[101]],[[8497,8497],"mapped",[102]],[[8498,8498],"disallowed"],[[8499,8499],"mapped",[109]],[[8500,8500],"mapped",[111]],[[8501,8501],"mapped",[1488]],[[8502,8502],"mapped",[1489]],[[8503,8503],"mapped",[1490]],[[8504,8504],"mapped",[1491]],[[8505,8505],"mapped",[105]],[[8506,8506],"valid",[],"NV8"],[[8507,8507],"mapped",[102,97,120]],[[8508,8508],"mapped",[960]],[[8509,8510],"mapped",[947]],[[8511,8511],"mapped",[960]],[[8512,8512],"mapped",[8721]],[[8513,8516],"valid",[],"NV8"],[[8517,8518],"mapped",[100]],[[8519,8519],"mapped",[101]],[[8520,8520],"mapped",[105]],[[8521,8521],"mapped",[106]],[[8522,8523],"valid",[],"NV8"],[[8524,8524],"valid",[],"NV8"],[[8525,8525],"valid",[],"NV8"],[[8526,8526],"valid"],[[8527,8527],"valid",[],"NV8"],[[8528,8528],"mapped",[49,8260,55]],[[8529,8529],"mapped",[49,8260,57]],[[8530,8530],"mapped",[49,8260,49,48]],[[8531,8531],"mapped",[49,8260,51]],[[8532,8532],"mapped",[50,8260,51]],[[8533,8533],"mapped",[49,8260,53]],[[8534,8534],"mapped",[50,8260,53]],[[8535,8535],"mapped",[51,8260,53]],[[8536,8536],"mapped",[52,8260,53]],[[8537,8537],"mapped",[49,8260,54]],[[8538,8538],"mapped",[53,8260,54]],[[8539,8539],"mapped",[49,8260,56]],[[8540,8540],"mapped",[51,8260,56]],[[8541,8541],"mapped",[53,8260,56]],[[8542,8542],"mapped",[55,8260,56]],[[8543,8543],"mapped",[49,8260]],[[8544,8544],"mapped",[105]],[[8545,8545],"mapped",[105,105]],[[8546,8546],"mapped",[105,105,105]],[[8547,8547],"mapped",[105,118]],[[8548,8548],"mapped",[118]],[[8549,8549],"mapped",[118,105]],[[8550,8550],"mapped",[118,105,105]],[[8551,8551],"mapped",[118,105,105,105]],[[8552,8552],"mapped",[105,120]],[[8553,8553],"mapped",[120]],[[8554,8554],"mapped",[120,105]],[[8555,8555],"mapped",[120,105,105]],[[8556,8556],"mapped",[108]],[[8557,8557],"mapped",[99]],[[8558,8558],"mapped",[100]],[[8559,8559],"mapped",[109]],[[8560,8560],"mapped",[105]],[[8561,8561],"mapped",[105,105]],[[8562,8562],"mapped",[105,105,105]],[[8563,8563],"mapped",[105,118]],[[8564,8564],"mapped",[118]],[[8565,8565],"mapped",[118,105]],[[8566,8566],"mapped",[118,105,105]],[[8567,8567],"mapped",[118,105,105,105]],[[8568,8568],"mapped",[105,120]],[[8569,8569],"mapped",[120]],[[8570,8570],"mapped",[120,105]],[[8571,8571],"mapped",[120,105,105]],[[8572,8572],"mapped",[108]],[[8573,8573],"mapped",[99]],[[8574,8574],"mapped",[100]],[[8575,8575],"mapped",[109]],[[8576,8578],"valid",[],"NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid",[],"NV8"],[[8585,8585],"mapped",[48,8260,51]],[[8586,8587],"valid",[],"NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid",[],"NV8"],[[8683,8691],"valid",[],"NV8"],[[8692,8703],"valid",[],"NV8"],[[8704,8747],"valid",[],"NV8"],[[8748,8748],"mapped",[8747,8747]],[[8749,8749],"mapped",[8747,8747,8747]],[[8750,8750],"valid",[],"NV8"],[[8751,8751],"mapped",[8750,8750]],[[8752,8752],"mapped",[8750,8750,8750]],[[8753,8799],"valid",[],"NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid",[],"NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid",[],"NV8"],[[8946,8959],"valid",[],"NV8"],[[8960,8960],"valid",[],"NV8"],[[8961,8961],"valid",[],"NV8"],[[8962,9000],"valid",[],"NV8"],[[9001,9001],"mapped",[12296]],[[9002,9002],"mapped",[12297]],[[9003,9082],"valid",[],"NV8"],[[9083,9083],"valid",[],"NV8"],[[9084,9084],"valid",[],"NV8"],[[9085,9114],"valid",[],"NV8"],[[9115,9166],"valid",[],"NV8"],[[9167,9168],"valid",[],"NV8"],[[9169,9179],"valid",[],"NV8"],[[9180,9191],"valid",[],"NV8"],[[9192,9192],"valid",[],"NV8"],[[9193,9203],"valid",[],"NV8"],[[9204,9210],"valid",[],"NV8"],[[9211,9215],"disallowed"],[[9216,9252],"valid",[],"NV8"],[[9253,9254],"valid",[],"NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid",[],"NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped",[49]],[[9313,9313],"mapped",[50]],[[9314,9314],"mapped",[51]],[[9315,9315],"mapped",[52]],[[9316,9316],"mapped",[53]],[[9317,9317],"mapped",[54]],[[9318,9318],"mapped",[55]],[[9319,9319],"mapped",[56]],[[9320,9320],"mapped",[57]],[[9321,9321],"mapped",[49,48]],[[9322,9322],"mapped",[49,49]],[[9323,9323],"mapped",[49,50]],[[9324,9324],"mapped",[49,51]],[[9325,9325],"mapped",[49,52]],[[9326,9326],"mapped",[49,53]],[[9327,9327],"mapped",[49,54]],[[9328,9328],"mapped",[49,55]],[[9329,9329],"mapped",[49,56]],[[9330,9330],"mapped",[49,57]],[[9331,9331],"mapped",[50,48]],[[9332,9332],"disallowed_STD3_mapped",[40,49,41]],[[9333,9333],"disallowed_STD3_mapped",[40,50,41]],[[9334,9334],"disallowed_STD3_mapped",[40,51,41]],[[9335,9335],"disallowed_STD3_mapped",[40,52,41]],[[9336,9336],"disallowed_STD3_mapped",[40,53,41]],[[9337,9337],"disallowed_STD3_mapped",[40,54,41]],[[9338,9338],"disallowed_STD3_mapped",[40,55,41]],[[9339,9339],"disallowed_STD3_mapped",[40,56,41]],[[9340,9340],"disallowed_STD3_mapped",[40,57,41]],[[9341,9341],"disallowed_STD3_mapped",[40,49,48,41]],[[9342,9342],"disallowed_STD3_mapped",[40,49,49,41]],[[9343,9343],"disallowed_STD3_mapped",[40,49,50,41]],[[9344,9344],"disallowed_STD3_mapped",[40,49,51,41]],[[9345,9345],"disallowed_STD3_mapped",[40,49,52,41]],[[9346,9346],"disallowed_STD3_mapped",[40,49,53,41]],[[9347,9347],"disallowed_STD3_mapped",[40,49,54,41]],[[9348,9348],"disallowed_STD3_mapped",[40,49,55,41]],[[9349,9349],"disallowed_STD3_mapped",[40,49,56,41]],[[9350,9350],"disallowed_STD3_mapped",[40,49,57,41]],[[9351,9351],"disallowed_STD3_mapped",[40,50,48,41]],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped",[40,97,41]],[[9373,9373],"disallowed_STD3_mapped",[40,98,41]],[[9374,9374],"disallowed_STD3_mapped",[40,99,41]],[[9375,9375],"disallowed_STD3_mapped",[40,100,41]],[[9376,9376],"disallowed_STD3_mapped",[40,101,41]],[[9377,9377],"disallowed_STD3_mapped",[40,102,41]],[[9378,9378],"disallowed_STD3_mapped",[40,103,41]],[[9379,9379],"disallowed_STD3_mapped",[40,104,41]],[[9380,9380],"disallowed_STD3_mapped",[40,105,41]],[[9381,9381],"disallowed_STD3_mapped",[40,106,41]],[[9382,9382],"disallowed_STD3_mapped",[40,107,41]],[[9383,9383],"disallowed_STD3_mapped",[40,108,41]],[[9384,9384],"disallowed_STD3_mapped",[40,109,41]],[[9385,9385],"disallowed_STD3_mapped",[40,110,41]],[[9386,9386],"disallowed_STD3_mapped",[40,111,41]],[[9387,9387],"disallowed_STD3_mapped",[40,112,41]],[[9388,9388],"disallowed_STD3_mapped",[40,113,41]],[[9389,9389],"disallowed_STD3_mapped",[40,114,41]],[[9390,9390],"disallowed_STD3_mapped",[40,115,41]],[[9391,9391],"disallowed_STD3_mapped",[40,116,41]],[[9392,9392],"disallowed_STD3_mapped",[40,117,41]],[[9393,9393],"disallowed_STD3_mapped",[40,118,41]],[[9394,9394],"disallowed_STD3_mapped",[40,119,41]],[[9395,9395],"disallowed_STD3_mapped",[40,120,41]],[[9396,9396],"disallowed_STD3_mapped",[40,121,41]],[[9397,9397],"disallowed_STD3_mapped",[40,122,41]],[[9398,9398],"mapped",[97]],[[9399,9399],"mapped",[98]],[[9400,9400],"mapped",[99]],[[9401,9401],"mapped",[100]],[[9402,9402],"mapped",[101]],[[9403,9403],"mapped",[102]],[[9404,9404],"mapped",[103]],[[9405,9405],"mapped",[104]],[[9406,9406],"mapped",[105]],[[9407,9407],"mapped",[106]],[[9408,9408],"mapped",[107]],[[9409,9409],"mapped",[108]],[[9410,9410],"mapped",[109]],[[9411,9411],"mapped",[110]],[[9412,9412],"mapped",[111]],[[9413,9413],"mapped",[112]],[[9414,9414],"mapped",[113]],[[9415,9415],"mapped",[114]],[[9416,9416],"mapped",[115]],[[9417,9417],"mapped",[116]],[[9418,9418],"mapped",[117]],[[9419,9419],"mapped",[118]],[[9420,9420],"mapped",[119]],[[9421,9421],"mapped",[120]],[[9422,9422],"mapped",[121]],[[9423,9423],"mapped",[122]],[[9424,9424],"mapped",[97]],[[9425,9425],"mapped",[98]],[[9426,9426],"mapped",[99]],[[9427,9427],"mapped",[100]],[[9428,9428],"mapped",[101]],[[9429,9429],"mapped",[102]],[[9430,9430],"mapped",[103]],[[9431,9431],"mapped",[104]],[[9432,9432],"mapped",[105]],[[9433,9433],"mapped",[106]],[[9434,9434],"mapped",[107]],[[9435,9435],"mapped",[108]],[[9436,9436],"mapped",[109]],[[9437,9437],"mapped",[110]],[[9438,9438],"mapped",[111]],[[9439,9439],"mapped",[112]],[[9440,9440],"mapped",[113]],[[9441,9441],"mapped",[114]],[[9442,9442],"mapped",[115]],[[9443,9443],"mapped",[116]],[[9444,9444],"mapped",[117]],[[9445,9445],"mapped",[118]],[[9446,9446],"mapped",[119]],[[9447,9447],"mapped",[120]],[[9448,9448],"mapped",[121]],[[9449,9449],"mapped",[122]],[[9450,9450],"mapped",[48]],[[9451,9470],"valid",[],"NV8"],[[9471,9471],"valid",[],"NV8"],[[9472,9621],"valid",[],"NV8"],[[9622,9631],"valid",[],"NV8"],[[9632,9711],"valid",[],"NV8"],[[9712,9719],"valid",[],"NV8"],[[9720,9727],"valid",[],"NV8"],[[9728,9747],"valid",[],"NV8"],[[9748,9749],"valid",[],"NV8"],[[9750,9751],"valid",[],"NV8"],[[9752,9752],"valid",[],"NV8"],[[9753,9753],"valid",[],"NV8"],[[9754,9839],"valid",[],"NV8"],[[9840,9841],"valid",[],"NV8"],[[9842,9853],"valid",[],"NV8"],[[9854,9855],"valid",[],"NV8"],[[9856,9865],"valid",[],"NV8"],[[9866,9873],"valid",[],"NV8"],[[9874,9884],"valid",[],"NV8"],[[9885,9885],"valid",[],"NV8"],[[9886,9887],"valid",[],"NV8"],[[9888,9889],"valid",[],"NV8"],[[9890,9905],"valid",[],"NV8"],[[9906,9906],"valid",[],"NV8"],[[9907,9916],"valid",[],"NV8"],[[9917,9919],"valid",[],"NV8"],[[9920,9923],"valid",[],"NV8"],[[9924,9933],"valid",[],"NV8"],[[9934,9934],"valid",[],"NV8"],[[9935,9953],"valid",[],"NV8"],[[9954,9954],"valid",[],"NV8"],[[9955,9955],"valid",[],"NV8"],[[9956,9959],"valid",[],"NV8"],[[9960,9983],"valid",[],"NV8"],[[9984,9984],"valid",[],"NV8"],[[9985,9988],"valid",[],"NV8"],[[9989,9989],"valid",[],"NV8"],[[9990,9993],"valid",[],"NV8"],[[9994,9995],"valid",[],"NV8"],[[9996,10023],"valid",[],"NV8"],[[10024,10024],"valid",[],"NV8"],[[10025,10059],"valid",[],"NV8"],[[10060,10060],"valid",[],"NV8"],[[10061,10061],"valid",[],"NV8"],[[10062,10062],"valid",[],"NV8"],[[10063,10066],"valid",[],"NV8"],[[10067,10069],"valid",[],"NV8"],[[10070,10070],"valid",[],"NV8"],[[10071,10071],"valid",[],"NV8"],[[10072,10078],"valid",[],"NV8"],[[10079,10080],"valid",[],"NV8"],[[10081,10087],"valid",[],"NV8"],[[10088,10101],"valid",[],"NV8"],[[10102,10132],"valid",[],"NV8"],[[10133,10135],"valid",[],"NV8"],[[10136,10159],"valid",[],"NV8"],[[10160,10160],"valid",[],"NV8"],[[10161,10174],"valid",[],"NV8"],[[10175,10175],"valid",[],"NV8"],[[10176,10182],"valid",[],"NV8"],[[10183,10186],"valid",[],"NV8"],[[10187,10187],"valid",[],"NV8"],[[10188,10188],"valid",[],"NV8"],[[10189,10189],"valid",[],"NV8"],[[10190,10191],"valid",[],"NV8"],[[10192,10219],"valid",[],"NV8"],[[10220,10223],"valid",[],"NV8"],[[10224,10239],"valid",[],"NV8"],[[10240,10495],"valid",[],"NV8"],[[10496,10763],"valid",[],"NV8"],[[10764,10764],"mapped",[8747,8747,8747,8747]],[[10765,10867],"valid",[],"NV8"],[[10868,10868],"disallowed_STD3_mapped",[58,58,61]],[[10869,10869],"disallowed_STD3_mapped",[61,61]],[[10870,10870],"disallowed_STD3_mapped",[61,61,61]],[[10871,10971],"valid",[],"NV8"],[[10972,10972],"mapped",[10973,824]],[[10973,11007],"valid",[],"NV8"],[[11008,11021],"valid",[],"NV8"],[[11022,11027],"valid",[],"NV8"],[[11028,11034],"valid",[],"NV8"],[[11035,11039],"valid",[],"NV8"],[[11040,11043],"valid",[],"NV8"],[[11044,11084],"valid",[],"NV8"],[[11085,11087],"valid",[],"NV8"],[[11088,11092],"valid",[],"NV8"],[[11093,11097],"valid",[],"NV8"],[[11098,11123],"valid",[],"NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid",[],"NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid",[],"NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid",[],"NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid",[],"NV8"],[[11218,11243],"disallowed"],[[11244,11247],"valid",[],"NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped",[11312]],[[11265,11265],"mapped",[11313]],[[11266,11266],"mapped",[11314]],[[11267,11267],"mapped",[11315]],[[11268,11268],"mapped",[11316]],[[11269,11269],"mapped",[11317]],[[11270,11270],"mapped",[11318]],[[11271,11271],"mapped",[11319]],[[11272,11272],"mapped",[11320]],[[11273,11273],"mapped",[11321]],[[11274,11274],"mapped",[11322]],[[11275,11275],"mapped",[11323]],[[11276,11276],"mapped",[11324]],[[11277,11277],"mapped",[11325]],[[11278,11278],"mapped",[11326]],[[11279,11279],"mapped",[11327]],[[11280,11280],"mapped",[11328]],[[11281,11281],"mapped",[11329]],[[11282,11282],"mapped",[11330]],[[11283,11283],"mapped",[11331]],[[11284,11284],"mapped",[11332]],[[11285,11285],"mapped",[11333]],[[11286,11286],"mapped",[11334]],[[11287,11287],"mapped",[11335]],[[11288,11288],"mapped",[11336]],[[11289,11289],"mapped",[11337]],[[11290,11290],"mapped",[11338]],[[11291,11291],"mapped",[11339]],[[11292,11292],"mapped",[11340]],[[11293,11293],"mapped",[11341]],[[11294,11294],"mapped",[11342]],[[11295,11295],"mapped",[11343]],[[11296,11296],"mapped",[11344]],[[11297,11297],"mapped",[11345]],[[11298,11298],"mapped",[11346]],[[11299,11299],"mapped",[11347]],[[11300,11300],"mapped",[11348]],[[11301,11301],"mapped",[11349]],[[11302,11302],"mapped",[11350]],[[11303,11303],"mapped",[11351]],[[11304,11304],"mapped",[11352]],[[11305,11305],"mapped",[11353]],[[11306,11306],"mapped",[11354]],[[11307,11307],"mapped",[11355]],[[11308,11308],"mapped",[11356]],[[11309,11309],"mapped",[11357]],[[11310,11310],"mapped",[11358]],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped",[11361]],[[11361,11361],"valid"],[[11362,11362],"mapped",[619]],[[11363,11363],"mapped",[7549]],[[11364,11364],"mapped",[637]],[[11365,11366],"valid"],[[11367,11367],"mapped",[11368]],[[11368,11368],"valid"],[[11369,11369],"mapped",[11370]],[[11370,11370],"valid"],[[11371,11371],"mapped",[11372]],[[11372,11372],"valid"],[[11373,11373],"mapped",[593]],[[11374,11374],"mapped",[625]],[[11375,11375],"mapped",[592]],[[11376,11376],"mapped",[594]],[[11377,11377],"valid"],[[11378,11378],"mapped",[11379]],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped",[11382]],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped",[106]],[[11389,11389],"mapped",[118]],[[11390,11390],"mapped",[575]],[[11391,11391],"mapped",[576]],[[11392,11392],"mapped",[11393]],[[11393,11393],"valid"],[[11394,11394],"mapped",[11395]],[[11395,11395],"valid"],[[11396,11396],"mapped",[11397]],[[11397,11397],"valid"],[[11398,11398],"mapped",[11399]],[[11399,11399],"valid"],[[11400,11400],"mapped",[11401]],[[11401,11401],"valid"],[[11402,11402],"mapped",[11403]],[[11403,11403],"valid"],[[11404,11404],"mapped",[11405]],[[11405,11405],"valid"],[[11406,11406],"mapped",[11407]],[[11407,11407],"valid"],[[11408,11408],"mapped",[11409]],[[11409,11409],"valid"],[[11410,11410],"mapped",[11411]],[[11411,11411],"valid"],[[11412,11412],"mapped",[11413]],[[11413,11413],"valid"],[[11414,11414],"mapped",[11415]],[[11415,11415],"valid"],[[11416,11416],"mapped",[11417]],[[11417,11417],"valid"],[[11418,11418],"mapped",[11419]],[[11419,11419],"valid"],[[11420,11420],"mapped",[11421]],[[11421,11421],"valid"],[[11422,11422],"mapped",[11423]],[[11423,11423],"valid"],[[11424,11424],"mapped",[11425]],[[11425,11425],"valid"],[[11426,11426],"mapped",[11427]],[[11427,11427],"valid"],[[11428,11428],"mapped",[11429]],[[11429,11429],"valid"],[[11430,11430],"mapped",[11431]],[[11431,11431],"valid"],[[11432,11432],"mapped",[11433]],[[11433,11433],"valid"],[[11434,11434],"mapped",[11435]],[[11435,11435],"valid"],[[11436,11436],"mapped",[11437]],[[11437,11437],"valid"],[[11438,11438],"mapped",[11439]],[[11439,11439],"valid"],[[11440,11440],"mapped",[11441]],[[11441,11441],"valid"],[[11442,11442],"mapped",[11443]],[[11443,11443],"valid"],[[11444,11444],"mapped",[11445]],[[11445,11445],"valid"],[[11446,11446],"mapped",[11447]],[[11447,11447],"valid"],[[11448,11448],"mapped",[11449]],[[11449,11449],"valid"],[[11450,11450],"mapped",[11451]],[[11451,11451],"valid"],[[11452,11452],"mapped",[11453]],[[11453,11453],"valid"],[[11454,11454],"mapped",[11455]],[[11455,11455],"valid"],[[11456,11456],"mapped",[11457]],[[11457,11457],"valid"],[[11458,11458],"mapped",[11459]],[[11459,11459],"valid"],[[11460,11460],"mapped",[11461]],[[11461,11461],"valid"],[[11462,11462],"mapped",[11463]],[[11463,11463],"valid"],[[11464,11464],"mapped",[11465]],[[11465,11465],"valid"],[[11466,11466],"mapped",[11467]],[[11467,11467],"valid"],[[11468,11468],"mapped",[11469]],[[11469,11469],"valid"],[[11470,11470],"mapped",[11471]],[[11471,11471],"valid"],[[11472,11472],"mapped",[11473]],[[11473,11473],"valid"],[[11474,11474],"mapped",[11475]],[[11475,11475],"valid"],[[11476,11476],"mapped",[11477]],[[11477,11477],"valid"],[[11478,11478],"mapped",[11479]],[[11479,11479],"valid"],[[11480,11480],"mapped",[11481]],[[11481,11481],"valid"],[[11482,11482],"mapped",[11483]],[[11483,11483],"valid"],[[11484,11484],"mapped",[11485]],[[11485,11485],"valid"],[[11486,11486],"mapped",[11487]],[[11487,11487],"valid"],[[11488,11488],"mapped",[11489]],[[11489,11489],"valid"],[[11490,11490],"mapped",[11491]],[[11491,11492],"valid"],[[11493,11498],"valid",[],"NV8"],[[11499,11499],"mapped",[11500]],[[11500,11500],"valid"],[[11501,11501],"mapped",[11502]],[[11502,11505],"valid"],[[11506,11506],"mapped",[11507]],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid",[],"NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped",[11617]],[[11632,11632],"valid",[],"NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid",[],"NV8"],[[11800,11803],"valid",[],"NV8"],[[11804,11805],"valid",[],"NV8"],[[11806,11822],"valid",[],"NV8"],[[11823,11823],"valid"],[[11824,11824],"valid",[],"NV8"],[[11825,11825],"valid",[],"NV8"],[[11826,11835],"valid",[],"NV8"],[[11836,11842],"valid",[],"NV8"],[[11843,11903],"disallowed"],[[11904,11929],"valid",[],"NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid",[],"NV8"],[[11935,11935],"mapped",[27597]],[[11936,12018],"valid",[],"NV8"],[[12019,12019],"mapped",[40863]],[[12020,12031],"disallowed"],[[12032,12032],"mapped",[19968]],[[12033,12033],"mapped",[20008]],[[12034,12034],"mapped",[20022]],[[12035,12035],"mapped",[20031]],[[12036,12036],"mapped",[20057]],[[12037,12037],"mapped",[20101]],[[12038,12038],"mapped",[20108]],[[12039,12039],"mapped",[20128]],[[12040,12040],"mapped",[20154]],[[12041,12041],"mapped",[20799]],[[12042,12042],"mapped",[20837]],[[12043,12043],"mapped",[20843]],[[12044,12044],"mapped",[20866]],[[12045,12045],"mapped",[20886]],[[12046,12046],"mapped",[20907]],[[12047,12047],"mapped",[20960]],[[12048,12048],"mapped",[20981]],[[12049,12049],"mapped",[20992]],[[12050,12050],"mapped",[21147]],[[12051,12051],"mapped",[21241]],[[12052,12052],"mapped",[21269]],[[12053,12053],"mapped",[21274]],[[12054,12054],"mapped",[21304]],[[12055,12055],"mapped",[21313]],[[12056,12056],"mapped",[21340]],[[12057,12057],"mapped",[21353]],[[12058,12058],"mapped",[21378]],[[12059,12059],"mapped",[21430]],[[12060,12060],"mapped",[21448]],[[12061,12061],"mapped",[21475]],[[12062,12062],"mapped",[22231]],[[12063,12063],"mapped",[22303]],[[12064,12064],"mapped",[22763]],[[12065,12065],"mapped",[22786]],[[12066,12066],"mapped",[22794]],[[12067,12067],"mapped",[22805]],[[12068,12068],"mapped",[22823]],[[12069,12069],"mapped",[22899]],[[12070,12070],"mapped",[23376]],[[12071,12071],"mapped",[23424]],[[12072,12072],"mapped",[23544]],[[12073,12073],"mapped",[23567]],[[12074,12074],"mapped",[23586]],[[12075,12075],"mapped",[23608]],[[12076,12076],"mapped",[23662]],[[12077,12077],"mapped",[23665]],[[12078,12078],"mapped",[24027]],[[12079,12079],"mapped",[24037]],[[12080,12080],"mapped",[24049]],[[12081,12081],"mapped",[24062]],[[12082,12082],"mapped",[24178]],[[12083,12083],"mapped",[24186]],[[12084,12084],"mapped",[24191]],[[12085,12085],"mapped",[24308]],[[12086,12086],"mapped",[24318]],[[12087,12087],"mapped",[24331]],[[12088,12088],"mapped",[24339]],[[12089,12089],"mapped",[24400]],[[12090,12090],"mapped",[24417]],[[12091,12091],"mapped",[24435]],[[12092,12092],"mapped",[24515]],[[12093,12093],"mapped",[25096]],[[12094,12094],"mapped",[25142]],[[12095,12095],"mapped",[25163]],[[12096,12096],"mapped",[25903]],[[12097,12097],"mapped",[25908]],[[12098,12098],"mapped",[25991]],[[12099,12099],"mapped",[26007]],[[12100,12100],"mapped",[26020]],[[12101,12101],"mapped",[26041]],[[12102,12102],"mapped",[26080]],[[12103,12103],"mapped",[26085]],[[12104,12104],"mapped",[26352]],[[12105,12105],"mapped",[26376]],[[12106,12106],"mapped",[26408]],[[12107,12107],"mapped",[27424]],[[12108,12108],"mapped",[27490]],[[12109,12109],"mapped",[27513]],[[12110,12110],"mapped",[27571]],[[12111,12111],"mapped",[27595]],[[12112,12112],"mapped",[27604]],[[12113,12113],"mapped",[27611]],[[12114,12114],"mapped",[27663]],[[12115,12115],"mapped",[27668]],[[12116,12116],"mapped",[27700]],[[12117,12117],"mapped",[28779]],[[12118,12118],"mapped",[29226]],[[12119,12119],"mapped",[29238]],[[12120,12120],"mapped",[29243]],[[12121,12121],"mapped",[29247]],[[12122,12122],"mapped",[29255]],[[12123,12123],"mapped",[29273]],[[12124,12124],"mapped",[29275]],[[12125,12125],"mapped",[29356]],[[12126,12126],"mapped",[29572]],[[12127,12127],"mapped",[29577]],[[12128,12128],"mapped",[29916]],[[12129,12129],"mapped",[29926]],[[12130,12130],"mapped",[29976]],[[12131,12131],"mapped",[29983]],[[12132,12132],"mapped",[29992]],[[12133,12133],"mapped",[30000]],[[12134,12134],"mapped",[30091]],[[12135,12135],"mapped",[30098]],[[12136,12136],"mapped",[30326]],[[12137,12137],"mapped",[30333]],[[12138,12138],"mapped",[30382]],[[12139,12139],"mapped",[30399]],[[12140,12140],"mapped",[30446]],[[12141,12141],"mapped",[30683]],[[12142,12142],"mapped",[30690]],[[12143,12143],"mapped",[30707]],[[12144,12144],"mapped",[31034]],[[12145,12145],"mapped",[31160]],[[12146,12146],"mapped",[31166]],[[12147,12147],"mapped",[31348]],[[12148,12148],"mapped",[31435]],[[12149,12149],"mapped",[31481]],[[12150,12150],"mapped",[31859]],[[12151,12151],"mapped",[31992]],[[12152,12152],"mapped",[32566]],[[12153,12153],"mapped",[32593]],[[12154,12154],"mapped",[32650]],[[12155,12155],"mapped",[32701]],[[12156,12156],"mapped",[32769]],[[12157,12157],"mapped",[32780]],[[12158,12158],"mapped",[32786]],[[12159,12159],"mapped",[32819]],[[12160,12160],"mapped",[32895]],[[12161,12161],"mapped",[32905]],[[12162,12162],"mapped",[33251]],[[12163,12163],"mapped",[33258]],[[12164,12164],"mapped",[33267]],[[12165,12165],"mapped",[33276]],[[12166,12166],"mapped",[33292]],[[12167,12167],"mapped",[33307]],[[12168,12168],"mapped",[33311]],[[12169,12169],"mapped",[33390]],[[12170,12170],"mapped",[33394]],[[12171,12171],"mapped",[33400]],[[12172,12172],"mapped",[34381]],[[12173,12173],"mapped",[34411]],[[12174,12174],"mapped",[34880]],[[12175,12175],"mapped",[34892]],[[12176,12176],"mapped",[34915]],[[12177,12177],"mapped",[35198]],[[12178,12178],"mapped",[35211]],[[12179,12179],"mapped",[35282]],[[12180,12180],"mapped",[35328]],[[12181,12181],"mapped",[35895]],[[12182,12182],"mapped",[35910]],[[12183,12183],"mapped",[35925]],[[12184,12184],"mapped",[35960]],[[12185,12185],"mapped",[35997]],[[12186,12186],"mapped",[36196]],[[12187,12187],"mapped",[36208]],[[12188,12188],"mapped",[36275]],[[12189,12189],"mapped",[36523]],[[12190,12190],"mapped",[36554]],[[12191,12191],"mapped",[36763]],[[12192,12192],"mapped",[36784]],[[12193,12193],"mapped",[36789]],[[12194,12194],"mapped",[37009]],[[12195,12195],"mapped",[37193]],[[12196,12196],"mapped",[37318]],[[12197,12197],"mapped",[37324]],[[12198,12198],"mapped",[37329]],[[12199,12199],"mapped",[38263]],[[12200,12200],"mapped",[38272]],[[12201,12201],"mapped",[38428]],[[12202,12202],"mapped",[38582]],[[12203,12203],"mapped",[38585]],[[12204,12204],"mapped",[38632]],[[12205,12205],"mapped",[38737]],[[12206,12206],"mapped",[38750]],[[12207,12207],"mapped",[38754]],[[12208,12208],"mapped",[38761]],[[12209,12209],"mapped",[38859]],[[12210,12210],"mapped",[38893]],[[12211,12211],"mapped",[38899]],[[12212,12212],"mapped",[38913]],[[12213,12213],"mapped",[39080]],[[12214,12214],"mapped",[39131]],[[12215,12215],"mapped",[39135]],[[12216,12216],"mapped",[39318]],[[12217,12217],"mapped",[39321]],[[12218,12218],"mapped",[39340]],[[12219,12219],"mapped",[39592]],[[12220,12220],"mapped",[39640]],[[12221,12221],"mapped",[39647]],[[12222,12222],"mapped",[39717]],[[12223,12223],"mapped",[39727]],[[12224,12224],"mapped",[39730]],[[12225,12225],"mapped",[39740]],[[12226,12226],"mapped",[39770]],[[12227,12227],"mapped",[40165]],[[12228,12228],"mapped",[40565]],[[12229,12229],"mapped",[40575]],[[12230,12230],"mapped",[40613]],[[12231,12231],"mapped",[40635]],[[12232,12232],"mapped",[40643]],[[12233,12233],"mapped",[40653]],[[12234,12234],"mapped",[40657]],[[12235,12235],"mapped",[40697]],[[12236,12236],"mapped",[40701]],[[12237,12237],"mapped",[40718]],[[12238,12238],"mapped",[40723]],[[12239,12239],"mapped",[40736]],[[12240,12240],"mapped",[40763]],[[12241,12241],"mapped",[40778]],[[12242,12242],"mapped",[40786]],[[12243,12243],"mapped",[40845]],[[12244,12244],"mapped",[40860]],[[12245,12245],"mapped",[40864]],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped",[32]],[[12289,12289],"valid",[],"NV8"],[[12290,12290],"mapped",[46]],[[12291,12292],"valid",[],"NV8"],[[12293,12295],"valid"],[[12296,12329],"valid",[],"NV8"],[[12330,12333],"valid"],[[12334,12341],"valid",[],"NV8"],[[12342,12342],"mapped",[12306]],[[12343,12343],"valid",[],"NV8"],[[12344,12344],"mapped",[21313]],[[12345,12345],"mapped",[21316]],[[12346,12346],"mapped",[21317]],[[12347,12347],"valid",[],"NV8"],[[12348,12348],"valid"],[[12349,12349],"valid",[],"NV8"],[[12350,12350],"valid",[],"NV8"],[[12351,12351],"valid",[],"NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped",[32,12441]],[[12444,12444],"disallowed_STD3_mapped",[32,12442]],[[12445,12446],"valid"],[[12447,12447],"mapped",[12424,12426]],[[12448,12448],"valid",[],"NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped",[12467,12488]],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12592],"disallowed"],[[12593,12593],"mapped",[4352]],[[12594,12594],"mapped",[4353]],[[12595,12595],"mapped",[4522]],[[12596,12596],"mapped",[4354]],[[12597,12597],"mapped",[4524]],[[12598,12598],"mapped",[4525]],[[12599,12599],"mapped",[4355]],[[12600,12600],"mapped",[4356]],[[12601,12601],"mapped",[4357]],[[12602,12602],"mapped",[4528]],[[12603,12603],"mapped",[4529]],[[12604,12604],"mapped",[4530]],[[12605,12605],"mapped",[4531]],[[12606,12606],"mapped",[4532]],[[12607,12607],"mapped",[4533]],[[12608,12608],"mapped",[4378]],[[12609,12609],"mapped",[4358]],[[12610,12610],"mapped",[4359]],[[12611,12611],"mapped",[4360]],[[12612,12612],"mapped",[4385]],[[12613,12613],"mapped",[4361]],[[12614,12614],"mapped",[4362]],[[12615,12615],"mapped",[4363]],[[12616,12616],"mapped",[4364]],[[12617,12617],"mapped",[4365]],[[12618,12618],"mapped",[4366]],[[12619,12619],"mapped",[4367]],[[12620,12620],"mapped",[4368]],[[12621,12621],"mapped",[4369]],[[12622,12622],"mapped",[4370]],[[12623,12623],"mapped",[4449]],[[12624,12624],"mapped",[4450]],[[12625,12625],"mapped",[4451]],[[12626,12626],"mapped",[4452]],[[12627,12627],"mapped",[4453]],[[12628,12628],"mapped",[4454]],[[12629,12629],"mapped",[4455]],[[12630,12630],"mapped",[4456]],[[12631,12631],"mapped",[4457]],[[12632,12632],"mapped",[4458]],[[12633,12633],"mapped",[4459]],[[12634,12634],"mapped",[4460]],[[12635,12635],"mapped",[4461]],[[12636,12636],"mapped",[4462]],[[12637,12637],"mapped",[4463]],[[12638,12638],"mapped",[4464]],[[12639,12639],"mapped",[4465]],[[12640,12640],"mapped",[4466]],[[12641,12641],"mapped",[4467]],[[12642,12642],"mapped",[4468]],[[12643,12643],"mapped",[4469]],[[12644,12644],"disallowed"],[[12645,12645],"mapped",[4372]],[[12646,12646],"mapped",[4373]],[[12647,12647],"mapped",[4551]],[[12648,12648],"mapped",[4552]],[[12649,12649],"mapped",[4556]],[[12650,12650],"mapped",[4558]],[[12651,12651],"mapped",[4563]],[[12652,12652],"mapped",[4567]],[[12653,12653],"mapped",[4569]],[[12654,12654],"mapped",[4380]],[[12655,12655],"mapped",[4573]],[[12656,12656],"mapped",[4575]],[[12657,12657],"mapped",[4381]],[[12658,12658],"mapped",[4382]],[[12659,12659],"mapped",[4384]],[[12660,12660],"mapped",[4386]],[[12661,12661],"mapped",[4387]],[[12662,12662],"mapped",[4391]],[[12663,12663],"mapped",[4393]],[[12664,12664],"mapped",[4395]],[[12665,12665],"mapped",[4396]],[[12666,12666],"mapped",[4397]],[[12667,12667],"mapped",[4398]],[[12668,12668],"mapped",[4399]],[[12669,12669],"mapped",[4402]],[[12670,12670],"mapped",[4406]],[[12671,12671],"mapped",[4416]],[[12672,12672],"mapped",[4423]],[[12673,12673],"mapped",[4428]],[[12674,12674],"mapped",[4593]],[[12675,12675],"mapped",[4594]],[[12676,12676],"mapped",[4439]],[[12677,12677],"mapped",[4440]],[[12678,12678],"mapped",[4441]],[[12679,12679],"mapped",[4484]],[[12680,12680],"mapped",[4485]],[[12681,12681],"mapped",[4488]],[[12682,12682],"mapped",[4497]],[[12683,12683],"mapped",[4498]],[[12684,12684],"mapped",[4500]],[[12685,12685],"mapped",[4510]],[[12686,12686],"mapped",[4513]],[[12687,12687],"disallowed"],[[12688,12689],"valid",[],"NV8"],[[12690,12690],"mapped",[19968]],[[12691,12691],"mapped",[20108]],[[12692,12692],"mapped",[19977]],[[12693,12693],"mapped",[22235]],[[12694,12694],"mapped",[19978]],[[12695,12695],"mapped",[20013]],[[12696,12696],"mapped",[19979]],[[12697,12697],"mapped",[30002]],[[12698,12698],"mapped",[20057]],[[12699,12699],"mapped",[19993]],[[12700,12700],"mapped",[19969]],[[12701,12701],"mapped",[22825]],[[12702,12702],"mapped",[22320]],[[12703,12703],"mapped",[20154]],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid",[],"NV8"],[[12752,12771],"valid",[],"NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped",[40,4352,41]],[[12801,12801],"disallowed_STD3_mapped",[40,4354,41]],[[12802,12802],"disallowed_STD3_mapped",[40,4355,41]],[[12803,12803],"disallowed_STD3_mapped",[40,4357,41]],[[12804,12804],"disallowed_STD3_mapped",[40,4358,41]],[[12805,12805],"disallowed_STD3_mapped",[40,4359,41]],[[12806,12806],"disallowed_STD3_mapped",[40,4361,41]],[[12807,12807],"disallowed_STD3_mapped",[40,4363,41]],[[12808,12808],"disallowed_STD3_mapped",[40,4364,41]],[[12809,12809],"disallowed_STD3_mapped",[40,4366,41]],[[12810,12810],"disallowed_STD3_mapped",[40,4367,41]],[[12811,12811],"disallowed_STD3_mapped",[40,4368,41]],[[12812,12812],"disallowed_STD3_mapped",[40,4369,41]],[[12813,12813],"disallowed_STD3_mapped",[40,4370,41]],[[12814,12814],"disallowed_STD3_mapped",[40,44032,41]],[[12815,12815],"disallowed_STD3_mapped",[40,45208,41]],[[12816,12816],"disallowed_STD3_mapped",[40,45796,41]],[[12817,12817],"disallowed_STD3_mapped",[40,46972,41]],[[12818,12818],"disallowed_STD3_mapped",[40,47560,41]],[[12819,12819],"disallowed_STD3_mapped",[40,48148,41]],[[12820,12820],"disallowed_STD3_mapped",[40,49324,41]],[[12821,12821],"disallowed_STD3_mapped",[40,50500,41]],[[12822,12822],"disallowed_STD3_mapped",[40,51088,41]],[[12823,12823],"disallowed_STD3_mapped",[40,52264,41]],[[12824,12824],"disallowed_STD3_mapped",[40,52852,41]],[[12825,12825],"disallowed_STD3_mapped",[40,53440,41]],[[12826,12826],"disallowed_STD3_mapped",[40,54028,41]],[[12827,12827],"disallowed_STD3_mapped",[40,54616,41]],[[12828,12828],"disallowed_STD3_mapped",[40,51452,41]],[[12829,12829],"disallowed_STD3_mapped",[40,50724,51204,41]],[[12830,12830],"disallowed_STD3_mapped",[40,50724,54980,41]],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped",[40,19968,41]],[[12833,12833],"disallowed_STD3_mapped",[40,20108,41]],[[12834,12834],"disallowed_STD3_mapped",[40,19977,41]],[[12835,12835],"disallowed_STD3_mapped",[40,22235,41]],[[12836,12836],"disallowed_STD3_mapped",[40,20116,41]],[[12837,12837],"disallowed_STD3_mapped",[40,20845,41]],[[12838,12838],"disallowed_STD3_mapped",[40,19971,41]],[[12839,12839],"disallowed_STD3_mapped",[40,20843,41]],[[12840,12840],"disallowed_STD3_mapped",[40,20061,41]],[[12841,12841],"disallowed_STD3_mapped",[40,21313,41]],[[12842,12842],"disallowed_STD3_mapped",[40,26376,41]],[[12843,12843],"disallowed_STD3_mapped",[40,28779,41]],[[12844,12844],"disallowed_STD3_mapped",[40,27700,41]],[[12845,12845],"disallowed_STD3_mapped",[40,26408,41]],[[12846,12846],"disallowed_STD3_mapped",[40,37329,41]],[[12847,12847],"disallowed_STD3_mapped",[40,22303,41]],[[12848,12848],"disallowed_STD3_mapped",[40,26085,41]],[[12849,12849],"disallowed_STD3_mapped",[40,26666,41]],[[12850,12850],"disallowed_STD3_mapped",[40,26377,41]],[[12851,12851],"disallowed_STD3_mapped",[40,31038,41]],[[12852,12852],"disallowed_STD3_mapped",[40,21517,41]],[[12853,12853],"disallowed_STD3_mapped",[40,29305,41]],[[12854,12854],"disallowed_STD3_mapped",[40,36001,41]],[[12855,12855],"disallowed_STD3_mapped",[40,31069,41]],[[12856,12856],"disallowed_STD3_mapped",[40,21172,41]],[[12857,12857],"disallowed_STD3_mapped",[40,20195,41]],[[12858,12858],"disallowed_STD3_mapped",[40,21628,41]],[[12859,12859],"disallowed_STD3_mapped",[40,23398,41]],[[12860,12860],"disallowed_STD3_mapped",[40,30435,41]],[[12861,12861],"disallowed_STD3_mapped",[40,20225,41]],[[12862,12862],"disallowed_STD3_mapped",[40,36039,41]],[[12863,12863],"disallowed_STD3_mapped",[40,21332,41]],[[12864,12864],"disallowed_STD3_mapped",[40,31085,41]],[[12865,12865],"disallowed_STD3_mapped",[40,20241,41]],[[12866,12866],"disallowed_STD3_mapped",[40,33258,41]],[[12867,12867],"disallowed_STD3_mapped",[40,33267,41]],[[12868,12868],"mapped",[21839]],[[12869,12869],"mapped",[24188]],[[12870,12870],"mapped",[25991]],[[12871,12871],"mapped",[31631]],[[12872,12879],"valid",[],"NV8"],[[12880,12880],"mapped",[112,116,101]],[[12881,12881],"mapped",[50,49]],[[12882,12882],"mapped",[50,50]],[[12883,12883],"mapped",[50,51]],[[12884,12884],"mapped",[50,52]],[[12885,12885],"mapped",[50,53]],[[12886,12886],"mapped",[50,54]],[[12887,12887],"mapped",[50,55]],[[12888,12888],"mapped",[50,56]],[[12889,12889],"mapped",[50,57]],[[12890,12890],"mapped",[51,48]],[[12891,12891],"mapped",[51,49]],[[12892,12892],"mapped",[51,50]],[[12893,12893],"mapped",[51,51]],[[12894,12894],"mapped",[51,52]],[[12895,12895],"mapped",[51,53]],[[12896,12896],"mapped",[4352]],[[12897,12897],"mapped",[4354]],[[12898,12898],"mapped",[4355]],[[12899,12899],"mapped",[4357]],[[12900,12900],"mapped",[4358]],[[12901,12901],"mapped",[4359]],[[12902,12902],"mapped",[4361]],[[12903,12903],"mapped",[4363]],[[12904,12904],"mapped",[4364]],[[12905,12905],"mapped",[4366]],[[12906,12906],"mapped",[4367]],[[12907,12907],"mapped",[4368]],[[12908,12908],"mapped",[4369]],[[12909,12909],"mapped",[4370]],[[12910,12910],"mapped",[44032]],[[12911,12911],"mapped",[45208]],[[12912,12912],"mapped",[45796]],[[12913,12913],"mapped",[46972]],[[12914,12914],"mapped",[47560]],[[12915,12915],"mapped",[48148]],[[12916,12916],"mapped",[49324]],[[12917,12917],"mapped",[50500]],[[12918,12918],"mapped",[51088]],[[12919,12919],"mapped",[52264]],[[12920,12920],"mapped",[52852]],[[12921,12921],"mapped",[53440]],[[12922,12922],"mapped",[54028]],[[12923,12923],"mapped",[54616]],[[12924,12924],"mapped",[52280,44256]],[[12925,12925],"mapped",[51452,51032]],[[12926,12926],"mapped",[50864]],[[12927,12927],"valid",[],"NV8"],[[12928,12928],"mapped",[19968]],[[12929,12929],"mapped",[20108]],[[12930,12930],"mapped",[19977]],[[12931,12931],"mapped",[22235]],[[12932,12932],"mapped",[20116]],[[12933,12933],"mapped",[20845]],[[12934,12934],"mapped",[19971]],[[12935,12935],"mapped",[20843]],[[12936,12936],"mapped",[20061]],[[12937,12937],"mapped",[21313]],[[12938,12938],"mapped",[26376]],[[12939,12939],"mapped",[28779]],[[12940,12940],"mapped",[27700]],[[12941,12941],"mapped",[26408]],[[12942,12942],"mapped",[37329]],[[12943,12943],"mapped",[22303]],[[12944,12944],"mapped",[26085]],[[12945,12945],"mapped",[26666]],[[12946,12946],"mapped",[26377]],[[12947,12947],"mapped",[31038]],[[12948,12948],"mapped",[21517]],[[12949,12949],"mapped",[29305]],[[12950,12950],"mapped",[36001]],[[12951,12951],"mapped",[31069]],[[12952,12952],"mapped",[21172]],[[12953,12953],"mapped",[31192]],[[12954,12954],"mapped",[30007]],[[12955,12955],"mapped",[22899]],[[12956,12956],"mapped",[36969]],[[12957,12957],"mapped",[20778]],[[12958,12958],"mapped",[21360]],[[12959,12959],"mapped",[27880]],[[12960,12960],"mapped",[38917]],[[12961,12961],"mapped",[20241]],[[12962,12962],"mapped",[20889]],[[12963,12963],"mapped",[27491]],[[12964,12964],"mapped",[19978]],[[12965,12965],"mapped",[20013]],[[12966,12966],"mapped",[19979]],[[12967,12967],"mapped",[24038]],[[12968,12968],"mapped",[21491]],[[12969,12969],"mapped",[21307]],[[12970,12970],"mapped",[23447]],[[12971,12971],"mapped",[23398]],[[12972,12972],"mapped",[30435]],[[12973,12973],"mapped",[20225]],[[12974,12974],"mapped",[36039]],[[12975,12975],"mapped",[21332]],[[12976,12976],"mapped",[22812]],[[12977,12977],"mapped",[51,54]],[[12978,12978],"mapped",[51,55]],[[12979,12979],"mapped",[51,56]],[[12980,12980],"mapped",[51,57]],[[12981,12981],"mapped",[52,48]],[[12982,12982],"mapped",[52,49]],[[12983,12983],"mapped",[52,50]],[[12984,12984],"mapped",[52,51]],[[12985,12985],"mapped",[52,52]],[[12986,12986],"mapped",[52,53]],[[12987,12987],"mapped",[52,54]],[[12988,12988],"mapped",[52,55]],[[12989,12989],"mapped",[52,56]],[[12990,12990],"mapped",[52,57]],[[12991,12991],"mapped",[53,48]],[[12992,12992],"mapped",[49,26376]],[[12993,12993],"mapped",[50,26376]],[[12994,12994],"mapped",[51,26376]],[[12995,12995],"mapped",[52,26376]],[[12996,12996],"mapped",[53,26376]],[[12997,12997],"mapped",[54,26376]],[[12998,12998],"mapped",[55,26376]],[[12999,12999],"mapped",[56,26376]],[[13000,13000],"mapped",[57,26376]],[[13001,13001],"mapped",[49,48,26376]],[[13002,13002],"mapped",[49,49,26376]],[[13003,13003],"mapped",[49,50,26376]],[[13004,13004],"mapped",[104,103]],[[13005,13005],"mapped",[101,114,103]],[[13006,13006],"mapped",[101,118]],[[13007,13007],"mapped",[108,116,100]],[[13008,13008],"mapped",[12450]],[[13009,13009],"mapped",[12452]],[[13010,13010],"mapped",[12454]],[[13011,13011],"mapped",[12456]],[[13012,13012],"mapped",[12458]],[[13013,13013],"mapped",[12459]],[[13014,13014],"mapped",[12461]],[[13015,13015],"mapped",[12463]],[[13016,13016],"mapped",[12465]],[[13017,13017],"mapped",[12467]],[[13018,13018],"mapped",[12469]],[[13019,13019],"mapped",[12471]],[[13020,13020],"mapped",[12473]],[[13021,13021],"mapped",[12475]],[[13022,13022],"mapped",[12477]],[[13023,13023],"mapped",[12479]],[[13024,13024],"mapped",[12481]],[[13025,13025],"mapped",[12484]],[[13026,13026],"mapped",[12486]],[[13027,13027],"mapped",[12488]],[[13028,13028],"mapped",[12490]],[[13029,13029],"mapped",[12491]],[[13030,13030],"mapped",[12492]],[[13031,13031],"mapped",[12493]],[[13032,13032],"mapped",[12494]],[[13033,13033],"mapped",[12495]],[[13034,13034],"mapped",[12498]],[[13035,13035],"mapped",[12501]],[[13036,13036],"mapped",[12504]],[[13037,13037],"mapped",[12507]],[[13038,13038],"mapped",[12510]],[[13039,13039],"mapped",[12511]],[[13040,13040],"mapped",[12512]],[[13041,13041],"mapped",[12513]],[[13042,13042],"mapped",[12514]],[[13043,13043],"mapped",[12516]],[[13044,13044],"mapped",[12518]],[[13045,13045],"mapped",[12520]],[[13046,13046],"mapped",[12521]],[[13047,13047],"mapped",[12522]],[[13048,13048],"mapped",[12523]],[[13049,13049],"mapped",[12524]],[[13050,13050],"mapped",[12525]],[[13051,13051],"mapped",[12527]],[[13052,13052],"mapped",[12528]],[[13053,13053],"mapped",[12529]],[[13054,13054],"mapped",[12530]],[[13055,13055],"disallowed"],[[13056,13056],"mapped",[12450,12497,12540,12488]],[[13057,13057],"mapped",[12450,12523,12501,12449]],[[13058,13058],"mapped",[12450,12531,12506,12450]],[[13059,13059],"mapped",[12450,12540,12523]],[[13060,13060],"mapped",[12452,12491,12531,12464]],[[13061,13061],"mapped",[12452,12531,12481]],[[13062,13062],"mapped",[12454,12457,12531]],[[13063,13063],"mapped",[12456,12473,12463,12540,12489]],[[13064,13064],"mapped",[12456,12540,12459,12540]],[[13065,13065],"mapped",[12458,12531,12473]],[[13066,13066],"mapped",[12458,12540,12512]],[[13067,13067],"mapped",[12459,12452,12522]],[[13068,13068],"mapped",[12459,12521,12483,12488]],[[13069,13069],"mapped",[12459,12525,12522,12540]],[[13070,13070],"mapped",[12460,12525,12531]],[[13071,13071],"mapped",[12460,12531,12510]],[[13072,13072],"mapped",[12462,12460]],[[13073,13073],"mapped",[12462,12491,12540]],[[13074,13074],"mapped",[12461,12517,12522,12540]],[[13075,13075],"mapped",[12462,12523,12480,12540]],[[13076,13076],"mapped",[12461,12525]],[[13077,13077],"mapped",[12461,12525,12464,12521,12512]],[[13078,13078],"mapped",[12461,12525,12513,12540,12488,12523]],[[13079,13079],"mapped",[12461,12525,12527,12483,12488]],[[13080,13080],"mapped",[12464,12521,12512]],[[13081,13081],"mapped",[12464,12521,12512,12488,12531]],[[13082,13082],"mapped",[12463,12523,12476,12452,12525]],[[13083,13083],"mapped",[12463,12525,12540,12493]],[[13084,13084],"mapped",[12465,12540,12473]],[[13085,13085],"mapped",[12467,12523,12490]],[[13086,13086],"mapped",[12467,12540,12509]],[[13087,13087],"mapped",[12469,12452,12463,12523]],[[13088,13088],"mapped",[12469,12531,12481,12540,12512]],[[13089,13089],"mapped",[12471,12522,12531,12464]],[[13090,13090],"mapped",[12475,12531,12481]],[[13091,13091],"mapped",[12475,12531,12488]],[[13092,13092],"mapped",[12480,12540,12473]],[[13093,13093],"mapped",[12487,12471]],[[13094,13094],"mapped",[12489,12523]],[[13095,13095],"mapped",[12488,12531]],[[13096,13096],"mapped",[12490,12494]],[[13097,13097],"mapped",[12494,12483,12488]],[[13098,13098],"mapped",[12495,12452,12484]],[[13099,13099],"mapped",[12497,12540,12475,12531,12488]],[[13100,13100],"mapped",[12497,12540,12484]],[[13101,13101],"mapped",[12496,12540,12524,12523]],[[13102,13102],"mapped",[12500,12450,12473,12488,12523]],[[13103,13103],"mapped",[12500,12463,12523]],[[13104,13104],"mapped",[12500,12467]],[[13105,13105],"mapped",[12499,12523]],[[13106,13106],"mapped",[12501,12449,12521,12483,12489]],[[13107,13107],"mapped",[12501,12451,12540,12488]],[[13108,13108],"mapped",[12502,12483,12471,12455,12523]],[[13109,13109],"mapped",[12501,12521,12531]],[[13110,13110],"mapped",[12504,12463,12479,12540,12523]],[[13111,13111],"mapped",[12506,12477]],[[13112,13112],"mapped",[12506,12491,12498]],[[13113,13113],"mapped",[12504,12523,12484]],[[13114,13114],"mapped",[12506,12531,12473]],[[13115,13115],"mapped",[12506,12540,12472]],[[13116,13116],"mapped",[12505,12540,12479]],[[13117,13117],"mapped",[12509,12452,12531,12488]],[[13118,13118],"mapped",[12508,12523,12488]],[[13119,13119],"mapped",[12507,12531]],[[13120,13120],"mapped",[12509,12531,12489]],[[13121,13121],"mapped",[12507,12540,12523]],[[13122,13122],"mapped",[12507,12540,12531]],[[13123,13123],"mapped",[12510,12452,12463,12525]],[[13124,13124],"mapped",[12510,12452,12523]],[[13125,13125],"mapped",[12510,12483,12495]],[[13126,13126],"mapped",[12510,12523,12463]],[[13127,13127],"mapped",[12510,12531,12471,12519,12531]],[[13128,13128],"mapped",[12511,12463,12525,12531]],[[13129,13129],"mapped",[12511,12522]],[[13130,13130],"mapped",[12511,12522,12496,12540,12523]],[[13131,13131],"mapped",[12513,12460]],[[13132,13132],"mapped",[12513,12460,12488,12531]],[[13133,13133],"mapped",[12513,12540,12488,12523]],[[13134,13134],"mapped",[12516,12540,12489]],[[13135,13135],"mapped",[12516,12540,12523]],[[13136,13136],"mapped",[12518,12450,12531]],[[13137,13137],"mapped",[12522,12483,12488,12523]],[[13138,13138],"mapped",[12522,12521]],[[13139,13139],"mapped",[12523,12500,12540]],[[13140,13140],"mapped",[12523,12540,12502,12523]],[[13141,13141],"mapped",[12524,12512]],[[13142,13142],"mapped",[12524,12531,12488,12466,12531]],[[13143,13143],"mapped",[12527,12483,12488]],[[13144,13144],"mapped",[48,28857]],[[13145,13145],"mapped",[49,28857]],[[13146,13146],"mapped",[50,28857]],[[13147,13147],"mapped",[51,28857]],[[13148,13148],"mapped",[52,28857]],[[13149,13149],"mapped",[53,28857]],[[13150,13150],"mapped",[54,28857]],[[13151,13151],"mapped",[55,28857]],[[13152,13152],"mapped",[56,28857]],[[13153,13153],"mapped",[57,28857]],[[13154,13154],"mapped",[49,48,28857]],[[13155,13155],"mapped",[49,49,28857]],[[13156,13156],"mapped",[49,50,28857]],[[13157,13157],"mapped",[49,51,28857]],[[13158,13158],"mapped",[49,52,28857]],[[13159,13159],"mapped",[49,53,28857]],[[13160,13160],"mapped",[49,54,28857]],[[13161,13161],"mapped",[49,55,28857]],[[13162,13162],"mapped",[49,56,28857]],[[13163,13163],"mapped",[49,57,28857]],[[13164,13164],"mapped",[50,48,28857]],[[13165,13165],"mapped",[50,49,28857]],[[13166,13166],"mapped",[50,50,28857]],[[13167,13167],"mapped",[50,51,28857]],[[13168,13168],"mapped",[50,52,28857]],[[13169,13169],"mapped",[104,112,97]],[[13170,13170],"mapped",[100,97]],[[13171,13171],"mapped",[97,117]],[[13172,13172],"mapped",[98,97,114]],[[13173,13173],"mapped",[111,118]],[[13174,13174],"mapped",[112,99]],[[13175,13175],"mapped",[100,109]],[[13176,13176],"mapped",[100,109,50]],[[13177,13177],"mapped",[100,109,51]],[[13178,13178],"mapped",[105,117]],[[13179,13179],"mapped",[24179,25104]],[[13180,13180],"mapped",[26157,21644]],[[13181,13181],"mapped",[22823,27491]],[[13182,13182],"mapped",[26126,27835]],[[13183,13183],"mapped",[26666,24335,20250,31038]],[[13184,13184],"mapped",[112,97]],[[13185,13185],"mapped",[110,97]],[[13186,13186],"mapped",[956,97]],[[13187,13187],"mapped",[109,97]],[[13188,13188],"mapped",[107,97]],[[13189,13189],"mapped",[107,98]],[[13190,13190],"mapped",[109,98]],[[13191,13191],"mapped",[103,98]],[[13192,13192],"mapped",[99,97,108]],[[13193,13193],"mapped",[107,99,97,108]],[[13194,13194],"mapped",[112,102]],[[13195,13195],"mapped",[110,102]],[[13196,13196],"mapped",[956,102]],[[13197,13197],"mapped",[956,103]],[[13198,13198],"mapped",[109,103]],[[13199,13199],"mapped",[107,103]],[[13200,13200],"mapped",[104,122]],[[13201,13201],"mapped",[107,104,122]],[[13202,13202],"mapped",[109,104,122]],[[13203,13203],"mapped",[103,104,122]],[[13204,13204],"mapped",[116,104,122]],[[13205,13205],"mapped",[956,108]],[[13206,13206],"mapped",[109,108]],[[13207,13207],"mapped",[100,108]],[[13208,13208],"mapped",[107,108]],[[13209,13209],"mapped",[102,109]],[[13210,13210],"mapped",[110,109]],[[13211,13211],"mapped",[956,109]],[[13212,13212],"mapped",[109,109]],[[13213,13213],"mapped",[99,109]],[[13214,13214],"mapped",[107,109]],[[13215,13215],"mapped",[109,109,50]],[[13216,13216],"mapped",[99,109,50]],[[13217,13217],"mapped",[109,50]],[[13218,13218],"mapped",[107,109,50]],[[13219,13219],"mapped",[109,109,51]],[[13220,13220],"mapped",[99,109,51]],[[13221,13221],"mapped",[109,51]],[[13222,13222],"mapped",[107,109,51]],[[13223,13223],"mapped",[109,8725,115]],[[13224,13224],"mapped",[109,8725,115,50]],[[13225,13225],"mapped",[112,97]],[[13226,13226],"mapped",[107,112,97]],[[13227,13227],"mapped",[109,112,97]],[[13228,13228],"mapped",[103,112,97]],[[13229,13229],"mapped",[114,97,100]],[[13230,13230],"mapped",[114,97,100,8725,115]],[[13231,13231],"mapped",[114,97,100,8725,115,50]],[[13232,13232],"mapped",[112,115]],[[13233,13233],"mapped",[110,115]],[[13234,13234],"mapped",[956,115]],[[13235,13235],"mapped",[109,115]],[[13236,13236],"mapped",[112,118]],[[13237,13237],"mapped",[110,118]],[[13238,13238],"mapped",[956,118]],[[13239,13239],"mapped",[109,118]],[[13240,13240],"mapped",[107,118]],[[13241,13241],"mapped",[109,118]],[[13242,13242],"mapped",[112,119]],[[13243,13243],"mapped",[110,119]],[[13244,13244],"mapped",[956,119]],[[13245,13245],"mapped",[109,119]],[[13246,13246],"mapped",[107,119]],[[13247,13247],"mapped",[109,119]],[[13248,13248],"mapped",[107,969]],[[13249,13249],"mapped",[109,969]],[[13250,13250],"disallowed"],[[13251,13251],"mapped",[98,113]],[[13252,13252],"mapped",[99,99]],[[13253,13253],"mapped",[99,100]],[[13254,13254],"mapped",[99,8725,107,103]],[[13255,13255],"disallowed"],[[13256,13256],"mapped",[100,98]],[[13257,13257],"mapped",[103,121]],[[13258,13258],"mapped",[104,97]],[[13259,13259],"mapped",[104,112]],[[13260,13260],"mapped",[105,110]],[[13261,13261],"mapped",[107,107]],[[13262,13262],"mapped",[107,109]],[[13263,13263],"mapped",[107,116]],[[13264,13264],"mapped",[108,109]],[[13265,13265],"mapped",[108,110]],[[13266,13266],"mapped",[108,111,103]],[[13267,13267],"mapped",[108,120]],[[13268,13268],"mapped",[109,98]],[[13269,13269],"mapped",[109,105,108]],[[13270,13270],"mapped",[109,111,108]],[[13271,13271],"mapped",[112,104]],[[13272,13272],"disallowed"],[[13273,13273],"mapped",[112,112,109]],[[13274,13274],"mapped",[112,114]],[[13275,13275],"mapped",[115,114]],[[13276,13276],"mapped",[115,118]],[[13277,13277],"mapped",[119,98]],[[13278,13278],"mapped",[118,8725,109]],[[13279,13279],"mapped",[97,8725,109]],[[13280,13280],"mapped",[49,26085]],[[13281,13281],"mapped",[50,26085]],[[13282,13282],"mapped",[51,26085]],[[13283,13283],"mapped",[52,26085]],[[13284,13284],"mapped",[53,26085]],[[13285,13285],"mapped",[54,26085]],[[13286,13286],"mapped",[55,26085]],[[13287,13287],"mapped",[56,26085]],[[13288,13288],"mapped",[57,26085]],[[13289,13289],"mapped",[49,48,26085]],[[13290,13290],"mapped",[49,49,26085]],[[13291,13291],"mapped",[49,50,26085]],[[13292,13292],"mapped",[49,51,26085]],[[13293,13293],"mapped",[49,52,26085]],[[13294,13294],"mapped",[49,53,26085]],[[13295,13295],"mapped",[49,54,26085]],[[13296,13296],"mapped",[49,55,26085]],[[13297,13297],"mapped",[49,56,26085]],[[13298,13298],"mapped",[49,57,26085]],[[13299,13299],"mapped",[50,48,26085]],[[13300,13300],"mapped",[50,49,26085]],[[13301,13301],"mapped",[50,50,26085]],[[13302,13302],"mapped",[50,51,26085]],[[13303,13303],"mapped",[50,52,26085]],[[13304,13304],"mapped",[50,53,26085]],[[13305,13305],"mapped",[50,54,26085]],[[13306,13306],"mapped",[50,55,26085]],[[13307,13307],"mapped",[50,56,26085]],[[13308,13308],"mapped",[50,57,26085]],[[13309,13309],"mapped",[51,48,26085]],[[13310,13310],"mapped",[51,49,26085]],[[13311,13311],"mapped",[103,97,108]],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid",[],"NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid",[],"NV8"],[[42146,42147],"valid",[],"NV8"],[[42148,42163],"valid",[],"NV8"],[[42164,42164],"valid",[],"NV8"],[[42165,42176],"valid",[],"NV8"],[[42177,42177],"valid",[],"NV8"],[[42178,42180],"valid",[],"NV8"],[[42181,42181],"valid",[],"NV8"],[[42182,42182],"valid",[],"NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid",[],"NV8"],[[42240,42508],"valid"],[[42509,42511],"valid",[],"NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped",[42561]],[[42561,42561],"valid"],[[42562,42562],"mapped",[42563]],[[42563,42563],"valid"],[[42564,42564],"mapped",[42565]],[[42565,42565],"valid"],[[42566,42566],"mapped",[42567]],[[42567,42567],"valid"],[[42568,42568],"mapped",[42569]],[[42569,42569],"valid"],[[42570,42570],"mapped",[42571]],[[42571,42571],"valid"],[[42572,42572],"mapped",[42573]],[[42573,42573],"valid"],[[42574,42574],"mapped",[42575]],[[42575,42575],"valid"],[[42576,42576],"mapped",[42577]],[[42577,42577],"valid"],[[42578,42578],"mapped",[42579]],[[42579,42579],"valid"],[[42580,42580],"mapped",[42581]],[[42581,42581],"valid"],[[42582,42582],"mapped",[42583]],[[42583,42583],"valid"],[[42584,42584],"mapped",[42585]],[[42585,42585],"valid"],[[42586,42586],"mapped",[42587]],[[42587,42587],"valid"],[[42588,42588],"mapped",[42589]],[[42589,42589],"valid"],[[42590,42590],"mapped",[42591]],[[42591,42591],"valid"],[[42592,42592],"mapped",[42593]],[[42593,42593],"valid"],[[42594,42594],"mapped",[42595]],[[42595,42595],"valid"],[[42596,42596],"mapped",[42597]],[[42597,42597],"valid"],[[42598,42598],"mapped",[42599]],[[42599,42599],"valid"],[[42600,42600],"mapped",[42601]],[[42601,42601],"valid"],[[42602,42602],"mapped",[42603]],[[42603,42603],"valid"],[[42604,42604],"mapped",[42605]],[[42605,42607],"valid"],[[42608,42611],"valid",[],"NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid",[],"NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped",[42625]],[[42625,42625],"valid"],[[42626,42626],"mapped",[42627]],[[42627,42627],"valid"],[[42628,42628],"mapped",[42629]],[[42629,42629],"valid"],[[42630,42630],"mapped",[42631]],[[42631,42631],"valid"],[[42632,42632],"mapped",[42633]],[[42633,42633],"valid"],[[42634,42634],"mapped",[42635]],[[42635,42635],"valid"],[[42636,42636],"mapped",[42637]],[[42637,42637],"valid"],[[42638,42638],"mapped",[42639]],[[42639,42639],"valid"],[[42640,42640],"mapped",[42641]],[[42641,42641],"valid"],[[42642,42642],"mapped",[42643]],[[42643,42643],"valid"],[[42644,42644],"mapped",[42645]],[[42645,42645],"valid"],[[42646,42646],"mapped",[42647]],[[42647,42647],"valid"],[[42648,42648],"mapped",[42649]],[[42649,42649],"valid"],[[42650,42650],"mapped",[42651]],[[42651,42651],"valid"],[[42652,42652],"mapped",[1098]],[[42653,42653],"mapped",[1100]],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid",[],"NV8"],[[42736,42737],"valid"],[[42738,42743],"valid",[],"NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid",[],"NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid",[],"NV8"],[[42786,42786],"mapped",[42787]],[[42787,42787],"valid"],[[42788,42788],"mapped",[42789]],[[42789,42789],"valid"],[[42790,42790],"mapped",[42791]],[[42791,42791],"valid"],[[42792,42792],"mapped",[42793]],[[42793,42793],"valid"],[[42794,42794],"mapped",[42795]],[[42795,42795],"valid"],[[42796,42796],"mapped",[42797]],[[42797,42797],"valid"],[[42798,42798],"mapped",[42799]],[[42799,42801],"valid"],[[42802,42802],"mapped",[42803]],[[42803,42803],"valid"],[[42804,42804],"mapped",[42805]],[[42805,42805],"valid"],[[42806,42806],"mapped",[42807]],[[42807,42807],"valid"],[[42808,42808],"mapped",[42809]],[[42809,42809],"valid"],[[42810,42810],"mapped",[42811]],[[42811,42811],"valid"],[[42812,42812],"mapped",[42813]],[[42813,42813],"valid"],[[42814,42814],"mapped",[42815]],[[42815,42815],"valid"],[[42816,42816],"mapped",[42817]],[[42817,42817],"valid"],[[42818,42818],"mapped",[42819]],[[42819,42819],"valid"],[[42820,42820],"mapped",[42821]],[[42821,42821],"valid"],[[42822,42822],"mapped",[42823]],[[42823,42823],"valid"],[[42824,42824],"mapped",[42825]],[[42825,42825],"valid"],[[42826,42826],"mapped",[42827]],[[42827,42827],"valid"],[[42828,42828],"mapped",[42829]],[[42829,42829],"valid"],[[42830,42830],"mapped",[42831]],[[42831,42831],"valid"],[[42832,42832],"mapped",[42833]],[[42833,42833],"valid"],[[42834,42834],"mapped",[42835]],[[42835,42835],"valid"],[[42836,42836],"mapped",[42837]],[[42837,42837],"valid"],[[42838,42838],"mapped",[42839]],[[42839,42839],"valid"],[[42840,42840],"mapped",[42841]],[[42841,42841],"valid"],[[42842,42842],"mapped",[42843]],[[42843,42843],"valid"],[[42844,42844],"mapped",[42845]],[[42845,42845],"valid"],[[42846,42846],"mapped",[42847]],[[42847,42847],"valid"],[[42848,42848],"mapped",[42849]],[[42849,42849],"valid"],[[42850,42850],"mapped",[42851]],[[42851,42851],"valid"],[[42852,42852],"mapped",[42853]],[[42853,42853],"valid"],[[42854,42854],"mapped",[42855]],[[42855,42855],"valid"],[[42856,42856],"mapped",[42857]],[[42857,42857],"valid"],[[42858,42858],"mapped",[42859]],[[42859,42859],"valid"],[[42860,42860],"mapped",[42861]],[[42861,42861],"valid"],[[42862,42862],"mapped",[42863]],[[42863,42863],"valid"],[[42864,42864],"mapped",[42863]],[[42865,42872],"valid"],[[42873,42873],"mapped",[42874]],[[42874,42874],"valid"],[[42875,42875],"mapped",[42876]],[[42876,42876],"valid"],[[42877,42877],"mapped",[7545]],[[42878,42878],"mapped",[42879]],[[42879,42879],"valid"],[[42880,42880],"mapped",[42881]],[[42881,42881],"valid"],[[42882,42882],"mapped",[42883]],[[42883,42883],"valid"],[[42884,42884],"mapped",[42885]],[[42885,42885],"valid"],[[42886,42886],"mapped",[42887]],[[42887,42888],"valid"],[[42889,42890],"valid",[],"NV8"],[[42891,42891],"mapped",[42892]],[[42892,42892],"valid"],[[42893,42893],"mapped",[613]],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped",[42897]],[[42897,42897],"valid"],[[42898,42898],"mapped",[42899]],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped",[42903]],[[42903,42903],"valid"],[[42904,42904],"mapped",[42905]],[[42905,42905],"valid"],[[42906,42906],"mapped",[42907]],[[42907,42907],"valid"],[[42908,42908],"mapped",[42909]],[[42909,42909],"valid"],[[42910,42910],"mapped",[42911]],[[42911,42911],"valid"],[[42912,42912],"mapped",[42913]],[[42913,42913],"valid"],[[42914,42914],"mapped",[42915]],[[42915,42915],"valid"],[[42916,42916],"mapped",[42917]],[[42917,42917],"valid"],[[42918,42918],"mapped",[42919]],[[42919,42919],"valid"],[[42920,42920],"mapped",[42921]],[[42921,42921],"valid"],[[42922,42922],"mapped",[614]],[[42923,42923],"mapped",[604]],[[42924,42924],"mapped",[609]],[[42925,42925],"mapped",[620]],[[42926,42927],"disallowed"],[[42928,42928],"mapped",[670]],[[42929,42929],"mapped",[647]],[[42930,42930],"mapped",[669]],[[42931,42931],"mapped",[43859]],[[42932,42932],"mapped",[42933]],[[42933,42933],"valid"],[[42934,42934],"mapped",[42935]],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43000,43000],"mapped",[295]],[[43001,43001],"mapped",[339]],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid",[],"NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid",[],"NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid",[],"NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43213],"disallowed"],[[43214,43215],"valid",[],"NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid",[],"NV8"],[[43259,43259],"valid"],[[43260,43260],"valid",[],"NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid",[],"NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid",[],"NV8"],[[43360,43388],"valid",[],"NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid",[],"NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid",[],"NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid",[],"NV8"],[[43616,43638],"valid"],[[43639,43641],"valid",[],"NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid",[],"NV8"],[[43744,43759],"valid"],[[43760,43761],"valid",[],"NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid",[],"NV8"],[[43868,43868],"mapped",[42791]],[[43869,43869],"mapped",[43831]],[[43870,43870],"mapped",[619]],[[43871,43871],"mapped",[43858]],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped",[5024]],[[43889,43889],"mapped",[5025]],[[43890,43890],"mapped",[5026]],[[43891,43891],"mapped",[5027]],[[43892,43892],"mapped",[5028]],[[43893,43893],"mapped",[5029]],[[43894,43894],"mapped",[5030]],[[43895,43895],"mapped",[5031]],[[43896,43896],"mapped",[5032]],[[43897,43897],"mapped",[5033]],[[43898,43898],"mapped",[5034]],[[43899,43899],"mapped",[5035]],[[43900,43900],"mapped",[5036]],[[43901,43901],"mapped",[5037]],[[43902,43902],"mapped",[5038]],[[43903,43903],"mapped",[5039]],[[43904,43904],"mapped",[5040]],[[43905,43905],"mapped",[5041]],[[43906,43906],"mapped",[5042]],[[43907,43907],"mapped",[5043]],[[43908,43908],"mapped",[5044]],[[43909,43909],"mapped",[5045]],[[43910,43910],"mapped",[5046]],[[43911,43911],"mapped",[5047]],[[43912,43912],"mapped",[5048]],[[43913,43913],"mapped",[5049]],[[43914,43914],"mapped",[5050]],[[43915,43915],"mapped",[5051]],[[43916,43916],"mapped",[5052]],[[43917,43917],"mapped",[5053]],[[43918,43918],"mapped",[5054]],[[43919,43919],"mapped",[5055]],[[43920,43920],"mapped",[5056]],[[43921,43921],"mapped",[5057]],[[43922,43922],"mapped",[5058]],[[43923,43923],"mapped",[5059]],[[43924,43924],"mapped",[5060]],[[43925,43925],"mapped",[5061]],[[43926,43926],"mapped",[5062]],[[43927,43927],"mapped",[5063]],[[43928,43928],"mapped",[5064]],[[43929,43929],"mapped",[5065]],[[43930,43930],"mapped",[5066]],[[43931,43931],"mapped",[5067]],[[43932,43932],"mapped",[5068]],[[43933,43933],"mapped",[5069]],[[43934,43934],"mapped",[5070]],[[43935,43935],"mapped",[5071]],[[43936,43936],"mapped",[5072]],[[43937,43937],"mapped",[5073]],[[43938,43938],"mapped",[5074]],[[43939,43939],"mapped",[5075]],[[43940,43940],"mapped",[5076]],[[43941,43941],"mapped",[5077]],[[43942,43942],"mapped",[5078]],[[43943,43943],"mapped",[5079]],[[43944,43944],"mapped",[5080]],[[43945,43945],"mapped",[5081]],[[43946,43946],"mapped",[5082]],[[43947,43947],"mapped",[5083]],[[43948,43948],"mapped",[5084]],[[43949,43949],"mapped",[5085]],[[43950,43950],"mapped",[5086]],[[43951,43951],"mapped",[5087]],[[43952,43952],"mapped",[5088]],[[43953,43953],"mapped",[5089]],[[43954,43954],"mapped",[5090]],[[43955,43955],"mapped",[5091]],[[43956,43956],"mapped",[5092]],[[43957,43957],"mapped",[5093]],[[43958,43958],"mapped",[5094]],[[43959,43959],"mapped",[5095]],[[43960,43960],"mapped",[5096]],[[43961,43961],"mapped",[5097]],[[43962,43962],"mapped",[5098]],[[43963,43963],"mapped",[5099]],[[43964,43964],"mapped",[5100]],[[43965,43965],"mapped",[5101]],[[43966,43966],"mapped",[5102]],[[43967,43967],"mapped",[5103]],[[43968,44010],"valid"],[[44011,44011],"valid",[],"NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid",[],"NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid",[],"NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped",[35912]],[[63745,63745],"mapped",[26356]],[[63746,63746],"mapped",[36554]],[[63747,63747],"mapped",[36040]],[[63748,63748],"mapped",[28369]],[[63749,63749],"mapped",[20018]],[[63750,63750],"mapped",[21477]],[[63751,63752],"mapped",[40860]],[[63753,63753],"mapped",[22865]],[[63754,63754],"mapped",[37329]],[[63755,63755],"mapped",[21895]],[[63756,63756],"mapped",[22856]],[[63757,63757],"mapped",[25078]],[[63758,63758],"mapped",[30313]],[[63759,63759],"mapped",[32645]],[[63760,63760],"mapped",[34367]],[[63761,63761],"mapped",[34746]],[[63762,63762],"mapped",[35064]],[[63763,63763],"mapped",[37007]],[[63764,63764],"mapped",[27138]],[[63765,63765],"mapped",[27931]],[[63766,63766],"mapped",[28889]],[[63767,63767],"mapped",[29662]],[[63768,63768],"mapped",[33853]],[[63769,63769],"mapped",[37226]],[[63770,63770],"mapped",[39409]],[[63771,63771],"mapped",[20098]],[[63772,63772],"mapped",[21365]],[[63773,63773],"mapped",[27396]],[[63774,63774],"mapped",[29211]],[[63775,63775],"mapped",[34349]],[[63776,63776],"mapped",[40478]],[[63777,63777],"mapped",[23888]],[[63778,63778],"mapped",[28651]],[[63779,63779],"mapped",[34253]],[[63780,63780],"mapped",[35172]],[[63781,63781],"mapped",[25289]],[[63782,63782],"mapped",[33240]],[[63783,63783],"mapped",[34847]],[[63784,63784],"mapped",[24266]],[[63785,63785],"mapped",[26391]],[[63786,63786],"mapped",[28010]],[[63787,63787],"mapped",[29436]],[[63788,63788],"mapped",[37070]],[[63789,63789],"mapped",[20358]],[[63790,63790],"mapped",[20919]],[[63791,63791],"mapped",[21214]],[[63792,63792],"mapped",[25796]],[[63793,63793],"mapped",[27347]],[[63794,63794],"mapped",[29200]],[[63795,63795],"mapped",[30439]],[[63796,63796],"mapped",[32769]],[[63797,63797],"mapped",[34310]],[[63798,63798],"mapped",[34396]],[[63799,63799],"mapped",[36335]],[[63800,63800],"mapped",[38706]],[[63801,63801],"mapped",[39791]],[[63802,63802],"mapped",[40442]],[[63803,63803],"mapped",[30860]],[[63804,63804],"mapped",[31103]],[[63805,63805],"mapped",[32160]],[[63806,63806],"mapped",[33737]],[[63807,63807],"mapped",[37636]],[[63808,63808],"mapped",[40575]],[[63809,63809],"mapped",[35542]],[[63810,63810],"mapped",[22751]],[[63811,63811],"mapped",[24324]],[[63812,63812],"mapped",[31840]],[[63813,63813],"mapped",[32894]],[[63814,63814],"mapped",[29282]],[[63815,63815],"mapped",[30922]],[[63816,63816],"mapped",[36034]],[[63817,63817],"mapped",[38647]],[[63818,63818],"mapped",[22744]],[[63819,63819],"mapped",[23650]],[[63820,63820],"mapped",[27155]],[[63821,63821],"mapped",[28122]],[[63822,63822],"mapped",[28431]],[[63823,63823],"mapped",[32047]],[[63824,63824],"mapped",[32311]],[[63825,63825],"mapped",[38475]],[[63826,63826],"mapped",[21202]],[[63827,63827],"mapped",[32907]],[[63828,63828],"mapped",[20956]],[[63829,63829],"mapped",[20940]],[[63830,63830],"mapped",[31260]],[[63831,63831],"mapped",[32190]],[[63832,63832],"mapped",[33777]],[[63833,63833],"mapped",[38517]],[[63834,63834],"mapped",[35712]],[[63835,63835],"mapped",[25295]],[[63836,63836],"mapped",[27138]],[[63837,63837],"mapped",[35582]],[[63838,63838],"mapped",[20025]],[[63839,63839],"mapped",[23527]],[[63840,63840],"mapped",[24594]],[[63841,63841],"mapped",[29575]],[[63842,63842],"mapped",[30064]],[[63843,63843],"mapped",[21271]],[[63844,63844],"mapped",[30971]],[[63845,63845],"mapped",[20415]],[[63846,63846],"mapped",[24489]],[[63847,63847],"mapped",[19981]],[[63848,63848],"mapped",[27852]],[[63849,63849],"mapped",[25976]],[[63850,63850],"mapped",[32034]],[[63851,63851],"mapped",[21443]],[[63852,63852],"mapped",[22622]],[[63853,63853],"mapped",[30465]],[[63854,63854],"mapped",[33865]],[[63855,63855],"mapped",[35498]],[[63856,63856],"mapped",[27578]],[[63857,63857],"mapped",[36784]],[[63858,63858],"mapped",[27784]],[[63859,63859],"mapped",[25342]],[[63860,63860],"mapped",[33509]],[[63861,63861],"mapped",[25504]],[[63862,63862],"mapped",[30053]],[[63863,63863],"mapped",[20142]],[[63864,63864],"mapped",[20841]],[[63865,63865],"mapped",[20937]],[[63866,63866],"mapped",[26753]],[[63867,63867],"mapped",[31975]],[[63868,63868],"mapped",[33391]],[[63869,63869],"mapped",[35538]],[[63870,63870],"mapped",[37327]],[[63871,63871],"mapped",[21237]],[[63872,63872],"mapped",[21570]],[[63873,63873],"mapped",[22899]],[[63874,63874],"mapped",[24300]],[[63875,63875],"mapped",[26053]],[[63876,63876],"mapped",[28670]],[[63877,63877],"mapped",[31018]],[[63878,63878],"mapped",[38317]],[[63879,63879],"mapped",[39530]],[[63880,63880],"mapped",[40599]],[[63881,63881],"mapped",[40654]],[[63882,63882],"mapped",[21147]],[[63883,63883],"mapped",[26310]],[[63884,63884],"mapped",[27511]],[[63885,63885],"mapped",[36706]],[[63886,63886],"mapped",[24180]],[[63887,63887],"mapped",[24976]],[[63888,63888],"mapped",[25088]],[[63889,63889],"mapped",[25754]],[[63890,63890],"mapped",[28451]],[[63891,63891],"mapped",[29001]],[[63892,63892],"mapped",[29833]],[[63893,63893],"mapped",[31178]],[[63894,63894],"mapped",[32244]],[[63895,63895],"mapped",[32879]],[[63896,63896],"mapped",[36646]],[[63897,63897],"mapped",[34030]],[[63898,63898],"mapped",[36899]],[[63899,63899],"mapped",[37706]],[[63900,63900],"mapped",[21015]],[[63901,63901],"mapped",[21155]],[[63902,63902],"mapped",[21693]],[[63903,63903],"mapped",[28872]],[[63904,63904],"mapped",[35010]],[[63905,63905],"mapped",[35498]],[[63906,63906],"mapped",[24265]],[[63907,63907],"mapped",[24565]],[[63908,63908],"mapped",[25467]],[[63909,63909],"mapped",[27566]],[[63910,63910],"mapped",[31806]],[[63911,63911],"mapped",[29557]],[[63912,63912],"mapped",[20196]],[[63913,63913],"mapped",[22265]],[[63914,63914],"mapped",[23527]],[[63915,63915],"mapped",[23994]],[[63916,63916],"mapped",[24604]],[[63917,63917],"mapped",[29618]],[[63918,63918],"mapped",[29801]],[[63919,63919],"mapped",[32666]],[[63920,63920],"mapped",[32838]],[[63921,63921],"mapped",[37428]],[[63922,63922],"mapped",[38646]],[[63923,63923],"mapped",[38728]],[[63924,63924],"mapped",[38936]],[[63925,63925],"mapped",[20363]],[[63926,63926],"mapped",[31150]],[[63927,63927],"mapped",[37300]],[[63928,63928],"mapped",[38584]],[[63929,63929],"mapped",[24801]],[[63930,63930],"mapped",[20102]],[[63931,63931],"mapped",[20698]],[[63932,63932],"mapped",[23534]],[[63933,63933],"mapped",[23615]],[[63934,63934],"mapped",[26009]],[[63935,63935],"mapped",[27138]],[[63936,63936],"mapped",[29134]],[[63937,63937],"mapped",[30274]],[[63938,63938],"mapped",[34044]],[[63939,63939],"mapped",[36988]],[[63940,63940],"mapped",[40845]],[[63941,63941],"mapped",[26248]],[[63942,63942],"mapped",[38446]],[[63943,63943],"mapped",[21129]],[[63944,63944],"mapped",[26491]],[[63945,63945],"mapped",[26611]],[[63946,63946],"mapped",[27969]],[[63947,63947],"mapped",[28316]],[[63948,63948],"mapped",[29705]],[[63949,63949],"mapped",[30041]],[[63950,63950],"mapped",[30827]],[[63951,63951],"mapped",[32016]],[[63952,63952],"mapped",[39006]],[[63953,63953],"mapped",[20845]],[[63954,63954],"mapped",[25134]],[[63955,63955],"mapped",[38520]],[[63956,63956],"mapped",[20523]],[[63957,63957],"mapped",[23833]],[[63958,63958],"mapped",[28138]],[[63959,63959],"mapped",[36650]],[[63960,63960],"mapped",[24459]],[[63961,63961],"mapped",[24900]],[[63962,63962],"mapped",[26647]],[[63963,63963],"mapped",[29575]],[[63964,63964],"mapped",[38534]],[[63965,63965],"mapped",[21033]],[[63966,63966],"mapped",[21519]],[[63967,63967],"mapped",[23653]],[[63968,63968],"mapped",[26131]],[[63969,63969],"mapped",[26446]],[[63970,63970],"mapped",[26792]],[[63971,63971],"mapped",[27877]],[[63972,63972],"mapped",[29702]],[[63973,63973],"mapped",[30178]],[[63974,63974],"mapped",[32633]],[[63975,63975],"mapped",[35023]],[[63976,63976],"mapped",[35041]],[[63977,63977],"mapped",[37324]],[[63978,63978],"mapped",[38626]],[[63979,63979],"mapped",[21311]],[[63980,63980],"mapped",[28346]],[[63981,63981],"mapped",[21533]],[[63982,63982],"mapped",[29136]],[[63983,63983],"mapped",[29848]],[[63984,63984],"mapped",[34298]],[[63985,63985],"mapped",[38563]],[[63986,63986],"mapped",[40023]],[[63987,63987],"mapped",[40607]],[[63988,63988],"mapped",[26519]],[[63989,63989],"mapped",[28107]],[[63990,63990],"mapped",[33256]],[[63991,63991],"mapped",[31435]],[[63992,63992],"mapped",[31520]],[[63993,63993],"mapped",[31890]],[[63994,63994],"mapped",[29376]],[[63995,63995],"mapped",[28825]],[[63996,63996],"mapped",[35672]],[[63997,63997],"mapped",[20160]],[[63998,63998],"mapped",[33590]],[[63999,63999],"mapped",[21050]],[[64000,64000],"mapped",[20999]],[[64001,64001],"mapped",[24230]],[[64002,64002],"mapped",[25299]],[[64003,64003],"mapped",[31958]],[[64004,64004],"mapped",[23429]],[[64005,64005],"mapped",[27934]],[[64006,64006],"mapped",[26292]],[[64007,64007],"mapped",[36667]],[[64008,64008],"mapped",[34892]],[[64009,64009],"mapped",[38477]],[[64010,64010],"mapped",[35211]],[[64011,64011],"mapped",[24275]],[[64012,64012],"mapped",[20800]],[[64013,64013],"mapped",[21952]],[[64014,64015],"valid"],[[64016,64016],"mapped",[22618]],[[64017,64017],"valid"],[[64018,64018],"mapped",[26228]],[[64019,64020],"valid"],[[64021,64021],"mapped",[20958]],[[64022,64022],"mapped",[29482]],[[64023,64023],"mapped",[30410]],[[64024,64024],"mapped",[31036]],[[64025,64025],"mapped",[31070]],[[64026,64026],"mapped",[31077]],[[64027,64027],"mapped",[31119]],[[64028,64028],"mapped",[38742]],[[64029,64029],"mapped",[31934]],[[64030,64030],"mapped",[32701]],[[64031,64031],"valid"],[[64032,64032],"mapped",[34322]],[[64033,64033],"valid"],[[64034,64034],"mapped",[35576]],[[64035,64036],"valid"],[[64037,64037],"mapped",[36920]],[[64038,64038],"mapped",[37117]],[[64039,64041],"valid"],[[64042,64042],"mapped",[39151]],[[64043,64043],"mapped",[39164]],[[64044,64044],"mapped",[39208]],[[64045,64045],"mapped",[40372]],[[64046,64046],"mapped",[37086]],[[64047,64047],"mapped",[38583]],[[64048,64048],"mapped",[20398]],[[64049,64049],"mapped",[20711]],[[64050,64050],"mapped",[20813]],[[64051,64051],"mapped",[21193]],[[64052,64052],"mapped",[21220]],[[64053,64053],"mapped",[21329]],[[64054,64054],"mapped",[21917]],[[64055,64055],"mapped",[22022]],[[64056,64056],"mapped",[22120]],[[64057,64057],"mapped",[22592]],[[64058,64058],"mapped",[22696]],[[64059,64059],"mapped",[23652]],[[64060,64060],"mapped",[23662]],[[64061,64061],"mapped",[24724]],[[64062,64062],"mapped",[24936]],[[64063,64063],"mapped",[24974]],[[64064,64064],"mapped",[25074]],[[64065,64065],"mapped",[25935]],[[64066,64066],"mapped",[26082]],[[64067,64067],"mapped",[26257]],[[64068,64068],"mapped",[26757]],[[64069,64069],"mapped",[28023]],[[64070,64070],"mapped",[28186]],[[64071,64071],"mapped",[28450]],[[64072,64072],"mapped",[29038]],[[64073,64073],"mapped",[29227]],[[64074,64074],"mapped",[29730]],[[64075,64075],"mapped",[30865]],[[64076,64076],"mapped",[31038]],[[64077,64077],"mapped",[31049]],[[64078,64078],"mapped",[31048]],[[64079,64079],"mapped",[31056]],[[64080,64080],"mapped",[31062]],[[64081,64081],"mapped",[31069]],[[64082,64082],"mapped",[31117]],[[64083,64083],"mapped",[31118]],[[64084,64084],"mapped",[31296]],[[64085,64085],"mapped",[31361]],[[64086,64086],"mapped",[31680]],[[64087,64087],"mapped",[32244]],[[64088,64088],"mapped",[32265]],[[64089,64089],"mapped",[32321]],[[64090,64090],"mapped",[32626]],[[64091,64091],"mapped",[32773]],[[64092,64092],"mapped",[33261]],[[64093,64094],"mapped",[33401]],[[64095,64095],"mapped",[33879]],[[64096,64096],"mapped",[35088]],[[64097,64097],"mapped",[35222]],[[64098,64098],"mapped",[35585]],[[64099,64099],"mapped",[35641]],[[64100,64100],"mapped",[36051]],[[64101,64101],"mapped",[36104]],[[64102,64102],"mapped",[36790]],[[64103,64103],"mapped",[36920]],[[64104,64104],"mapped",[38627]],[[64105,64105],"mapped",[38911]],[[64106,64106],"mapped",[38971]],[[64107,64107],"mapped",[24693]],[[64108,64108],"mapped",[148206]],[[64109,64109],"mapped",[33304]],[[64110,64111],"disallowed"],[[64112,64112],"mapped",[20006]],[[64113,64113],"mapped",[20917]],[[64114,64114],"mapped",[20840]],[[64115,64115],"mapped",[20352]],[[64116,64116],"mapped",[20805]],[[64117,64117],"mapped",[20864]],[[64118,64118],"mapped",[21191]],[[64119,64119],"mapped",[21242]],[[64120,64120],"mapped",[21917]],[[64121,64121],"mapped",[21845]],[[64122,64122],"mapped",[21913]],[[64123,64123],"mapped",[21986]],[[64124,64124],"mapped",[22618]],[[64125,64125],"mapped",[22707]],[[64126,64126],"mapped",[22852]],[[64127,64127],"mapped",[22868]],[[64128,64128],"mapped",[23138]],[[64129,64129],"mapped",[23336]],[[64130,64130],"mapped",[24274]],[[64131,64131],"mapped",[24281]],[[64132,64132],"mapped",[24425]],[[64133,64133],"mapped",[24493]],[[64134,64134],"mapped",[24792]],[[64135,64135],"mapped",[24910]],[[64136,64136],"mapped",[24840]],[[64137,64137],"mapped",[24974]],[[64138,64138],"mapped",[24928]],[[64139,64139],"mapped",[25074]],[[64140,64140],"mapped",[25140]],[[64141,64141],"mapped",[25540]],[[64142,64142],"mapped",[25628]],[[64143,64143],"mapped",[25682]],[[64144,64144],"mapped",[25942]],[[64145,64145],"mapped",[26228]],[[64146,64146],"mapped",[26391]],[[64147,64147],"mapped",[26395]],[[64148,64148],"mapped",[26454]],[[64149,64149],"mapped",[27513]],[[64150,64150],"mapped",[27578]],[[64151,64151],"mapped",[27969]],[[64152,64152],"mapped",[28379]],[[64153,64153],"mapped",[28363]],[[64154,64154],"mapped",[28450]],[[64155,64155],"mapped",[28702]],[[64156,64156],"mapped",[29038]],[[64157,64157],"mapped",[30631]],[[64158,64158],"mapped",[29237]],[[64159,64159],"mapped",[29359]],[[64160,64160],"mapped",[29482]],[[64161,64161],"mapped",[29809]],[[64162,64162],"mapped",[29958]],[[64163,64163],"mapped",[30011]],[[64164,64164],"mapped",[30237]],[[64165,64165],"mapped",[30239]],[[64166,64166],"mapped",[30410]],[[64167,64167],"mapped",[30427]],[[64168,64168],"mapped",[30452]],[[64169,64169],"mapped",[30538]],[[64170,64170],"mapped",[30528]],[[64171,64171],"mapped",[30924]],[[64172,64172],"mapped",[31409]],[[64173,64173],"mapped",[31680]],[[64174,64174],"mapped",[31867]],[[64175,64175],"mapped",[32091]],[[64176,64176],"mapped",[32244]],[[64177,64177],"mapped",[32574]],[[64178,64178],"mapped",[32773]],[[64179,64179],"mapped",[33618]],[[64180,64180],"mapped",[33775]],[[64181,64181],"mapped",[34681]],[[64182,64182],"mapped",[35137]],[[64183,64183],"mapped",[35206]],[[64184,64184],"mapped",[35222]],[[64185,64185],"mapped",[35519]],[[64186,64186],"mapped",[35576]],[[64187,64187],"mapped",[35531]],[[64188,64188],"mapped",[35585]],[[64189,64189],"mapped",[35582]],[[64190,64190],"mapped",[35565]],[[64191,64191],"mapped",[35641]],[[64192,64192],"mapped",[35722]],[[64193,64193],"mapped",[36104]],[[64194,64194],"mapped",[36664]],[[64195,64195],"mapped",[36978]],[[64196,64196],"mapped",[37273]],[[64197,64197],"mapped",[37494]],[[64198,64198],"mapped",[38524]],[[64199,64199],"mapped",[38627]],[[64200,64200],"mapped",[38742]],[[64201,64201],"mapped",[38875]],[[64202,64202],"mapped",[38911]],[[64203,64203],"mapped",[38923]],[[64204,64204],"mapped",[38971]],[[64205,64205],"mapped",[39698]],[[64206,64206],"mapped",[40860]],[[64207,64207],"mapped",[141386]],[[64208,64208],"mapped",[141380]],[[64209,64209],"mapped",[144341]],[[64210,64210],"mapped",[15261]],[[64211,64211],"mapped",[16408]],[[64212,64212],"mapped",[16441]],[[64213,64213],"mapped",[152137]],[[64214,64214],"mapped",[154832]],[[64215,64215],"mapped",[163539]],[[64216,64216],"mapped",[40771]],[[64217,64217],"mapped",[40846]],[[64218,64255],"disallowed"],[[64256,64256],"mapped",[102,102]],[[64257,64257],"mapped",[102,105]],[[64258,64258],"mapped",[102,108]],[[64259,64259],"mapped",[102,102,105]],[[64260,64260],"mapped",[102,102,108]],[[64261,64262],"mapped",[115,116]],[[64263,64274],"disallowed"],[[64275,64275],"mapped",[1396,1398]],[[64276,64276],"mapped",[1396,1381]],[[64277,64277],"mapped",[1396,1387]],[[64278,64278],"mapped",[1406,1398]],[[64279,64279],"mapped",[1396,1389]],[[64280,64284],"disallowed"],[[64285,64285],"mapped",[1497,1460]],[[64286,64286],"valid"],[[64287,64287],"mapped",[1522,1463]],[[64288,64288],"mapped",[1506]],[[64289,64289],"mapped",[1488]],[[64290,64290],"mapped",[1491]],[[64291,64291],"mapped",[1492]],[[64292,64292],"mapped",[1499]],[[64293,64293],"mapped",[1500]],[[64294,64294],"mapped",[1501]],[[64295,64295],"mapped",[1512]],[[64296,64296],"mapped",[1514]],[[64297,64297],"disallowed_STD3_mapped",[43]],[[64298,64298],"mapped",[1513,1473]],[[64299,64299],"mapped",[1513,1474]],[[64300,64300],"mapped",[1513,1468,1473]],[[64301,64301],"mapped",[1513,1468,1474]],[[64302,64302],"mapped",[1488,1463]],[[64303,64303],"mapped",[1488,1464]],[[64304,64304],"mapped",[1488,1468]],[[64305,64305],"mapped",[1489,1468]],[[64306,64306],"mapped",[1490,1468]],[[64307,64307],"mapped",[1491,1468]],[[64308,64308],"mapped",[1492,1468]],[[64309,64309],"mapped",[1493,1468]],[[64310,64310],"mapped",[1494,1468]],[[64311,64311],"disallowed"],[[64312,64312],"mapped",[1496,1468]],[[64313,64313],"mapped",[1497,1468]],[[64314,64314],"mapped",[1498,1468]],[[64315,64315],"mapped",[1499,1468]],[[64316,64316],"mapped",[1500,1468]],[[64317,64317],"disallowed"],[[64318,64318],"mapped",[1502,1468]],[[64319,64319],"disallowed"],[[64320,64320],"mapped",[1504,1468]],[[64321,64321],"mapped",[1505,1468]],[[64322,64322],"disallowed"],[[64323,64323],"mapped",[1507,1468]],[[64324,64324],"mapped",[1508,1468]],[[64325,64325],"disallowed"],[[64326,64326],"mapped",[1510,1468]],[[64327,64327],"mapped",[1511,1468]],[[64328,64328],"mapped",[1512,1468]],[[64329,64329],"mapped",[1513,1468]],[[64330,64330],"mapped",[1514,1468]],[[64331,64331],"mapped",[1493,1465]],[[64332,64332],"mapped",[1489,1471]],[[64333,64333],"mapped",[1499,1471]],[[64334,64334],"mapped",[1508,1471]],[[64335,64335],"mapped",[1488,1500]],[[64336,64337],"mapped",[1649]],[[64338,64341],"mapped",[1659]],[[64342,64345],"mapped",[1662]],[[64346,64349],"mapped",[1664]],[[64350,64353],"mapped",[1658]],[[64354,64357],"mapped",[1663]],[[64358,64361],"mapped",[1657]],[[64362,64365],"mapped",[1700]],[[64366,64369],"mapped",[1702]],[[64370,64373],"mapped",[1668]],[[64374,64377],"mapped",[1667]],[[64378,64381],"mapped",[1670]],[[64382,64385],"mapped",[1671]],[[64386,64387],"mapped",[1677]],[[64388,64389],"mapped",[1676]],[[64390,64391],"mapped",[1678]],[[64392,64393],"mapped",[1672]],[[64394,64395],"mapped",[1688]],[[64396,64397],"mapped",[1681]],[[64398,64401],"mapped",[1705]],[[64402,64405],"mapped",[1711]],[[64406,64409],"mapped",[1715]],[[64410,64413],"mapped",[1713]],[[64414,64415],"mapped",[1722]],[[64416,64419],"mapped",[1723]],[[64420,64421],"mapped",[1728]],[[64422,64425],"mapped",[1729]],[[64426,64429],"mapped",[1726]],[[64430,64431],"mapped",[1746]],[[64432,64433],"mapped",[1747]],[[64434,64449],"valid",[],"NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped",[1709]],[[64471,64472],"mapped",[1735]],[[64473,64474],"mapped",[1734]],[[64475,64476],"mapped",[1736]],[[64477,64477],"mapped",[1735,1652]],[[64478,64479],"mapped",[1739]],[[64480,64481],"mapped",[1733]],[[64482,64483],"mapped",[1737]],[[64484,64487],"mapped",[1744]],[[64488,64489],"mapped",[1609]],[[64490,64491],"mapped",[1574,1575]],[[64492,64493],"mapped",[1574,1749]],[[64494,64495],"mapped",[1574,1608]],[[64496,64497],"mapped",[1574,1735]],[[64498,64499],"mapped",[1574,1734]],[[64500,64501],"mapped",[1574,1736]],[[64502,64504],"mapped",[1574,1744]],[[64505,64507],"mapped",[1574,1609]],[[64508,64511],"mapped",[1740]],[[64512,64512],"mapped",[1574,1580]],[[64513,64513],"mapped",[1574,1581]],[[64514,64514],"mapped",[1574,1605]],[[64515,64515],"mapped",[1574,1609]],[[64516,64516],"mapped",[1574,1610]],[[64517,64517],"mapped",[1576,1580]],[[64518,64518],"mapped",[1576,1581]],[[64519,64519],"mapped",[1576,1582]],[[64520,64520],"mapped",[1576,1605]],[[64521,64521],"mapped",[1576,1609]],[[64522,64522],"mapped",[1576,1610]],[[64523,64523],"mapped",[1578,1580]],[[64524,64524],"mapped",[1578,1581]],[[64525,64525],"mapped",[1578,1582]],[[64526,64526],"mapped",[1578,1605]],[[64527,64527],"mapped",[1578,1609]],[[64528,64528],"mapped",[1578,1610]],[[64529,64529],"mapped",[1579,1580]],[[64530,64530],"mapped",[1579,1605]],[[64531,64531],"mapped",[1579,1609]],[[64532,64532],"mapped",[1579,1610]],[[64533,64533],"mapped",[1580,1581]],[[64534,64534],"mapped",[1580,1605]],[[64535,64535],"mapped",[1581,1580]],[[64536,64536],"mapped",[1581,1605]],[[64537,64537],"mapped",[1582,1580]],[[64538,64538],"mapped",[1582,1581]],[[64539,64539],"mapped",[1582,1605]],[[64540,64540],"mapped",[1587,1580]],[[64541,64541],"mapped",[1587,1581]],[[64542,64542],"mapped",[1587,1582]],[[64543,64543],"mapped",[1587,1605]],[[64544,64544],"mapped",[1589,1581]],[[64545,64545],"mapped",[1589,1605]],[[64546,64546],"mapped",[1590,1580]],[[64547,64547],"mapped",[1590,1581]],[[64548,64548],"mapped",[1590,1582]],[[64549,64549],"mapped",[1590,1605]],[[64550,64550],"mapped",[1591,1581]],[[64551,64551],"mapped",[1591,1605]],[[64552,64552],"mapped",[1592,1605]],[[64553,64553],"mapped",[1593,1580]],[[64554,64554],"mapped",[1593,1605]],[[64555,64555],"mapped",[1594,1580]],[[64556,64556],"mapped",[1594,1605]],[[64557,64557],"mapped",[1601,1580]],[[64558,64558],"mapped",[1601,1581]],[[64559,64559],"mapped",[1601,1582]],[[64560,64560],"mapped",[1601,1605]],[[64561,64561],"mapped",[1601,1609]],[[64562,64562],"mapped",[1601,1610]],[[64563,64563],"mapped",[1602,1581]],[[64564,64564],"mapped",[1602,1605]],[[64565,64565],"mapped",[1602,1609]],[[64566,64566],"mapped",[1602,1610]],[[64567,64567],"mapped",[1603,1575]],[[64568,64568],"mapped",[1603,1580]],[[64569,64569],"mapped",[1603,1581]],[[64570,64570],"mapped",[1603,1582]],[[64571,64571],"mapped",[1603,1604]],[[64572,64572],"mapped",[1603,1605]],[[64573,64573],"mapped",[1603,1609]],[[64574,64574],"mapped",[1603,1610]],[[64575,64575],"mapped",[1604,1580]],[[64576,64576],"mapped",[1604,1581]],[[64577,64577],"mapped",[1604,1582]],[[64578,64578],"mapped",[1604,1605]],[[64579,64579],"mapped",[1604,1609]],[[64580,64580],"mapped",[1604,1610]],[[64581,64581],"mapped",[1605,1580]],[[64582,64582],"mapped",[1605,1581]],[[64583,64583],"mapped",[1605,1582]],[[64584,64584],"mapped",[1605,1605]],[[64585,64585],"mapped",[1605,1609]],[[64586,64586],"mapped",[1605,1610]],[[64587,64587],"mapped",[1606,1580]],[[64588,64588],"mapped",[1606,1581]],[[64589,64589],"mapped",[1606,1582]],[[64590,64590],"mapped",[1606,1605]],[[64591,64591],"mapped",[1606,1609]],[[64592,64592],"mapped",[1606,1610]],[[64593,64593],"mapped",[1607,1580]],[[64594,64594],"mapped",[1607,1605]],[[64595,64595],"mapped",[1607,1609]],[[64596,64596],"mapped",[1607,1610]],[[64597,64597],"mapped",[1610,1580]],[[64598,64598],"mapped",[1610,1581]],[[64599,64599],"mapped",[1610,1582]],[[64600,64600],"mapped",[1610,1605]],[[64601,64601],"mapped",[1610,1609]],[[64602,64602],"mapped",[1610,1610]],[[64603,64603],"mapped",[1584,1648]],[[64604,64604],"mapped",[1585,1648]],[[64605,64605],"mapped",[1609,1648]],[[64606,64606],"disallowed_STD3_mapped",[32,1612,1617]],[[64607,64607],"disallowed_STD3_mapped",[32,1613,1617]],[[64608,64608],"disallowed_STD3_mapped",[32,1614,1617]],[[64609,64609],"disallowed_STD3_mapped",[32,1615,1617]],[[64610,64610],"disallowed_STD3_mapped",[32,1616,1617]],[[64611,64611],"disallowed_STD3_mapped",[32,1617,1648]],[[64612,64612],"mapped",[1574,1585]],[[64613,64613],"mapped",[1574,1586]],[[64614,64614],"mapped",[1574,1605]],[[64615,64615],"mapped",[1574,1606]],[[64616,64616],"mapped",[1574,1609]],[[64617,64617],"mapped",[1574,1610]],[[64618,64618],"mapped",[1576,1585]],[[64619,64619],"mapped",[1576,1586]],[[64620,64620],"mapped",[1576,1605]],[[64621,64621],"mapped",[1576,1606]],[[64622,64622],"mapped",[1576,1609]],[[64623,64623],"mapped",[1576,1610]],[[64624,64624],"mapped",[1578,1585]],[[64625,64625],"mapped",[1578,1586]],[[64626,64626],"mapped",[1578,1605]],[[64627,64627],"mapped",[1578,1606]],[[64628,64628],"mapped",[1578,1609]],[[64629,64629],"mapped",[1578,1610]],[[64630,64630],"mapped",[1579,1585]],[[64631,64631],"mapped",[1579,1586]],[[64632,64632],"mapped",[1579,1605]],[[64633,64633],"mapped",[1579,1606]],[[64634,64634],"mapped",[1579,1609]],[[64635,64635],"mapped",[1579,1610]],[[64636,64636],"mapped",[1601,1609]],[[64637,64637],"mapped",[1601,1610]],[[64638,64638],"mapped",[1602,1609]],[[64639,64639],"mapped",[1602,1610]],[[64640,64640],"mapped",[1603,1575]],[[64641,64641],"mapped",[1603,1604]],[[64642,64642],"mapped",[1603,1605]],[[64643,64643],"mapped",[1603,1609]],[[64644,64644],"mapped",[1603,1610]],[[64645,64645],"mapped",[1604,1605]],[[64646,64646],"mapped",[1604,1609]],[[64647,64647],"mapped",[1604,1610]],[[64648,64648],"mapped",[1605,1575]],[[64649,64649],"mapped",[1605,1605]],[[64650,64650],"mapped",[1606,1585]],[[64651,64651],"mapped",[1606,1586]],[[64652,64652],"mapped",[1606,1605]],[[64653,64653],"mapped",[1606,1606]],[[64654,64654],"mapped",[1606,1609]],[[64655,64655],"mapped",[1606,1610]],[[64656,64656],"mapped",[1609,1648]],[[64657,64657],"mapped",[1610,1585]],[[64658,64658],"mapped",[1610,1586]],[[64659,64659],"mapped",[1610,1605]],[[64660,64660],"mapped",[1610,1606]],[[64661,64661],"mapped",[1610,1609]],[[64662,64662],"mapped",[1610,1610]],[[64663,64663],"mapped",[1574,1580]],[[64664,64664],"mapped",[1574,1581]],[[64665,64665],"mapped",[1574,1582]],[[64666,64666],"mapped",[1574,1605]],[[64667,64667],"mapped",[1574,1607]],[[64668,64668],"mapped",[1576,1580]],[[64669,64669],"mapped",[1576,1581]],[[64670,64670],"mapped",[1576,1582]],[[64671,64671],"mapped",[1576,1605]],[[64672,64672],"mapped",[1576,1607]],[[64673,64673],"mapped",[1578,1580]],[[64674,64674],"mapped",[1578,1581]],[[64675,64675],"mapped",[1578,1582]],[[64676,64676],"mapped",[1578,1605]],[[64677,64677],"mapped",[1578,1607]],[[64678,64678],"mapped",[1579,1605]],[[64679,64679],"mapped",[1580,1581]],[[64680,64680],"mapped",[1580,1605]],[[64681,64681],"mapped",[1581,1580]],[[64682,64682],"mapped",[1581,1605]],[[64683,64683],"mapped",[1582,1580]],[[64684,64684],"mapped",[1582,1605]],[[64685,64685],"mapped",[1587,1580]],[[64686,64686],"mapped",[1587,1581]],[[64687,64687],"mapped",[1587,1582]],[[64688,64688],"mapped",[1587,1605]],[[64689,64689],"mapped",[1589,1581]],[[64690,64690],"mapped",[1589,1582]],[[64691,64691],"mapped",[1589,1605]],[[64692,64692],"mapped",[1590,1580]],[[64693,64693],"mapped",[1590,1581]],[[64694,64694],"mapped",[1590,1582]],[[64695,64695],"mapped",[1590,1605]],[[64696,64696],"mapped",[1591,1581]],[[64697,64697],"mapped",[1592,1605]],[[64698,64698],"mapped",[1593,1580]],[[64699,64699],"mapped",[1593,1605]],[[64700,64700],"mapped",[1594,1580]],[[64701,64701],"mapped",[1594,1605]],[[64702,64702],"mapped",[1601,1580]],[[64703,64703],"mapped",[1601,1581]],[[64704,64704],"mapped",[1601,1582]],[[64705,64705],"mapped",[1601,1605]],[[64706,64706],"mapped",[1602,1581]],[[64707,64707],"mapped",[1602,1605]],[[64708,64708],"mapped",[1603,1580]],[[64709,64709],"mapped",[1603,1581]],[[64710,64710],"mapped",[1603,1582]],[[64711,64711],"mapped",[1603,1604]],[[64712,64712],"mapped",[1603,1605]],[[64713,64713],"mapped",[1604,1580]],[[64714,64714],"mapped",[1604,1581]],[[64715,64715],"mapped",[1604,1582]],[[64716,64716],"mapped",[1604,1605]],[[64717,64717],"mapped",[1604,1607]],[[64718,64718],"mapped",[1605,1580]],[[64719,64719],"mapped",[1605,1581]],[[64720,64720],"mapped",[1605,1582]],[[64721,64721],"mapped",[1605,1605]],[[64722,64722],"mapped",[1606,1580]],[[64723,64723],"mapped",[1606,1581]],[[64724,64724],"mapped",[1606,1582]],[[64725,64725],"mapped",[1606,1605]],[[64726,64726],"mapped",[1606,1607]],[[64727,64727],"mapped",[1607,1580]],[[64728,64728],"mapped",[1607,1605]],[[64729,64729],"mapped",[1607,1648]],[[64730,64730],"mapped",[1610,1580]],[[64731,64731],"mapped",[1610,1581]],[[64732,64732],"mapped",[1610,1582]],[[64733,64733],"mapped",[1610,1605]],[[64734,64734],"mapped",[1610,1607]],[[64735,64735],"mapped",[1574,1605]],[[64736,64736],"mapped",[1574,1607]],[[64737,64737],"mapped",[1576,1605]],[[64738,64738],"mapped",[1576,1607]],[[64739,64739],"mapped",[1578,1605]],[[64740,64740],"mapped",[1578,1607]],[[64741,64741],"mapped",[1579,1605]],[[64742,64742],"mapped",[1579,1607]],[[64743,64743],"mapped",[1587,1605]],[[64744,64744],"mapped",[1587,1607]],[[64745,64745],"mapped",[1588,1605]],[[64746,64746],"mapped",[1588,1607]],[[64747,64747],"mapped",[1603,1604]],[[64748,64748],"mapped",[1603,1605]],[[64749,64749],"mapped",[1604,1605]],[[64750,64750],"mapped",[1606,1605]],[[64751,64751],"mapped",[1606,1607]],[[64752,64752],"mapped",[1610,1605]],[[64753,64753],"mapped",[1610,1607]],[[64754,64754],"mapped",[1600,1614,1617]],[[64755,64755],"mapped",[1600,1615,1617]],[[64756,64756],"mapped",[1600,1616,1617]],[[64757,64757],"mapped",[1591,1609]],[[64758,64758],"mapped",[1591,1610]],[[64759,64759],"mapped",[1593,1609]],[[64760,64760],"mapped",[1593,1610]],[[64761,64761],"mapped",[1594,1609]],[[64762,64762],"mapped",[1594,1610]],[[64763,64763],"mapped",[1587,1609]],[[64764,64764],"mapped",[1587,1610]],[[64765,64765],"mapped",[1588,1609]],[[64766,64766],"mapped",[1588,1610]],[[64767,64767],"mapped",[1581,1609]],[[64768,64768],"mapped",[1581,1610]],[[64769,64769],"mapped",[1580,1609]],[[64770,64770],"mapped",[1580,1610]],[[64771,64771],"mapped",[1582,1609]],[[64772,64772],"mapped",[1582,1610]],[[64773,64773],"mapped",[1589,1609]],[[64774,64774],"mapped",[1589,1610]],[[64775,64775],"mapped",[1590,1609]],[[64776,64776],"mapped",[1590,1610]],[[64777,64777],"mapped",[1588,1580]],[[64778,64778],"mapped",[1588,1581]],[[64779,64779],"mapped",[1588,1582]],[[64780,64780],"mapped",[1588,1605]],[[64781,64781],"mapped",[1588,1585]],[[64782,64782],"mapped",[1587,1585]],[[64783,64783],"mapped",[1589,1585]],[[64784,64784],"mapped",[1590,1585]],[[64785,64785],"mapped",[1591,1609]],[[64786,64786],"mapped",[1591,1610]],[[64787,64787],"mapped",[1593,1609]],[[64788,64788],"mapped",[1593,1610]],[[64789,64789],"mapped",[1594,1609]],[[64790,64790],"mapped",[1594,1610]],[[64791,64791],"mapped",[1587,1609]],[[64792,64792],"mapped",[1587,1610]],[[64793,64793],"mapped",[1588,1609]],[[64794,64794],"mapped",[1588,1610]],[[64795,64795],"mapped",[1581,1609]],[[64796,64796],"mapped",[1581,1610]],[[64797,64797],"mapped",[1580,1609]],[[64798,64798],"mapped",[1580,1610]],[[64799,64799],"mapped",[1582,1609]],[[64800,64800],"mapped",[1582,1610]],[[64801,64801],"mapped",[1589,1609]],[[64802,64802],"mapped",[1589,1610]],[[64803,64803],"mapped",[1590,1609]],[[64804,64804],"mapped",[1590,1610]],[[64805,64805],"mapped",[1588,1580]],[[64806,64806],"mapped",[1588,1581]],[[64807,64807],"mapped",[1588,1582]],[[64808,64808],"mapped",[1588,1605]],[[64809,64809],"mapped",[1588,1585]],[[64810,64810],"mapped",[1587,1585]],[[64811,64811],"mapped",[1589,1585]],[[64812,64812],"mapped",[1590,1585]],[[64813,64813],"mapped",[1588,1580]],[[64814,64814],"mapped",[1588,1581]],[[64815,64815],"mapped",[1588,1582]],[[64816,64816],"mapped",[1588,1605]],[[64817,64817],"mapped",[1587,1607]],[[64818,64818],"mapped",[1588,1607]],[[64819,64819],"mapped",[1591,1605]],[[64820,64820],"mapped",[1587,1580]],[[64821,64821],"mapped",[1587,1581]],[[64822,64822],"mapped",[1587,1582]],[[64823,64823],"mapped",[1588,1580]],[[64824,64824],"mapped",[1588,1581]],[[64825,64825],"mapped",[1588,1582]],[[64826,64826],"mapped",[1591,1605]],[[64827,64827],"mapped",[1592,1605]],[[64828,64829],"mapped",[1575,1611]],[[64830,64831],"valid",[],"NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped",[1578,1580,1605]],[[64849,64850],"mapped",[1578,1581,1580]],[[64851,64851],"mapped",[1578,1581,1605]],[[64852,64852],"mapped",[1578,1582,1605]],[[64853,64853],"mapped",[1578,1605,1580]],[[64854,64854],"mapped",[1578,1605,1581]],[[64855,64855],"mapped",[1578,1605,1582]],[[64856,64857],"mapped",[1580,1605,1581]],[[64858,64858],"mapped",[1581,1605,1610]],[[64859,64859],"mapped",[1581,1605,1609]],[[64860,64860],"mapped",[1587,1581,1580]],[[64861,64861],"mapped",[1587,1580,1581]],[[64862,64862],"mapped",[1587,1580,1609]],[[64863,64864],"mapped",[1587,1605,1581]],[[64865,64865],"mapped",[1587,1605,1580]],[[64866,64867],"mapped",[1587,1605,1605]],[[64868,64869],"mapped",[1589,1581,1581]],[[64870,64870],"mapped",[1589,1605,1605]],[[64871,64872],"mapped",[1588,1581,1605]],[[64873,64873],"mapped",[1588,1580,1610]],[[64874,64875],"mapped",[1588,1605,1582]],[[64876,64877],"mapped",[1588,1605,1605]],[[64878,64878],"mapped",[1590,1581,1609]],[[64879,64880],"mapped",[1590,1582,1605]],[[64881,64882],"mapped",[1591,1605,1581]],[[64883,64883],"mapped",[1591,1605,1605]],[[64884,64884],"mapped",[1591,1605,1610]],[[64885,64885],"mapped",[1593,1580,1605]],[[64886,64887],"mapped",[1593,1605,1605]],[[64888,64888],"mapped",[1593,1605,1609]],[[64889,64889],"mapped",[1594,1605,1605]],[[64890,64890],"mapped",[1594,1605,1610]],[[64891,64891],"mapped",[1594,1605,1609]],[[64892,64893],"mapped",[1601,1582,1605]],[[64894,64894],"mapped",[1602,1605,1581]],[[64895,64895],"mapped",[1602,1605,1605]],[[64896,64896],"mapped",[1604,1581,1605]],[[64897,64897],"mapped",[1604,1581,1610]],[[64898,64898],"mapped",[1604,1581,1609]],[[64899,64900],"mapped",[1604,1580,1580]],[[64901,64902],"mapped",[1604,1582,1605]],[[64903,64904],"mapped",[1604,1605,1581]],[[64905,64905],"mapped",[1605,1581,1580]],[[64906,64906],"mapped",[1605,1581,1605]],[[64907,64907],"mapped",[1605,1581,1610]],[[64908,64908],"mapped",[1605,1580,1581]],[[64909,64909],"mapped",[1605,1580,1605]],[[64910,64910],"mapped",[1605,1582,1580]],[[64911,64911],"mapped",[1605,1582,1605]],[[64912,64913],"disallowed"],[[64914,64914],"mapped",[1605,1580,1582]],[[64915,64915],"mapped",[1607,1605,1580]],[[64916,64916],"mapped",[1607,1605,1605]],[[64917,64917],"mapped",[1606,1581,1605]],[[64918,64918],"mapped",[1606,1581,1609]],[[64919,64920],"mapped",[1606,1580,1605]],[[64921,64921],"mapped",[1606,1580,1609]],[[64922,64922],"mapped",[1606,1605,1610]],[[64923,64923],"mapped",[1606,1605,1609]],[[64924,64925],"mapped",[1610,1605,1605]],[[64926,64926],"mapped",[1576,1582,1610]],[[64927,64927],"mapped",[1578,1580,1610]],[[64928,64928],"mapped",[1578,1580,1609]],[[64929,64929],"mapped",[1578,1582,1610]],[[64930,64930],"mapped",[1578,1582,1609]],[[64931,64931],"mapped",[1578,1605,1610]],[[64932,64932],"mapped",[1578,1605,1609]],[[64933,64933],"mapped",[1580,1605,1610]],[[64934,64934],"mapped",[1580,1581,1609]],[[64935,64935],"mapped",[1580,1605,1609]],[[64936,64936],"mapped",[1587,1582,1609]],[[64937,64937],"mapped",[1589,1581,1610]],[[64938,64938],"mapped",[1588,1581,1610]],[[64939,64939],"mapped",[1590,1581,1610]],[[64940,64940],"mapped",[1604,1580,1610]],[[64941,64941],"mapped",[1604,1605,1610]],[[64942,64942],"mapped",[1610,1581,1610]],[[64943,64943],"mapped",[1610,1580,1610]],[[64944,64944],"mapped",[1610,1605,1610]],[[64945,64945],"mapped",[1605,1605,1610]],[[64946,64946],"mapped",[1602,1605,1610]],[[64947,64947],"mapped",[1606,1581,1610]],[[64948,64948],"mapped",[1602,1605,1581]],[[64949,64949],"mapped",[1604,1581,1605]],[[64950,64950],"mapped",[1593,1605,1610]],[[64951,64951],"mapped",[1603,1605,1610]],[[64952,64952],"mapped",[1606,1580,1581]],[[64953,64953],"mapped",[1605,1582,1610]],[[64954,64954],"mapped",[1604,1580,1605]],[[64955,64955],"mapped",[1603,1605,1605]],[[64956,64956],"mapped",[1604,1580,1605]],[[64957,64957],"mapped",[1606,1580,1581]],[[64958,64958],"mapped",[1580,1581,1610]],[[64959,64959],"mapped",[1581,1580,1610]],[[64960,64960],"mapped",[1605,1580,1610]],[[64961,64961],"mapped",[1601,1605,1610]],[[64962,64962],"mapped",[1576,1581,1610]],[[64963,64963],"mapped",[1603,1605,1605]],[[64964,64964],"mapped",[1593,1580,1605]],[[64965,64965],"mapped",[1589,1605,1605]],[[64966,64966],"mapped",[1587,1582,1610]],[[64967,64967],"mapped",[1606,1580,1610]],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped",[1589,1604,1746]],[[65009,65009],"mapped",[1602,1604,1746]],[[65010,65010],"mapped",[1575,1604,1604,1607]],[[65011,65011],"mapped",[1575,1603,1576,1585]],[[65012,65012],"mapped",[1605,1581,1605,1583]],[[65013,65013],"mapped",[1589,1604,1593,1605]],[[65014,65014],"mapped",[1585,1587,1608,1604]],[[65015,65015],"mapped",[1593,1604,1610,1607]],[[65016,65016],"mapped",[1608,1587,1604,1605]],[[65017,65017],"mapped",[1589,1604,1609]],[[65018,65018],"disallowed_STD3_mapped",[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605]],[[65019,65019],"disallowed_STD3_mapped",[1580,1604,32,1580,1604,1575,1604,1607]],[[65020,65020],"mapped",[1585,1740,1575,1604]],[[65021,65021],"valid",[],"NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",[44]],[[65041,65041],"mapped",[12289]],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",[58]],[[65044,65044],"disallowed_STD3_mapped",[59]],[[65045,65045],"disallowed_STD3_mapped",[33]],[[65046,65046],"disallowed_STD3_mapped",[63]],[[65047,65047],"mapped",[12310]],[[65048,65048],"mapped",[12311]],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped",[8212]],[[65074,65074],"mapped",[8211]],[[65075,65076],"disallowed_STD3_mapped",[95]],[[65077,65077],"disallowed_STD3_mapped",[40]],[[65078,65078],"disallowed_STD3_mapped",[41]],[[65079,65079],"disallowed_STD3_mapped",[123]],[[65080,65080],"disallowed_STD3_mapped",[125]],[[65081,65081],"mapped",[12308]],[[65082,65082],"mapped",[12309]],[[65083,65083],"mapped",[12304]],[[65084,65084],"mapped",[12305]],[[65085,65085],"mapped",[12298]],[[65086,65086],"mapped",[12299]],[[65087,65087],"mapped",[12296]],[[65088,65088],"mapped",[12297]],[[65089,65089],"mapped",[12300]],[[65090,65090],"mapped",[12301]],[[65091,65091],"mapped",[12302]],[[65092,65092],"mapped",[12303]],[[65093,65094],"valid",[],"NV8"],[[65095,65095],"disallowed_STD3_mapped",[91]],[[65096,65096],"disallowed_STD3_mapped",[93]],[[65097,65100],"disallowed_STD3_mapped",[32,773]],[[65101,65103],"disallowed_STD3_mapped",[95]],[[65104,65104],"disallowed_STD3_mapped",[44]],[[65105,65105],"mapped",[12289]],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",[59]],[[65109,65109],"disallowed_STD3_mapped",[58]],[[65110,65110],"disallowed_STD3_mapped",[63]],[[65111,65111],"disallowed_STD3_mapped",[33]],[[65112,65112],"mapped",[8212]],[[65113,65113],"disallowed_STD3_mapped",[40]],[[65114,65114],"disallowed_STD3_mapped",[41]],[[65115,65115],"disallowed_STD3_mapped",[123]],[[65116,65116],"disallowed_STD3_mapped",[125]],[[65117,65117],"mapped",[12308]],[[65118,65118],"mapped",[12309]],[[65119,65119],"disallowed_STD3_mapped",[35]],[[65120,65120],"disallowed_STD3_mapped",[38]],[[65121,65121],"disallowed_STD3_mapped",[42]],[[65122,65122],"disallowed_STD3_mapped",[43]],[[65123,65123],"mapped",[45]],[[65124,65124],"disallowed_STD3_mapped",[60]],[[65125,65125],"disallowed_STD3_mapped",[62]],[[65126,65126],"disallowed_STD3_mapped",[61]],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped",[92]],[[65129,65129],"disallowed_STD3_mapped",[36]],[[65130,65130],"disallowed_STD3_mapped",[37]],[[65131,65131],"disallowed_STD3_mapped",[64]],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped",[32,1611]],[[65137,65137],"mapped",[1600,1611]],[[65138,65138],"disallowed_STD3_mapped",[32,1612]],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped",[32,1613]],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped",[32,1614]],[[65143,65143],"mapped",[1600,1614]],[[65144,65144],"disallowed_STD3_mapped",[32,1615]],[[65145,65145],"mapped",[1600,1615]],[[65146,65146],"disallowed_STD3_mapped",[32,1616]],[[65147,65147],"mapped",[1600,1616]],[[65148,65148],"disallowed_STD3_mapped",[32,1617]],[[65149,65149],"mapped",[1600,1617]],[[65150,65150],"disallowed_STD3_mapped",[32,1618]],[[65151,65151],"mapped",[1600,1618]],[[65152,65152],"mapped",[1569]],[[65153,65154],"mapped",[1570]],[[65155,65156],"mapped",[1571]],[[65157,65158],"mapped",[1572]],[[65159,65160],"mapped",[1573]],[[65161,65164],"mapped",[1574]],[[65165,65166],"mapped",[1575]],[[65167,65170],"mapped",[1576]],[[65171,65172],"mapped",[1577]],[[65173,65176],"mapped",[1578]],[[65177,65180],"mapped",[1579]],[[65181,65184],"mapped",[1580]],[[65185,65188],"mapped",[1581]],[[65189,65192],"mapped",[1582]],[[65193,65194],"mapped",[1583]],[[65195,65196],"mapped",[1584]],[[65197,65198],"mapped",[1585]],[[65199,65200],"mapped",[1586]],[[65201,65204],"mapped",[1587]],[[65205,65208],"mapped",[1588]],[[65209,65212],"mapped",[1589]],[[65213,65216],"mapped",[1590]],[[65217,65220],"mapped",[1591]],[[65221,65224],"mapped",[1592]],[[65225,65228],"mapped",[1593]],[[65229,65232],"mapped",[1594]],[[65233,65236],"mapped",[1601]],[[65237,65240],"mapped",[1602]],[[65241,65244],"mapped",[1603]],[[65245,65248],"mapped",[1604]],[[65249,65252],"mapped",[1605]],[[65253,65256],"mapped",[1606]],[[65257,65260],"mapped",[1607]],[[65261,65262],"mapped",[1608]],[[65263,65264],"mapped",[1609]],[[65265,65268],"mapped",[1610]],[[65269,65270],"mapped",[1604,1570]],[[65271,65272],"mapped",[1604,1571]],[[65273,65274],"mapped",[1604,1573]],[[65275,65276],"mapped",[1604,1575]],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped",[33]],[[65282,65282],"disallowed_STD3_mapped",[34]],[[65283,65283],"disallowed_STD3_mapped",[35]],[[65284,65284],"disallowed_STD3_mapped",[36]],[[65285,65285],"disallowed_STD3_mapped",[37]],[[65286,65286],"disallowed_STD3_mapped",[38]],[[65287,65287],"disallowed_STD3_mapped",[39]],[[65288,65288],"disallowed_STD3_mapped",[40]],[[65289,65289],"disallowed_STD3_mapped",[41]],[[65290,65290],"disallowed_STD3_mapped",[42]],[[65291,65291],"disallowed_STD3_mapped",[43]],[[65292,65292],"disallowed_STD3_mapped",[44]],[[65293,65293],"mapped",[45]],[[65294,65294],"mapped",[46]],[[65295,65295],"disallowed_STD3_mapped",[47]],[[65296,65296],"mapped",[48]],[[65297,65297],"mapped",[49]],[[65298,65298],"mapped",[50]],[[65299,65299],"mapped",[51]],[[65300,65300],"mapped",[52]],[[65301,65301],"mapped",[53]],[[65302,65302],"mapped",[54]],[[65303,65303],"mapped",[55]],[[65304,65304],"mapped",[56]],[[65305,65305],"mapped",[57]],[[65306,65306],"disallowed_STD3_mapped",[58]],[[65307,65307],"disallowed_STD3_mapped",[59]],[[65308,65308],"disallowed_STD3_mapped",[60]],[[65309,65309],"disallowed_STD3_mapped",[61]],[[65310,65310],"disallowed_STD3_mapped",[62]],[[65311,65311],"disallowed_STD3_mapped",[63]],[[65312,65312],"disallowed_STD3_mapped",[64]],[[65313,65313],"mapped",[97]],[[65314,65314],"mapped",[98]],[[65315,65315],"mapped",[99]],[[65316,65316],"mapped",[100]],[[65317,65317],"mapped",[101]],[[65318,65318],"mapped",[102]],[[65319,65319],"mapped",[103]],[[65320,65320],"mapped",[104]],[[65321,65321],"mapped",[105]],[[65322,65322],"mapped",[106]],[[65323,65323],"mapped",[107]],[[65324,65324],"mapped",[108]],[[65325,65325],"mapped",[109]],[[65326,65326],"mapped",[110]],[[65327,65327],"mapped",[111]],[[65328,65328],"mapped",[112]],[[65329,65329],"mapped",[113]],[[65330,65330],"mapped",[114]],[[65331,65331],"mapped",[115]],[[65332,65332],"mapped",[116]],[[65333,65333],"mapped",[117]],[[65334,65334],"mapped",[118]],[[65335,65335],"mapped",[119]],[[65336,65336],"mapped",[120]],[[65337,65337],"mapped",[121]],[[65338,65338],"mapped",[122]],[[65339,65339],"disallowed_STD3_mapped",[91]],[[65340,65340],"disallowed_STD3_mapped",[92]],[[65341,65341],"disallowed_STD3_mapped",[93]],[[65342,65342],"disallowed_STD3_mapped",[94]],[[65343,65343],"disallowed_STD3_mapped",[95]],[[65344,65344],"disallowed_STD3_mapped",[96]],[[65345,65345],"mapped",[97]],[[65346,65346],"mapped",[98]],[[65347,65347],"mapped",[99]],[[65348,65348],"mapped",[100]],[[65349,65349],"mapped",[101]],[[65350,65350],"mapped",[102]],[[65351,65351],"mapped",[103]],[[65352,65352],"mapped",[104]],[[65353,65353],"mapped",[105]],[[65354,65354],"mapped",[106]],[[65355,65355],"mapped",[107]],[[65356,65356],"mapped",[108]],[[65357,65357],"mapped",[109]],[[65358,65358],"mapped",[110]],[[65359,65359],"mapped",[111]],[[65360,65360],"mapped",[112]],[[65361,65361],"mapped",[113]],[[65362,65362],"mapped",[114]],[[65363,65363],"mapped",[115]],[[65364,65364],"mapped",[116]],[[65365,65365],"mapped",[117]],[[65366,65366],"mapped",[118]],[[65367,65367],"mapped",[119]],[[65368,65368],"mapped",[120]],[[65369,65369],"mapped",[121]],[[65370,65370],"mapped",[122]],[[65371,65371],"disallowed_STD3_mapped",[123]],[[65372,65372],"disallowed_STD3_mapped",[124]],[[65373,65373],"disallowed_STD3_mapped",[125]],[[65374,65374],"disallowed_STD3_mapped",[126]],[[65375,65375],"mapped",[10629]],[[65376,65376],"mapped",[10630]],[[65377,65377],"mapped",[46]],[[65378,65378],"mapped",[12300]],[[65379,65379],"mapped",[12301]],[[65380,65380],"mapped",[12289]],[[65381,65381],"mapped",[12539]],[[65382,65382],"mapped",[12530]],[[65383,65383],"mapped",[12449]],[[65384,65384],"mapped",[12451]],[[65385,65385],"mapped",[12453]],[[65386,65386],"mapped",[12455]],[[65387,65387],"mapped",[12457]],[[65388,65388],"mapped",[12515]],[[65389,65389],"mapped",[12517]],[[65390,65390],"mapped",[12519]],[[65391,65391],"mapped",[12483]],[[65392,65392],"mapped",[12540]],[[65393,65393],"mapped",[12450]],[[65394,65394],"mapped",[12452]],[[65395,65395],"mapped",[12454]],[[65396,65396],"mapped",[12456]],[[65397,65397],"mapped",[12458]],[[65398,65398],"mapped",[12459]],[[65399,65399],"mapped",[12461]],[[65400,65400],"mapped",[12463]],[[65401,65401],"mapped",[12465]],[[65402,65402],"mapped",[12467]],[[65403,65403],"mapped",[12469]],[[65404,65404],"mapped",[12471]],[[65405,65405],"mapped",[12473]],[[65406,65406],"mapped",[12475]],[[65407,65407],"mapped",[12477]],[[65408,65408],"mapped",[12479]],[[65409,65409],"mapped",[12481]],[[65410,65410],"mapped",[12484]],[[65411,65411],"mapped",[12486]],[[65412,65412],"mapped",[12488]],[[65413,65413],"mapped",[12490]],[[65414,65414],"mapped",[12491]],[[65415,65415],"mapped",[12492]],[[65416,65416],"mapped",[12493]],[[65417,65417],"mapped",[12494]],[[65418,65418],"mapped",[12495]],[[65419,65419],"mapped",[12498]],[[65420,65420],"mapped",[12501]],[[65421,65421],"mapped",[12504]],[[65422,65422],"mapped",[12507]],[[65423,65423],"mapped",[12510]],[[65424,65424],"mapped",[12511]],[[65425,65425],"mapped",[12512]],[[65426,65426],"mapped",[12513]],[[65427,65427],"mapped",[12514]],[[65428,65428],"mapped",[12516]],[[65429,65429],"mapped",[12518]],[[65430,65430],"mapped",[12520]],[[65431,65431],"mapped",[12521]],[[65432,65432],"mapped",[12522]],[[65433,65433],"mapped",[12523]],[[65434,65434],"mapped",[12524]],[[65435,65435],"mapped",[12525]],[[65436,65436],"mapped",[12527]],[[65437,65437],"mapped",[12531]],[[65438,65438],"mapped",[12441]],[[65439,65439],"mapped",[12442]],[[65440,65440],"disallowed"],[[65441,65441],"mapped",[4352]],[[65442,65442],"mapped",[4353]],[[65443,65443],"mapped",[4522]],[[65444,65444],"mapped",[4354]],[[65445,65445],"mapped",[4524]],[[65446,65446],"mapped",[4525]],[[65447,65447],"mapped",[4355]],[[65448,65448],"mapped",[4356]],[[65449,65449],"mapped",[4357]],[[65450,65450],"mapped",[4528]],[[65451,65451],"mapped",[4529]],[[65452,65452],"mapped",[4530]],[[65453,65453],"mapped",[4531]],[[65454,65454],"mapped",[4532]],[[65455,65455],"mapped",[4533]],[[65456,65456],"mapped",[4378]],[[65457,65457],"mapped",[4358]],[[65458,65458],"mapped",[4359]],[[65459,65459],"mapped",[4360]],[[65460,65460],"mapped",[4385]],[[65461,65461],"mapped",[4361]],[[65462,65462],"mapped",[4362]],[[65463,65463],"mapped",[4363]],[[65464,65464],"mapped",[4364]],[[65465,65465],"mapped",[4365]],[[65466,65466],"mapped",[4366]],[[65467,65467],"mapped",[4367]],[[65468,65468],"mapped",[4368]],[[65469,65469],"mapped",[4369]],[[65470,65470],"mapped",[4370]],[[65471,65473],"disallowed"],[[65474,65474],"mapped",[4449]],[[65475,65475],"mapped",[4450]],[[65476,65476],"mapped",[4451]],[[65477,65477],"mapped",[4452]],[[65478,65478],"mapped",[4453]],[[65479,65479],"mapped",[4454]],[[65480,65481],"disallowed"],[[65482,65482],"mapped",[4455]],[[65483,65483],"mapped",[4456]],[[65484,65484],"mapped",[4457]],[[65485,65485],"mapped",[4458]],[[65486,65486],"mapped",[4459]],[[65487,65487],"mapped",[4460]],[[65488,65489],"disallowed"],[[65490,65490],"mapped",[4461]],[[65491,65491],"mapped",[4462]],[[65492,65492],"mapped",[4463]],[[65493,65493],"mapped",[4464]],[[65494,65494],"mapped",[4465]],[[65495,65495],"mapped",[4466]],[[65496,65497],"disallowed"],[[65498,65498],"mapped",[4467]],[[65499,65499],"mapped",[4468]],[[65500,65500],"mapped",[4469]],[[65501,65503],"disallowed"],[[65504,65504],"mapped",[162]],[[65505,65505],"mapped",[163]],[[65506,65506],"mapped",[172]],[[65507,65507],"disallowed_STD3_mapped",[32,772]],[[65508,65508],"mapped",[166]],[[65509,65509],"mapped",[165]],[[65510,65510],"mapped",[8361]],[[65511,65511],"disallowed"],[[65512,65512],"mapped",[9474]],[[65513,65513],"mapped",[8592]],[[65514,65514],"mapped",[8593]],[[65515,65515],"mapped",[8594]],[[65516,65516],"mapped",[8595]],[[65517,65517],"mapped",[9632]],[[65518,65518],"mapped",[9675]],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid",[],"NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid",[],"NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid",[],"NV8"],[[65856,65930],"valid",[],"NV8"],[[65931,65932],"valid",[],"NV8"],[[65933,65935],"disallowed"],[[65936,65947],"valid",[],"NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid",[],"NV8"],[[65953,65999],"disallowed"],[[66000,66044],"valid",[],"NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid",[],"NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid",[],"NV8"],[[66340,66351],"disallowed"],[[66352,66368],"valid"],[[66369,66369],"valid",[],"NV8"],[[66370,66377],"valid"],[[66378,66378],"valid",[],"NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid",[],"NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid",[],"NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped",[66600]],[[66561,66561],"mapped",[66601]],[[66562,66562],"mapped",[66602]],[[66563,66563],"mapped",[66603]],[[66564,66564],"mapped",[66604]],[[66565,66565],"mapped",[66605]],[[66566,66566],"mapped",[66606]],[[66567,66567],"mapped",[66607]],[[66568,66568],"mapped",[66608]],[[66569,66569],"mapped",[66609]],[[66570,66570],"mapped",[66610]],[[66571,66571],"mapped",[66611]],[[66572,66572],"mapped",[66612]],[[66573,66573],"mapped",[66613]],[[66574,66574],"mapped",[66614]],[[66575,66575],"mapped",[66615]],[[66576,66576],"mapped",[66616]],[[66577,66577],"mapped",[66617]],[[66578,66578],"mapped",[66618]],[[66579,66579],"mapped",[66619]],[[66580,66580],"mapped",[66620]],[[66581,66581],"mapped",[66621]],[[66582,66582],"mapped",[66622]],[[66583,66583],"mapped",[66623]],[[66584,66584],"mapped",[66624]],[[66585,66585],"mapped",[66625]],[[66586,66586],"mapped",[66626]],[[66587,66587],"mapped",[66627]],[[66588,66588],"mapped",[66628]],[[66589,66589],"mapped",[66629]],[[66590,66590],"mapped",[66630]],[[66591,66591],"mapped",[66631]],[[66592,66592],"mapped",[66632]],[[66593,66593],"mapped",[66633]],[[66594,66594],"mapped",[66634]],[[66595,66595],"mapped",[66635]],[[66596,66596],"mapped",[66636]],[[66597,66597],"mapped",[66637]],[[66598,66598],"mapped",[66638]],[[66599,66599],"mapped",[66639]],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid",[],"NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid",[],"NV8"],[[67680,67702],"valid"],[[67703,67711],"valid",[],"NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid",[],"NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid",[],"NV8"],[[67840,67861],"valid"],[[67862,67865],"valid",[],"NV8"],[[67866,67867],"valid",[],"NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid",[],"NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid",[],"NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid",[],"NV8"],[[68030,68031],"valid"],[[68032,68047],"valid",[],"NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid",[],"NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid",[],"NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid",[],"NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid",[],"NV8"],[[68224,68252],"valid"],[[68253,68255],"valid",[],"NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid",[],"NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid",[],"NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid",[],"NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid",[],"NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid",[],"NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid",[],"NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid",[],"NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped",[68800]],[[68737,68737],"mapped",[68801]],[[68738,68738],"mapped",[68802]],[[68739,68739],"mapped",[68803]],[[68740,68740],"mapped",[68804]],[[68741,68741],"mapped",[68805]],[[68742,68742],"mapped",[68806]],[[68743,68743],"mapped",[68807]],[[68744,68744],"mapped",[68808]],[[68745,68745],"mapped",[68809]],[[68746,68746],"mapped",[68810]],[[68747,68747],"mapped",[68811]],[[68748,68748],"mapped",[68812]],[[68749,68749],"mapped",[68813]],[[68750,68750],"mapped",[68814]],[[68751,68751],"mapped",[68815]],[[68752,68752],"mapped",[68816]],[[68753,68753],"mapped",[68817]],[[68754,68754],"mapped",[68818]],[[68755,68755],"mapped",[68819]],[[68756,68756],"mapped",[68820]],[[68757,68757],"mapped",[68821]],[[68758,68758],"mapped",[68822]],[[68759,68759],"mapped",[68823]],[[68760,68760],"mapped",[68824]],[[68761,68761],"mapped",[68825]],[[68762,68762],"mapped",[68826]],[[68763,68763],"mapped",[68827]],[[68764,68764],"mapped",[68828]],[[68765,68765],"mapped",[68829]],[[68766,68766],"mapped",[68830]],[[68767,68767],"mapped",[68831]],[[68768,68768],"mapped",[68832]],[[68769,68769],"mapped",[68833]],[[68770,68770],"mapped",[68834]],[[68771,68771],"mapped",[68835]],[[68772,68772],"mapped",[68836]],[[68773,68773],"mapped",[68837]],[[68774,68774],"mapped",[68838]],[[68775,68775],"mapped",[68839]],[[68776,68776],"mapped",[68840]],[[68777,68777],"mapped",[68841]],[[68778,68778],"mapped",[68842]],[[68779,68779],"mapped",[68843]],[[68780,68780],"mapped",[68844]],[[68781,68781],"mapped",[68845]],[[68782,68782],"mapped",[68846]],[[68783,68783],"mapped",[68847]],[[68784,68784],"mapped",[68848]],[[68785,68785],"mapped",[68849]],[[68786,68786],"mapped",[68850]],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid",[],"NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid",[],"NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid",[],"NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid",[],"NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid",[],"NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid",[],"NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid",[],"NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid",[],"NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid",[],"NV8"],[[70089,70089],"valid",[],"NV8"],[[70090,70092],"valid"],[[70093,70093],"valid",[],"NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid",[],"NV8"],[[70108,70108],"valid"],[[70109,70111],"valid",[],"NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid",[],"NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid",[],"NV8"],[[70206,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid",[],"NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid",[],"NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid",[],"NV8"],[[71114,71127],"valid",[],"NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid",[],"NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid",[],"NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped",[71872]],[[71841,71841],"mapped",[71873]],[[71842,71842],"mapped",[71874]],[[71843,71843],"mapped",[71875]],[[71844,71844],"mapped",[71876]],[[71845,71845],"mapped",[71877]],[[71846,71846],"mapped",[71878]],[[71847,71847],"mapped",[71879]],[[71848,71848],"mapped",[71880]],[[71849,71849],"mapped",[71881]],[[71850,71850],"mapped",[71882]],[[71851,71851],"mapped",[71883]],[[71852,71852],"mapped",[71884]],[[71853,71853],"mapped",[71885]],[[71854,71854],"mapped",[71886]],[[71855,71855],"mapped",[71887]],[[71856,71856],"mapped",[71888]],[[71857,71857],"mapped",[71889]],[[71858,71858],"mapped",[71890]],[[71859,71859],"mapped",[71891]],[[71860,71860],"mapped",[71892]],[[71861,71861],"mapped",[71893]],[[71862,71862],"mapped",[71894]],[[71863,71863],"mapped",[71895]],[[71864,71864],"mapped",[71896]],[[71865,71865],"mapped",[71897]],[[71866,71866],"mapped",[71898]],[[71867,71867],"mapped",[71899]],[[71868,71868],"mapped",[71900]],[[71869,71869],"mapped",[71901]],[[71870,71870],"mapped",[71902]],[[71871,71871],"mapped",[71903]],[[71872,71913],"valid"],[[71914,71922],"valid",[],"NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72383],"disallowed"],[[72384,72440],"valid"],[[72441,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid",[],"NV8"],[[74851,74862],"valid",[],"NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid",[],"NV8"],[[74868,74868],"valid",[],"NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid",[],"NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid",[],"NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid",[],"NV8"],[[92992,92995],"valid"],[[92996,92997],"valid",[],"NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid",[],"NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,110591],"disallowed"],[[110592,110593],"valid"],[[110594,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid",[],"NV8"],[[113821,113822],"valid"],[[113823,113823],"valid",[],"NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid",[],"NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid",[],"NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid",[],"NV8"],[[119082,119133],"valid",[],"NV8"],[[119134,119134],"mapped",[119127,119141]],[[119135,119135],"mapped",[119128,119141]],[[119136,119136],"mapped",[119128,119141,119150]],[[119137,119137],"mapped",[119128,119141,119151]],[[119138,119138],"mapped",[119128,119141,119152]],[[119139,119139],"mapped",[119128,119141,119153]],[[119140,119140],"mapped",[119128,119141,119154]],[[119141,119154],"valid",[],"NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid",[],"NV8"],[[119227,119227],"mapped",[119225,119141]],[[119228,119228],"mapped",[119226,119141]],[[119229,119229],"mapped",[119225,119141,119150]],[[119230,119230],"mapped",[119226,119141,119150]],[[119231,119231],"mapped",[119225,119141,119151]],[[119232,119232],"mapped",[119226,119141,119151]],[[119233,119261],"valid",[],"NV8"],[[119262,119272],"valid",[],"NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid",[],"NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid",[],"NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid",[],"NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped",[97]],[[119809,119809],"mapped",[98]],[[119810,119810],"mapped",[99]],[[119811,119811],"mapped",[100]],[[119812,119812],"mapped",[101]],[[119813,119813],"mapped",[102]],[[119814,119814],"mapped",[103]],[[119815,119815],"mapped",[104]],[[119816,119816],"mapped",[105]],[[119817,119817],"mapped",[106]],[[119818,119818],"mapped",[107]],[[119819,119819],"mapped",[108]],[[119820,119820],"mapped",[109]],[[119821,119821],"mapped",[110]],[[119822,119822],"mapped",[111]],[[119823,119823],"mapped",[112]],[[119824,119824],"mapped",[113]],[[119825,119825],"mapped",[114]],[[119826,119826],"mapped",[115]],[[119827,119827],"mapped",[116]],[[119828,119828],"mapped",[117]],[[119829,119829],"mapped",[118]],[[119830,119830],"mapped",[119]],[[119831,119831],"mapped",[120]],[[119832,119832],"mapped",[121]],[[119833,119833],"mapped",[122]],[[119834,119834],"mapped",[97]],[[119835,119835],"mapped",[98]],[[119836,119836],"mapped",[99]],[[119837,119837],"mapped",[100]],[[119838,119838],"mapped",[101]],[[119839,119839],"mapped",[102]],[[119840,119840],"mapped",[103]],[[119841,119841],"mapped",[104]],[[119842,119842],"mapped",[105]],[[119843,119843],"mapped",[106]],[[119844,119844],"mapped",[107]],[[119845,119845],"mapped",[108]],[[119846,119846],"mapped",[109]],[[119847,119847],"mapped",[110]],[[119848,119848],"mapped",[111]],[[119849,119849],"mapped",[112]],[[119850,119850],"mapped",[113]],[[119851,119851],"mapped",[114]],[[119852,119852],"mapped",[115]],[[119853,119853],"mapped",[116]],[[119854,119854],"mapped",[117]],[[119855,119855],"mapped",[118]],[[119856,119856],"mapped",[119]],[[119857,119857],"mapped",[120]],[[119858,119858],"mapped",[121]],[[119859,119859],"mapped",[122]],[[119860,119860],"mapped",[97]],[[119861,119861],"mapped",[98]],[[119862,119862],"mapped",[99]],[[119863,119863],"mapped",[100]],[[119864,119864],"mapped",[101]],[[119865,119865],"mapped",[102]],[[119866,119866],"mapped",[103]],[[119867,119867],"mapped",[104]],[[119868,119868],"mapped",[105]],[[119869,119869],"mapped",[106]],[[119870,119870],"mapped",[107]],[[119871,119871],"mapped",[108]],[[119872,119872],"mapped",[109]],[[119873,119873],"mapped",[110]],[[119874,119874],"mapped",[111]],[[119875,119875],"mapped",[112]],[[119876,119876],"mapped",[113]],[[119877,119877],"mapped",[114]],[[119878,119878],"mapped",[115]],[[119879,119879],"mapped",[116]],[[119880,119880],"mapped",[117]],[[119881,119881],"mapped",[118]],[[119882,119882],"mapped",[119]],[[119883,119883],"mapped",[120]],[[119884,119884],"mapped",[121]],[[119885,119885],"mapped",[122]],[[119886,119886],"mapped",[97]],[[119887,119887],"mapped",[98]],[[119888,119888],"mapped",[99]],[[119889,119889],"mapped",[100]],[[119890,119890],"mapped",[101]],[[119891,119891],"mapped",[102]],[[119892,119892],"mapped",[103]],[[119893,119893],"disallowed"],[[119894,119894],"mapped",[105]],[[119895,119895],"mapped",[106]],[[119896,119896],"mapped",[107]],[[119897,119897],"mapped",[108]],[[119898,119898],"mapped",[109]],[[119899,119899],"mapped",[110]],[[119900,119900],"mapped",[111]],[[119901,119901],"mapped",[112]],[[119902,119902],"mapped",[113]],[[119903,119903],"mapped",[114]],[[119904,119904],"mapped",[115]],[[119905,119905],"mapped",[116]],[[119906,119906],"mapped",[117]],[[119907,119907],"mapped",[118]],[[119908,119908],"mapped",[119]],[[119909,119909],"mapped",[120]],[[119910,119910],"mapped",[121]],[[119911,119911],"mapped",[122]],[[119912,119912],"mapped",[97]],[[119913,119913],"mapped",[98]],[[119914,119914],"mapped",[99]],[[119915,119915],"mapped",[100]],[[119916,119916],"mapped",[101]],[[119917,119917],"mapped",[102]],[[119918,119918],"mapped",[103]],[[119919,119919],"mapped",[104]],[[119920,119920],"mapped",[105]],[[119921,119921],"mapped",[106]],[[119922,119922],"mapped",[107]],[[119923,119923],"mapped",[108]],[[119924,119924],"mapped",[109]],[[119925,119925],"mapped",[110]],[[119926,119926],"mapped",[111]],[[119927,119927],"mapped",[112]],[[119928,119928],"mapped",[113]],[[119929,119929],"mapped",[114]],[[119930,119930],"mapped",[115]],[[119931,119931],"mapped",[116]],[[119932,119932],"mapped",[117]],[[119933,119933],"mapped",[118]],[[119934,119934],"mapped",[119]],[[119935,119935],"mapped",[120]],[[119936,119936],"mapped",[121]],[[119937,119937],"mapped",[122]],[[119938,119938],"mapped",[97]],[[119939,119939],"mapped",[98]],[[119940,119940],"mapped",[99]],[[119941,119941],"mapped",[100]],[[119942,119942],"mapped",[101]],[[119943,119943],"mapped",[102]],[[119944,119944],"mapped",[103]],[[119945,119945],"mapped",[104]],[[119946,119946],"mapped",[105]],[[119947,119947],"mapped",[106]],[[119948,119948],"mapped",[107]],[[119949,119949],"mapped",[108]],[[119950,119950],"mapped",[109]],[[119951,119951],"mapped",[110]],[[119952,119952],"mapped",[111]],[[119953,119953],"mapped",[112]],[[119954,119954],"mapped",[113]],[[119955,119955],"mapped",[114]],[[119956,119956],"mapped",[115]],[[119957,119957],"mapped",[116]],[[119958,119958],"mapped",[117]],[[119959,119959],"mapped",[118]],[[119960,119960],"mapped",[119]],[[119961,119961],"mapped",[120]],[[119962,119962],"mapped",[121]],[[119963,119963],"mapped",[122]],[[119964,119964],"mapped",[97]],[[119965,119965],"disallowed"],[[119966,119966],"mapped",[99]],[[119967,119967],"mapped",[100]],[[119968,119969],"disallowed"],[[119970,119970],"mapped",[103]],[[119971,119972],"disallowed"],[[119973,119973],"mapped",[106]],[[119974,119974],"mapped",[107]],[[119975,119976],"disallowed"],[[119977,119977],"mapped",[110]],[[119978,119978],"mapped",[111]],[[119979,119979],"mapped",[112]],[[119980,119980],"mapped",[113]],[[119981,119981],"disallowed"],[[119982,119982],"mapped",[115]],[[119983,119983],"mapped",[116]],[[119984,119984],"mapped",[117]],[[119985,119985],"mapped",[118]],[[119986,119986],"mapped",[119]],[[119987,119987],"mapped",[120]],[[119988,119988],"mapped",[121]],[[119989,119989],"mapped",[122]],[[119990,119990],"mapped",[97]],[[119991,119991],"mapped",[98]],[[119992,119992],"mapped",[99]],[[119993,119993],"mapped",[100]],[[119994,119994],"disallowed"],[[119995,119995],"mapped",[102]],[[119996,119996],"disallowed"],[[119997,119997],"mapped",[104]],[[119998,119998],"mapped",[105]],[[119999,119999],"mapped",[106]],[[120000,120000],"mapped",[107]],[[120001,120001],"mapped",[108]],[[120002,120002],"mapped",[109]],[[120003,120003],"mapped",[110]],[[120004,120004],"disallowed"],[[120005,120005],"mapped",[112]],[[120006,120006],"mapped",[113]],[[120007,120007],"mapped",[114]],[[120008,120008],"mapped",[115]],[[120009,120009],"mapped",[116]],[[120010,120010],"mapped",[117]],[[120011,120011],"mapped",[118]],[[120012,120012],"mapped",[119]],[[120013,120013],"mapped",[120]],[[120014,120014],"mapped",[121]],[[120015,120015],"mapped",[122]],[[120016,120016],"mapped",[97]],[[120017,120017],"mapped",[98]],[[120018,120018],"mapped",[99]],[[120019,120019],"mapped",[100]],[[120020,120020],"mapped",[101]],[[120021,120021],"mapped",[102]],[[120022,120022],"mapped",[103]],[[120023,120023],"mapped",[104]],[[120024,120024],"mapped",[105]],[[120025,120025],"mapped",[106]],[[120026,120026],"mapped",[107]],[[120027,120027],"mapped",[108]],[[120028,120028],"mapped",[109]],[[120029,120029],"mapped",[110]],[[120030,120030],"mapped",[111]],[[120031,120031],"mapped",[112]],[[120032,120032],"mapped",[113]],[[120033,120033],"mapped",[114]],[[120034,120034],"mapped",[115]],[[120035,120035],"mapped",[116]],[[120036,120036],"mapped",[117]],[[120037,120037],"mapped",[118]],[[120038,120038],"mapped",[119]],[[120039,120039],"mapped",[120]],[[120040,120040],"mapped",[121]],[[120041,120041],"mapped",[122]],[[120042,120042],"mapped",[97]],[[120043,120043],"mapped",[98]],[[120044,120044],"mapped",[99]],[[120045,120045],"mapped",[100]],[[120046,120046],"mapped",[101]],[[120047,120047],"mapped",[102]],[[120048,120048],"mapped",[103]],[[120049,120049],"mapped",[104]],[[120050,120050],"mapped",[105]],[[120051,120051],"mapped",[106]],[[120052,120052],"mapped",[107]],[[120053,120053],"mapped",[108]],[[120054,120054],"mapped",[109]],[[120055,120055],"mapped",[110]],[[120056,120056],"mapped",[111]],[[120057,120057],"mapped",[112]],[[120058,120058],"mapped",[113]],[[120059,120059],"mapped",[114]],[[120060,120060],"mapped",[115]],[[120061,120061],"mapped",[116]],[[120062,120062],"mapped",[117]],[[120063,120063],"mapped",[118]],[[120064,120064],"mapped",[119]],[[120065,120065],"mapped",[120]],[[120066,120066],"mapped",[121]],[[120067,120067],"mapped",[122]],[[120068,120068],"mapped",[97]],[[120069,120069],"mapped",[98]],[[120070,120070],"disallowed"],[[120071,120071],"mapped",[100]],[[120072,120072],"mapped",[101]],[[120073,120073],"mapped",[102]],[[120074,120074],"mapped",[103]],[[120075,120076],"disallowed"],[[120077,120077],"mapped",[106]],[[120078,120078],"mapped",[107]],[[120079,120079],"mapped",[108]],[[120080,120080],"mapped",[109]],[[120081,120081],"mapped",[110]],[[120082,120082],"mapped",[111]],[[120083,120083],"mapped",[112]],[[120084,120084],"mapped",[113]],[[120085,120085],"disallowed"],[[120086,120086],"mapped",[115]],[[120087,120087],"mapped",[116]],[[120088,120088],"mapped",[117]],[[120089,120089],"mapped",[118]],[[120090,120090],"mapped",[119]],[[120091,120091],"mapped",[120]],[[120092,120092],"mapped",[121]],[[120093,120093],"disallowed"],[[120094,120094],"mapped",[97]],[[120095,120095],"mapped",[98]],[[120096,120096],"mapped",[99]],[[120097,120097],"mapped",[100]],[[120098,120098],"mapped",[101]],[[120099,120099],"mapped",[102]],[[120100,120100],"mapped",[103]],[[120101,120101],"mapped",[104]],[[120102,120102],"mapped",[105]],[[120103,120103],"mapped",[106]],[[120104,120104],"mapped",[107]],[[120105,120105],"mapped",[108]],[[120106,120106],"mapped",[109]],[[120107,120107],"mapped",[110]],[[120108,120108],"mapped",[111]],[[120109,120109],"mapped",[112]],[[120110,120110],"mapped",[113]],[[120111,120111],"mapped",[114]],[[120112,120112],"mapped",[115]],[[120113,120113],"mapped",[116]],[[120114,120114],"mapped",[117]],[[120115,120115],"mapped",[118]],[[120116,120116],"mapped",[119]],[[120117,120117],"mapped",[120]],[[120118,120118],"mapped",[121]],[[120119,120119],"mapped",[122]],[[120120,120120],"mapped",[97]],[[120121,120121],"mapped",[98]],[[120122,120122],"disallowed"],[[120123,120123],"mapped",[100]],[[120124,120124],"mapped",[101]],[[120125,120125],"mapped",[102]],[[120126,120126],"mapped",[103]],[[120127,120127],"disallowed"],[[120128,120128],"mapped",[105]],[[120129,120129],"mapped",[106]],[[120130,120130],"mapped",[107]],[[120131,120131],"mapped",[108]],[[120132,120132],"mapped",[109]],[[120133,120133],"disallowed"],[[120134,120134],"mapped",[111]],[[120135,120137],"disallowed"],[[120138,120138],"mapped",[115]],[[120139,120139],"mapped",[116]],[[120140,120140],"mapped",[117]],[[120141,120141],"mapped",[118]],[[120142,120142],"mapped",[119]],[[120143,120143],"mapped",[120]],[[120144,120144],"mapped",[121]],[[120145,120145],"disallowed"],[[120146,120146],"mapped",[97]],[[120147,120147],"mapped",[98]],[[120148,120148],"mapped",[99]],[[120149,120149],"mapped",[100]],[[120150,120150],"mapped",[101]],[[120151,120151],"mapped",[102]],[[120152,120152],"mapped",[103]],[[120153,120153],"mapped",[104]],[[120154,120154],"mapped",[105]],[[120155,120155],"mapped",[106]],[[120156,120156],"mapped",[107]],[[120157,120157],"mapped",[108]],[[120158,120158],"mapped",[109]],[[120159,120159],"mapped",[110]],[[120160,120160],"mapped",[111]],[[120161,120161],"mapped",[112]],[[120162,120162],"mapped",[113]],[[120163,120163],"mapped",[114]],[[120164,120164],"mapped",[115]],[[120165,120165],"mapped",[116]],[[120166,120166],"mapped",[117]],[[120167,120167],"mapped",[118]],[[120168,120168],"mapped",[119]],[[120169,120169],"mapped",[120]],[[120170,120170],"mapped",[121]],[[120171,120171],"mapped",[122]],[[120172,120172],"mapped",[97]],[[120173,120173],"mapped",[98]],[[120174,120174],"mapped",[99]],[[120175,120175],"mapped",[100]],[[120176,120176],"mapped",[101]],[[120177,120177],"mapped",[102]],[[120178,120178],"mapped",[103]],[[120179,120179],"mapped",[104]],[[120180,120180],"mapped",[105]],[[120181,120181],"mapped",[106]],[[120182,120182],"mapped",[107]],[[120183,120183],"mapped",[108]],[[120184,120184],"mapped",[109]],[[120185,120185],"mapped",[110]],[[120186,120186],"mapped",[111]],[[120187,120187],"mapped",[112]],[[120188,120188],"mapped",[113]],[[120189,120189],"mapped",[114]],[[120190,120190],"mapped",[115]],[[120191,120191],"mapped",[116]],[[120192,120192],"mapped",[117]],[[120193,120193],"mapped",[118]],[[120194,120194],"mapped",[119]],[[120195,120195],"mapped",[120]],[[120196,120196],"mapped",[121]],[[120197,120197],"mapped",[122]],[[120198,120198],"mapped",[97]],[[120199,120199],"mapped",[98]],[[120200,120200],"mapped",[99]],[[120201,120201],"mapped",[100]],[[120202,120202],"mapped",[101]],[[120203,120203],"mapped",[102]],[[120204,120204],"mapped",[103]],[[120205,120205],"mapped",[104]],[[120206,120206],"mapped",[105]],[[120207,120207],"mapped",[106]],[[120208,120208],"mapped",[107]],[[120209,120209],"mapped",[108]],[[120210,120210],"mapped",[109]],[[120211,120211],"mapped",[110]],[[120212,120212],"mapped",[111]],[[120213,120213],"mapped",[112]],[[120214,120214],"mapped",[113]],[[120215,120215],"mapped",[114]],[[120216,120216],"mapped",[115]],[[120217,120217],"mapped",[116]],[[120218,120218],"mapped",[117]],[[120219,120219],"mapped",[118]],[[120220,120220],"mapped",[119]],[[120221,120221],"mapped",[120]],[[120222,120222],"mapped",[121]],[[120223,120223],"mapped",[122]],[[120224,120224],"mapped",[97]],[[120225,120225],"mapped",[98]],[[120226,120226],"mapped",[99]],[[120227,120227],"mapped",[100]],[[120228,120228],"mapped",[101]],[[120229,120229],"mapped",[102]],[[120230,120230],"mapped",[103]],[[120231,120231],"mapped",[104]],[[120232,120232],"mapped",[105]],[[120233,120233],"mapped",[106]],[[120234,120234],"mapped",[107]],[[120235,120235],"mapped",[108]],[[120236,120236],"mapped",[109]],[[120237,120237],"mapped",[110]],[[120238,120238],"mapped",[111]],[[120239,120239],"mapped",[112]],[[120240,120240],"mapped",[113]],[[120241,120241],"mapped",[114]],[[120242,120242],"mapped",[115]],[[120243,120243],"mapped",[116]],[[120244,120244],"mapped",[117]],[[120245,120245],"mapped",[118]],[[120246,120246],"mapped",[119]],[[120247,120247],"mapped",[120]],[[120248,120248],"mapped",[121]],[[120249,120249],"mapped",[122]],[[120250,120250],"mapped",[97]],[[120251,120251],"mapped",[98]],[[120252,120252],"mapped",[99]],[[120253,120253],"mapped",[100]],[[120254,120254],"mapped",[101]],[[120255,120255],"mapped",[102]],[[120256,120256],"mapped",[103]],[[120257,120257],"mapped",[104]],[[120258,120258],"mapped",[105]],[[120259,120259],"mapped",[106]],[[120260,120260],"mapped",[107]],[[120261,120261],"mapped",[108]],[[120262,120262],"mapped",[109]],[[120263,120263],"mapped",[110]],[[120264,120264],"mapped",[111]],[[120265,120265],"mapped",[112]],[[120266,120266],"mapped",[113]],[[120267,120267],"mapped",[114]],[[120268,120268],"mapped",[115]],[[120269,120269],"mapped",[116]],[[120270,120270],"mapped",[117]],[[120271,120271],"mapped",[118]],[[120272,120272],"mapped",[119]],[[120273,120273],"mapped",[120]],[[120274,120274],"mapped",[121]],[[120275,120275],"mapped",[122]],[[120276,120276],"mapped",[97]],[[120277,120277],"mapped",[98]],[[120278,120278],"mapped",[99]],[[120279,120279],"mapped",[100]],[[120280,120280],"mapped",[101]],[[120281,120281],"mapped",[102]],[[120282,120282],"mapped",[103]],[[120283,120283],"mapped",[104]],[[120284,120284],"mapped",[105]],[[120285,120285],"mapped",[106]],[[120286,120286],"mapped",[107]],[[120287,120287],"mapped",[108]],[[120288,120288],"mapped",[109]],[[120289,120289],"mapped",[110]],[[120290,120290],"mapped",[111]],[[120291,120291],"mapped",[112]],[[120292,120292],"mapped",[113]],[[120293,120293],"mapped",[114]],[[120294,120294],"mapped",[115]],[[120295,120295],"mapped",[116]],[[120296,120296],"mapped",[117]],[[120297,120297],"mapped",[118]],[[120298,120298],"mapped",[119]],[[120299,120299],"mapped",[120]],[[120300,120300],"mapped",[121]],[[120301,120301],"mapped",[122]],[[120302,120302],"mapped",[97]],[[120303,120303],"mapped",[98]],[[120304,120304],"mapped",[99]],[[120305,120305],"mapped",[100]],[[120306,120306],"mapped",[101]],[[120307,120307],"mapped",[102]],[[120308,120308],"mapped",[103]],[[120309,120309],"mapped",[104]],[[120310,120310],"mapped",[105]],[[120311,120311],"mapped",[106]],[[120312,120312],"mapped",[107]],[[120313,120313],"mapped",[108]],[[120314,120314],"mapped",[109]],[[120315,120315],"mapped",[110]],[[120316,120316],"mapped",[111]],[[120317,120317],"mapped",[112]],[[120318,120318],"mapped",[113]],[[120319,120319],"mapped",[114]],[[120320,120320],"mapped",[115]],[[120321,120321],"mapped",[116]],[[120322,120322],"mapped",[117]],[[120323,120323],"mapped",[118]],[[120324,120324],"mapped",[119]],[[120325,120325],"mapped",[120]],[[120326,120326],"mapped",[121]],[[120327,120327],"mapped",[122]],[[120328,120328],"mapped",[97]],[[120329,120329],"mapped",[98]],[[120330,120330],"mapped",[99]],[[120331,120331],"mapped",[100]],[[120332,120332],"mapped",[101]],[[120333,120333],"mapped",[102]],[[120334,120334],"mapped",[103]],[[120335,120335],"mapped",[104]],[[120336,120336],"mapped",[105]],[[120337,120337],"mapped",[106]],[[120338,120338],"mapped",[107]],[[120339,120339],"mapped",[108]],[[120340,120340],"mapped",[109]],[[120341,120341],"mapped",[110]],[[120342,120342],"mapped",[111]],[[120343,120343],"mapped",[112]],[[120344,120344],"mapped",[113]],[[120345,120345],"mapped",[114]],[[120346,120346],"mapped",[115]],[[120347,120347],"mapped",[116]],[[120348,120348],"mapped",[117]],[[120349,120349],"mapped",[118]],[[120350,120350],"mapped",[119]],[[120351,120351],"mapped",[120]],[[120352,120352],"mapped",[121]],[[120353,120353],"mapped",[122]],[[120354,120354],"mapped",[97]],[[120355,120355],"mapped",[98]],[[120356,120356],"mapped",[99]],[[120357,120357],"mapped",[100]],[[120358,120358],"mapped",[101]],[[120359,120359],"mapped",[102]],[[120360,120360],"mapped",[103]],[[120361,120361],"mapped",[104]],[[120362,120362],"mapped",[105]],[[120363,120363],"mapped",[106]],[[120364,120364],"mapped",[107]],[[120365,120365],"mapped",[108]],[[120366,120366],"mapped",[109]],[[120367,120367],"mapped",[110]],[[120368,120368],"mapped",[111]],[[120369,120369],"mapped",[112]],[[120370,120370],"mapped",[113]],[[120371,120371],"mapped",[114]],[[120372,120372],"mapped",[115]],[[120373,120373],"mapped",[116]],[[120374,120374],"mapped",[117]],[[120375,120375],"mapped",[118]],[[120376,120376],"mapped",[119]],[[120377,120377],"mapped",[120]],[[120378,120378],"mapped",[121]],[[120379,120379],"mapped",[122]],[[120380,120380],"mapped",[97]],[[120381,120381],"mapped",[98]],[[120382,120382],"mapped",[99]],[[120383,120383],"mapped",[100]],[[120384,120384],"mapped",[101]],[[120385,120385],"mapped",[102]],[[120386,120386],"mapped",[103]],[[120387,120387],"mapped",[104]],[[120388,120388],"mapped",[105]],[[120389,120389],"mapped",[106]],[[120390,120390],"mapped",[107]],[[120391,120391],"mapped",[108]],[[120392,120392],"mapped",[109]],[[120393,120393],"mapped",[110]],[[120394,120394],"mapped",[111]],[[120395,120395],"mapped",[112]],[[120396,120396],"mapped",[113]],[[120397,120397],"mapped",[114]],[[120398,120398],"mapped",[115]],[[120399,120399],"mapped",[116]],[[120400,120400],"mapped",[117]],[[120401,120401],"mapped",[118]],[[120402,120402],"mapped",[119]],[[120403,120403],"mapped",[120]],[[120404,120404],"mapped",[121]],[[120405,120405],"mapped",[122]],[[120406,120406],"mapped",[97]],[[120407,120407],"mapped",[98]],[[120408,120408],"mapped",[99]],[[120409,120409],"mapped",[100]],[[120410,120410],"mapped",[101]],[[120411,120411],"mapped",[102]],[[120412,120412],"mapped",[103]],[[120413,120413],"mapped",[104]],[[120414,120414],"mapped",[105]],[[120415,120415],"mapped",[106]],[[120416,120416],"mapped",[107]],[[120417,120417],"mapped",[108]],[[120418,120418],"mapped",[109]],[[120419,120419],"mapped",[110]],[[120420,120420],"mapped",[111]],[[120421,120421],"mapped",[112]],[[120422,120422],"mapped",[113]],[[120423,120423],"mapped",[114]],[[120424,120424],"mapped",[115]],[[120425,120425],"mapped",[116]],[[120426,120426],"mapped",[117]],[[120427,120427],"mapped",[118]],[[120428,120428],"mapped",[119]],[[120429,120429],"mapped",[120]],[[120430,120430],"mapped",[121]],[[120431,120431],"mapped",[122]],[[120432,120432],"mapped",[97]],[[120433,120433],"mapped",[98]],[[120434,120434],"mapped",[99]],[[120435,120435],"mapped",[100]],[[120436,120436],"mapped",[101]],[[120437,120437],"mapped",[102]],[[120438,120438],"mapped",[103]],[[120439,120439],"mapped",[104]],[[120440,120440],"mapped",[105]],[[120441,120441],"mapped",[106]],[[120442,120442],"mapped",[107]],[[120443,120443],"mapped",[108]],[[120444,120444],"mapped",[109]],[[120445,120445],"mapped",[110]],[[120446,120446],"mapped",[111]],[[120447,120447],"mapped",[112]],[[120448,120448],"mapped",[113]],[[120449,120449],"mapped",[114]],[[120450,120450],"mapped",[115]],[[120451,120451],"mapped",[116]],[[120452,120452],"mapped",[117]],[[120453,120453],"mapped",[118]],[[120454,120454],"mapped",[119]],[[120455,120455],"mapped",[120]],[[120456,120456],"mapped",[121]],[[120457,120457],"mapped",[122]],[[120458,120458],"mapped",[97]],[[120459,120459],"mapped",[98]],[[120460,120460],"mapped",[99]],[[120461,120461],"mapped",[100]],[[120462,120462],"mapped",[101]],[[120463,120463],"mapped",[102]],[[120464,120464],"mapped",[103]],[[120465,120465],"mapped",[104]],[[120466,120466],"mapped",[105]],[[120467,120467],"mapped",[106]],[[120468,120468],"mapped",[107]],[[120469,120469],"mapped",[108]],[[120470,120470],"mapped",[109]],[[120471,120471],"mapped",[110]],[[120472,120472],"mapped",[111]],[[120473,120473],"mapped",[112]],[[120474,120474],"mapped",[113]],[[120475,120475],"mapped",[114]],[[120476,120476],"mapped",[115]],[[120477,120477],"mapped",[116]],[[120478,120478],"mapped",[117]],[[120479,120479],"mapped",[118]],[[120480,120480],"mapped",[119]],[[120481,120481],"mapped",[120]],[[120482,120482],"mapped",[121]],[[120483,120483],"mapped",[122]],[[120484,120484],"mapped",[305]],[[120485,120485],"mapped",[567]],[[120486,120487],"disallowed"],[[120488,120488],"mapped",[945]],[[120489,120489],"mapped",[946]],[[120490,120490],"mapped",[947]],[[120491,120491],"mapped",[948]],[[120492,120492],"mapped",[949]],[[120493,120493],"mapped",[950]],[[120494,120494],"mapped",[951]],[[120495,120495],"mapped",[952]],[[120496,120496],"mapped",[953]],[[120497,120497],"mapped",[954]],[[120498,120498],"mapped",[955]],[[120499,120499],"mapped",[956]],[[120500,120500],"mapped",[957]],[[120501,120501],"mapped",[958]],[[120502,120502],"mapped",[959]],[[120503,120503],"mapped",[960]],[[120504,120504],"mapped",[961]],[[120505,120505],"mapped",[952]],[[120506,120506],"mapped",[963]],[[120507,120507],"mapped",[964]],[[120508,120508],"mapped",[965]],[[120509,120509],"mapped",[966]],[[120510,120510],"mapped",[967]],[[120511,120511],"mapped",[968]],[[120512,120512],"mapped",[969]],[[120513,120513],"mapped",[8711]],[[120514,120514],"mapped",[945]],[[120515,120515],"mapped",[946]],[[120516,120516],"mapped",[947]],[[120517,120517],"mapped",[948]],[[120518,120518],"mapped",[949]],[[120519,120519],"mapped",[950]],[[120520,120520],"mapped",[951]],[[120521,120521],"mapped",[952]],[[120522,120522],"mapped",[953]],[[120523,120523],"mapped",[954]],[[120524,120524],"mapped",[955]],[[120525,120525],"mapped",[956]],[[120526,120526],"mapped",[957]],[[120527,120527],"mapped",[958]],[[120528,120528],"mapped",[959]],[[120529,120529],"mapped",[960]],[[120530,120530],"mapped",[961]],[[120531,120532],"mapped",[963]],[[120533,120533],"mapped",[964]],[[120534,120534],"mapped",[965]],[[120535,120535],"mapped",[966]],[[120536,120536],"mapped",[967]],[[120537,120537],"mapped",[968]],[[120538,120538],"mapped",[969]],[[120539,120539],"mapped",[8706]],[[120540,120540],"mapped",[949]],[[120541,120541],"mapped",[952]],[[120542,120542],"mapped",[954]],[[120543,120543],"mapped",[966]],[[120544,120544],"mapped",[961]],[[120545,120545],"mapped",[960]],[[120546,120546],"mapped",[945]],[[120547,120547],"mapped",[946]],[[120548,120548],"mapped",[947]],[[120549,120549],"mapped",[948]],[[120550,120550],"mapped",[949]],[[120551,120551],"mapped",[950]],[[120552,120552],"mapped",[951]],[[120553,120553],"mapped",[952]],[[120554,120554],"mapped",[953]],[[120555,120555],"mapped",[954]],[[120556,120556],"mapped",[955]],[[120557,120557],"mapped",[956]],[[120558,120558],"mapped",[957]],[[120559,120559],"mapped",[958]],[[120560,120560],"mapped",[959]],[[120561,120561],"mapped",[960]],[[120562,120562],"mapped",[961]],[[120563,120563],"mapped",[952]],[[120564,120564],"mapped",[963]],[[120565,120565],"mapped",[964]],[[120566,120566],"mapped",[965]],[[120567,120567],"mapped",[966]],[[120568,120568],"mapped",[967]],[[120569,120569],"mapped",[968]],[[120570,120570],"mapped",[969]],[[120571,120571],"mapped",[8711]],[[120572,120572],"mapped",[945]],[[120573,120573],"mapped",[946]],[[120574,120574],"mapped",[947]],[[120575,120575],"mapped",[948]],[[120576,120576],"mapped",[949]],[[120577,120577],"mapped",[950]],[[120578,120578],"mapped",[951]],[[120579,120579],"mapped",[952]],[[120580,120580],"mapped",[953]],[[120581,120581],"mapped",[954]],[[120582,120582],"mapped",[955]],[[120583,120583],"mapped",[956]],[[120584,120584],"mapped",[957]],[[120585,120585],"mapped",[958]],[[120586,120586],"mapped",[959]],[[120587,120587],"mapped",[960]],[[120588,120588],"mapped",[961]],[[120589,120590],"mapped",[963]],[[120591,120591],"mapped",[964]],[[120592,120592],"mapped",[965]],[[120593,120593],"mapped",[966]],[[120594,120594],"mapped",[967]],[[120595,120595],"mapped",[968]],[[120596,120596],"mapped",[969]],[[120597,120597],"mapped",[8706]],[[120598,120598],"mapped",[949]],[[120599,120599],"mapped",[952]],[[120600,120600],"mapped",[954]],[[120601,120601],"mapped",[966]],[[120602,120602],"mapped",[961]],[[120603,120603],"mapped",[960]],[[120604,120604],"mapped",[945]],[[120605,120605],"mapped",[946]],[[120606,120606],"mapped",[947]],[[120607,120607],"mapped",[948]],[[120608,120608],"mapped",[949]],[[120609,120609],"mapped",[950]],[[120610,120610],"mapped",[951]],[[120611,120611],"mapped",[952]],[[120612,120612],"mapped",[953]],[[120613,120613],"mapped",[954]],[[120614,120614],"mapped",[955]],[[120615,120615],"mapped",[956]],[[120616,120616],"mapped",[957]],[[120617,120617],"mapped",[958]],[[120618,120618],"mapped",[959]],[[120619,120619],"mapped",[960]],[[120620,120620],"mapped",[961]],[[120621,120621],"mapped",[952]],[[120622,120622],"mapped",[963]],[[120623,120623],"mapped",[964]],[[120624,120624],"mapped",[965]],[[120625,120625],"mapped",[966]],[[120626,120626],"mapped",[967]],[[120627,120627],"mapped",[968]],[[120628,120628],"mapped",[969]],[[120629,120629],"mapped",[8711]],[[120630,120630],"mapped",[945]],[[120631,120631],"mapped",[946]],[[120632,120632],"mapped",[947]],[[120633,120633],"mapped",[948]],[[120634,120634],"mapped",[949]],[[120635,120635],"mapped",[950]],[[120636,120636],"mapped",[951]],[[120637,120637],"mapped",[952]],[[120638,120638],"mapped",[953]],[[120639,120639],"mapped",[954]],[[120640,120640],"mapped",[955]],[[120641,120641],"mapped",[956]],[[120642,120642],"mapped",[957]],[[120643,120643],"mapped",[958]],[[120644,120644],"mapped",[959]],[[120645,120645],"mapped",[960]],[[120646,120646],"mapped",[961]],[[120647,120648],"mapped",[963]],[[120649,120649],"mapped",[964]],[[120650,120650],"mapped",[965]],[[120651,120651],"mapped",[966]],[[120652,120652],"mapped",[967]],[[120653,120653],"mapped",[968]],[[120654,120654],"mapped",[969]],[[120655,120655],"mapped",[8706]],[[120656,120656],"mapped",[949]],[[120657,120657],"mapped",[952]],[[120658,120658],"mapped",[954]],[[120659,120659],"mapped",[966]],[[120660,120660],"mapped",[961]],[[120661,120661],"mapped",[960]],[[120662,120662],"mapped",[945]],[[120663,120663],"mapped",[946]],[[120664,120664],"mapped",[947]],[[120665,120665],"mapped",[948]],[[120666,120666],"mapped",[949]],[[120667,120667],"mapped",[950]],[[120668,120668],"mapped",[951]],[[120669,120669],"mapped",[952]],[[120670,120670],"mapped",[953]],[[120671,120671],"mapped",[954]],[[120672,120672],"mapped",[955]],[[120673,120673],"mapped",[956]],[[120674,120674],"mapped",[957]],[[120675,120675],"mapped",[958]],[[120676,120676],"mapped",[959]],[[120677,120677],"mapped",[960]],[[120678,120678],"mapped",[961]],[[120679,120679],"mapped",[952]],[[120680,120680],"mapped",[963]],[[120681,120681],"mapped",[964]],[[120682,120682],"mapped",[965]],[[120683,120683],"mapped",[966]],[[120684,120684],"mapped",[967]],[[120685,120685],"mapped",[968]],[[120686,120686],"mapped",[969]],[[120687,120687],"mapped",[8711]],[[120688,120688],"mapped",[945]],[[120689,120689],"mapped",[946]],[[120690,120690],"mapped",[947]],[[120691,120691],"mapped",[948]],[[120692,120692],"mapped",[949]],[[120693,120693],"mapped",[950]],[[120694,120694],"mapped",[951]],[[120695,120695],"mapped",[952]],[[120696,120696],"mapped",[953]],[[120697,120697],"mapped",[954]],[[120698,120698],"mapped",[955]],[[120699,120699],"mapped",[956]],[[120700,120700],"mapped",[957]],[[120701,120701],"mapped",[958]],[[120702,120702],"mapped",[959]],[[120703,120703],"mapped",[960]],[[120704,120704],"mapped",[961]],[[120705,120706],"mapped",[963]],[[120707,120707],"mapped",[964]],[[120708,120708],"mapped",[965]],[[120709,120709],"mapped",[966]],[[120710,120710],"mapped",[967]],[[120711,120711],"mapped",[968]],[[120712,120712],"mapped",[969]],[[120713,120713],"mapped",[8706]],[[120714,120714],"mapped",[949]],[[120715,120715],"mapped",[952]],[[120716,120716],"mapped",[954]],[[120717,120717],"mapped",[966]],[[120718,120718],"mapped",[961]],[[120719,120719],"mapped",[960]],[[120720,120720],"mapped",[945]],[[120721,120721],"mapped",[946]],[[120722,120722],"mapped",[947]],[[120723,120723],"mapped",[948]],[[120724,120724],"mapped",[949]],[[120725,120725],"mapped",[950]],[[120726,120726],"mapped",[951]],[[120727,120727],"mapped",[952]],[[120728,120728],"mapped",[953]],[[120729,120729],"mapped",[954]],[[120730,120730],"mapped",[955]],[[120731,120731],"mapped",[956]],[[120732,120732],"mapped",[957]],[[120733,120733],"mapped",[958]],[[120734,120734],"mapped",[959]],[[120735,120735],"mapped",[960]],[[120736,120736],"mapped",[961]],[[120737,120737],"mapped",[952]],[[120738,120738],"mapped",[963]],[[120739,120739],"mapped",[964]],[[120740,120740],"mapped",[965]],[[120741,120741],"mapped",[966]],[[120742,120742],"mapped",[967]],[[120743,120743],"mapped",[968]],[[120744,120744],"mapped",[969]],[[120745,120745],"mapped",[8711]],[[120746,120746],"mapped",[945]],[[120747,120747],"mapped",[946]],[[120748,120748],"mapped",[947]],[[120749,120749],"mapped",[948]],[[120750,120750],"mapped",[949]],[[120751,120751],"mapped",[950]],[[120752,120752],"mapped",[951]],[[120753,120753],"mapped",[952]],[[120754,120754],"mapped",[953]],[[120755,120755],"mapped",[954]],[[120756,120756],"mapped",[955]],[[120757,120757],"mapped",[956]],[[120758,120758],"mapped",[957]],[[120759,120759],"mapped",[958]],[[120760,120760],"mapped",[959]],[[120761,120761],"mapped",[960]],[[120762,120762],"mapped",[961]],[[120763,120764],"mapped",[963]],[[120765,120765],"mapped",[964]],[[120766,120766],"mapped",[965]],[[120767,120767],"mapped",[966]],[[120768,120768],"mapped",[967]],[[120769,120769],"mapped",[968]],[[120770,120770],"mapped",[969]],[[120771,120771],"mapped",[8706]],[[120772,120772],"mapped",[949]],[[120773,120773],"mapped",[952]],[[120774,120774],"mapped",[954]],[[120775,120775],"mapped",[966]],[[120776,120776],"mapped",[961]],[[120777,120777],"mapped",[960]],[[120778,120779],"mapped",[989]],[[120780,120781],"disallowed"],[[120782,120782],"mapped",[48]],[[120783,120783],"mapped",[49]],[[120784,120784],"mapped",[50]],[[120785,120785],"mapped",[51]],[[120786,120786],"mapped",[52]],[[120787,120787],"mapped",[53]],[[120788,120788],"mapped",[54]],[[120789,120789],"mapped",[55]],[[120790,120790],"mapped",[56]],[[120791,120791],"mapped",[57]],[[120792,120792],"mapped",[48]],[[120793,120793],"mapped",[49]],[[120794,120794],"mapped",[50]],[[120795,120795],"mapped",[51]],[[120796,120796],"mapped",[52]],[[120797,120797],"mapped",[53]],[[120798,120798],"mapped",[54]],[[120799,120799],"mapped",[55]],[[120800,120800],"mapped",[56]],[[120801,120801],"mapped",[57]],[[120802,120802],"mapped",[48]],[[120803,120803],"mapped",[49]],[[120804,120804],"mapped",[50]],[[120805,120805],"mapped",[51]],[[120806,120806],"mapped",[52]],[[120807,120807],"mapped",[53]],[[120808,120808],"mapped",[54]],[[120809,120809],"mapped",[55]],[[120810,120810],"mapped",[56]],[[120811,120811],"mapped",[57]],[[120812,120812],"mapped",[48]],[[120813,120813],"mapped",[49]],[[120814,120814],"mapped",[50]],[[120815,120815],"mapped",[51]],[[120816,120816],"mapped",[52]],[[120817,120817],"mapped",[53]],[[120818,120818],"mapped",[54]],[[120819,120819],"mapped",[55]],[[120820,120820],"mapped",[56]],[[120821,120821],"mapped",[57]],[[120822,120822],"mapped",[48]],[[120823,120823],"mapped",[49]],[[120824,120824],"mapped",[50]],[[120825,120825],"mapped",[51]],[[120826,120826],"mapped",[52]],[[120827,120827],"mapped",[53]],[[120828,120828],"mapped",[54]],[[120829,120829],"mapped",[55]],[[120830,120830],"mapped",[56]],[[120831,120831],"mapped",[57]],[[120832,121343],"valid",[],"NV8"],[[121344,121398],"valid"],[[121399,121402],"valid",[],"NV8"],[[121403,121452],"valid"],[[121453,121460],"valid",[],"NV8"],[[121461,121461],"valid"],[[121462,121475],"valid",[],"NV8"],[[121476,121476],"valid"],[[121477,121483],"valid",[],"NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid",[],"NV8"],[[125136,125142],"valid"],[[125143,126463],"disallowed"],[[126464,126464],"mapped",[1575]],[[126465,126465],"mapped",[1576]],[[126466,126466],"mapped",[1580]],[[126467,126467],"mapped",[1583]],[[126468,126468],"disallowed"],[[126469,126469],"mapped",[1608]],[[126470,126470],"mapped",[1586]],[[126471,126471],"mapped",[1581]],[[126472,126472],"mapped",[1591]],[[126473,126473],"mapped",[1610]],[[126474,126474],"mapped",[1603]],[[126475,126475],"mapped",[1604]],[[126476,126476],"mapped",[1605]],[[126477,126477],"mapped",[1606]],[[126478,126478],"mapped",[1587]],[[126479,126479],"mapped",[1593]],[[126480,126480],"mapped",[1601]],[[126481,126481],"mapped",[1589]],[[126482,126482],"mapped",[1602]],[[126483,126483],"mapped",[1585]],[[126484,126484],"mapped",[1588]],[[126485,126485],"mapped",[1578]],[[126486,126486],"mapped",[1579]],[[126487,126487],"mapped",[1582]],[[126488,126488],"mapped",[1584]],[[126489,126489],"mapped",[1590]],[[126490,126490],"mapped",[1592]],[[126491,126491],"mapped",[1594]],[[126492,126492],"mapped",[1646]],[[126493,126493],"mapped",[1722]],[[126494,126494],"mapped",[1697]],[[126495,126495],"mapped",[1647]],[[126496,126496],"disallowed"],[[126497,126497],"mapped",[1576]],[[126498,126498],"mapped",[1580]],[[126499,126499],"disallowed"],[[126500,126500],"mapped",[1607]],[[126501,126502],"disallowed"],[[126503,126503],"mapped",[1581]],[[126504,126504],"disallowed"],[[126505,126505],"mapped",[1610]],[[126506,126506],"mapped",[1603]],[[126507,126507],"mapped",[1604]],[[126508,126508],"mapped",[1605]],[[126509,126509],"mapped",[1606]],[[126510,126510],"mapped",[1587]],[[126511,126511],"mapped",[1593]],[[126512,126512],"mapped",[1601]],[[126513,126513],"mapped",[1589]],[[126514,126514],"mapped",[1602]],[[126515,126515],"disallowed"],[[126516,126516],"mapped",[1588]],[[126517,126517],"mapped",[1578]],[[126518,126518],"mapped",[1579]],[[126519,126519],"mapped",[1582]],[[126520,126520],"disallowed"],[[126521,126521],"mapped",[1590]],[[126522,126522],"disallowed"],[[126523,126523],"mapped",[1594]],[[126524,126529],"disallowed"],[[126530,126530],"mapped",[1580]],[[126531,126534],"disallowed"],[[126535,126535],"mapped",[1581]],[[126536,126536],"disallowed"],[[126537,126537],"mapped",[1610]],[[126538,126538],"disallowed"],[[126539,126539],"mapped",[1604]],[[126540,126540],"disallowed"],[[126541,126541],"mapped",[1606]],[[126542,126542],"mapped",[1587]],[[126543,126543],"mapped",[1593]],[[126544,126544],"disallowed"],[[126545,126545],"mapped",[1589]],[[126546,126546],"mapped",[1602]],[[126547,126547],"disallowed"],[[126548,126548],"mapped",[1588]],[[126549,126550],"disallowed"],[[126551,126551],"mapped",[1582]],[[126552,126552],"disallowed"],[[126553,126553],"mapped",[1590]],[[126554,126554],"disallowed"],[[126555,126555],"mapped",[1594]],[[126556,126556],"disallowed"],[[126557,126557],"mapped",[1722]],[[126558,126558],"disallowed"],[[126559,126559],"mapped",[1647]],[[126560,126560],"disallowed"],[[126561,126561],"mapped",[1576]],[[126562,126562],"mapped",[1580]],[[126563,126563],"disallowed"],[[126564,126564],"mapped",[1607]],[[126565,126566],"disallowed"],[[126567,126567],"mapped",[1581]],[[126568,126568],"mapped",[1591]],[[126569,126569],"mapped",[1610]],[[126570,126570],"mapped",[1603]],[[126571,126571],"disallowed"],[[126572,126572],"mapped",[1605]],[[126573,126573],"mapped",[1606]],[[126574,126574],"mapped",[1587]],[[126575,126575],"mapped",[1593]],[[126576,126576],"mapped",[1601]],[[126577,126577],"mapped",[1589]],[[126578,126578],"mapped",[1602]],[[126579,126579],"disallowed"],[[126580,126580],"mapped",[1588]],[[126581,126581],"mapped",[1578]],[[126582,126582],"mapped",[1579]],[[126583,126583],"mapped",[1582]],[[126584,126584],"disallowed"],[[126585,126585],"mapped",[1590]],[[126586,126586],"mapped",[1592]],[[126587,126587],"mapped",[1594]],[[126588,126588],"mapped",[1646]],[[126589,126589],"disallowed"],[[126590,126590],"mapped",[1697]],[[126591,126591],"disallowed"],[[126592,126592],"mapped",[1575]],[[126593,126593],"mapped",[1576]],[[126594,126594],"mapped",[1580]],[[126595,126595],"mapped",[1583]],[[126596,126596],"mapped",[1607]],[[126597,126597],"mapped",[1608]],[[126598,126598],"mapped",[1586]],[[126599,126599],"mapped",[1581]],[[126600,126600],"mapped",[1591]],[[126601,126601],"mapped",[1610]],[[126602,126602],"disallowed"],[[126603,126603],"mapped",[1604]],[[126604,126604],"mapped",[1605]],[[126605,126605],"mapped",[1606]],[[126606,126606],"mapped",[1587]],[[126607,126607],"mapped",[1593]],[[126608,126608],"mapped",[1601]],[[126609,126609],"mapped",[1589]],[[126610,126610],"mapped",[1602]],[[126611,126611],"mapped",[1585]],[[126612,126612],"mapped",[1588]],[[126613,126613],"mapped",[1578]],[[126614,126614],"mapped",[1579]],[[126615,126615],"mapped",[1582]],[[126616,126616],"mapped",[1584]],[[126617,126617],"mapped",[1590]],[[126618,126618],"mapped",[1592]],[[126619,126619],"mapped",[1594]],[[126620,126624],"disallowed"],[[126625,126625],"mapped",[1576]],[[126626,126626],"mapped",[1580]],[[126627,126627],"mapped",[1583]],[[126628,126628],"disallowed"],[[126629,126629],"mapped",[1608]],[[126630,126630],"mapped",[1586]],[[126631,126631],"mapped",[1581]],[[126632,126632],"mapped",[1591]],[[126633,126633],"mapped",[1610]],[[126634,126634],"disallowed"],[[126635,126635],"mapped",[1604]],[[126636,126636],"mapped",[1605]],[[126637,126637],"mapped",[1606]],[[126638,126638],"mapped",[1587]],[[126639,126639],"mapped",[1593]],[[126640,126640],"mapped",[1601]],[[126641,126641],"mapped",[1589]],[[126642,126642],"mapped",[1602]],[[126643,126643],"mapped",[1585]],[[126644,126644],"mapped",[1588]],[[126645,126645],"mapped",[1578]],[[126646,126646],"mapped",[1579]],[[126647,126647],"mapped",[1582]],[[126648,126648],"mapped",[1584]],[[126649,126649],"mapped",[1590]],[[126650,126650],"mapped",[1592]],[[126651,126651],"mapped",[1594]],[[126652,126703],"disallowed"],[[126704,126705],"valid",[],"NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid",[],"NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid",[],"NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid",[],"NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid",[],"NV8"],[[127167,127167],"valid",[],"NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid",[],"NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid",[],"NV8"],[[127200,127221],"valid",[],"NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped",[48,44]],[[127234,127234],"disallowed_STD3_mapped",[49,44]],[[127235,127235],"disallowed_STD3_mapped",[50,44]],[[127236,127236],"disallowed_STD3_mapped",[51,44]],[[127237,127237],"disallowed_STD3_mapped",[52,44]],[[127238,127238],"disallowed_STD3_mapped",[53,44]],[[127239,127239],"disallowed_STD3_mapped",[54,44]],[[127240,127240],"disallowed_STD3_mapped",[55,44]],[[127241,127241],"disallowed_STD3_mapped",[56,44]],[[127242,127242],"disallowed_STD3_mapped",[57,44]],[[127243,127244],"valid",[],"NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped",[40,97,41]],[[127249,127249],"disallowed_STD3_mapped",[40,98,41]],[[127250,127250],"disallowed_STD3_mapped",[40,99,41]],[[127251,127251],"disallowed_STD3_mapped",[40,100,41]],[[127252,127252],"disallowed_STD3_mapped",[40,101,41]],[[127253,127253],"disallowed_STD3_mapped",[40,102,41]],[[127254,127254],"disallowed_STD3_mapped",[40,103,41]],[[127255,127255],"disallowed_STD3_mapped",[40,104,41]],[[127256,127256],"disallowed_STD3_mapped",[40,105,41]],[[127257,127257],"disallowed_STD3_mapped",[40,106,41]],[[127258,127258],"disallowed_STD3_mapped",[40,107,41]],[[127259,127259],"disallowed_STD3_mapped",[40,108,41]],[[127260,127260],"disallowed_STD3_mapped",[40,109,41]],[[127261,127261],"disallowed_STD3_mapped",[40,110,41]],[[127262,127262],"disallowed_STD3_mapped",[40,111,41]],[[127263,127263],"disallowed_STD3_mapped",[40,112,41]],[[127264,127264],"disallowed_STD3_mapped",[40,113,41]],[[127265,127265],"disallowed_STD3_mapped",[40,114,41]],[[127266,127266],"disallowed_STD3_mapped",[40,115,41]],[[127267,127267],"disallowed_STD3_mapped",[40,116,41]],[[127268,127268],"disallowed_STD3_mapped",[40,117,41]],[[127269,127269],"disallowed_STD3_mapped",[40,118,41]],[[127270,127270],"disallowed_STD3_mapped",[40,119,41]],[[127271,127271],"disallowed_STD3_mapped",[40,120,41]],[[127272,127272],"disallowed_STD3_mapped",[40,121,41]],[[127273,127273],"disallowed_STD3_mapped",[40,122,41]],[[127274,127274],"mapped",[12308,115,12309]],[[127275,127275],"mapped",[99]],[[127276,127276],"mapped",[114]],[[127277,127277],"mapped",[99,100]],[[127278,127278],"mapped",[119,122]],[[127279,127279],"disallowed"],[[127280,127280],"mapped",[97]],[[127281,127281],"mapped",[98]],[[127282,127282],"mapped",[99]],[[127283,127283],"mapped",[100]],[[127284,127284],"mapped",[101]],[[127285,127285],"mapped",[102]],[[127286,127286],"mapped",[103]],[[127287,127287],"mapped",[104]],[[127288,127288],"mapped",[105]],[[127289,127289],"mapped",[106]],[[127290,127290],"mapped",[107]],[[127291,127291],"mapped",[108]],[[127292,127292],"mapped",[109]],[[127293,127293],"mapped",[110]],[[127294,127294],"mapped",[111]],[[127295,127295],"mapped",[112]],[[127296,127296],"mapped",[113]],[[127297,127297],"mapped",[114]],[[127298,127298],"mapped",[115]],[[127299,127299],"mapped",[116]],[[127300,127300],"mapped",[117]],[[127301,127301],"mapped",[118]],[[127302,127302],"mapped",[119]],[[127303,127303],"mapped",[120]],[[127304,127304],"mapped",[121]],[[127305,127305],"mapped",[122]],[[127306,127306],"mapped",[104,118]],[[127307,127307],"mapped",[109,118]],[[127308,127308],"mapped",[115,100]],[[127309,127309],"mapped",[115,115]],[[127310,127310],"mapped",[112,112,118]],[[127311,127311],"mapped",[119,99]],[[127312,127318],"valid",[],"NV8"],[[127319,127319],"valid",[],"NV8"],[[127320,127326],"valid",[],"NV8"],[[127327,127327],"valid",[],"NV8"],[[127328,127337],"valid",[],"NV8"],[[127338,127338],"mapped",[109,99]],[[127339,127339],"mapped",[109,100]],[[127340,127343],"disallowed"],[[127344,127352],"valid",[],"NV8"],[[127353,127353],"valid",[],"NV8"],[[127354,127354],"valid",[],"NV8"],[[127355,127356],"valid",[],"NV8"],[[127357,127358],"valid",[],"NV8"],[[127359,127359],"valid",[],"NV8"],[[127360,127369],"valid",[],"NV8"],[[127370,127373],"valid",[],"NV8"],[[127374,127375],"valid",[],"NV8"],[[127376,127376],"mapped",[100,106]],[[127377,127386],"valid",[],"NV8"],[[127387,127461],"disallowed"],[[127462,127487],"valid",[],"NV8"],[[127488,127488],"mapped",[12411,12363]],[[127489,127489],"mapped",[12467,12467]],[[127490,127490],"mapped",[12469]],[[127491,127503],"disallowed"],[[127504,127504],"mapped",[25163]],[[127505,127505],"mapped",[23383]],[[127506,127506],"mapped",[21452]],[[127507,127507],"mapped",[12487]],[[127508,127508],"mapped",[20108]],[[127509,127509],"mapped",[22810]],[[127510,127510],"mapped",[35299]],[[127511,127511],"mapped",[22825]],[[127512,127512],"mapped",[20132]],[[127513,127513],"mapped",[26144]],[[127514,127514],"mapped",[28961]],[[127515,127515],"mapped",[26009]],[[127516,127516],"mapped",[21069]],[[127517,127517],"mapped",[24460]],[[127518,127518],"mapped",[20877]],[[127519,127519],"mapped",[26032]],[[127520,127520],"mapped",[21021]],[[127521,127521],"mapped",[32066]],[[127522,127522],"mapped",[29983]],[[127523,127523],"mapped",[36009]],[[127524,127524],"mapped",[22768]],[[127525,127525],"mapped",[21561]],[[127526,127526],"mapped",[28436]],[[127527,127527],"mapped",[25237]],[[127528,127528],"mapped",[25429]],[[127529,127529],"mapped",[19968]],[[127530,127530],"mapped",[19977]],[[127531,127531],"mapped",[36938]],[[127532,127532],"mapped",[24038]],[[127533,127533],"mapped",[20013]],[[127534,127534],"mapped",[21491]],[[127535,127535],"mapped",[25351]],[[127536,127536],"mapped",[36208]],[[127537,127537],"mapped",[25171]],[[127538,127538],"mapped",[31105]],[[127539,127539],"mapped",[31354]],[[127540,127540],"mapped",[21512]],[[127541,127541],"mapped",[28288]],[[127542,127542],"mapped",[26377]],[[127543,127543],"mapped",[26376]],[[127544,127544],"mapped",[30003]],[[127545,127545],"mapped",[21106]],[[127546,127546],"mapped",[21942]],[[127547,127551],"disallowed"],[[127552,127552],"mapped",[12308,26412,12309]],[[127553,127553],"mapped",[12308,19977,12309]],[[127554,127554],"mapped",[12308,20108,12309]],[[127555,127555],"mapped",[12308,23433,12309]],[[127556,127556],"mapped",[12308,28857,12309]],[[127557,127557],"mapped",[12308,25171,12309]],[[127558,127558],"mapped",[12308,30423,12309]],[[127559,127559],"mapped",[12308,21213,12309]],[[127560,127560],"mapped",[12308,25943,12309]],[[127561,127567],"disallowed"],[[127568,127568],"mapped",[24471]],[[127569,127569],"mapped",[21487]],[[127570,127743],"disallowed"],[[127744,127776],"valid",[],"NV8"],[[127777,127788],"valid",[],"NV8"],[[127789,127791],"valid",[],"NV8"],[[127792,127797],"valid",[],"NV8"],[[127798,127798],"valid",[],"NV8"],[[127799,127868],"valid",[],"NV8"],[[127869,127869],"valid",[],"NV8"],[[127870,127871],"valid",[],"NV8"],[[127872,127891],"valid",[],"NV8"],[[127892,127903],"valid",[],"NV8"],[[127904,127940],"valid",[],"NV8"],[[127941,127941],"valid",[],"NV8"],[[127942,127946],"valid",[],"NV8"],[[127947,127950],"valid",[],"NV8"],[[127951,127955],"valid",[],"NV8"],[[127956,127967],"valid",[],"NV8"],[[127968,127984],"valid",[],"NV8"],[[127985,127991],"valid",[],"NV8"],[[127992,127999],"valid",[],"NV8"],[[128000,128062],"valid",[],"NV8"],[[128063,128063],"valid",[],"NV8"],[[128064,128064],"valid",[],"NV8"],[[128065,128065],"valid",[],"NV8"],[[128066,128247],"valid",[],"NV8"],[[128248,128248],"valid",[],"NV8"],[[128249,128252],"valid",[],"NV8"],[[128253,128254],"valid",[],"NV8"],[[128255,128255],"valid",[],"NV8"],[[128256,128317],"valid",[],"NV8"],[[128318,128319],"valid",[],"NV8"],[[128320,128323],"valid",[],"NV8"],[[128324,128330],"valid",[],"NV8"],[[128331,128335],"valid",[],"NV8"],[[128336,128359],"valid",[],"NV8"],[[128360,128377],"valid",[],"NV8"],[[128378,128378],"disallowed"],[[128379,128419],"valid",[],"NV8"],[[128420,128420],"disallowed"],[[128421,128506],"valid",[],"NV8"],[[128507,128511],"valid",[],"NV8"],[[128512,128512],"valid",[],"NV8"],[[128513,128528],"valid",[],"NV8"],[[128529,128529],"valid",[],"NV8"],[[128530,128532],"valid",[],"NV8"],[[128533,128533],"valid",[],"NV8"],[[128534,128534],"valid",[],"NV8"],[[128535,128535],"valid",[],"NV8"],[[128536,128536],"valid",[],"NV8"],[[128537,128537],"valid",[],"NV8"],[[128538,128538],"valid",[],"NV8"],[[128539,128539],"valid",[],"NV8"],[[128540,128542],"valid",[],"NV8"],[[128543,128543],"valid",[],"NV8"],[[128544,128549],"valid",[],"NV8"],[[128550,128551],"valid",[],"NV8"],[[128552,128555],"valid",[],"NV8"],[[128556,128556],"valid",[],"NV8"],[[128557,128557],"valid",[],"NV8"],[[128558,128559],"valid",[],"NV8"],[[128560,128563],"valid",[],"NV8"],[[128564,128564],"valid",[],"NV8"],[[128565,128576],"valid",[],"NV8"],[[128577,128578],"valid",[],"NV8"],[[128579,128580],"valid",[],"NV8"],[[128581,128591],"valid",[],"NV8"],[[128592,128639],"valid",[],"NV8"],[[128640,128709],"valid",[],"NV8"],[[128710,128719],"valid",[],"NV8"],[[128720,128720],"valid",[],"NV8"],[[128721,128735],"disallowed"],[[128736,128748],"valid",[],"NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid",[],"NV8"],[[128756,128767],"disallowed"],[[128768,128883],"valid",[],"NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid",[],"NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid",[],"NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid",[],"NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid",[],"NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid",[],"NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid",[],"NV8"],[[129198,129295],"disallowed"],[[129296,129304],"valid",[],"NV8"],[[129305,129407],"disallowed"],[[129408,129412],"valid",[],"NV8"],[[129413,129471],"disallowed"],[[129472,129472],"valid",[],"NV8"],[[129473,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,194559],"disallowed"],[[194560,194560],"mapped",[20029]],[[194561,194561],"mapped",[20024]],[[194562,194562],"mapped",[20033]],[[194563,194563],"mapped",[131362]],[[194564,194564],"mapped",[20320]],[[194565,194565],"mapped",[20398]],[[194566,194566],"mapped",[20411]],[[194567,194567],"mapped",[20482]],[[194568,194568],"mapped",[20602]],[[194569,194569],"mapped",[20633]],[[194570,194570],"mapped",[20711]],[[194571,194571],"mapped",[20687]],[[194572,194572],"mapped",[13470]],[[194573,194573],"mapped",[132666]],[[194574,194574],"mapped",[20813]],[[194575,194575],"mapped",[20820]],[[194576,194576],"mapped",[20836]],[[194577,194577],"mapped",[20855]],[[194578,194578],"mapped",[132380]],[[194579,194579],"mapped",[13497]],[[194580,194580],"mapped",[20839]],[[194581,194581],"mapped",[20877]],[[194582,194582],"mapped",[132427]],[[194583,194583],"mapped",[20887]],[[194584,194584],"mapped",[20900]],[[194585,194585],"mapped",[20172]],[[194586,194586],"mapped",[20908]],[[194587,194587],"mapped",[20917]],[[194588,194588],"mapped",[168415]],[[194589,194589],"mapped",[20981]],[[194590,194590],"mapped",[20995]],[[194591,194591],"mapped",[13535]],[[194592,194592],"mapped",[21051]],[[194593,194593],"mapped",[21062]],[[194594,194594],"mapped",[21106]],[[194595,194595],"mapped",[21111]],[[194596,194596],"mapped",[13589]],[[194597,194597],"mapped",[21191]],[[194598,194598],"mapped",[21193]],[[194599,194599],"mapped",[21220]],[[194600,194600],"mapped",[21242]],[[194601,194601],"mapped",[21253]],[[194602,194602],"mapped",[21254]],[[194603,194603],"mapped",[21271]],[[194604,194604],"mapped",[21321]],[[194605,194605],"mapped",[21329]],[[194606,194606],"mapped",[21338]],[[194607,194607],"mapped",[21363]],[[194608,194608],"mapped",[21373]],[[194609,194611],"mapped",[21375]],[[194612,194612],"mapped",[133676]],[[194613,194613],"mapped",[28784]],[[194614,194614],"mapped",[21450]],[[194615,194615],"mapped",[21471]],[[194616,194616],"mapped",[133987]],[[194617,194617],"mapped",[21483]],[[194618,194618],"mapped",[21489]],[[194619,194619],"mapped",[21510]],[[194620,194620],"mapped",[21662]],[[194621,194621],"mapped",[21560]],[[194622,194622],"mapped",[21576]],[[194623,194623],"mapped",[21608]],[[194624,194624],"mapped",[21666]],[[194625,194625],"mapped",[21750]],[[194626,194626],"mapped",[21776]],[[194627,194627],"mapped",[21843]],[[194628,194628],"mapped",[21859]],[[194629,194630],"mapped",[21892]],[[194631,194631],"mapped",[21913]],[[194632,194632],"mapped",[21931]],[[194633,194633],"mapped",[21939]],[[194634,194634],"mapped",[21954]],[[194635,194635],"mapped",[22294]],[[194636,194636],"mapped",[22022]],[[194637,194637],"mapped",[22295]],[[194638,194638],"mapped",[22097]],[[194639,194639],"mapped",[22132]],[[194640,194640],"mapped",[20999]],[[194641,194641],"mapped",[22766]],[[194642,194642],"mapped",[22478]],[[194643,194643],"mapped",[22516]],[[194644,194644],"mapped",[22541]],[[194645,194645],"mapped",[22411]],[[194646,194646],"mapped",[22578]],[[194647,194647],"mapped",[22577]],[[194648,194648],"mapped",[22700]],[[194649,194649],"mapped",[136420]],[[194650,194650],"mapped",[22770]],[[194651,194651],"mapped",[22775]],[[194652,194652],"mapped",[22790]],[[194653,194653],"mapped",[22810]],[[194654,194654],"mapped",[22818]],[[194655,194655],"mapped",[22882]],[[194656,194656],"mapped",[136872]],[[194657,194657],"mapped",[136938]],[[194658,194658],"mapped",[23020]],[[194659,194659],"mapped",[23067]],[[194660,194660],"mapped",[23079]],[[194661,194661],"mapped",[23000]],[[194662,194662],"mapped",[23142]],[[194663,194663],"mapped",[14062]],[[194664,194664],"disallowed"],[[194665,194665],"mapped",[23304]],[[194666,194667],"mapped",[23358]],[[194668,194668],"mapped",[137672]],[[194669,194669],"mapped",[23491]],[[194670,194670],"mapped",[23512]],[[194671,194671],"mapped",[23527]],[[194672,194672],"mapped",[23539]],[[194673,194673],"mapped",[138008]],[[194674,194674],"mapped",[23551]],[[194675,194675],"mapped",[23558]],[[194676,194676],"disallowed"],[[194677,194677],"mapped",[23586]],[[194678,194678],"mapped",[14209]],[[194679,194679],"mapped",[23648]],[[194680,194680],"mapped",[23662]],[[194681,194681],"mapped",[23744]],[[194682,194682],"mapped",[23693]],[[194683,194683],"mapped",[138724]],[[194684,194684],"mapped",[23875]],[[194685,194685],"mapped",[138726]],[[194686,194686],"mapped",[23918]],[[194687,194687],"mapped",[23915]],[[194688,194688],"mapped",[23932]],[[194689,194689],"mapped",[24033]],[[194690,194690],"mapped",[24034]],[[194691,194691],"mapped",[14383]],[[194692,194692],"mapped",[24061]],[[194693,194693],"mapped",[24104]],[[194694,194694],"mapped",[24125]],[[194695,194695],"mapped",[24169]],[[194696,194696],"mapped",[14434]],[[194697,194697],"mapped",[139651]],[[194698,194698],"mapped",[14460]],[[194699,194699],"mapped",[24240]],[[194700,194700],"mapped",[24243]],[[194701,194701],"mapped",[24246]],[[194702,194702],"mapped",[24266]],[[194703,194703],"mapped",[172946]],[[194704,194704],"mapped",[24318]],[[194705,194706],"mapped",[140081]],[[194707,194707],"mapped",[33281]],[[194708,194709],"mapped",[24354]],[[194710,194710],"mapped",[14535]],[[194711,194711],"mapped",[144056]],[[194712,194712],"mapped",[156122]],[[194713,194713],"mapped",[24418]],[[194714,194714],"mapped",[24427]],[[194715,194715],"mapped",[14563]],[[194716,194716],"mapped",[24474]],[[194717,194717],"mapped",[24525]],[[194718,194718],"mapped",[24535]],[[194719,194719],"mapped",[24569]],[[194720,194720],"mapped",[24705]],[[194721,194721],"mapped",[14650]],[[194722,194722],"mapped",[14620]],[[194723,194723],"mapped",[24724]],[[194724,194724],"mapped",[141012]],[[194725,194725],"mapped",[24775]],[[194726,194726],"mapped",[24904]],[[194727,194727],"mapped",[24908]],[[194728,194728],"mapped",[24910]],[[194729,194729],"mapped",[24908]],[[194730,194730],"mapped",[24954]],[[194731,194731],"mapped",[24974]],[[194732,194732],"mapped",[25010]],[[194733,194733],"mapped",[24996]],[[194734,194734],"mapped",[25007]],[[194735,194735],"mapped",[25054]],[[194736,194736],"mapped",[25074]],[[194737,194737],"mapped",[25078]],[[194738,194738],"mapped",[25104]],[[194739,194739],"mapped",[25115]],[[194740,194740],"mapped",[25181]],[[194741,194741],"mapped",[25265]],[[194742,194742],"mapped",[25300]],[[194743,194743],"mapped",[25424]],[[194744,194744],"mapped",[142092]],[[194745,194745],"mapped",[25405]],[[194746,194746],"mapped",[25340]],[[194747,194747],"mapped",[25448]],[[194748,194748],"mapped",[25475]],[[194749,194749],"mapped",[25572]],[[194750,194750],"mapped",[142321]],[[194751,194751],"mapped",[25634]],[[194752,194752],"mapped",[25541]],[[194753,194753],"mapped",[25513]],[[194754,194754],"mapped",[14894]],[[194755,194755],"mapped",[25705]],[[194756,194756],"mapped",[25726]],[[194757,194757],"mapped",[25757]],[[194758,194758],"mapped",[25719]],[[194759,194759],"mapped",[14956]],[[194760,194760],"mapped",[25935]],[[194761,194761],"mapped",[25964]],[[194762,194762],"mapped",[143370]],[[194763,194763],"mapped",[26083]],[[194764,194764],"mapped",[26360]],[[194765,194765],"mapped",[26185]],[[194766,194766],"mapped",[15129]],[[194767,194767],"mapped",[26257]],[[194768,194768],"mapped",[15112]],[[194769,194769],"mapped",[15076]],[[194770,194770],"mapped",[20882]],[[194771,194771],"mapped",[20885]],[[194772,194772],"mapped",[26368]],[[194773,194773],"mapped",[26268]],[[194774,194774],"mapped",[32941]],[[194775,194775],"mapped",[17369]],[[194776,194776],"mapped",[26391]],[[194777,194777],"mapped",[26395]],[[194778,194778],"mapped",[26401]],[[194779,194779],"mapped",[26462]],[[194780,194780],"mapped",[26451]],[[194781,194781],"mapped",[144323]],[[194782,194782],"mapped",[15177]],[[194783,194783],"mapped",[26618]],[[194784,194784],"mapped",[26501]],[[194785,194785],"mapped",[26706]],[[194786,194786],"mapped",[26757]],[[194787,194787],"mapped",[144493]],[[194788,194788],"mapped",[26766]],[[194789,194789],"mapped",[26655]],[[194790,194790],"mapped",[26900]],[[194791,194791],"mapped",[15261]],[[194792,194792],"mapped",[26946]],[[194793,194793],"mapped",[27043]],[[194794,194794],"mapped",[27114]],[[194795,194795],"mapped",[27304]],[[194796,194796],"mapped",[145059]],[[194797,194797],"mapped",[27355]],[[194798,194798],"mapped",[15384]],[[194799,194799],"mapped",[27425]],[[194800,194800],"mapped",[145575]],[[194801,194801],"mapped",[27476]],[[194802,194802],"mapped",[15438]],[[194803,194803],"mapped",[27506]],[[194804,194804],"mapped",[27551]],[[194805,194805],"mapped",[27578]],[[194806,194806],"mapped",[27579]],[[194807,194807],"mapped",[146061]],[[194808,194808],"mapped",[138507]],[[194809,194809],"mapped",[146170]],[[194810,194810],"mapped",[27726]],[[194811,194811],"mapped",[146620]],[[194812,194812],"mapped",[27839]],[[194813,194813],"mapped",[27853]],[[194814,194814],"mapped",[27751]],[[194815,194815],"mapped",[27926]],[[194816,194816],"mapped",[27966]],[[194817,194817],"mapped",[28023]],[[194818,194818],"mapped",[27969]],[[194819,194819],"mapped",[28009]],[[194820,194820],"mapped",[28024]],[[194821,194821],"mapped",[28037]],[[194822,194822],"mapped",[146718]],[[194823,194823],"mapped",[27956]],[[194824,194824],"mapped",[28207]],[[194825,194825],"mapped",[28270]],[[194826,194826],"mapped",[15667]],[[194827,194827],"mapped",[28363]],[[194828,194828],"mapped",[28359]],[[194829,194829],"mapped",[147153]],[[194830,194830],"mapped",[28153]],[[194831,194831],"mapped",[28526]],[[194832,194832],"mapped",[147294]],[[194833,194833],"mapped",[147342]],[[194834,194834],"mapped",[28614]],[[194835,194835],"mapped",[28729]],[[194836,194836],"mapped",[28702]],[[194837,194837],"mapped",[28699]],[[194838,194838],"mapped",[15766]],[[194839,194839],"mapped",[28746]],[[194840,194840],"mapped",[28797]],[[194841,194841],"mapped",[28791]],[[194842,194842],"mapped",[28845]],[[194843,194843],"mapped",[132389]],[[194844,194844],"mapped",[28997]],[[194845,194845],"mapped",[148067]],[[194846,194846],"mapped",[29084]],[[194847,194847],"disallowed"],[[194848,194848],"mapped",[29224]],[[194849,194849],"mapped",[29237]],[[194850,194850],"mapped",[29264]],[[194851,194851],"mapped",[149000]],[[194852,194852],"mapped",[29312]],[[194853,194853],"mapped",[29333]],[[194854,194854],"mapped",[149301]],[[194855,194855],"mapped",[149524]],[[194856,194856],"mapped",[29562]],[[194857,194857],"mapped",[29579]],[[194858,194858],"mapped",[16044]],[[194859,194859],"mapped",[29605]],[[194860,194861],"mapped",[16056]],[[194862,194862],"mapped",[29767]],[[194863,194863],"mapped",[29788]],[[194864,194864],"mapped",[29809]],[[194865,194865],"mapped",[29829]],[[194866,194866],"mapped",[29898]],[[194867,194867],"mapped",[16155]],[[194868,194868],"mapped",[29988]],[[194869,194869],"mapped",[150582]],[[194870,194870],"mapped",[30014]],[[194871,194871],"mapped",[150674]],[[194872,194872],"mapped",[30064]],[[194873,194873],"mapped",[139679]],[[194874,194874],"mapped",[30224]],[[194875,194875],"mapped",[151457]],[[194876,194876],"mapped",[151480]],[[194877,194877],"mapped",[151620]],[[194878,194878],"mapped",[16380]],[[194879,194879],"mapped",[16392]],[[194880,194880],"mapped",[30452]],[[194881,194881],"mapped",[151795]],[[194882,194882],"mapped",[151794]],[[194883,194883],"mapped",[151833]],[[194884,194884],"mapped",[151859]],[[194885,194885],"mapped",[30494]],[[194886,194887],"mapped",[30495]],[[194888,194888],"mapped",[30538]],[[194889,194889],"mapped",[16441]],[[194890,194890],"mapped",[30603]],[[194891,194891],"mapped",[16454]],[[194892,194892],"mapped",[16534]],[[194893,194893],"mapped",[152605]],[[194894,194894],"mapped",[30798]],[[194895,194895],"mapped",[30860]],[[194896,194896],"mapped",[30924]],[[194897,194897],"mapped",[16611]],[[194898,194898],"mapped",[153126]],[[194899,194899],"mapped",[31062]],[[194900,194900],"mapped",[153242]],[[194901,194901],"mapped",[153285]],[[194902,194902],"mapped",[31119]],[[194903,194903],"mapped",[31211]],[[194904,194904],"mapped",[16687]],[[194905,194905],"mapped",[31296]],[[194906,194906],"mapped",[31306]],[[194907,194907],"mapped",[31311]],[[194908,194908],"mapped",[153980]],[[194909,194910],"mapped",[154279]],[[194911,194911],"disallowed"],[[194912,194912],"mapped",[16898]],[[194913,194913],"mapped",[154539]],[[194914,194914],"mapped",[31686]],[[194915,194915],"mapped",[31689]],[[194916,194916],"mapped",[16935]],[[194917,194917],"mapped",[154752]],[[194918,194918],"mapped",[31954]],[[194919,194919],"mapped",[17056]],[[194920,194920],"mapped",[31976]],[[194921,194921],"mapped",[31971]],[[194922,194922],"mapped",[32000]],[[194923,194923],"mapped",[155526]],[[194924,194924],"mapped",[32099]],[[194925,194925],"mapped",[17153]],[[194926,194926],"mapped",[32199]],[[194927,194927],"mapped",[32258]],[[194928,194928],"mapped",[32325]],[[194929,194929],"mapped",[17204]],[[194930,194930],"mapped",[156200]],[[194931,194931],"mapped",[156231]],[[194932,194932],"mapped",[17241]],[[194933,194933],"mapped",[156377]],[[194934,194934],"mapped",[32634]],[[194935,194935],"mapped",[156478]],[[194936,194936],"mapped",[32661]],[[194937,194937],"mapped",[32762]],[[194938,194938],"mapped",[32773]],[[194939,194939],"mapped",[156890]],[[194940,194940],"mapped",[156963]],[[194941,194941],"mapped",[32864]],[[194942,194942],"mapped",[157096]],[[194943,194943],"mapped",[32880]],[[194944,194944],"mapped",[144223]],[[194945,194945],"mapped",[17365]],[[194946,194946],"mapped",[32946]],[[194947,194947],"mapped",[33027]],[[194948,194948],"mapped",[17419]],[[194949,194949],"mapped",[33086]],[[194950,194950],"mapped",[23221]],[[194951,194951],"mapped",[157607]],[[194952,194952],"mapped",[157621]],[[194953,194953],"mapped",[144275]],[[194954,194954],"mapped",[144284]],[[194955,194955],"mapped",[33281]],[[194956,194956],"mapped",[33284]],[[194957,194957],"mapped",[36766]],[[194958,194958],"mapped",[17515]],[[194959,194959],"mapped",[33425]],[[194960,194960],"mapped",[33419]],[[194961,194961],"mapped",[33437]],[[194962,194962],"mapped",[21171]],[[194963,194963],"mapped",[33457]],[[194964,194964],"mapped",[33459]],[[194965,194965],"mapped",[33469]],[[194966,194966],"mapped",[33510]],[[194967,194967],"mapped",[158524]],[[194968,194968],"mapped",[33509]],[[194969,194969],"mapped",[33565]],[[194970,194970],"mapped",[33635]],[[194971,194971],"mapped",[33709]],[[194972,194972],"mapped",[33571]],[[194973,194973],"mapped",[33725]],[[194974,194974],"mapped",[33767]],[[194975,194975],"mapped",[33879]],[[194976,194976],"mapped",[33619]],[[194977,194977],"mapped",[33738]],[[194978,194978],"mapped",[33740]],[[194979,194979],"mapped",[33756]],[[194980,194980],"mapped",[158774]],[[194981,194981],"mapped",[159083]],[[194982,194982],"mapped",[158933]],[[194983,194983],"mapped",[17707]],[[194984,194984],"mapped",[34033]],[[194985,194985],"mapped",[34035]],[[194986,194986],"mapped",[34070]],[[194987,194987],"mapped",[160714]],[[194988,194988],"mapped",[34148]],[[194989,194989],"mapped",[159532]],[[194990,194990],"mapped",[17757]],[[194991,194991],"mapped",[17761]],[[194992,194992],"mapped",[159665]],[[194993,194993],"mapped",[159954]],[[194994,194994],"mapped",[17771]],[[194995,194995],"mapped",[34384]],[[194996,194996],"mapped",[34396]],[[194997,194997],"mapped",[34407]],[[194998,194998],"mapped",[34409]],[[194999,194999],"mapped",[34473]],[[195000,195000],"mapped",[34440]],[[195001,195001],"mapped",[34574]],[[195002,195002],"mapped",[34530]],[[195003,195003],"mapped",[34681]],[[195004,195004],"mapped",[34600]],[[195005,195005],"mapped",[34667]],[[195006,195006],"mapped",[34694]],[[195007,195007],"disallowed"],[[195008,195008],"mapped",[34785]],[[195009,195009],"mapped",[34817]],[[195010,195010],"mapped",[17913]],[[195011,195011],"mapped",[34912]],[[195012,195012],"mapped",[34915]],[[195013,195013],"mapped",[161383]],[[195014,195014],"mapped",[35031]],[[195015,195015],"mapped",[35038]],[[195016,195016],"mapped",[17973]],[[195017,195017],"mapped",[35066]],[[195018,195018],"mapped",[13499]],[[195019,195019],"mapped",[161966]],[[195020,195020],"mapped",[162150]],[[195021,195021],"mapped",[18110]],[[195022,195022],"mapped",[18119]],[[195023,195023],"mapped",[35488]],[[195024,195024],"mapped",[35565]],[[195025,195025],"mapped",[35722]],[[195026,195026],"mapped",[35925]],[[195027,195027],"mapped",[162984]],[[195028,195028],"mapped",[36011]],[[195029,195029],"mapped",[36033]],[[195030,195030],"mapped",[36123]],[[195031,195031],"mapped",[36215]],[[195032,195032],"mapped",[163631]],[[195033,195033],"mapped",[133124]],[[195034,195034],"mapped",[36299]],[[195035,195035],"mapped",[36284]],[[195036,195036],"mapped",[36336]],[[195037,195037],"mapped",[133342]],[[195038,195038],"mapped",[36564]],[[195039,195039],"mapped",[36664]],[[195040,195040],"mapped",[165330]],[[195041,195041],"mapped",[165357]],[[195042,195042],"mapped",[37012]],[[195043,195043],"mapped",[37105]],[[195044,195044],"mapped",[37137]],[[195045,195045],"mapped",[165678]],[[195046,195046],"mapped",[37147]],[[195047,195047],"mapped",[37432]],[[195048,195048],"mapped",[37591]],[[195049,195049],"mapped",[37592]],[[195050,195050],"mapped",[37500]],[[195051,195051],"mapped",[37881]],[[195052,195052],"mapped",[37909]],[[195053,195053],"mapped",[166906]],[[195054,195054],"mapped",[38283]],[[195055,195055],"mapped",[18837]],[[195056,195056],"mapped",[38327]],[[195057,195057],"mapped",[167287]],[[195058,195058],"mapped",[18918]],[[195059,195059],"mapped",[38595]],[[195060,195060],"mapped",[23986]],[[195061,195061],"mapped",[38691]],[[195062,195062],"mapped",[168261]],[[195063,195063],"mapped",[168474]],[[195064,195064],"mapped",[19054]],[[195065,195065],"mapped",[19062]],[[195066,195066],"mapped",[38880]],[[195067,195067],"mapped",[168970]],[[195068,195068],"mapped",[19122]],[[195069,195069],"mapped",[169110]],[[195070,195071],"mapped",[38923]],[[195072,195072],"mapped",[38953]],[[195073,195073],"mapped",[169398]],[[195074,195074],"mapped",[39138]],[[195075,195075],"mapped",[19251]],[[195076,195076],"mapped",[39209]],[[195077,195077],"mapped",[39335]],[[195078,195078],"mapped",[39362]],[[195079,195079],"mapped",[39422]],[[195080,195080],"mapped",[19406]],[[195081,195081],"mapped",[170800]],[[195082,195082],"mapped",[39698]],[[195083,195083],"mapped",[40000]],[[195084,195084],"mapped",[40189]],[[195085,195085],"mapped",[19662]],[[195086,195086],"mapped",[19693]],[[195087,195087],"mapped",[40295]],[[195088,195088],"mapped",[172238]],[[195089,195089],"mapped",[19704]],[[195090,195090],"mapped",[172293]],[[195091,195091],"mapped",[172558]],[[195092,195092],"mapped",[172689]],[[195093,195093],"mapped",[40635]],[[195094,195094],"mapped",[19798]],[[195095,195095],"mapped",[40697]],[[195096,195096],"mapped",[40702]],[[195097,195097],"mapped",[40709]],[[195098,195098],"mapped",[40719]],[[195099,195099],"mapped",[40726]],[[195100,195100],"mapped",[40763]],[[195101,195101],"mapped",[173568]],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918000,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]]'); - /***/ }) /******/ }); @@ -9765,7 +2901,7 @@ module.exports = JSON.parse('[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"] /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module is referenced by other modules so it can't be inlined -/******/ var __webpack_exports__ = __nccwpck_require__(7717); +/******/ var __webpack_exports__ = __nccwpck_require__(717); /******/ module.exports = __webpack_exports__; /******/ /******/ })() diff --git a/.github/libs/promiseWhile.ts b/.github/libs/promiseWhile.ts index 7e15b6d69009..2fc53c34fec3 100644 --- a/.github/libs/promiseWhile.ts +++ b/.github/libs/promiseWhile.ts @@ -30,9 +30,14 @@ function promiseDoWhile(condition: () => boolean, action: (() => Promise) console.info('[promiseWhile] promiseDoWhile() condition', condition); const actionResult = action?.(); console.info('[promiseWhile] promiseDoWhile() actionResult', actionResult); + if (!actionResult) { + resolve(); + return; + } + actionResult - ?.then(() => promiseWhile(condition, action)) - .then(() => resolve()) + .then(() => promiseWhile(condition, action)) + .then(resolve) .catch(reject); }); } diff --git a/.github/workflows/platformDeploy.yml b/.github/workflows/platformDeploy.yml index 91e244a0ed7c..d97ea2b86269 100644 --- a/.github/workflows/platformDeploy.yml +++ b/.github/workflows/platformDeploy.yml @@ -134,7 +134,7 @@ jobs: name: Build and deploy Desktop needs: validateActor if: ${{ fromJSON(needs.validateActor.outputs.IS_DEPLOYER) }} - runs-on: macos-12-xl + runs-on: macos-13-large steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/reassurePerformanceTests.yml b/.github/workflows/reassurePerformanceTests.yml index 98f876fd60e2..a695c0acf942 100644 --- a/.github/workflows/reassurePerformanceTests.yml +++ b/.github/workflows/reassurePerformanceTests.yml @@ -1,9 +1,6 @@ name: Reassure Performance Tests on: - push: - branches: [main] - paths-ignore: [docs/**, contributingGuides/**, jest/**, workflow_tests/**] pull_request: types: [opened, synchronize] branches-ignore: [staging, production] @@ -64,14 +61,3 @@ jobs: with: DURATION_DEVIATION_PERCENTAGE: 20 COUNT_DEVIATION: 0 - - - name: Get and save graphite string - # run only when merged to main - if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'main' - id: saveGraphiteString - uses: ./.github/actions/javascript/getGraphiteString - - - name: Send graphite data - # run only when merged to main - if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'main' - run: echo -e "${{ steps.saveGraphiteString.outputs.GRAPHITE_STRING }}" | nc -q0 stats.expensify.com 3003 diff --git a/.github/workflows/sendReassurePerfData.yml b/.github/workflows/sendReassurePerfData.yml new file mode 100644 index 000000000000..53b3d3374a9e --- /dev/null +++ b/.github/workflows/sendReassurePerfData.yml @@ -0,0 +1,43 @@ +name: Send Reassure Performance Tests to Graphite + +on: + push: + branches: [main] + paths-ignore: [docs/**, contributingGuides/**, jest/**, workflow_tests/**] + +jobs: + perf-tests: + if: ${{ github.actor != 'OSBotify' }} + runs-on: ubuntu-latest-reassure-tests + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup NodeJS + uses: ./.github/actions/composite/setupNode + + - name: Install dependencies + run: npm install + + - name: Run performance testing script + shell: bash + run: | + set -e + npx reassure --baseline + + - name: Get merged pull request + id: getMergedPullRequest + uses: actions-ecosystem/action-get-merged-pull-request@59afe90821bb0b555082ce8ff1e36b03f91553d9 + with: + github_token: ${{ github.token }} + + - name: Get and save graphite string + id: saveGraphiteString + uses: ./.github/actions/javascript/getGraphiteString + with: + PR_NUMBER: ${{ steps.getMergedPullRequest.outputs.number }} + + - name: Send graphite data + run: echo -e "${{ steps.saveGraphiteString.outputs.GRAPHITE_STRING }}" | nc -q0 stats.expensify.com 3003 diff --git a/.github/workflows/testBuild.yml b/.github/workflows/testBuild.yml index fc9e75e626d3..fe6ea5bfc016 100644 --- a/.github/workflows/testBuild.yml +++ b/.github/workflows/testBuild.yml @@ -228,7 +228,7 @@ jobs: if: ${{ fromJSON(needs.validateActor.outputs.READY_TO_BUILD) }} env: PULL_REQUEST_NUMBER: ${{ github.event.number || github.event.inputs.PULL_REQUEST_NUMBER }} - runs-on: macos-12-xl + runs-on: macos-13-large steps: - name: Checkout uses: actions/checkout@v4 diff --git a/android/app/build.gradle b/android/app/build.gradle index 098f8d5fc224..da32fc9cfe36 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -98,8 +98,8 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion multiDexEnabled rootProject.ext.multiDexEnabled - versionCode 1001046007 - versionName "1.4.60-7" + versionCode 1001046105 + versionName "1.4.61-5" } flavorDimensions "default" diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro index f393ff66bc25..6d6406551cdd 100644 --- a/android/app/proguard-rules.pro +++ b/android/app/proguard-rules.pro @@ -9,6 +9,7 @@ # Add any project specific keep options here: -keep class com.expensify.chat.BuildConfig { *; } +-keep class com.facebook.** { *; } -keep, allowoptimization, allowobfuscation class expo.modules.** { *; } # Keep generic signature of Call, Response (R8 full mode strips signatures from non-kept items). diff --git a/android/gradle.properties b/android/gradle.properties index c77d6b16f1b3..139ba429360b 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -32,12 +32,13 @@ AsyncStorage_useNextStorage=true # You can also override it from the CLI using # ./gradlew -PreactNativeArchitectures=x86_64 reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 + # Use this property to enable support to the new architecture. # This will allow you to use TurboModules and the Fabric render in # your application. You should enable this flag either if you want # to write custom TurboModules/Fabric components OR use libraries that # are providing them. -newArchEnabled=false +newArchEnabled=true # Use this property to enable or disable the Hermes JS engine. # If set to false, you will be using JSC instead. diff --git a/android/settings.gradle b/android/settings.gradle index 40aefc6f2405..eb5a98a85cdd 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -16,6 +16,14 @@ project(':react-native-dev-menu').projectDir = new File(rootProject.projectDir, apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' includeBuild('../node_modules/@react-native/gradle-plugin') +includeBuild('../node_modules/react-native') { + dependencySubstitution { + substitute(module("com.facebook.react:react-android")).using(project(":packages:react-native:ReactAndroid")) + substitute(module("com.facebook.react:react-native")).using(project(":packages:react-native:ReactAndroid")) + substitute(module("com.facebook.react:hermes-android")).using(project(":packages:react-native:ReactAndroid:hermes-engine")) + substitute(module("com.facebook.react:hermes-engine")).using(project(":packages:react-native:ReactAndroid:hermes-engine")) + } +} apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle") useExpoModules() diff --git a/assets/images/avatars/fallback-avatar.svg b/assets/images/avatars/fallback-avatar.svg index b4584d910190..69293d72aed9 100644 --- a/assets/images/avatars/fallback-avatar.svg +++ b/assets/images/avatars/fallback-avatar.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + diff --git a/assets/images/integrationicons/qbo-icon-square.svg b/assets/images/integrationicons/qbo-icon-square.svg new file mode 100644 index 000000000000..a8ce3468ffbf --- /dev/null +++ b/assets/images/integrationicons/qbo-icon-square.svg @@ -0,0 +1,14 @@ + + + + + + + diff --git a/assets/images/integrationicons/xero-icon-square.svg b/assets/images/integrationicons/xero-icon-square.svg new file mode 100644 index 000000000000..94b79bb3533d --- /dev/null +++ b/assets/images/integrationicons/xero-icon-square.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + diff --git a/assets/images/simple-illustrations/simple-illustration__teachers-unite.svg b/assets/images/simple-illustrations/simple-illustration__teachers-unite.svg new file mode 100644 index 000000000000..b4edd9513722 --- /dev/null +++ b/assets/images/simple-illustrations/simple-illustration__teachers-unite.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_data/_routes.yml b/docs/_data/_routes.yml index b608e9cd02bd..20de9415bcd6 100644 --- a/docs/_data/_routes.yml +++ b/docs/_data/_routes.yml @@ -17,73 +17,74 @@ platforms: - href: getting-started title: Getting Started icon: /assets/images/accounting.svg - description: From setting up your account to ensuring you get the most out of Expensify’s suite of features, click here to get started on streamlining your expense management journey. - - - href: settings - title: Settings - icon: /assets/images/gears.svg - description: Discover how to personalize your profile, add secondary logins, and grant delegated access to employees with our comprehensive guide on Account Settings. + description: Set up your account to optimize Expensify's features. - - href: bank-accounts-and-credit-cards - title: Bank Accounts & Credit Cards - icon: /assets/images/bank-card.svg - description: Find out how to connect Expensify to your financial institutions, track credit card transactions, and best practices for reconciling company cards. + - href: workspaces + title: Workspaces + icon: /assets/images/shield.svg + description: Configure rules, settings, and limits for your company’s spending. - - href: expensify-billing - title: Expensify Billing - icon: /assets/images/subscription-annual.svg - description: Review Expensify's subscription options, plan types, and payment methods. + - href: expenses + title: Expenses + icon: /assets/images/money-into-wallet.svg + description: Learn more about expense tracking and submission. - href: reports title: Reports icon: /assets/images/money-receipt.svg description: Set approval workflows and use Expensify’s automated report features. + - href: domains + title: Domains + icon: /assets/images/domains.svg + description: Claim and verify your company’s domain to access additional management and security features. + + - href: bank-accounts-and-payments + title: Bank Accounts & Payments + icon: /assets/images/send-money.svg + description: Send direct reimbursements, pay invoices, and receive payment. + + - href: connect-credit-cards + title: Connect Credit Cards + icon: /assets/images/bank-card.svg + description: Track credit card transactions and reconcile company cards. + - href: expensify-card title: Expensify Card icon: /assets/images/hand-card.svg - description: Explore how the Expensify Card combines convenience and security to enhance everyday business transactions. Discover how to apply for, oversee, and maximize your card perks here. + description: Explore the perks and benefits of the Expensify Card. + + - href: copilots-and-delegates + title: Copilots & Delegates + icon: /assets/images/envelope-receipt.svg + description: Assign Copilots and delegate report approvals. - href: expensify-partner-program title: Expensify Partner Program icon: /assets/images/handshake.svg - description: Discover how to get the most out of Expensify as an ExpensifyApproved! accountant partner. Learn how to set up your clients, receive CPE credits, and take advantage of your partner discount. - - - href: expenses - title: Expenses - icon: /assets/images/money-into-wallet.svg - description: Learn more about expense tracking and submission. - - - href: insights-and-custom-reporting - title: Insights & Custom Reporting - icon: /assets/images/monitor.svg - description: From exporting reports to creating custom templates, here is where you can learn more about Expensify's versatile export options. + description: Discover the benefits of becoming an Expensify Partner. - href: integrations title: Integrations icon: /assets/images/workflow.svg - description: Enhance Expensify’s capabilities by integrating it with your accounting or HR software. Here is where you can learn more about creating a synchronized financial management ecosystem. + description: Integrate with accounting or HR software to streamline expense approvals. - - href: copilots-and-delegates - title: Copilots & Delegates - icon: /assets/images/envelope-receipt.svg - description: Assign Copilots and delegate report approvals. - - - href: send-payments - title: Send Payments - icon: /assets/images/send-money.svg - description: Uncover step-by-step guidance on sending direct reimbursements to employees, paying an invoice to a vendor, and utilizing third-party payment options. - - - href: workspaces - title: Workspaces - icon: /assets/images/shield.svg - description: Configure rules, settings, and limits for your company’s spending. + - href: spending-insights + title: Spending Insights + icon: /assets/images/monitor.svg + description: Create custom export templates to understand spending insights. - - href: domains - title: Domains - icon: /assets/images/domains.svg - description: Claim and verify your company’s domain to access additional management and security features. - + - href: settings + title: Settings + icon: /assets/images/gears.svg + description: Manage profile settings and notifications. + + - href: expensify-billing + title: Expensify Billing + icon: /assets/images/subscription-annual.svg + description: Review Expensify's subscription options, plan types, and payment methods. + + - href: new-expensify title: New Expensify hub-title: New Expensify - Help & Resources diff --git a/docs/articles/expensify-classic/send-payments/Pay-Bills.md b/docs/articles/expensify-classic/bank-accounts-and-payments/Pay-Bills.md similarity index 100% rename from docs/articles/expensify-classic/send-payments/Pay-Bills.md rename to docs/articles/expensify-classic/bank-accounts-and-payments/Pay-Bills.md diff --git a/docs/articles/expensify-classic/send-payments/Reimbursing-Reports.md b/docs/articles/expensify-classic/bank-accounts-and-payments/Reimbursing-Reports.md similarity index 100% rename from docs/articles/expensify-classic/send-payments/Reimbursing-Reports.md rename to docs/articles/expensify-classic/bank-accounts-and-payments/Reimbursing-Reports.md diff --git a/docs/articles/expensify-classic/send-payments/Third-Party-Payments.md b/docs/articles/expensify-classic/bank-accounts-and-payments/Third-Party-Payments.md similarity index 100% rename from docs/articles/expensify-classic/send-payments/Third-Party-Payments.md rename to docs/articles/expensify-classic/bank-accounts-and-payments/Third-Party-Payments.md diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/Global-Reimbursements.md b/docs/articles/expensify-classic/connect-credit-cards/Global-Reimbursements.md similarity index 100% rename from docs/articles/expensify-classic/bank-accounts-and-credit-cards/Global-Reimbursements.md rename to docs/articles/expensify-classic/connect-credit-cards/Global-Reimbursements.md diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/Personal-Credit-Cards.md b/docs/articles/expensify-classic/connect-credit-cards/Personal-Credit-Cards.md similarity index 100% rename from docs/articles/expensify-classic/bank-accounts-and-credit-cards/Personal-Credit-Cards.md rename to docs/articles/expensify-classic/connect-credit-cards/Personal-Credit-Cards.md diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/business-bank-accounts/Business-Bank-Accounts-AUD.md b/docs/articles/expensify-classic/connect-credit-cards/business-bank-accounts/Business-Bank-Accounts-AUD.md similarity index 100% rename from docs/articles/expensify-classic/bank-accounts-and-credit-cards/business-bank-accounts/Business-Bank-Accounts-AUD.md rename to docs/articles/expensify-classic/connect-credit-cards/business-bank-accounts/Business-Bank-Accounts-AUD.md diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/business-bank-accounts/Business-Bank-Accounts-USD.md b/docs/articles/expensify-classic/connect-credit-cards/business-bank-accounts/Business-Bank-Accounts-USD.md similarity index 100% rename from docs/articles/expensify-classic/bank-accounts-and-credit-cards/business-bank-accounts/Business-Bank-Accounts-USD.md rename to docs/articles/expensify-classic/connect-credit-cards/business-bank-accounts/Business-Bank-Accounts-USD.md diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/CSV-Import.md b/docs/articles/expensify-classic/connect-credit-cards/company-cards/CSV-Import.md similarity index 100% rename from docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/CSV-Import.md rename to docs/articles/expensify-classic/connect-credit-cards/company-cards/CSV-Import.md diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Commercial-Card-Feeds.md b/docs/articles/expensify-classic/connect-credit-cards/company-cards/Commercial-Card-Feeds.md similarity index 100% rename from docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Commercial-Card-Feeds.md rename to docs/articles/expensify-classic/connect-credit-cards/company-cards/Commercial-Card-Feeds.md diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Company-Card-Settings.md b/docs/articles/expensify-classic/connect-credit-cards/company-cards/Company-Card-Settings.md similarity index 100% rename from docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Company-Card-Settings.md rename to docs/articles/expensify-classic/connect-credit-cards/company-cards/Company-Card-Settings.md diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Connect-ANZ.md b/docs/articles/expensify-classic/connect-credit-cards/company-cards/Connect-ANZ.md similarity index 100% rename from docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Connect-ANZ.md rename to docs/articles/expensify-classic/connect-credit-cards/company-cards/Connect-ANZ.md diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Direct-Bank-Connections.md b/docs/articles/expensify-classic/connect-credit-cards/company-cards/Direct-Bank-Connections.md similarity index 100% rename from docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Direct-Bank-Connections.md rename to docs/articles/expensify-classic/connect-credit-cards/company-cards/Direct-Bank-Connections.md diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Reconciliation.md b/docs/articles/expensify-classic/connect-credit-cards/company-cards/Reconciliation.md similarity index 100% rename from docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Reconciliation.md rename to docs/articles/expensify-classic/connect-credit-cards/company-cards/Reconciliation.md diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Troubleshooting.md b/docs/articles/expensify-classic/connect-credit-cards/company-cards/Troubleshooting.md similarity index 100% rename from docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Troubleshooting.md rename to docs/articles/expensify-classic/connect-credit-cards/company-cards/Troubleshooting.md diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/deposit-accounts/Deposit-Accounts-AUD.md b/docs/articles/expensify-classic/connect-credit-cards/deposit-accounts/Deposit-Accounts-AUD.md similarity index 100% rename from docs/articles/expensify-classic/bank-accounts-and-credit-cards/deposit-accounts/Deposit-Accounts-AUD.md rename to docs/articles/expensify-classic/connect-credit-cards/deposit-accounts/Deposit-Accounts-AUD.md diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/deposit-accounts/Deposit-Accounts-USD.md b/docs/articles/expensify-classic/connect-credit-cards/deposit-accounts/Deposit-Accounts-USD.md similarity index 100% rename from docs/articles/expensify-classic/bank-accounts-and-credit-cards/deposit-accounts/Deposit-Accounts-USD.md rename to docs/articles/expensify-classic/connect-credit-cards/deposit-accounts/Deposit-Accounts-USD.md diff --git a/docs/articles/expensify-classic/workspaces/SAML-SSO.md b/docs/articles/expensify-classic/domains/SAML-SSO.md similarity index 100% rename from docs/articles/expensify-classic/workspaces/SAML-SSO.md rename to docs/articles/expensify-classic/domains/SAML-SSO.md diff --git a/docs/articles/expensify-classic/reports/Expense-Rules.md b/docs/articles/expensify-classic/expenses/Expense-Rules.md similarity index 100% rename from docs/articles/expensify-classic/reports/Expense-Rules.md rename to docs/articles/expensify-classic/expenses/Expense-Rules.md diff --git a/docs/articles/expensify-classic/reports/Expense-Types.md b/docs/articles/expensify-classic/expenses/Expense-Types.md similarity index 100% rename from docs/articles/expensify-classic/reports/Expense-Types.md rename to docs/articles/expensify-classic/expenses/Expense-Types.md diff --git a/docs/articles/expensify-classic/reports/The-Expenses-Page.md b/docs/articles/expensify-classic/expenses/The-Expenses-Page.md similarity index 100% rename from docs/articles/expensify-classic/reports/The-Expenses-Page.md rename to docs/articles/expensify-classic/expenses/The-Expenses-Page.md diff --git a/docs/articles/expensify-classic/expensify-billing/Annual-Subscription.md b/docs/articles/expensify-classic/expensify-billing/Annual-Subscription.md deleted file mode 100644 index 67a96610633d..000000000000 --- a/docs/articles/expensify-classic/expensify-billing/Annual-Subscription.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Annual Subscription -description: Learn more about managing your Annual Subscription. ---- -# Overview -An Annual Subscription offers a 50% cost savings on active user pricing while allowing your company to manage multiple Workspaces across your organization and maintain predictable cost for your Expensify activity. - -_For pricing details, see [expensify.com/pricing](http://www.expensify.com/pricing), and find more ways to save with the Expensify Card here._ - -# How to set subscription size -When you first create a subscription, the best practice is to set your subscription size by entering the average number of active users you expect to have each month for the next year. For example, if you expect to have an average of 10 users each month, even if they are not always the same users, set your subscription size to 10. No need to provision and deprovision access to your team, so you still enjoy flexible usage across the entire company! - -If your Workspaces have more than 10 active users in a month, you will pay the unbundled Pay-per-use rate for the additional users. If you’d like to avoid this, you can enable Auto Increase so your subscription size increases based on Workspace user activity. - -An ‘Active User’ is anyone who chats, creates, submits, approves, reimburses, or exports a report in Expensify. This includes actions taken by Copilots and any automated settings. - -To set your subscription size, go to **Settings > Workspaces > Groups > Subscription**. - -If you do not set a specific subscription size, this will be automatically updated based on your past activity: - -* If you’ve never had activity in Expensify, your subscription size will be set after your first month. Work with your Setup Specialist or Account Manager to determine the best subscription size for your team! - -* For existing Workspaces switching to an Annual Subscription, the subscription size is set to the number of active users on your last month’s billing history. - -* If Auto Increase is not selected, and you have more active users than you’ve input as the subscription size, you will be billed for those at the Pay-per-use rate. - -# How to adjust subscription size -You can add users to your subscription at any time. However, note that when your subscription size is increased, you will start a new 12-month subscription at that new subscription size. - -You can increase your subscription size manually or automatically. - -* To manually increase the size, just update the number in your subscription settings (**Settings > Workspaces > Groups > Subscription**). - -* To automatically increase your subscription size, enable **Auto Increase**. This feature manages your subscription by automatically increasing the count whenever there is activity that exceeds your subscription size. (**Settings > Workspaces > Groups > Subscription**) - -Note: After increasing your subscription size, you won't be able to decrease it for the next 12 months. If your active user numbers tend to fluctuate, you might want to keep this feature disabled. This way, you'll only pay for additional active users in the months they are active. Keep in mind that increasing the subscription size will reset your 12-month subscription period. - -# How to disable Auto Renew -By default, your subscription is set to automatically renew after a year. To disable this, click the toggle from your subscription settings before the current subscription ends. (**Settings > Workspaces > Groups > Subscription**) - -If Auto Renew is disabled, then the last bill at the annual rate will be issued on the date listed under the Auto Renew settings. For example, if your subscription expires on March 1, 2021, then February 2021 will be the last month billed at the annual rate. If you do not set a new subscription, March activity will be billed at the Pay-per-use rate. - -We recommend that you review your user count annually on a proactive basis. Set a reminder to review your active user numbers a month before your subscription expires! If you’d like assistance determining your subscription number, please contact your Account Manager or concierge@expensify.com. - -If you need to decrease your subscription size, you can do this in the first billing month before you are billed. Using the example above, this would be during March 2021. diff --git a/docs/articles/expensify-classic/expensify-billing/Billing-Owner.md b/docs/articles/expensify-classic/expensify-billing/Billing-Owner.md deleted file mode 100644 index 49a369c3cb51..000000000000 --- a/docs/articles/expensify-classic/expensify-billing/Billing-Owner.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Billing-Owner -description: The Billing Owner is the person responsible for payment for all usage on a given Workspace ---- -# Overview -In Expensify, each Workspace has a Billing Owner. The Billing Owner is the person responsible for payment for all usage on a given Workspace. The Billing Owner is also a Workspace Admin, but it’s important to note that not all Workspace Admins are Billing Owners. -# How to set a billing owner -If you've just created a new Group Workspace, you first need to add a payment card to your account. You can do this by going to the web app's Home page and completing the payment card task. Alternatively, you can add a payment card directly from the Payments page (**Settings > Account > Payment**). -- If you already own a Group Workspace subscription, you can edit your payment card details or manage subscription options within the web app under **Settings > Workspaces > Group > Subscription**. -- If you're an individual Workspace owner, you can activate a new monthly subscription in the web app by going to **Settings > Workspaces > Individual > Subscription** section. -# How to change the Billing Owner -A Group Workspace's Billing Owner is typically the user who initially created the Workspace. However, any Workspace Admin can take over the role of Billing Owner by choosing to "Take Over Billing." -Any Workspace Admin can take over the billing responsibility of a Group Workspace as long as they are already a member of that Workspace. If you wish to become the Billing Owner of a Workspace you're not currently a member of, you need to contact an existing Workspace Admin and ask them to add you to the Group Workspace. -To take over billing: -1. Go to **Settings > Workspaces > Group**. -1. Click on the relevant Workspace name. -1. Click on "Take Over Billing." If you haven't added a payment card to your settings yet, you'll be prompted to do so to complete the transfer. - -That's it! As the new Billing Owner, you will receive a monthly email receipt for the Group Workspaces you now own. -# How to update payment details in Expensify -If you're a policy billing owner, you can change your payment information like your payment card and billing currency. If you are a billing owner using the Expensify Card, your monthly company policy charges will be billed to your Expensify Card. - -To change your payment details: -1. Log in to your account using a web browser or Android app (not available on iOS). -1. Go to **Settings > Account > Payments**. -1. To change your payment card, click "Change Payment Card" in the Payment Details section. -1. To change your billing currency, click "Change Billing Currency" and choose a new currency. You'll need to enter the CVC code of your payment card. You can pay in USD, GBP, NZD, or AUD. -# Deep Dive -## Taking over an existing subscription -If the previous Billing Owner had a 12-month subscription, it will be transferred to your Expensify account. If you already have an annual subscription, the sizes of both subscriptions will be combined. For example, if you have a subscription for 10 users and take over from someone with 50 users, your subscription will now cover 60 users. To take over the Annual Subscription, you need to transfer billing ownership of all Workspaces under the previous Billing Owner's name. - -## Taking over Consolidated Domain Billing -If a Domain Admin has enabled Consolidated Domain Billing (**Settings > Domains > Domain Name > Domain Admins**), all Group Workspaces owned by users with email addresses matching the domain will be billed to the Consolidated Domain Billing owner. You can take over billing for the entire domain by following these steps: - -To take over billing for the entire domain, you must: -1. Ensure you have a linked card on your **Settings > Account > Billing** page. -1. Be designated as the Primary Domain Admin. -1. Go to **Settings > Domains > _Domain Name_ > Domain Admins** and enable Consolidated Domain Billing. - -Currently, Consolidated Domain Billing simply consolidates the amounts due for each Group Workspace Billing Owner (listed on the **Settings > Workspaces > Group** page). If you want to use the Annual Subscription across all Workspaces on the domain, you must also be the Billing Owner of all Group Workspaces. -{% include faq-begin.md %} -## Why can't I see the option to take over billing? -There could be two reasons: -1. You may not have the role of Workspace Admin. If you can't click on the Workspace name (if it's not a blue hyperlink), you're not a Workspace Admin. Another Workspace Admin for that Workspace must change your role before you can proceed. -1. Your domain might have Consolidated Domain Billing enabled. Refer to the Deep Dive section to understand how to take over Consolidated Domain Billing. -## What if the current Billing Owner is no longer an employee? -There are two ways to resolve this: -1. Have your IT dept. gain access to the account so that you can make yourself an admin. Your IT department may need to recreate the ex-employee's email address. Once your IT department has access to the employee's Home page, you can request a magic link to be sent to that email address to gain access to the account. -1. Have another admin make you a Workspace admin. - -{% include faq-end.md %} diff --git a/docs/articles/expensify-classic/expensify-billing/Individual-Subscription.md b/docs/articles/expensify-classic/expensify-billing/Individual-Subscription.md deleted file mode 100644 index 1d952cb15b1c..000000000000 --- a/docs/articles/expensify-classic/expensify-billing/Individual-Subscription.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Individual Subscription -description: Learn more about managing an Individual Subscription. ---- -# Overview -An Individual Subscription is a great option for solo entrepreneurs or anyone who needs to track their own expenses or get paid by someone outside their own organization. -A free Individual Subscription includes: -- Up to 25 SmartScans/month -- Expense tracking -- Mileage tracking -- Invoicing -- Bill splitting -- Receive & send money - -To get unlimited SmartScans, you can upgrade your Individual Subscription for $4.99 (USD per month. - - -# How to sign up for an Individual Subscription -## Website -To activate an Individual Subscription from the web: -1. Log into your Expensify account -2. Navigate to **Settings > Workspaces > Individual** -3. Click **Activate Subscription** under **Monthly** -4. If you don't already have a billing card associated with your account, you will be prompted to add one - -Once payment is complete, you’re all set! - -## Mobile App: -1. Tap **Settings** -2. Under the Workspaces section, select **Free Trial** -3. Select **Upgrade** -4.Tap **Subscription** to upgrade your account - - -# How to manage the subscription -## Web and Android: -When you buy a subscription on the web or through an Android device, you'll be asked to enter your billing information immediately. After the purchase, you can easily view or cancel your subscription anytime by going to **Settings > Workspaces > Individual > Subscription > Show Details**. - -## iOS: -If you purchase a monthly subscription on an iOS device, it will be managed, including cancellations, through the App Store rather than within the Expensify app. You can learn how to manage App Store Subscriptions here. - -After purchasing the subscription from the App Store, remember to sync your app by: -1. Log into the Expensify mobile app -2. Click the three bars in the upper left corner -3. Scroll to **Settings** -4. Select **Sync Account** - -The subscription renewal date is the same as the purchase date. For instance, if you sign up for the subscription on September 7th, it will renew automatically on October 7th. You can cancel your subscription anytime during the month if you no longer need unlimited SmartScans. If you do cancel, keep in mind that your subscription (and your ability to SmartScan) will continue until the last day of the billing cycle. - - -{% include faq-begin.md %} -## Can I use an Individual Subscription while on a Collect or Control Plan? -You can! If you want to track expenses separately from your organization’s Workspace, you can sign up for an Individual Subscription. However, only Submit and Track Workspace plans are available when on an Individual Subscription. Collect and Control Workspace plans require an annual or pay-per-use subscription. For more information, visit expensify.com/pricing. - -## Can I cancel an Individual Subscription anytime? -Yep! You can cancel an Individual Subscription anytime. - -## How do I cancel my subscription? -Follow the steps below to cancel a Monthly Subscription started via the website or Android app: -1. Log into your account using your preferred web browser (ex: Firefox, Chrome, Safari) -2. Navigate to **Settings > Workspace > Individual > Subscriptions** -3. Click the **Cancel Subscription** button to cancel your Monthly Subscription - -Your subscription is a pre-purchase for 30 days of unlimited SmartScanning. This means when you cancel you do not get a refund and instead get to use the remainder of the month of unlimited SmartScanning you purchased. - -## How can I cancel my subscription from the iOS app? -If you signed up for the Monthly Subscription via iOS and your iTunes account, you will need to log into iTunes and locate the subscription there in order to cancel it. The ability to cancel an Expensify subscription started via iOS is strictly limited to your iTunes account. - -{% include faq-end.md %} diff --git a/docs/articles/expensify-classic/expensify-billing/Pay-Per-Use-Subscription.md b/docs/articles/expensify-classic/expensify-billing/Pay-Per-Use-Subscription.md deleted file mode 100644 index fac605ada1bd..000000000000 --- a/docs/articles/expensify-classic/expensify-billing/Pay-Per-Use-Subscription.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Pay-per-use Subscription -description: Learn more about your pay-per-use subscription. ---- -# Overview -Pay-per-use is a billing option for people who prefer to use Expensify month to month or on an as-needed basis. On a pay-per-use subscription, you will only pay for active users in that given month. - -**We recommend this billing setup for companies that use Expensify a few months out of the year**. If you have expenses to manage for more than 6 out of 12 months, an [**Annual Subscription**](https://help.expensify.com/articles/expensify-classic/expensify-billing/Annual-Subscription) may better suit your needs. - -# How to start a pay-per-use subscription -1. Create a Group Workspace if you haven’t already by going to **Settings > Workspaces > Group > New Workspace** -2. Once you’ve created your Workspace, under the “Subscription” section on the Group Workspace page, select “Pay-per-use”. - -{% include faq-begin.md %} - -## What is considered an active user? -An active user is anyone who chats, creates, modifies, submits, approves, reimburses, or exports a report in Expensify. This includes actions taken by a Copilot and Workspace automation (such as Scheduled Submit and automated reimbursement). If no one on your Group Workspace uses Expensify in a given month, you will not be billed for that month. - -You can review the number of Active Users by selecting “View Activity” next to your billing receipt (**Settings > Account > Payments > Billing History**). - -## Why do I have pay-per-use users in addition to my Annual Subscription on my Expensify bill? -If you have an Annual Subscription, but go above your set user count, we will charge at the pay-per-use rate for these ad-hoc users. - -If you expect to have an increased number of users for more than 3 out of 12 months, the most cost-effective approach is to increase your Annual Subscription size. - -## Will billing only be in USD currency? -While USD is the default billing currency, we also have GBP, AUD, and NZD billing currencies. You can see the rates on our [pricing](https://www.expensify.com/pricing) page. - -{% include faq-end.md %} diff --git a/docs/articles/expensify-classic/insights-and-custom-reporting/Custom-Templates.md b/docs/articles/expensify-classic/spending-insights/Custom-Templates.md similarity index 100% rename from docs/articles/expensify-classic/insights-and-custom-reporting/Custom-Templates.md rename to docs/articles/expensify-classic/spending-insights/Custom-Templates.md diff --git a/docs/articles/expensify-classic/insights-and-custom-reporting/Default-Export-Templates.md b/docs/articles/expensify-classic/spending-insights/Default-Export-Templates.md similarity index 100% rename from docs/articles/expensify-classic/insights-and-custom-reporting/Default-Export-Templates.md rename to docs/articles/expensify-classic/spending-insights/Default-Export-Templates.md diff --git a/docs/articles/expensify-classic/insights-and-custom-reporting/Fringe-Benefits.md b/docs/articles/expensify-classic/spending-insights/Fringe-Benefits.md similarity index 100% rename from docs/articles/expensify-classic/insights-and-custom-reporting/Fringe-Benefits.md rename to docs/articles/expensify-classic/spending-insights/Fringe-Benefits.md diff --git a/docs/articles/expensify-classic/insights-and-custom-reporting/Insights.md b/docs/articles/expensify-classic/spending-insights/Insights.md similarity index 100% rename from docs/articles/expensify-classic/insights-and-custom-reporting/Insights.md rename to docs/articles/expensify-classic/spending-insights/Insights.md diff --git a/docs/articles/expensify-classic/insights-and-custom-reporting/Other-Export-Options.md b/docs/articles/expensify-classic/spending-insights/Other-Export-Options.md similarity index 100% rename from docs/articles/expensify-classic/insights-and-custom-reporting/Other-Export-Options.md rename to docs/articles/expensify-classic/spending-insights/Other-Export-Options.md diff --git a/docs/articles/expensify-classic/reports/Currency.md b/docs/articles/expensify-classic/workspaces/Currency.md similarity index 100% rename from docs/articles/expensify-classic/reports/Currency.md rename to docs/articles/expensify-classic/workspaces/Currency.md diff --git a/docs/articles/new-expensify/bank-accounts-and-payments/Connect-a-Bank-Account.md b/docs/articles/new-expensify/bank-accounts-and-payments/Connect-a-Bank-Account.md index a618c80f98ed..bc0676231544 100644 --- a/docs/articles/new-expensify/bank-accounts-and-payments/Connect-a-Bank-Account.md +++ b/docs/articles/new-expensify/bank-accounts-and-payments/Connect-a-Bank-Account.md @@ -96,7 +96,7 @@ If you need to enable direct debits from your verified bank account, your bank w If using Expensify to process Bill payments, you'll also need to whitelist the ACH IDs from our partner [Stripe](https://support.stripe.com/questions/ach-direct-debit-company-ids-for-stripe?): - The ACH CompanyIDs (1800948598 and 4270465600) -- The ACH Originator Name (Stripe Payments company) +- The ACH Originator Name (expensify.com) If using Expensify to process international reimbursements from your USD bank account, you'll also need to whitelist the ACH IDs from our partner CorPay: - The ACH CompanyIDs (1522304924 and 2522304924) diff --git a/docs/expensify-classic/hubs/bank-accounts-and-credit-cards/index.html b/docs/expensify-classic/hubs/bank-accounts-and-payments/index.html similarity index 56% rename from docs/expensify-classic/hubs/bank-accounts-and-credit-cards/index.html rename to docs/expensify-classic/hubs/bank-accounts-and-payments/index.html index 2f91f0913d6e..22e39250aea4 100644 --- a/docs/expensify-classic/hubs/bank-accounts-and-credit-cards/index.html +++ b/docs/expensify-classic/hubs/bank-accounts-and-payments/index.html @@ -1,6 +1,6 @@ --- layout: default -title: Bank Accounts & Credit Cards +title: Bank accounts & payments --- {% include hub.html %} \ No newline at end of file diff --git a/docs/expensify-classic/hubs/bank-accounts-and-credit-cards/business-bank-accounts.html b/docs/expensify-classic/hubs/connect-credit-cards/business-bank-accounts.html similarity index 100% rename from docs/expensify-classic/hubs/bank-accounts-and-credit-cards/business-bank-accounts.html rename to docs/expensify-classic/hubs/connect-credit-cards/business-bank-accounts.html diff --git a/docs/expensify-classic/hubs/bank-accounts-and-credit-cards/company-cards.html b/docs/expensify-classic/hubs/connect-credit-cards/company-cards.html similarity index 100% rename from docs/expensify-classic/hubs/bank-accounts-and-credit-cards/company-cards.html rename to docs/expensify-classic/hubs/connect-credit-cards/company-cards.html diff --git a/docs/expensify-classic/hubs/bank-accounts-and-credit-cards/deposit-accounts.html b/docs/expensify-classic/hubs/connect-credit-cards/deposit-accounts.html similarity index 100% rename from docs/expensify-classic/hubs/bank-accounts-and-credit-cards/deposit-accounts.html rename to docs/expensify-classic/hubs/connect-credit-cards/deposit-accounts.html diff --git a/docs/expensify-classic/hubs/send-payments/index.html b/docs/expensify-classic/hubs/connect-credit-cards/index.html similarity index 62% rename from docs/expensify-classic/hubs/send-payments/index.html rename to docs/expensify-classic/hubs/connect-credit-cards/index.html index c8275af5c353..e21df799a132 100644 --- a/docs/expensify-classic/hubs/send-payments/index.html +++ b/docs/expensify-classic/hubs/connect-credit-cards/index.html @@ -1,6 +1,6 @@ --- layout: default -title: Send Payments +title: Connect Credit Cards --- {% include hub.html %} \ No newline at end of file diff --git a/docs/expensify-classic/hubs/insights-and-custom-reporting/index.html b/docs/expensify-classic/hubs/spending-insights/index.html similarity index 65% rename from docs/expensify-classic/hubs/insights-and-custom-reporting/index.html rename to docs/expensify-classic/hubs/spending-insights/index.html index 16c96cb51d01..68b302394ff3 100644 --- a/docs/expensify-classic/hubs/insights-and-custom-reporting/index.html +++ b/docs/expensify-classic/hubs/spending-insights/index.html @@ -1,6 +1,6 @@ --- layout: default -title: Exports +title: Spending Insights --- {% include hub.html %} \ No newline at end of file diff --git a/docs/redirects.csv b/docs/redirects.csv index 32fc61642bda..8e9e6350a326 100644 --- a/docs/redirects.csv +++ b/docs/redirects.csv @@ -77,3 +77,28 @@ https://help.expensify.com/articles/expensify-classic/workspace-and-domain-setti https://help.expensify.com/articles/expensify-classic/workspace-and-domain-settings/Reimbursement,https://help.expensify.com/articles/expensify-classic/send-payments/Reimbursing-Reports https://help.expensify.com/articles/expensify-classic/workspace-and-domain-settings/Tags,https://help.expensify.com/articles/expensify-classic/workspaces/Tags https://help.expensify.com/articles/expensify-classic/copilots-and-delegates/User-Roles,https://help.expensify.com/articles/expensify-classic/workspaces/Change-member-workspace-roles +https://help.expensify.com/articles/expensify-classic/workspace-and-domain-settings/tax-tracking,https://help.expensify.com/articles/expensify-classic/expenses/expenses/Apply-Tax +https://help.expensify.com/articles/expensify-classic/copilots-and-delegates/User-Roles.html,https://help.expensify.com/expensify-classic/hubs/copilots-and-delegates/ +https://help.expensify.com/articles/expensify-classic/expensify-billing/Billing-Owner,https://help.expensify.com/articles/expensify-classic/workspaces/Assign-billing-owner-and-payment-account +https://help.expensify.com/articles/expensify-classic/insights-and-custom-reporting/Other-Export-Options.html,https://help.expensify.com/articles/expensify-classic/spending-insights/Other-Export-Options +https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/business-bank-accounts/Business-Bank-Accounts-AUD,https://help.expensify.com/articles/expensify-classic/connect-credit-cards/Global-Reimbursements +https://help.expensify.com/expensify-classic/hubs/bank-accounts-and-credit-cards,https://help.expensify.com/expensify-classic/hubs/ +https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/business-bank-accounts/Business-Bank-Accounts-USD,https://help.expensify.com/articles/expensify-classic/bank-accounts-and-payments/Reimbursing-Reports +https://help.expensify.com/expensify-classic/hubs/bank-accounts-and-credit-cards/company-cards,https://help.expensify.com/expensify-classic/hubs/connect-credit-cards/company-cards +https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/Global-Reimbursements,https://help.expensify.com/articles/expensify-classic/connect-credit-cards/Global-Reimbursements +https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/Personal-Credit-Cards,https://help.expensify.com/articles/expensify-classic/connect-credit-cards/Personal-Credit-Cards +https://help.expensify.com/expensify-classic/hubs/bank-accounts-and-credit-cards/deposit-accounts,https://help.expensify.com/expensify-classic/hubs/connect-credit-cards/deposit-accounts +https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/deposit-accounts/Deposit-Accounts-USD,https://help.expensify.com/articles/expensify-classic/connect-credit-cards/deposit-accounts/Deposit-Accounts-USD +https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/deposit-accounts/Deposit-Accounts-AUD,https://help.expensify.com/articles/expensify-classic/connect-credit-cards/deposit-accounts/Deposit-Accounts-AUD +https://help.expensify.com/expensify-classic/hubs/bank-accounts-and-credit-cards/business-bank-accounts,https://help.expensify.com/expensify-classic/hubs/connect-credit-cards/business-bank-accounts +https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/CSV-Import,https://help.expensify.com/articles/expensify-classic/connect-credit-cards/company-cards/CSV-Import +https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Commercial-Card-Feeds,https://help.expensify.com/articles/expensify-classic/connect-credit-cards/company-cards/Commercial-Card-Feeds +https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Company-Card-Settings,https://help.expensify.com/articles/expensify-classic/connect-credit-cards/company-cards/Company-Card-Settings +https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Connect-ANZ,https://help.expensify.com/articles/expensify-classic/connect-credit-cards/company-cards/Connect-ANZ +https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Direct-Bank-Connections,https://help.expensify.com/articles/expensify-classic/connect-credit-cards/company-cards/Direct-Bank-Connections +https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Reconciliation,https://help.expensify.com/articles/expensify-classic/connect-credit-cards/company-cards/Reconciliation +https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Troubleshooting,https://help.expensify.com/articles/expensify-classic/connect-credit-cards/company-cards/Troubleshooting +https://help.expensify.com/articles/expensify-classic/reports/Expense-Rules,https://help.expensify.com/articles/expensify-classic/expenses/Expense-Rules +https://help.expensify.com/articles/expensify-classic/reports/Currency,https://help.expensify.com/articles/expensify-classic/workspaces/Currency +https://help.expensify.com/articles/expensify-classic/reports/The-Expenses-Page,https://help.expensify.com/articles/expensify-classic/expenses/The-Expenses-Page +https://help.expensify.com/articles/expensify-classic/reports/Attendee-Tracking,https://help.expensify.com/articles/expensify-classic/expenses/Track-group-expenses diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index e39542ef0303..9d09b4dc04f2 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 059DC4EFD39EF39437E6823D /* libPods-NotificationServiceExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A997AA8204EA3D90907FA80 /* libPods-NotificationServiceExtension.a */; }; 083353EB2B5AB22A00C603C0 /* attention.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 083353E72B5AB22900C603C0 /* attention.mp3 */; }; 083353EC2B5AB22A00C603C0 /* done.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 083353E82B5AB22900C603C0 /* done.mp3 */; }; 083353ED2B5AB22A00C603C0 /* receive.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 083353E92B5AB22900C603C0 /* receive.mp3 */; }; @@ -25,23 +26,24 @@ 26AF3C3540374A9FACB6C19E /* ExpensifyMono-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = DCF33E34FFEC48128CDD41D4 /* ExpensifyMono-Bold.otf */; }; 2A9F8CDA983746B0B9204209 /* ExpensifyNeue-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 52796131E6554494B2DDB056 /* ExpensifyNeue-Bold.otf */; }; 30581EA8AAFD4FCE88C5D191 /* ExpensifyNeue-Italic.otf in Resources */ = {isa = PBXBuildFile; fileRef = BF6A4C5167244B9FB8E4D4E3 /* ExpensifyNeue-Italic.otf */; }; + 3661A1374980E5F6804511FE /* libPods-NewExpensify-NewExpensifyTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 076FD9E41E08971BBF51D580 /* libPods-NewExpensify-NewExpensifyTests.a */; }; 374FB8D728A133FE000D84EF /* OriginImageRequestHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 374FB8D628A133FE000D84EF /* OriginImageRequestHandler.mm */; }; - 5B8996A7D8B007ECC41919E1 /* libPods-NewExpensify.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00D7E69E5ADD16FD4C44221B /* libPods-NewExpensify.a */; }; + 383643682B6D4AE2005BB9AE /* DeviceCheck.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 383643672B6D4AE2005BB9AE /* DeviceCheck.framework */; }; 7041848526A8E47D00E09F4D /* RCTStartupTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7041848426A8E47D00E09F4D /* RCTStartupTimer.m */; }; 7041848626A8E47D00E09F4D /* RCTStartupTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7041848426A8E47D00E09F4D /* RCTStartupTimer.m */; }; 70CF6E82262E297300711ADC /* BootSplash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 70CF6E81262E297300711ADC /* BootSplash.storyboard */; }; - 716815DBCE9F49D420334791 /* libPods-NewExpensify-NewExpensifyTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B68AEB9429D8BB73F25A188C /* libPods-NewExpensify-NewExpensifyTests.a */; }; 7F5E81F06BCCF61AD02CEA06 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCD444BEDDB0AF1745B39049 /* ExpoModulesProvider.swift */; }; 7F9DD8DA2B2A445B005E3AFA /* ExpError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F9DD8D92B2A445B005E3AFA /* ExpError.swift */; }; 7FD73C9E2B23CE9500420AF3 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */; }; 7FD73CA22B23CE9500420AF3 /* NotificationServiceExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 7FD73C9B2B23CE9500420AF3 /* NotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - B8A1CD44D011AD7AE180DE14 /* libPods-NotificationServiceExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B944D5699A54FD5197A63866 /* libPods-NotificationServiceExtension.a */; }; + 976CCB5F8C921482E6AEAE71 /* libPods-NewExpensify.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AB40AC8872A3DD6EF53D8B94 /* libPods-NewExpensify.a */; }; BDB853621F354EBB84E619C2 /* ExpensifyNewKansas-MediumItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = D2AFB39EC1D44BF9B91D3227 /* ExpensifyNewKansas-MediumItalic.otf */; }; - DD79042B2792E76D004484B4 /* RCTBootSplash.m in Sources */ = {isa = PBXBuildFile; fileRef = DD79042A2792E76D004484B4 /* RCTBootSplash.m */; }; + DD79042B2792E76D004484B4 /* RCTBootSplash.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD79042A2792E76D004484B4 /* RCTBootSplash.mm */; }; DDCB2E57F334C143AC462B43 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D20D83B0E39BA6D21761E72 /* ExpoModulesProvider.swift */; }; E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */ = {isa = PBXBuildFile; }; E9DF872D2525201700607FDC /* AirshipConfig.plist in Resources */ = {isa = PBXBuildFile; fileRef = E9DF872C2525201700607FDC /* AirshipConfig.plist */; }; ED222ED90E074A5481A854FA /* ExpensifyNeue-BoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8B28D84EF339436DBD42A203 /* ExpensifyNeue-BoldItalic.otf */; }; + EEAE4F8907465429AA5B5520 /* libPods-NewExpensify.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AEFE6CD54912D427D19133C7 /* libPods-NewExpensify.a */; }; F0C450EA2705020500FD2970 /* colors.json in Resources */ = {isa = PBXBuildFile; fileRef = F0C450E92705020500FD2970 /* colors.json */; }; FF941A8D48F849269AB85C9A /* ExpensifyNewKansas-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 44BF435285B94E5B95F90994 /* ExpensifyNewKansas-Medium.otf */; }; /* End PBXBuildFile section */ @@ -79,10 +81,9 @@ /* Begin PBXFileReference section */ 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; - 00D7E69E5ADD16FD4C44221B /* libPods-NewExpensify.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356EE1AD99517003FC87E /* NewExpensifyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NewExpensifyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 030F99CEB3AEF1F11B001798 /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig"; sourceTree = ""; }; + 076FD9E41E08971BBF51D580 /* libPods-NewExpensify-NewExpensifyTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify-NewExpensifyTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 083353E72B5AB22900C603C0 /* attention.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = attention.mp3; path = ../assets/sounds/attention.mp3; sourceTree = ""; }; 083353E82B5AB22900C603C0 /* done.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = done.mp3; path = ../assets/sounds/done.mp3; sourceTree = ""; }; 083353E92B5AB22900C603C0 /* receive.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = receive.mp3; path = ../assets/sounds/receive.mp3; sourceTree = ""; }; @@ -92,55 +93,71 @@ 0F5BE0CD252686320097D869 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 0F5E534E263B73D5004CA14F /* EnvironmentChecker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EnvironmentChecker.h; sourceTree = ""; }; 0F5E534F263B73FD004CA14F /* EnvironmentChecker.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EnvironmentChecker.m; sourceTree = ""; }; - 0FF2BC0D01CA2C62CE94229E /* Pods-NewExpensify.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugdevelopment.xcconfig"; sourceTree = ""; }; - 11B2BA236BB72A603FBB7B99 /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releasedevelopment.xcconfig"; sourceTree = ""; }; - 12EB734390650799DB8AC627 /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugdevelopment.xcconfig"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* New Expensify Dev.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "New Expensify Dev.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = NewExpensify/AppDelegate.h; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = NewExpensify/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = NewExpensify/main.m; sourceTree = ""; }; 18D050DF262400AF000D658B /* BridgingFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BridgingFile.swift; sourceTree = ""; }; - 3328C9B8861CA667C42B47F3 /* Pods-NewExpensify.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugproduction.xcconfig"; sourceTree = ""; }; + 1A997AA8204EA3D90907FA80 /* libPods-NotificationServiceExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NotificationServiceExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1DDE5449979A136852B939B5 /* Pods-NewExpensify.release adhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.release adhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.release adhoc.xcconfig"; sourceTree = ""; }; + 25A4587E168FD67CF890B448 /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; sourceTree = ""; }; + 30FFBD291B71222A393D9CC9 /* Pods-NewExpensify.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releasedevelopment.xcconfig"; sourceTree = ""; }; + 32181F72DC539FFD1D1F0CA4 /* Pods-NewExpensify.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releaseproduction.xcconfig"; sourceTree = ""; }; + 34A8FDD1F9AA58B8F15C8380 /* Pods-NewExpensify.release production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.release production.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.release production.xcconfig"; sourceTree = ""; }; 374FB8D528A133A7000D84EF /* OriginImageRequestHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OriginImageRequestHandler.h; path = NewExpensify/OriginImageRequestHandler.h; sourceTree = ""; }; 374FB8D628A133FE000D84EF /* OriginImageRequestHandler.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = OriginImageRequestHandler.mm; path = NewExpensify/OriginImageRequestHandler.mm; sourceTree = ""; }; + 383643672B6D4AE2005BB9AE /* DeviceCheck.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DeviceCheck.framework; path = System/Library/Frameworks/DeviceCheck.framework; sourceTree = SDKROOT; }; + 3BBA44B891E03FAB8255E6F1 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; sourceTree = ""; }; 44BF435285B94E5B95F90994 /* ExpensifyNewKansas-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNewKansas-Medium.otf"; path = "../assets/fonts/native/ExpensifyNewKansas-Medium.otf"; sourceTree = ""; }; - 466D03D63F4B48E009C04FA3 /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig"; sourceTree = ""; }; 4D20D83B0E39BA6D21761E72 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-NewExpensify/ExpoModulesProvider.swift"; sourceTree = ""; }; + 4E9593A0EE1C84B8A8EC062F /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; sourceTree = ""; }; 52796131E6554494B2DDB056 /* ExpensifyNeue-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-Bold.otf"; path = "../assets/fonts/native/ExpensifyNeue-Bold.otf"; sourceTree = ""; }; - 5A1F158A9A6CBE170EC19D9C /* Pods-NewExpensify.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugadhoc.xcconfig"; sourceTree = ""; }; + 52E63EFD054926BFEA3EC143 /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig"; sourceTree = ""; }; + 68F4F270A8D1414FC14F356F /* Pods-NewExpensify.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releaseadhoc.xcconfig"; sourceTree = ""; }; 7041848326A8E40900E09F4D /* RCTStartupTimer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RCTStartupTimer.h; path = NewExpensify/RCTStartupTimer.h; sourceTree = ""; }; 7041848426A8E47D00E09F4D /* RCTStartupTimer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = RCTStartupTimer.m; path = NewExpensify/RCTStartupTimer.m; sourceTree = ""; }; 70CF6E81262E297300711ADC /* BootSplash.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = BootSplash.storyboard; path = NewExpensify/BootSplash.storyboard; sourceTree = ""; }; - 7312B334B72E8BE41A811FAB /* Pods-NewExpensify.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releaseadhoc.xcconfig"; sourceTree = ""; }; + 76BE68DA894BB75DDFE278DC /* Pods-NewExpensify.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releasedevelopment.xcconfig"; sourceTree = ""; }; + 7B318CF669A0F7FE948D5CED /* Pods-NewExpensify.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugadhoc.xcconfig"; sourceTree = ""; }; 7F9DD8D92B2A445B005E3AFA /* ExpError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExpError.swift; sourceTree = ""; }; 7FD73C9B2B23CE9500420AF3 /* NotificationServiceExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationServiceExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; 7FD73C9F2B23CE9500420AF3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 802CB9E7554756F188C79554 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugadhoc.xcconfig"; sourceTree = ""; }; + 8709DF3C8D91F0FC1581CDD7 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; sourceTree = ""; }; 8B28D84EF339436DBD42A203 /* ExpensifyNeue-BoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-BoldItalic.otf"; path = "../assets/fonts/native/ExpensifyNeue-BoldItalic.otf"; sourceTree = ""; }; - 96ADA7C82BA6A08C4A56344A /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releaseproduction.xcconfig"; sourceTree = ""; }; - 972584042DB4782F830B063A /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig"; sourceTree = ""; }; - 9EADA69D62F2E7B3D96E5B1C /* Pods-NewExpensify.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releaseproduction.xcconfig"; sourceTree = ""; }; - AC9422F6C8A49AE701481721 /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releaseadhoc.xcconfig"; sourceTree = ""; }; - B4CF7147C89747459BAC5BB7 /* Pods-NewExpensify.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releasedevelopment.xcconfig"; sourceTree = ""; }; - B68AEB9429D8BB73F25A188C /* libPods-NewExpensify-NewExpensifyTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify-NewExpensifyTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - B944D5699A54FD5197A63866 /* libPods-NotificationServiceExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NotificationServiceExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D3B36BF88E773E3C1A383FA /* Pods-NewExpensify.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debug staging.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debug staging.xcconfig"; sourceTree = ""; }; + 90E08F0C8C924EDA018C8866 /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releaseproduction.xcconfig"; sourceTree = ""; }; + 96552D489D9F09B6A5ABD81B /* Pods-NewExpensify-NewExpensifyTests.release production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.release production.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.release production.xcconfig"; sourceTree = ""; }; + AB40AC8872A3DD6EF53D8B94 /* libPods-NewExpensify.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + AEFE6CD54912D427D19133C7 /* libPods-NewExpensify.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify.a"; sourceTree = BUILT_PRODUCTS_DIR; }; BCD444BEDDB0AF1745B39049 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-NewExpensify-NewExpensifyTests/ExpoModulesProvider.swift"; sourceTree = ""; }; + BD6E1BA27D6ABE0AC9D70586 /* Pods-NewExpensify-NewExpensifyTests.release development.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.release development.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.release development.xcconfig"; sourceTree = ""; }; + BD8828A882E2D6B51362AAC3 /* Pods-NewExpensify.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releaseadhoc.xcconfig"; sourceTree = ""; }; BF6A4C5167244B9FB8E4D4E3 /* ExpensifyNeue-Italic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-Italic.otf"; path = "../assets/fonts/native/ExpensifyNeue-Italic.otf"; sourceTree = ""; }; - CB32BB7E082E2450F04DA6E7 /* Pods-NotificationServiceExtension.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugproduction.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugproduction.xcconfig"; sourceTree = ""; }; - D15262BE5F713CDB4DA576AE /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; sourceTree = ""; }; + C3788801E65E896FA7C77298 /* Pods-NewExpensify.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugproduction.xcconfig"; sourceTree = ""; }; + C3FF914C045A138C061D306E /* Pods-NotificationServiceExtension.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugproduction.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugproduction.xcconfig"; sourceTree = ""; }; + CE2F84BEE9A6DCC228AF7E42 /* Pods-NewExpensify.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugproduction.xcconfig"; sourceTree = ""; }; D2AFB39EC1D44BF9B91D3227 /* ExpensifyNewKansas-MediumItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNewKansas-MediumItalic.otf"; path = "../assets/fonts/native/ExpensifyNewKansas-MediumItalic.otf"; sourceTree = ""; }; + D3F458C994019E6A571461B7 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugadhoc.xcconfig"; sourceTree = ""; }; + DB76E0D5C670190A0997C71E /* Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig"; sourceTree = ""; }; DCF33E34FFEC48128CDD41D4 /* ExpensifyMono-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyMono-Bold.otf"; path = "../assets/fonts/native/ExpensifyMono-Bold.otf"; sourceTree = ""; }; DD7904292792E76D004484B4 /* RCTBootSplash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTBootSplash.h; path = NewExpensify/RCTBootSplash.h; sourceTree = ""; }; - DD79042A2792E76D004484B4 /* RCTBootSplash.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RCTBootSplash.m; path = NewExpensify/RCTBootSplash.m; sourceTree = ""; }; + DD79042A2792E76D004484B4 /* RCTBootSplash.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = RCTBootSplash.mm; path = NewExpensify/RCTBootSplash.mm; sourceTree = ""; }; + E2C8555C607612465A7473F8 /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; sourceTree = ""; }; + E2F1036F70CBFE39E9352674 /* Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig"; sourceTree = ""; }; + E2F78D2A9B3DB96F0524690B /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig"; sourceTree = ""; }; + E61AD6D2DE65B6FB14945CDF /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releaseadhoc.xcconfig"; sourceTree = ""; }; + E681F80D97E6E4BB26194246 /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig"; sourceTree = ""; }; E704648954784DDFBAADF568 /* ExpensifyMono-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyMono-Regular.otf"; path = "../assets/fonts/native/ExpensifyMono-Regular.otf"; sourceTree = ""; }; - E750C93A45B47BDC5149C5AA /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; sourceTree = ""; }; E9DF872C2525201700607FDC /* AirshipConfig.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = AirshipConfig.plist; sourceTree = ""; }; + EA58D43E81BC49541F7FC7E7 /* Pods-NewExpensify.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugdevelopment.xcconfig"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; + F082D95EE104912B48EA98BA /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releasedevelopment.xcconfig"; sourceTree = ""; }; F0C450E92705020500FD2970 /* colors.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = colors.json; path = ../colors.json; sourceTree = ""; }; F4F8A052A22040339996324B /* ExpensifyNeue-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-Regular.otf"; path = "../assets/fonts/native/ExpensifyNeue-Regular.otf"; sourceTree = ""; }; - F98306ABF3F272DF04DF65CC /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; sourceTree = ""; }; + FBEBA6FBED49FB41D6F93896 /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugdevelopment.xcconfig"; sourceTree = ""; }; + FF0EADDA6099EF76253FA7AB /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -148,7 +165,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 716815DBCE9F49D420334791 /* libPods-NewExpensify-NewExpensifyTests.a in Frameworks */, + 3661A1374980E5F6804511FE /* libPods-NewExpensify-NewExpensifyTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -156,9 +173,11 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 383643682B6D4AE2005BB9AE /* DeviceCheck.framework in Frameworks */, E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */, + 976CCB5F8C921482E6AEAE71 /* libPods-NewExpensify.a in Frameworks */, E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */, - 5B8996A7D8B007ECC41919E1 /* libPods-NewExpensify.a in Frameworks */, + EEAE4F8907465429AA5B5520 /* libPods-NewExpensify.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -166,7 +185,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8A1CD44D011AD7AE180DE14 /* libPods-NotificationServiceExtension.a in Frameworks */, + 059DC4EFD39EF39437E6823D /* libPods-NotificationServiceExtension.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -210,11 +229,13 @@ 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { isa = PBXGroup; children = ( + 383643672B6D4AE2005BB9AE /* DeviceCheck.framework */, ED297162215061F000B7C4FE /* JavaScriptCore.framework */, ED2971642150620600B7C4FE /* JavaScriptCore.framework */, - 00D7E69E5ADD16FD4C44221B /* libPods-NewExpensify.a */, - B68AEB9429D8BB73F25A188C /* libPods-NewExpensify-NewExpensifyTests.a */, - B944D5699A54FD5197A63866 /* libPods-NotificationServiceExtension.a */, + AEFE6CD54912D427D19133C7 /* libPods-NewExpensify.a */, + 1A997AA8204EA3D90907FA80 /* libPods-NotificationServiceExtension.a */, + AB40AC8872A3DD6EF53D8B94 /* libPods-NewExpensify.a */, + 076FD9E41E08971BBF51D580 /* libPods-NewExpensify-NewExpensifyTests.a */, ); name = Frameworks; sourceTree = ""; @@ -260,7 +281,7 @@ 374FB8D628A133FE000D84EF /* OriginImageRequestHandler.mm */, F0C450E92705020500FD2970 /* colors.json */, DD7904292792E76D004484B4 /* RCTBootSplash.h */, - DD79042A2792E76D004484B4 /* RCTBootSplash.m */, + DD79042A2792E76D004484B4 /* RCTBootSplash.mm */, 7041848326A8E40900E09F4D /* RCTStartupTimer.h */, 7041848426A8E47D00E09F4D /* RCTStartupTimer.m */, 18D050DF262400AF000D658B /* BridgingFile.swift */, @@ -319,24 +340,37 @@ EC29677F0A49C2946A495A33 /* Pods */ = { isa = PBXGroup; children = ( - 0FF2BC0D01CA2C62CE94229E /* Pods-NewExpensify.debugdevelopment.xcconfig */, - 5A1F158A9A6CBE170EC19D9C /* Pods-NewExpensify.debugadhoc.xcconfig */, - B4CF7147C89747459BAC5BB7 /* Pods-NewExpensify.releasedevelopment.xcconfig */, - 7312B334B72E8BE41A811FAB /* Pods-NewExpensify.releaseadhoc.xcconfig */, - 9EADA69D62F2E7B3D96E5B1C /* Pods-NewExpensify.releaseproduction.xcconfig */, - E750C93A45B47BDC5149C5AA /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */, - F98306ABF3F272DF04DF65CC /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */, - 972584042DB4782F830B063A /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */, - D15262BE5F713CDB4DA576AE /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */, - 466D03D63F4B48E009C04FA3 /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */, - 12EB734390650799DB8AC627 /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */, - 802CB9E7554756F188C79554 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */, - CB32BB7E082E2450F04DA6E7 /* Pods-NotificationServiceExtension.debugproduction.xcconfig */, - 11B2BA236BB72A603FBB7B99 /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */, - AC9422F6C8A49AE701481721 /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */, - 96ADA7C82BA6A08C4A56344A /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */, - 3328C9B8861CA667C42B47F3 /* Pods-NewExpensify.debugproduction.xcconfig */, - 030F99CEB3AEF1F11B001798 /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */, + 8D3B36BF88E773E3C1A383FA /* Pods-NewExpensify.debug staging.xcconfig */, + 1DDE5449979A136852B939B5 /* Pods-NewExpensify.release adhoc.xcconfig */, + 34A8FDD1F9AA58B8F15C8380 /* Pods-NewExpensify.release production.xcconfig */, + E2F1036F70CBFE39E9352674 /* Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig */, + DB76E0D5C670190A0997C71E /* Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig */, + BD6E1BA27D6ABE0AC9D70586 /* Pods-NewExpensify-NewExpensifyTests.release development.xcconfig */, + 96552D489D9F09B6A5ABD81B /* Pods-NewExpensify-NewExpensifyTests.release production.xcconfig */, + CE2F84BEE9A6DCC228AF7E42 /* Pods-NewExpensify.debugproduction.xcconfig */, + 30FFBD291B71222A393D9CC9 /* Pods-NewExpensify.releasedevelopment.xcconfig */, + BD8828A882E2D6B51362AAC3 /* Pods-NewExpensify.releaseadhoc.xcconfig */, + 8709DF3C8D91F0FC1581CDD7 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */, + 25A4587E168FD67CF890B448 /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */, + E2C8555C607612465A7473F8 /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */, + FBEBA6FBED49FB41D6F93896 /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */, + D3F458C994019E6A571461B7 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */, + C3FF914C045A138C061D306E /* Pods-NotificationServiceExtension.debugproduction.xcconfig */, + F082D95EE104912B48EA98BA /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */, + E61AD6D2DE65B6FB14945CDF /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */, + 90E08F0C8C924EDA018C8866 /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */, + EA58D43E81BC49541F7FC7E7 /* Pods-NewExpensify.debugdevelopment.xcconfig */, + 7B318CF669A0F7FE948D5CED /* Pods-NewExpensify.debugadhoc.xcconfig */, + C3788801E65E896FA7C77298 /* Pods-NewExpensify.debugproduction.xcconfig */, + 76BE68DA894BB75DDFE278DC /* Pods-NewExpensify.releasedevelopment.xcconfig */, + 68F4F270A8D1414FC14F356F /* Pods-NewExpensify.releaseadhoc.xcconfig */, + 32181F72DC539FFD1D1F0CA4 /* Pods-NewExpensify.releaseproduction.xcconfig */, + 3BBA44B891E03FAB8255E6F1 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */, + 4E9593A0EE1C84B8A8EC062F /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */, + 52E63EFD054926BFEA3EC143 /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */, + E681F80D97E6E4BB26194246 /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */, + FF0EADDA6099EF76253FA7AB /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */, + E2F78D2A9B3DB96F0524690B /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */, ); path = Pods; sourceTree = ""; @@ -348,13 +382,13 @@ isa = PBXNativeTarget; buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "NewExpensifyTests" */; buildPhases = ( - D128CAF2A1070B0F2B3F12E4 /* [CP] Check Pods Manifest.lock */, + A3D1E02743106A34295E533A /* [CP] Check Pods Manifest.lock */, 04B99F6AA578E2A877802F05 /* [Expo] Configure project */, 00E356EA1AD99517003FC87E /* Sources */, 00E356EB1AD99517003FC87E /* Frameworks */, 00E356EC1AD99517003FC87E /* Resources */, - CE4668E6E6809DEA0626B5B3 /* [CP] Copy Pods Resources */, - 47778FAEB28E5E04DCCD0D39 /* [CP] Embed Pods Frameworks */, + 822809AAD6B368BF9F9BA00E /* [CP] Embed Pods Frameworks */, + 5CC6761AF98472E1C710DB80 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -370,7 +404,7 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "NewExpensify" */; buildPhases = ( - 5DDD2A7C43E9B381CD68A232 /* [CP] Check Pods Manifest.lock */, + 468C095F6D4C79E555B55A4F /* [CP] Check Pods Manifest.lock */, FD10A7F022414F080027D42C /* Start Packager */, 5CF45ABA52C0BB0D7B9D139A /* [Expo] Configure project */, 13B07F871A680F5B00A75B9A /* Sources */, @@ -378,10 +412,10 @@ 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 50067B6C26F88BAB5F0B478A /* [CP] Embed Pods Frameworks */, - 4E1386759AEE7859543483C9 /* [CP] Copy Pods Resources */, - EEA310C4723D0EF8581FAA1D /* [CP-User] [RNFB] Core Configuration */, - A9A9BDEB11952C562415526C /* [CP-User] [RNFB] Crashlytics Configuration */, + CB8E29994749C6913C3FA05D /* [CP] Embed Pods Frameworks */, + F6E16E41F88F567A8CDD037C /* [CP] Copy Pods Resources */, + 04A2B3BE14CFE4961BE987E8 /* [CP-User] [RNFB] Core Configuration */, + 2D8F47B51A8E72FBA2BA4874 /* [CP-User] [RNFB] Crashlytics Configuration */, ); buildRules = ( ); @@ -397,7 +431,7 @@ isa = PBXNativeTarget; buildConfigurationList = 7FD73CAA2B23CE9500420AF3 /* Build configuration list for PBXNativeTarget "NotificationServiceExtension" */; buildPhases = ( - 7B34459944ACFD30D85D5F85 /* [CP] Check Pods Manifest.lock */, + F3D35ED760B830954BD8A7BB /* [CP] Check Pods Manifest.lock */, 7FD73C972B23CE9500420AF3 /* Sources */, 7FD73C982B23CE9500420AF3 /* Frameworks */, 7FD73C992B23CE9500420AF3 /* Resources */, @@ -515,6 +549,19 @@ shellPath = /bin/sh; shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios relative | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli')\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n"; }; + 04A2B3BE14CFE4961BE987E8 /* [CP-User] [RNFB] Core Configuration */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", + ); + name = "[CP-User] [RNFB] Core Configuration"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n _JSON_OUTPUT_BASE64=$(python -c 'import json,sys,base64;print(base64.b64encode(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"').read())['${_JSON_ROOT}'])))' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n"; + }; 04B99F6AA578E2A877802F05 /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -534,51 +581,59 @@ shellPath = /bin/sh; shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-NewExpensify-NewExpensifyTests/expo-configure-project.sh\"\n"; }; - 47778FAEB28E5E04DCCD0D39 /* [CP] Embed Pods Frameworks */ = { + 2D8F47B51A8E72FBA2BA4874 /* [CP-User] [RNFB] Crashlytics Configuration */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/MapboxMaps/MapboxMaps.framework", - "${BUILT_PRODUCTS_DIR}/Turf/Turf.framework", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/MapboxCommon/MapboxCommon.framework/MapboxCommon", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/MapboxCoreMaps/MapboxCoreMaps.framework/MapboxCoreMaps", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/MapboxMobileEvents/MapboxMobileEvents.framework/MapboxMobileEvents", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/Onfido/Onfido.framework/Onfido", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/Plaid/LinkKit.framework/LinkKit", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", + "$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", + ); + name = "[CP-User] [RNFB] Crashlytics Configuration"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec FirebaseCrashlytics Run from Pods\"\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\nelse\n echo \"info: Exec FirebaseCrashlytics Run from framework\"\n \"${PROJECT_DIR}/FirebaseCrashlytics.framework/run\"\nfi\n"; + }; + 468C095F6D4C79E555B55A4F /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MapboxMaps.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Turf.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MapboxCommon.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MapboxCoreMaps.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MapboxMobileEvents.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Onfido.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/LinkKit.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + "$(DERIVED_FILE_DIR)/Pods-NewExpensify-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 4E1386759AEE7859543483C9 /* [CP] Copy Pods Resources */ = { + 5CC6761AF98472E1C710DB80 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-NewExpensify/Pods-NewExpensify-resources.sh", + "${PODS_ROOT}/Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests-resources.sh", "${PODS_CONFIGURATION_BUILD_DIR}/Airship/AirshipAutomationResources.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/Airship/AirshipCoreResources.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/Airship/AirshipExtendedActionsResources.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/Airship/AirshipMessageCenterResources.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/Airship/AirshipPreferenceCenterResources.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher_Core_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn/GoogleSignIn.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle", "${PODS_ROOT}/../../node_modules/@expensify/react-native-live-markdown/parser/react-native-live-markdown-parser.js", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle", ); @@ -589,22 +644,45 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AirshipExtendedActionsResources.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AirshipMessageCenterResources.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AirshipPreferenceCenterResources.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GTMSessionFetcher_Core_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleDataTransport_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleUtilities_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/react-native-live-markdown-parser.js", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCTI18nStrings.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NewExpensify/Pods-NewExpensify-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 50067B6C26F88BAB5F0B478A /* [CP] Embed Pods Frameworks */ = { + 5CF45ABA52C0BB0D7B9D139A /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-NewExpensify/Pods-NewExpensify-frameworks.sh", + ); + name = "[Expo] Configure project"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-NewExpensify/expo-configure-project.sh\"\n"; + }; + 822809AAD6B368BF9F9BA00E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests-frameworks.sh", "${BUILT_PRODUCTS_DIR}/MapboxMaps/MapboxMaps.framework", "${BUILT_PRODUCTS_DIR}/Turf/Turf.framework", "${PODS_XCFRAMEWORKS_BUILD_DIR}/MapboxCommon/MapboxCommon.framework/MapboxCommon", @@ -627,51 +705,64 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NewExpensify/Pods-NewExpensify-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 5CF45ABA52C0BB0D7B9D139A /* [Expo] Configure project */ = { + A3D1E02743106A34295E533A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); - name = "[Expo] Configure project"; + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-NewExpensify-NewExpensifyTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-NewExpensify/expo-configure-project.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 5DDD2A7C43E9B381CD68A232 /* [CP] Check Pods Manifest.lock */ = { + CB8E29994749C6913C3FA05D /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NewExpensify/Pods-NewExpensify-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/MapboxMaps/MapboxMaps.framework", + "${BUILT_PRODUCTS_DIR}/Turf/Turf.framework", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/MapboxCommon/MapboxCommon.framework/MapboxCommon", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/MapboxCoreMaps/MapboxCoreMaps.framework/MapboxCoreMaps", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/MapboxMobileEvents/MapboxMobileEvents.framework/MapboxMobileEvents", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/Onfido/Onfido.framework/Onfido", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/Plaid/LinkKit.framework/LinkKit", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", ); + name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-NewExpensify-checkManifestLockResult.txt", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MapboxMaps.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Turf.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MapboxCommon.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MapboxCoreMaps.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MapboxMobileEvents.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Onfido.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/LinkKit.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NewExpensify/Pods-NewExpensify-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 7B34459944ACFD30D85D5F85 /* [CP] Check Pods Manifest.lock */ = { + F3D35ED760B830954BD8A7BB /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -693,33 +784,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - A9A9BDEB11952C562415526C /* [CP-User] [RNFB] Crashlytics Configuration */ = { + F6E16E41F88F567A8CDD037C /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", - "$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", - ); - name = "[CP-User] [RNFB] Crashlytics Configuration"; - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec FirebaseCrashlytics Run from Pods\"\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\nelse\n echo \"info: Exec FirebaseCrashlytics Run from framework\"\n \"${PROJECT_DIR}/FirebaseCrashlytics.framework/run\"\nfi\n"; - }; - CE4668E6E6809DEA0626B5B3 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests-resources.sh", + "${PODS_ROOT}/Target Support Files/Pods-NewExpensify/Pods-NewExpensify-resources.sh", "${PODS_CONFIGURATION_BUILD_DIR}/Airship/AirshipAutomationResources.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/Airship/AirshipCoreResources.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/Airship/AirshipExtendedActionsResources.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/Airship/AirshipMessageCenterResources.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/Airship/AirshipPreferenceCenterResources.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher_Core_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn/GoogleSignIn.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle", "${PODS_ROOT}/../../node_modules/@expensify/react-native-live-markdown/parser/react-native-live-markdown-parser.js", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle", ); @@ -730,50 +811,19 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AirshipExtendedActionsResources.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AirshipMessageCenterResources.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AirshipPreferenceCenterResources.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GTMSessionFetcher_Core_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleDataTransport_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleUtilities_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/react-native-live-markdown-parser.js", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCTI18nStrings.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - D128CAF2A1070B0F2B3F12E4 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-NewExpensify-NewExpensifyTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NewExpensify/Pods-NewExpensify-resources.sh\"\n"; showEnvVarsInLog = 0; }; - EEA310C4723D0EF8581FAA1D /* [CP-User] [RNFB] Core Configuration */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", - ); - name = "[CP-User] [RNFB] Core Configuration"; - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n _JSON_OUTPUT_BASE64=$(python -c 'import json,sys,base64;print(base64.b64encode(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"').read())['${_JSON_ROOT}'])))' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n"; - }; FD10A7F022414F080027D42C /* Start Packager */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -815,7 +865,7 @@ 0F5E5350263B73FD004CA14F /* EnvironmentChecker.m in Sources */, 374FB8D728A133FE000D84EF /* OriginImageRequestHandler.mm in Sources */, 7041848526A8E47D00E09F4D /* RCTStartupTimer.m in Sources */, - DD79042B2792E76D004484B4 /* RCTBootSplash.m in Sources */, + DD79042B2792E76D004484B4 /* RCTBootSplash.mm in Sources */, 0CDA8E34287DD650004ECBEC /* AppDelegate.mm in Sources */, 13B07FC11A68108700A75B9A /* main.m in Sources */, DDCB2E57F334C143AC462B43 /* ExpoModulesProvider.swift in Sources */, @@ -849,7 +899,7 @@ /* Begin XCBuildConfiguration section */ 00E356F61AD99517003FC87E /* DebugDevelopment */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E750C93A45B47BDC5149C5AA /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */; + baseConfigurationReference = 3BBA44B891E03FAB8255E6F1 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -879,7 +929,7 @@ }; 00E356F71AD99517003FC87E /* ReleaseDevelopment */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 972584042DB4782F830B063A /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */; + baseConfigurationReference = E681F80D97E6E4BB26194246 /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -906,10 +956,11 @@ }; 13B07F941A680F5B00A75B9A /* DebugDevelopment */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FF2BC0D01CA2C62CE94229E /* Pods-NewExpensify.debugdevelopment.xcconfig */; + baseConfigurationReference = EA58D43E81BC49541F7FC7E7 /* Pods-NewExpensify.debugdevelopment.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDev; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = NewExpensify/Chat.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; @@ -945,10 +996,11 @@ }; 13B07F951A680F5B00A75B9A /* ReleaseDevelopment */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B4CF7147C89747459BAC5BB7 /* Pods-NewExpensify.releasedevelopment.xcconfig */; + baseConfigurationReference = 76BE68DA894BB75DDFE278DC /* Pods-NewExpensify.releasedevelopment.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDev; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = NewExpensify/Chat.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; @@ -982,7 +1034,7 @@ }; 7FD73CA42B23CE9500420AF3 /* DebugDevelopment */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 12EB734390650799DB8AC627 /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */; + baseConfigurationReference = FBEBA6FBED49FB41D6F93896 /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1068,7 +1120,7 @@ }; 7FD73CA52B23CE9500420AF3 /* DebugAdHoc */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 802CB9E7554756F188C79554 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */; + baseConfigurationReference = D3F458C994019E6A571461B7 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1153,7 +1205,7 @@ }; 7FD73CA62B23CE9500420AF3 /* DebugProduction */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB32BB7E082E2450F04DA6E7 /* Pods-NotificationServiceExtension.debugproduction.xcconfig */; + baseConfigurationReference = C3FF914C045A138C061D306E /* Pods-NotificationServiceExtension.debugproduction.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1239,7 +1291,7 @@ }; 7FD73CA72B23CE9500420AF3 /* ReleaseDevelopment */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 11B2BA236BB72A603FBB7B99 /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */; + baseConfigurationReference = F082D95EE104912B48EA98BA /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1318,7 +1370,7 @@ }; 7FD73CA82B23CE9500420AF3 /* ReleaseAdHoc */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AC9422F6C8A49AE701481721 /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */; + baseConfigurationReference = E61AD6D2DE65B6FB14945CDF /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1396,7 +1448,7 @@ }; 7FD73CA92B23CE9500420AF3 /* ReleaseProduction */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 96ADA7C82BA6A08C4A56344A /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */; + baseConfigurationReference = 90E08F0C8C924EDA018C8866 /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1533,13 +1585,15 @@ ); MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "$(inherited)"; - OTHER_CPLUSPLUSFLAGS = "$(inherited)"; - OTHER_LDFLAGS = ( + OTHER_CFLAGS = ( "$(inherited)", - "-Wl", - "-ld_classic", + "-DRN_FABRIC_ENABLED", ); + OTHER_CPLUSPLUSFLAGS = ( + "$(inherited)", + "-DRN_FABRIC_ENABLED", + ); + OTHER_LDFLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = ""; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; @@ -1599,13 +1653,15 @@ "\"$(inherited)\"", ); MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "$(inherited)"; - OTHER_CPLUSPLUSFLAGS = "$(inherited)"; - OTHER_LDFLAGS = ( + OTHER_CFLAGS = ( "$(inherited)", - "-Wl", - "-ld_classic", + "-DRN_FABRIC_ENABLED", ); + OTHER_CPLUSPLUSFLAGS = ( + "$(inherited)", + "-DRN_FABRIC_ENABLED", + ); + OTHER_LDFLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = ""; PRODUCT_NAME = ""; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; @@ -1675,13 +1731,15 @@ ); MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "$(inherited)"; - OTHER_CPLUSPLUSFLAGS = "$(inherited)"; - OTHER_LDFLAGS = ( + OTHER_CFLAGS = ( "$(inherited)", - "-Wl", - "-ld_classic", + "-DRN_FABRIC_ENABLED", ); + OTHER_CPLUSPLUSFLAGS = ( + "$(inherited)", + "-DRN_FABRIC_ENABLED", + ); + OTHER_LDFLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = ""; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; @@ -1691,10 +1749,11 @@ }; CF9AF93F29EE9276001FA527 /* DebugProduction */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3328C9B8861CA667C42B47F3 /* Pods-NewExpensify.debugproduction.xcconfig */; + baseConfigurationReference = C3788801E65E896FA7C77298 /* Pods-NewExpensify.debugproduction.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = NewExpensify/Chat.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; @@ -1729,7 +1788,7 @@ }; CF9AF94029EE9276001FA527 /* DebugProduction */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 030F99CEB3AEF1F11B001798 /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */; + baseConfigurationReference = 52E63EFD054926BFEA3EC143 /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -1817,13 +1876,15 @@ ); MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "$(inherited)"; - OTHER_CPLUSPLUSFLAGS = "$(inherited)"; - OTHER_LDFLAGS = ( + OTHER_CFLAGS = ( "$(inherited)", - "-Wl", - "-ld_classic", + "-DRN_FABRIC_ENABLED", ); + OTHER_CPLUSPLUSFLAGS = ( + "$(inherited)", + "-DRN_FABRIC_ENABLED", + ); + OTHER_LDFLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = ""; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; @@ -1833,10 +1894,11 @@ }; CF9AF94529EE927A001FA527 /* DebugAdHoc */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A1F158A9A6CBE170EC19D9C /* Pods-NewExpensify.debugadhoc.xcconfig */; + baseConfigurationReference = 7B318CF669A0F7FE948D5CED /* Pods-NewExpensify.debugadhoc.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIconAdHoc; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = NewExpensify/Chat.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; @@ -1871,7 +1933,7 @@ }; CF9AF94629EE927A001FA527 /* DebugAdHoc */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F98306ABF3F272DF04DF65CC /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */; + baseConfigurationReference = 4E9593A0EE1C84B8A8EC062F /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -1951,13 +2013,15 @@ "\"$(inherited)\"", ); MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "$(inherited)"; - OTHER_CPLUSPLUSFLAGS = "$(inherited)"; - OTHER_LDFLAGS = ( + OTHER_CFLAGS = ( "$(inherited)", - "-Wl", - "-ld_classic", + "-DRN_FABRIC_ENABLED", ); + OTHER_CPLUSPLUSFLAGS = ( + "$(inherited)", + "-DRN_FABRIC_ENABLED", + ); + OTHER_LDFLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = ""; PRODUCT_NAME = ""; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; @@ -1969,10 +2033,11 @@ }; CF9AF94829EE928E001FA527 /* ReleaseProduction */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9EADA69D62F2E7B3D96E5B1C /* Pods-NewExpensify.releaseproduction.xcconfig */; + baseConfigurationReference = 32181F72DC539FFD1D1F0CA4 /* Pods-NewExpensify.releaseproduction.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = NewExpensify/Chat.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; @@ -2005,7 +2070,7 @@ }; CF9AF94929EE928E001FA527 /* ReleaseProduction */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 466D03D63F4B48E009C04FA3 /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */; + baseConfigurationReference = E2F78D2A9B3DB96F0524690B /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -2083,13 +2148,15 @@ "\"$(inherited)\"", ); MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "$(inherited)"; - OTHER_CPLUSPLUSFLAGS = "$(inherited)"; - OTHER_LDFLAGS = ( + OTHER_CFLAGS = ( + "$(inherited)", + "-DRN_FABRIC_ENABLED", + ); + OTHER_CPLUSPLUSFLAGS = ( "$(inherited)", - "-Wl", - "-ld_classic", + "-DRN_FABRIC_ENABLED", ); + OTHER_LDFLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = ""; PRODUCT_NAME = ""; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; @@ -2101,10 +2168,11 @@ }; CF9AF94E29EE9293001FA527 /* ReleaseAdHoc */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7312B334B72E8BE41A811FAB /* Pods-NewExpensify.releaseadhoc.xcconfig */; + baseConfigurationReference = 68F4F270A8D1414FC14F356F /* Pods-NewExpensify.releaseadhoc.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIconAdHoc; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = NewExpensify/Chat.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; @@ -2137,7 +2205,7 @@ }; CF9AF94F29EE9293001FA527 /* ReleaseAdHoc */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D15262BE5F713CDB4DA576AE /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */; + baseConfigurationReference = FF0EADDA6099EF76253FA7AB /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; diff --git a/ios/NewExpensify.xcodeproj/xcshareddata/xcschemes/New Expensify.xcscheme b/ios/NewExpensify.xcodeproj/xcshareddata/xcschemes/New Expensify.xcscheme index b6b5874506a8..86124ac1a170 100644 --- a/ios/NewExpensify.xcodeproj/xcshareddata/xcschemes/New Expensify.xcscheme +++ b/ios/NewExpensify.xcodeproj/xcshareddata/xcschemes/New Expensify.xcscheme @@ -57,7 +57,7 @@ diff --git a/ios/NewExpensify/AppDelegate.mm b/ios/NewExpensify/AppDelegate.mm index f5ddba46f5f1..f4f7f3bc8dbc 100644 --- a/ios/NewExpensify/AppDelegate.mm +++ b/ios/NewExpensify/AppDelegate.mm @@ -44,7 +44,12 @@ - (BOOL)application:(UIApplication *)application // stopped by a native module in the JS so we can measure total time starting // in the native layer and ending in the JS layer. [RCTStartupTimer start]; - + + if (![[NSUserDefaults standardUserDefaults] boolForKey:@"isFirstRunComplete"]) { + [UIApplication sharedApplication].applicationIconBadgeNumber = 0; + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isFirstRunComplete"]; + } + return YES; } diff --git a/ios/NewExpensify/Info.plist b/ios/NewExpensify/Info.plist index a98f3eb90d63..3f9f220b5519 100644 --- a/ios/NewExpensify/Info.plist +++ b/ios/NewExpensify/Info.plist @@ -19,7 +19,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.4.60 + 1.4.61 CFBundleSignature ???? CFBundleURLTypes @@ -40,7 +40,7 @@ CFBundleVersion - 1.4.60.7 + 1.4.61.5 ITSAppUsesNonExemptEncryption LSApplicationQueriesSchemes diff --git a/ios/NewExpensify/RCTBootSplash.h b/ios/NewExpensify/RCTBootSplash.h index c25c676feb4a..5dc3def635f2 100644 --- a/ios/NewExpensify/RCTBootSplash.h +++ b/ios/NewExpensify/RCTBootSplash.h @@ -12,6 +12,6 @@ + (void)invalidateBootSplash; + (void)initWithStoryboard:(NSString * _Nonnull)storyboardName - rootView:(RCTRootView * _Nullable)rootView; + rootView:(UIView * _Nullable)rootView; @end diff --git a/ios/NewExpensify/RCTBootSplash.m b/ios/NewExpensify/RCTBootSplash.m deleted file mode 100644 index 6c2baaed4ee0..000000000000 --- a/ios/NewExpensify/RCTBootSplash.m +++ /dev/null @@ -1,147 +0,0 @@ -// -// RCTBootSplash.m -// NewExpensify -// -// Created by Mathieu Acthernoene on 07/01/2022. -// - -#import -#import - -#import "RCTBootSplash.h" - -static NSMutableArray *_resolverQueue = nil; -static RCTRootView *_rootView = nil; -static bool _nativeHidden = false; - -@implementation RCTBootSplash - -RCT_EXPORT_MODULE(); - -+ (BOOL)requiresMainQueueSetup { - return NO; -} - -- (dispatch_queue_t)methodQueue { - return dispatch_get_main_queue(); -} - -+ (void)invalidateBootSplash { - _resolverQueue = nil; - _rootView = nil; - _nativeHidden = false; -} - -+ (void)initWithStoryboard:(NSString * _Nonnull)storyboardName - rootView:(RCTRootView * _Nullable)rootView { - if (rootView == nil || _rootView != nil || RCTRunningInAppExtension()) - return; - - _rootView = rootView; - - [[NSNotificationCenter defaultCenter] removeObserver:rootView - name:RCTContentDidAppearNotification - object:rootView]; - - UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil]; - UIView *loadingView = [[storyboard instantiateInitialViewController] view]; - - if ([self resolverQueueExists]) - return; - - [_rootView setLoadingView:loadingView]; - - [NSTimer scheduledTimerWithTimeInterval:0.35 - repeats:NO - block:^(NSTimer * _Nonnull timer) { - // wait for native iOS launch screen to fade out - _nativeHidden = true; - - // hide has been called before native launch screen fade out - if ([self resolverQueueExists]) - [self hideAndClearResolverQueue]; - }]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(onContentDidAppear) - name:RCTContentDidAppearNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(onJavaScriptDidFailToLoad) - name:RCTJavaScriptDidFailToLoadNotification - object:nil]; -} - -+ (bool)isHidden { - return _rootView == nil || _rootView.loadingView == nil || [_rootView.loadingView isHidden]; -} - -+ (bool)resolverQueueExists { - return _resolverQueue != nil; -} - -+ (void)clearResolverQueue { - if (![self resolverQueueExists]) - return; - - while ([_resolverQueue count] > 0) { - RCTPromiseResolveBlock resolve = [_resolverQueue objectAtIndex:0]; - [_resolverQueue removeObjectAtIndex:0]; - resolve(@(true)); - } -} - -+ (void)hideAndClearResolverQueue { - if (![self isHidden]) { - _rootView.loadingView.hidden = YES; - [_rootView.loadingView removeFromSuperview]; - _rootView.loadingView = nil; - } - - [RCTBootSplash clearResolverQueue]; -} - -+ (void)onContentDidAppear { - [NSTimer scheduledTimerWithTimeInterval:10.0 // Safety call - repeats:false - block:^(NSTimer * _Nonnull timer) { - [timer invalidate]; - - if (_rootView == nil) - return; - - if (_resolverQueue == nil) - _resolverQueue = [[NSMutableArray alloc] init]; - - [self hideAndClearResolverQueue]; - }]; - - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -+ (void)onJavaScriptDidFailToLoad { - [self hideAndClearResolverQueue]; - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -RCT_EXPORT_METHOD(hide:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) { - if (_resolverQueue == nil) - _resolverQueue = [[NSMutableArray alloc] init]; - - [_resolverQueue addObject:resolve]; - - if ([RCTBootSplash isHidden] || RCTRunningInAppExtension()) - return [RCTBootSplash clearResolverQueue]; - - if (_nativeHidden) - return [RCTBootSplash hideAndClearResolverQueue]; -} - -RCT_EXPORT_METHOD(getVisibilityStatus:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) { - resolve([RCTBootSplash isHidden] ? @"hidden" : @"visible"); -} - -@end diff --git a/ios/NewExpensify/RCTBootSplash.mm b/ios/NewExpensify/RCTBootSplash.mm new file mode 100644 index 000000000000..3e4a086f07b1 --- /dev/null +++ b/ios/NewExpensify/RCTBootSplash.mm @@ -0,0 +1,186 @@ +#import "RCTBootSplash.h" + +#import + +#if RCT_NEW_ARCH_ENABLED +#import +#import +#else +#import +#endif + +static NSMutableArray *_resolveQueue = nil; +static UIView *_loadingView = nil; +static UIView *_rootView = nil; +static float _duration = 0; +static bool _nativeHidden = false; +static bool _transitioning = false; + +@implementation RCTBootSplash + +RCT_EXPORT_MODULE(); + +- (dispatch_queue_t)methodQueue { + return dispatch_get_main_queue(); +} + ++ (void)invalidateBootSplash { + _resolveQueue = nil; + _rootView = nil; + _nativeHidden = false; +} + ++ (bool)isLoadingViewHidden { + return _loadingView == nil || [_loadingView isHidden]; +} + ++ (bool)hasResolveQueue { + return _resolveQueue != nil; +} + ++ (void)clearResolveQueue { + if (![self hasResolveQueue]) + return; + + while ([_resolveQueue count] > 0) { + RCTPromiseResolveBlock resolve = [_resolveQueue objectAtIndex:0]; + [_resolveQueue removeObjectAtIndex:0]; + resolve(@(true)); + } +} + ++ (void)hideLoadingView { + if ([self isLoadingViewHidden]) + return [RCTBootSplash clearResolveQueue]; + + if (_duration > 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + _transitioning = true; + + if (_rootView == nil) + return; + + [UIView transitionWithView:_rootView + duration:_duration / 1000.0 + options:UIViewAnimationOptionTransitionCrossDissolve + animations:^{ + _loadingView.hidden = YES; + } + completion:^(__unused BOOL finished) { + [_loadingView removeFromSuperview]; + _loadingView = nil; + + _transitioning = false; + return [RCTBootSplash clearResolveQueue]; + }]; + }); + } else { + _loadingView.hidden = YES; + [_loadingView removeFromSuperview]; + _loadingView = nil; + + return [RCTBootSplash clearResolveQueue]; + } +} + ++ (void)initWithStoryboard:(NSString * _Nonnull)storyboardName + rootView:(UIView * _Nullable)rootView { + if (rootView == nil +#ifdef RCT_NEW_ARCH_ENABLED + || ![rootView isKindOfClass:[RCTSurfaceHostingProxyRootView class]] +#else + || ![rootView isKindOfClass:[RCTRootView class]] +#endif + || _rootView != nil + || [self hasResolveQueue] // hide has already been called, abort init + || RCTRunningInAppExtension()) + return; + +#ifdef RCT_NEW_ARCH_ENABLED + RCTSurfaceHostingProxyRootView *proxy = (RCTSurfaceHostingProxyRootView *)rootView; + _rootView = (RCTSurfaceHostingView *)proxy.surface.view; +#else + _rootView = (RCTRootView *)rootView; +#endif + + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil]; + + _loadingView = [[storyboard instantiateInitialViewController] view]; + _loadingView.hidden = NO; + + [_rootView addSubview:_loadingView]; + + [NSTimer scheduledTimerWithTimeInterval:0.35 + repeats:NO + block:^(NSTimer * _Nonnull timer) { + // wait for native iOS launch screen to fade out + _nativeHidden = true; + + // hide has been called before native launch screen fade out + if ([self hasResolveQueue]) + [self hideLoadingView]; + }]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(onJavaScriptDidLoad) + name:RCTJavaScriptDidLoadNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(onJavaScriptDidFailToLoad) + name:RCTJavaScriptDidFailToLoadNotification + object:nil]; +} + ++ (void)onJavaScriptDidLoad { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + ++ (void)onJavaScriptDidFailToLoad { + [self hideLoadingView]; + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (void)hide:(double)duration + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject { + if (_resolveQueue == nil) + _resolveQueue = [[NSMutableArray alloc] init]; + + [_resolveQueue addObject:resolve]; + + if ([RCTBootSplash isLoadingViewHidden] || RCTRunningInAppExtension()) + return [RCTBootSplash clearResolveQueue]; + + _duration = lroundf((float)duration); + + if (_nativeHidden) + return [RCTBootSplash hideLoadingView]; +} + +- (void)getVisibilityStatus:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject { + if ([RCTBootSplash isLoadingViewHidden]) + return resolve(@"hidden"); + else if (_transitioning) + return resolve(@"transitioning"); + else + return resolve(@"visible"); +} + +RCT_REMAP_METHOD(hide, + resolve:(RCTPromiseResolveBlock)resolve + rejecte:(RCTPromiseRejectBlock)reject) { + [self hide:0 + resolve:resolve + reject:reject]; +} + +RCT_REMAP_METHOD(getVisibilityStatus, + getVisibilityStatusWithResolve:(RCTPromiseResolveBlock)resolve + rejecte:(RCTPromiseRejectBlock)reject) { + [self getVisibilityStatus:resolve + reject:reject]; +} + +@end diff --git a/ios/NewExpensifyTests/Info.plist b/ios/NewExpensifyTests/Info.plist index 91e8a4657385..327e10cbdfc1 100644 --- a/ios/NewExpensifyTests/Info.plist +++ b/ios/NewExpensifyTests/Info.plist @@ -15,10 +15,10 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 1.4.60 + 1.4.61 CFBundleSignature ???? CFBundleVersion - 1.4.60.7 + 1.4.61.5 diff --git a/ios/NotificationServiceExtension/Info.plist b/ios/NotificationServiceExtension/Info.plist index d629dd873734..45e3ee5f91ae 100644 --- a/ios/NotificationServiceExtension/Info.plist +++ b/ios/NotificationServiceExtension/Info.plist @@ -11,9 +11,9 @@ CFBundleName $(PRODUCT_NAME) CFBundleShortVersionString - 1.4.60 + 1.4.61 CFBundleVersion - 1.4.60.7 + 1.4.61.5 NSExtension NSExtensionPointIdentifier diff --git a/ios/Podfile b/ios/Podfile index 83c21797bd0a..4f00eb2adfdd 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -2,6 +2,7 @@ require File.join(File.dirname(`node --print "require.resolve('expo/package.json # Set the type of Mapbox SDK to use # This value is used by $RNMapboxMaps $RNMapboxMapsImpl = 'mapbox' +$VCDisableFrameProcessors = true def node_require(script) # Resolve script with node to allow for hoisting @@ -16,7 +17,7 @@ node_require('react-native/scripts/react_native_pods.rb') node_require('react-native-permissions/scripts/setup.rb') # Our min supported iOS version is higher than the default (min_ios_version_supported) to support libraires such as Airship -platform :ios, 13.4 +platform :ios, 14.0 prepare_react_native_project! setup_permissions([ @@ -73,6 +74,12 @@ target 'NewExpensify' do config = use_native_modules! + # Flags change depending on the env values. + flags = get_default_flags() + + # ENV Variable enables/disables TurboModules + ENV['RCT_NEW_ARCH_ENABLED'] = '1'; + use_react_native!( :path => config[:reactNativePath], # An absolute path to your application root. diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 32a8bca75bcd..2f53f00918bf 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -20,7 +20,7 @@ PODS: - Airship (= 16.12.1) - Airship/MessageCenter (= 16.12.1) - Airship/PreferenceCenter (= 16.12.1) - - AirshipServiceExtension (16.12.5) + - AirshipServiceExtension (17.8.0) - AppAuth (1.6.2): - AppAuth/Core (= 1.6.2) - AppAuth/ExternalUserAgent (= 1.6.2) @@ -50,19 +50,25 @@ PODS: - ExpoModulesCore - ExpoModulesCore (1.11.8): - glog + - hermes-engine - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager - React-NativeModulesApple - React-RCTAppDelegate + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - FBLazyVector (0.73.2) - - FBReactNativeSpec (0.73.2): - - RCT-Folly (= 2022.05.16.00) - - RCTRequired (= 0.73.2) - - RCTTypeSafety (= 0.73.2) - - React-Core (= 0.73.2) - - React-jsi (= 0.73.2) - - ReactCommon/turbomodule/core (= 0.73.2) + - Yoga + - FBLazyVector (0.73.4) - Firebase/Analytics (8.8.0): - Firebase/Core - Firebase/Core (8.8.0): @@ -154,41 +160,51 @@ PODS: - GoogleUtilities/Network (~> 7.4) - "GoogleUtilities/NSData+zlib (~> 7.4)" - nanopb (~> 2.30908.0) - - GoogleDataTransport (9.3.0): + - GoogleDataTransport (9.4.1): - GoogleUtilities/Environment (~> 7.7) - - nanopb (< 2.30910.0, >= 2.30908.0) + - nanopb (< 2.30911.0, >= 2.30908.0) - PromisesObjC (< 3.0, >= 1.2) - GoogleSignIn (7.0.0): - AppAuth (~> 1.5) - GTMAppAuth (< 3.0, >= 1.3) - GTMSessionFetcher/Core (< 4.0, >= 1.1) - - GoogleUtilities/AppDelegateSwizzler (7.12.0): + - GoogleUtilities/AppDelegateSwizzler (7.13.0): - GoogleUtilities/Environment - GoogleUtilities/Logger - GoogleUtilities/Network - - GoogleUtilities/Environment (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (7.13.0): + - GoogleUtilities/Privacy - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/ISASwizzler (7.12.0) - - GoogleUtilities/Logger (7.12.0): + - GoogleUtilities/ISASwizzler (7.13.0): + - GoogleUtilities/Privacy + - GoogleUtilities/Logger (7.13.0): - GoogleUtilities/Environment - - GoogleUtilities/MethodSwizzler (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/MethodSwizzler (7.13.0): - GoogleUtilities/Logger - - GoogleUtilities/Network (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/Network (7.13.0): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (7.12.0)" - - GoogleUtilities/Reachability (7.12.0): + - "GoogleUtilities/NSData+zlib (7.13.0)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (7.13.0) + - GoogleUtilities/Reachability (7.13.0): - GoogleUtilities/Logger - - GoogleUtilities/UserDefaults (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/UserDefaults (7.13.0): - GoogleUtilities/Logger + - GoogleUtilities/Privacy - GTMAppAuth (2.0.0): - AppAuth/Core (~> 1.6) - GTMSessionFetcher/Core (< 4.0, >= 1.5) - - GTMSessionFetcher/Core (3.2.0) - - hermes-engine (0.73.2): - - hermes-engine/Pre-built (= 0.73.2) - - hermes-engine/Pre-built (0.73.2) + - GTMSessionFetcher/Core (3.3.1) + - hermes-engine (0.73.4): + - hermes-engine/Pre-built (= 0.73.4) + - hermes-engine/Pre-built (0.73.4) - libaom (3.0.0): - libvmaf (>= 2.2.0) - libavif (0.11.1): @@ -212,29 +228,63 @@ PODS: - libwebp/webp (1.3.2): - libwebp/sharpyuv - lottie-ios (4.3.4) - - lottie-react-native (6.4.1): + - lottie-react-native (6.5.1): + - glog + - hermes-engine - lottie-ios (~> 4.3.3) + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core - - MapboxCommon (23.8.6) - - MapboxCoreMaps (10.16.4): - - MapboxCommon (~> 23.8) - - MapboxMaps (10.16.4): - - MapboxCommon (= 23.8.6) - - MapboxCoreMaps (= 10.16.4) + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - MapboxCommon (23.9.1) + - MapboxCoreMaps (10.16.6): + - MapboxCommon (~> 23.9) + - MapboxMaps (10.16.6): + - MapboxCommon (= 23.9.1) + - MapboxCoreMaps (= 10.16.6) - MapboxMobileEvents (= 1.0.10) - - Turf (~> 2.0) + - Turf (= 2.7.0) - MapboxMobileEvents (1.0.10) - nanopb (2.30908.0): - nanopb/decode (= 2.30908.0) - nanopb/encode (= 2.30908.0) - nanopb/decode (2.30908.0) - nanopb/encode (2.30908.0) - - Onfido (29.6.0) + - Onfido (29.7.1) - onfido-react-native-sdk (10.6.0): - - Onfido (~> 29.6.0) - - React - - Plaid (4.7.0) - - PromisesObjC (2.3.1) + - glog + - hermes-engine + - Onfido (~> 29.7.0) + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - Plaid (5.2.1) + - PromisesObjC (2.4.0) - RCT-Folly (2022.05.16.00): - boost - DoubleConversion @@ -257,45 +307,49 @@ PODS: - fmt (~> 6.2.1) - glog - libevent - - RCTRequired (0.73.2) - - RCTTypeSafety (0.73.2): - - FBLazyVector (= 0.73.2) - - RCTRequired (= 0.73.2) - - React-Core (= 0.73.2) - - React (0.73.2): - - React-Core (= 0.73.2) - - React-Core/DevSupport (= 0.73.2) - - React-Core/RCTWebSocket (= 0.73.2) - - React-RCTActionSheet (= 0.73.2) - - React-RCTAnimation (= 0.73.2) - - React-RCTBlob (= 0.73.2) - - React-RCTImage (= 0.73.2) - - React-RCTLinking (= 0.73.2) - - React-RCTNetwork (= 0.73.2) - - React-RCTSettings (= 0.73.2) - - React-RCTText (= 0.73.2) - - React-RCTVibration (= 0.73.2) - - React-callinvoker (0.73.2) - - React-Codegen (0.73.2): + - RCTRequired (0.73.4) + - RCTTypeSafety (0.73.4): + - FBLazyVector (= 0.73.4) + - RCTRequired (= 0.73.4) + - React-Core (= 0.73.4) + - React (0.73.4): + - React-Core (= 0.73.4) + - React-Core/DevSupport (= 0.73.4) + - React-Core/RCTWebSocket (= 0.73.4) + - React-RCTActionSheet (= 0.73.4) + - React-RCTAnimation (= 0.73.4) + - React-RCTBlob (= 0.73.4) + - React-RCTImage (= 0.73.4) + - React-RCTLinking (= 0.73.4) + - React-RCTNetwork (= 0.73.4) + - React-RCTSettings (= 0.73.4) + - React-RCTText (= 0.73.4) + - React-RCTVibration (= 0.73.4) + - React-callinvoker (0.73.4) + - React-Codegen (0.73.4): - DoubleConversion - - FBReactNativeSpec - glog - hermes-engine - RCT-Folly - RCTRequired - RCTTypeSafety - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-graphics - React-jsi - React-jsiexecutor - React-NativeModulesApple - - React-rncore + - React-rendererdebug + - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-Core (0.73.2): + - React-Core (0.73.4): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) - - React-Core/Default (= 0.73.2) + - React-Core/Default (= 0.73.4) - React-cxxreact - React-hermes - React-jsi @@ -305,7 +359,7 @@ PODS: - React-utils - SocketRocket (= 0.6.1) - Yoga - - React-Core/CoreModulesHeaders (0.73.2): + - React-Core/CoreModulesHeaders (0.73.4): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) @@ -319,7 +373,7 @@ PODS: - React-utils - SocketRocket (= 0.6.1) - Yoga - - React-Core/Default (0.73.2): + - React-Core/Default (0.73.4): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) @@ -332,23 +386,23 @@ PODS: - React-utils - SocketRocket (= 0.6.1) - Yoga - - React-Core/DevSupport (0.73.2): + - React-Core/DevSupport (0.73.4): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) - - React-Core/Default (= 0.73.2) - - React-Core/RCTWebSocket (= 0.73.2) + - React-Core/Default (= 0.73.4) + - React-Core/RCTWebSocket (= 0.73.4) - React-cxxreact - React-hermes - React-jsi - React-jsiexecutor - - React-jsinspector (= 0.73.2) + - React-jsinspector (= 0.73.4) - React-perflogger - React-runtimescheduler - React-utils - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.73.2): + - React-Core/RCTActionSheetHeaders (0.73.4): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) @@ -362,7 +416,7 @@ PODS: - React-utils - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTAnimationHeaders (0.73.2): + - React-Core/RCTAnimationHeaders (0.73.4): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) @@ -376,7 +430,7 @@ PODS: - React-utils - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTBlobHeaders (0.73.2): + - React-Core/RCTBlobHeaders (0.73.4): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) @@ -390,7 +444,7 @@ PODS: - React-utils - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTImageHeaders (0.73.2): + - React-Core/RCTImageHeaders (0.73.4): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) @@ -404,7 +458,7 @@ PODS: - React-utils - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTLinkingHeaders (0.73.2): + - React-Core/RCTLinkingHeaders (0.73.4): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) @@ -418,7 +472,7 @@ PODS: - React-utils - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTNetworkHeaders (0.73.2): + - React-Core/RCTNetworkHeaders (0.73.4): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) @@ -432,7 +486,7 @@ PODS: - React-utils - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTSettingsHeaders (0.73.2): + - React-Core/RCTSettingsHeaders (0.73.4): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) @@ -446,7 +500,7 @@ PODS: - React-utils - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTTextHeaders (0.73.2): + - React-Core/RCTTextHeaders (0.73.4): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) @@ -460,7 +514,7 @@ PODS: - React-utils - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTVibrationHeaders (0.73.2): + - React-Core/RCTVibrationHeaders (0.73.4): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) @@ -474,11 +528,11 @@ PODS: - React-utils - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTWebSocket (0.73.2): + - React-Core/RCTWebSocket (0.73.4): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) - - React-Core/Default (= 0.73.2) + - React-Core/Default (= 0.73.4) - React-cxxreact - React-hermes - React-jsi @@ -488,33 +542,33 @@ PODS: - React-utils - SocketRocket (= 0.6.1) - Yoga - - React-CoreModules (0.73.2): + - React-CoreModules (0.73.4): - RCT-Folly (= 2022.05.16.00) - - RCTTypeSafety (= 0.73.2) + - RCTTypeSafety (= 0.73.4) - React-Codegen - - React-Core/CoreModulesHeaders (= 0.73.2) - - React-jsi (= 0.73.2) + - React-Core/CoreModulesHeaders (= 0.73.4) + - React-jsi (= 0.73.4) - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.73.2) + - React-RCTImage (= 0.73.4) - ReactCommon - SocketRocket (= 0.6.1) - - React-cxxreact (0.73.2): + - React-cxxreact (0.73.4): - boost (= 1.83.0) - DoubleConversion - fmt (~> 6.2.1) - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) - - React-callinvoker (= 0.73.2) - - React-debug (= 0.73.2) - - React-jsi (= 0.73.2) - - React-jsinspector (= 0.73.2) - - React-logger (= 0.73.2) - - React-perflogger (= 0.73.2) - - React-runtimeexecutor (= 0.73.2) - - React-debug (0.73.2) - - React-Fabric (0.73.2): + - React-callinvoker (= 0.73.4) + - React-debug (= 0.73.4) + - React-jsi (= 0.73.4) + - React-jsinspector (= 0.73.4) + - React-logger (= 0.73.4) + - React-perflogger (= 0.73.4) + - React-runtimeexecutor (= 0.73.4) + - React-debug (0.73.4) + - React-Fabric (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -525,20 +579,20 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.73.2) - - React-Fabric/attributedstring (= 0.73.2) - - React-Fabric/componentregistry (= 0.73.2) - - React-Fabric/componentregistrynative (= 0.73.2) - - React-Fabric/components (= 0.73.2) - - React-Fabric/core (= 0.73.2) - - React-Fabric/imagemanager (= 0.73.2) - - React-Fabric/leakchecker (= 0.73.2) - - React-Fabric/mounting (= 0.73.2) - - React-Fabric/scheduler (= 0.73.2) - - React-Fabric/telemetry (= 0.73.2) - - React-Fabric/templateprocessor (= 0.73.2) - - React-Fabric/textlayoutmanager (= 0.73.2) - - React-Fabric/uimanager (= 0.73.2) + - React-Fabric/animations (= 0.73.4) + - React-Fabric/attributedstring (= 0.73.4) + - React-Fabric/componentregistry (= 0.73.4) + - React-Fabric/componentregistrynative (= 0.73.4) + - React-Fabric/components (= 0.73.4) + - React-Fabric/core (= 0.73.4) + - React-Fabric/imagemanager (= 0.73.4) + - React-Fabric/leakchecker (= 0.73.4) + - React-Fabric/mounting (= 0.73.4) + - React-Fabric/scheduler (= 0.73.4) + - React-Fabric/telemetry (= 0.73.4) + - React-Fabric/templateprocessor (= 0.73.4) + - React-Fabric/textlayoutmanager (= 0.73.4) + - React-Fabric/uimanager (= 0.73.4) - React-graphics - React-jsi - React-jsiexecutor @@ -547,7 +601,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.73.2): + - React-Fabric/animations (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -566,7 +620,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.73.2): + - React-Fabric/attributedstring (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -585,7 +639,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.73.2): + - React-Fabric/componentregistry (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -604,7 +658,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.73.2): + - React-Fabric/componentregistrynative (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -623,7 +677,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.73.2): + - React-Fabric/components (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -634,17 +688,17 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/inputaccessory (= 0.73.2) - - React-Fabric/components/legacyviewmanagerinterop (= 0.73.2) - - React-Fabric/components/modal (= 0.73.2) - - React-Fabric/components/rncore (= 0.73.2) - - React-Fabric/components/root (= 0.73.2) - - React-Fabric/components/safeareaview (= 0.73.2) - - React-Fabric/components/scrollview (= 0.73.2) - - React-Fabric/components/text (= 0.73.2) - - React-Fabric/components/textinput (= 0.73.2) - - React-Fabric/components/unimplementedview (= 0.73.2) - - React-Fabric/components/view (= 0.73.2) + - React-Fabric/components/inputaccessory (= 0.73.4) + - React-Fabric/components/legacyviewmanagerinterop (= 0.73.4) + - React-Fabric/components/modal (= 0.73.4) + - React-Fabric/components/rncore (= 0.73.4) + - React-Fabric/components/root (= 0.73.4) + - React-Fabric/components/safeareaview (= 0.73.4) + - React-Fabric/components/scrollview (= 0.73.4) + - React-Fabric/components/text (= 0.73.4) + - React-Fabric/components/textinput (= 0.73.4) + - React-Fabric/components/unimplementedview (= 0.73.4) + - React-Fabric/components/view (= 0.73.4) - React-graphics - React-jsi - React-jsiexecutor @@ -653,7 +707,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/inputaccessory (0.73.2): + - React-Fabric/components/inputaccessory (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -672,7 +726,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.73.2): + - React-Fabric/components/legacyviewmanagerinterop (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -691,7 +745,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/modal (0.73.2): + - React-Fabric/components/modal (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -710,7 +764,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/rncore (0.73.2): + - React-Fabric/components/rncore (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -729,7 +783,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.73.2): + - React-Fabric/components/root (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -748,7 +802,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/safeareaview (0.73.2): + - React-Fabric/components/safeareaview (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -767,7 +821,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/scrollview (0.73.2): + - React-Fabric/components/scrollview (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -786,7 +840,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/text (0.73.2): + - React-Fabric/components/text (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -805,7 +859,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/textinput (0.73.2): + - React-Fabric/components/textinput (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -824,7 +878,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/unimplementedview (0.73.2): + - React-Fabric/components/unimplementedview (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -843,7 +897,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.73.2): + - React-Fabric/components/view (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -863,7 +917,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/core (0.73.2): + - React-Fabric/core (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -882,7 +936,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.73.2): + - React-Fabric/imagemanager (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -901,7 +955,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.73.2): + - React-Fabric/leakchecker (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -920,7 +974,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.73.2): + - React-Fabric/mounting (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -939,7 +993,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.73.2): + - React-Fabric/scheduler (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -958,7 +1012,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.73.2): + - React-Fabric/telemetry (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -977,7 +1031,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.73.2): + - React-Fabric/templateprocessor (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -996,7 +1050,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/textlayoutmanager (0.73.2): + - React-Fabric/textlayoutmanager (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -1016,7 +1070,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.73.2): + - React-Fabric/uimanager (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog @@ -1035,42 +1089,42 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricImage (0.73.2): + - React-FabricImage (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog - hermes-engine - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired (= 0.73.2) - - RCTTypeSafety (= 0.73.2) + - RCTRequired (= 0.73.4) + - RCTTypeSafety (= 0.73.4) - React-Fabric - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.73.2) + - React-jsiexecutor (= 0.73.4) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-graphics (0.73.2): + - React-graphics (0.73.4): - glog - RCT-Folly/Fabric (= 2022.05.16.00) - - React-Core/Default (= 0.73.2) + - React-Core/Default (= 0.73.4) - React-utils - - React-hermes (0.73.2): + - React-hermes (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) - RCT-Folly/Futures (= 2022.05.16.00) - - React-cxxreact (= 0.73.2) + - React-cxxreact (= 0.73.4) - React-jsi - - React-jsiexecutor (= 0.73.2) - - React-jsinspector (= 0.73.2) - - React-perflogger (= 0.73.2) - - React-ImageManager (0.73.2): + - React-jsiexecutor (= 0.73.4) + - React-jsinspector (= 0.73.4) + - React-perflogger (= 0.73.4) + - React-ImageManager (0.73.4): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1079,260 +1133,647 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.73.2): + - React-jserrorhandler (0.73.4): - RCT-Folly/Fabric (= 2022.05.16.00) - React-debug - React-jsi - React-Mapbuffer - - React-jsi (0.73.2): + - React-jsi (0.73.4): - boost (= 1.83.0) - DoubleConversion - fmt (~> 6.2.1) - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) - - React-jsiexecutor (0.73.2): + - React-jsiexecutor (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) - - React-cxxreact (= 0.73.2) - - React-jsi (= 0.73.2) - - React-perflogger (= 0.73.2) - - React-jsinspector (0.73.2) - - React-logger (0.73.2): + - React-cxxreact (= 0.73.4) + - React-jsi (= 0.73.4) + - React-perflogger (= 0.73.4) + - React-jsinspector (0.73.4) + - React-jsitracing (0.73.4): + - React-jsi + - React-logger (0.73.4): - glog - - React-Mapbuffer (0.73.2): + - React-Mapbuffer (0.73.4): - glog - React-debug - react-native-airship (15.3.1): - AirshipFrameworkProxy (= 2.1.1) - - React-Core - - react-native-blob-util (0.19.4): - - React-Core - - react-native-cameraroll (7.4.0): - glog + - hermes-engine - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core - - react-native-config (1.4.6): - - react-native-config/App (= 1.4.6) - - react-native-config/App (1.4.6): - - React-Core - - react-native-document-picker (9.1.1): - - React-Core - - react-native-geolocation (3.0.6): - - React-Core - - react-native-image-picker (7.0.3): - - React-Core - - react-native-key-command (1.0.6): - - React-Core - - react-native-launch-arguments (4.0.2): - - React - - react-native-netinfo (11.2.1): - - React-Core - - react-native-pager-view (6.2.2): - - React-Core - - react-native-pdf (6.7.3): - - React-Core - - react-native-performance (5.1.0): - - React-Core - - react-native-plaid-link-sdk (10.8.0): - - Plaid (~> 4.7.0) - - React-Core - - react-native-quick-sqlite (8.0.0-beta.2): - - React - - React-callinvoker - - React-Core - - react-native-release-profiler (0.1.6): + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-blob-util (0.19.4): - glog + - hermes-engine - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core - - react-native-render-html (6.3.1): - - React-Core - - react-native-safe-area-context (4.8.2): - - React-Core - - react-native-view-shot (3.8.0): - - React-Core - - react-native-webview (13.6.3): - - React-Core - - React-nativeconfig (0.73.2) - - React-NativeModulesApple (0.73.2): + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-cameraroll (7.4.0): - glog - hermes-engine - - React-callinvoker + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core - - React-cxxreact - - React-jsi - - React-runtimeexecutor + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.73.2) - - React-RCTActionSheet (0.73.2): - - React-Core/RCTActionSheetHeaders (= 0.73.2) - - React-RCTAnimation (0.73.2): - - RCT-Folly (= 2022.05.16.00) + - Yoga + - react-native-config (1.5.0): + - react-native-config/App (= 1.5.0) + - react-native-config/App (1.5.0): + - RCT-Folly + - RCTRequired - RCTTypeSafety + - React - React-Codegen - - React-Core/RCTAnimationHeaders - - React-jsi - - React-NativeModulesApple - - ReactCommon - - React-RCTAppDelegate (0.73.2): + - React-RCTFabric + - ReactCommon/turbomodule/core + - react-native-document-picker (9.1.1): - RCT-Folly - RCTRequired - RCTTypeSafety + - React-Codegen - React-Core - - React-CoreModules - - React-hermes - - React-nativeconfig - - React-NativeModulesApple - - React-RCTFabric - - React-RCTImage - - React-RCTNetwork - - React-runtimescheduler - - ReactCommon - - React-RCTBlob (0.73.2): + - ReactCommon/turbomodule/core + - react-native-geolocation (3.0.6): + - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety - React-Codegen - - React-Core/RCTBlobHeaders - - React-Core/RCTWebSocket - - React-jsi - - React-NativeModulesApple - - React-RCTNetwork - - ReactCommon - - React-RCTFabric (0.73.2): - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - React-Core - React-debug - React-Fabric - - React-FabricImage - React-graphics - React-ImageManager - - React-jsi - - React-nativeconfig - - React-RCTImage - - React-RCTText + - React-NativeModulesApple + - React-RCTFabric - React-rendererdebug - - React-runtimescheduler - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core - Yoga - - React-RCTImage (0.73.2): - - RCT-Folly (= 2022.05.16.00) - - RCTTypeSafety - - React-Codegen - - React-Core/RCTImageHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTNetwork - - ReactCommon - - React-RCTLinking (0.73.2): - - React-Codegen - - React-Core/RCTLinkingHeaders (= 0.73.2) - - React-jsi (= 0.73.2) - - React-NativeModulesApple - - ReactCommon - - ReactCommon/turbomodule/core (= 0.73.2) - - React-RCTNetwork (0.73.2): - - RCT-Folly (= 2022.05.16.00) + - react-native-image-picker (7.0.3): + - RCT-Folly + - RCTRequired - RCTTypeSafety + - React - React-Codegen - - React-Core/RCTNetworkHeaders - - React-jsi - - React-NativeModulesApple - - ReactCommon - - React-RCTSettings (0.73.2): + - React-RCTFabric + - ReactCommon/turbomodule/core + - react-native-key-command (1.0.8): + - glog + - hermes-engine - RCT-Folly (= 2022.05.16.00) + - RCTRequired - RCTTypeSafety - React-Codegen - - React-Core/RCTSettingsHeaders - - React-jsi + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager - React-NativeModulesApple - - ReactCommon - - React-RCTText (0.73.2): - - React-Core/RCTTextHeaders (= 0.73.2) + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core - Yoga - - React-RCTVibration (0.73.2): - - RCT-Folly (= 2022.05.16.00) - - React-Codegen - - React-Core/RCTVibrationHeaders - - React-jsi - - React-NativeModulesApple - - ReactCommon - - React-rendererdebug (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - RCT-Folly (= 2022.05.16.00) - - React-debug - - React-rncore (0.73.2) - - React-runtimeexecutor (0.73.2): - - React-jsi (= 0.73.2) - - React-runtimescheduler (0.73.2): + - react-native-launch-arguments (4.0.2): + - React + - react-native-netinfo (11.2.1): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) - - React-callinvoker - - React-cxxreact + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core - React-debug - - React-jsi + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric - React-rendererdebug - - React-runtimeexecutor - React-utils - - React-utils (0.73.2): + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-pager-view (6.2.3): - glog + - hermes-engine - RCT-Folly (= 2022.05.16.00) - - React-debug - - ReactCommon (0.73.2): - - React-logger (= 0.73.2) - - ReactCommon/turbomodule (= 0.73.2) - - ReactCommon/turbomodule (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-pdf (6.7.3): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-performance (5.1.0): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-plaid-link-sdk (11.5.0): + - glog + - hermes-engine + - Plaid (~> 5.2.0) + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-quick-sqlite (8.0.0-beta.2): + - React + - React-callinvoker + - React-Core + - react-native-release-profiler (0.1.6): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-render-html (6.3.1): + - React-Core + - react-native-safe-area-context (4.8.2): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - react-native-safe-area-context/common (= 4.8.2) + - react-native-safe-area-context/fabric (= 4.8.2) + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-safe-area-context/common (4.8.2): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-safe-area-context/fabric (4.8.2): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - react-native-safe-area-context/common + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-view-shot (3.8.0): + - React-Core + - react-native-webview (13.6.4): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-nativeconfig (0.73.4) + - React-NativeModulesApple (0.73.4): + - glog + - hermes-engine + - React-callinvoker + - React-Core + - React-cxxreact + - React-jsi + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-perflogger (0.73.4) + - React-RCTActionSheet (0.73.4): + - React-Core/RCTActionSheetHeaders (= 0.73.4) + - React-RCTAnimation (0.73.4): + - RCT-Folly (= 2022.05.16.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTAnimationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-RCTAppDelegate (0.73.4): + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-CoreModules + - React-debug + - React-Fabric + - React-graphics + - React-hermes + - React-nativeconfig + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-RCTNetwork + - React-rendererdebug + - React-RuntimeApple + - React-RuntimeCore + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - ReactCommon + - React-RCTBlob (0.73.4): + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-Codegen + - React-Core/RCTBlobHeaders + - React-Core/RCTWebSocket + - React-jsi + - React-NativeModulesApple + - React-RCTNetwork + - ReactCommon + - React-RCTFabric (0.73.4): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-graphics + - React-ImageManager + - React-jsi + - React-nativeconfig + - React-RCTImage + - React-RCTText + - React-rendererdebug + - React-runtimescheduler + - React-utils + - Yoga + - React-RCTImage (0.73.4): + - RCT-Folly (= 2022.05.16.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTImageHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTNetwork + - ReactCommon + - React-RCTLinking (0.73.4): + - React-Codegen + - React-Core/RCTLinkingHeaders (= 0.73.4) + - React-jsi (= 0.73.4) + - React-NativeModulesApple + - ReactCommon + - ReactCommon/turbomodule/core (= 0.73.4) + - React-RCTNetwork (0.73.4): + - RCT-Folly (= 2022.05.16.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTNetworkHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-RCTSettings (0.73.4): + - RCT-Folly (= 2022.05.16.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTSettingsHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-RCTText (0.73.4): + - React-Core/RCTTextHeaders (= 0.73.4) + - Yoga + - React-RCTVibration (0.73.4): + - RCT-Folly (= 2022.05.16.00) + - React-Codegen + - React-Core/RCTVibrationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-rendererdebug (0.73.4): + - DoubleConversion + - fmt (~> 6.2.1) + - RCT-Folly (= 2022.05.16.00) + - React-debug + - React-rncore (0.73.4) + - React-RuntimeApple (0.73.4): + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - React-callinvoker + - React-Core/Default + - React-CoreModules + - React-cxxreact + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-Mapbuffer + - React-NativeModulesApple + - React-RCTFabric + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - React-utils + - React-RuntimeCore (0.73.4): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - React-cxxreact + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-runtimeexecutor + - React-runtimescheduler + - React-runtimeexecutor (0.73.4): + - React-jsi (= 0.73.4) + - React-RuntimeHermes (0.73.4): + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - React-jsi + - React-jsitracing + - React-nativeconfig + - React-utils + - React-runtimescheduler (0.73.4): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-callinvoker + - React-cxxreact + - React-debug + - React-jsi + - React-rendererdebug + - React-runtimeexecutor + - React-utils + - React-utils (0.73.4): + - glog + - RCT-Folly (= 2022.05.16.00) + - React-debug + - ReactCommon (0.73.4): + - React-logger (= 0.73.4) + - ReactCommon/turbomodule (= 0.73.4) + - ReactCommon/turbomodule (0.73.4): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-callinvoker (= 0.73.4) + - React-cxxreact (= 0.73.4) + - React-jsi (= 0.73.4) + - React-logger (= 0.73.4) + - React-perflogger (= 0.73.4) + - ReactCommon/turbomodule/bridging (= 0.73.4) + - ReactCommon/turbomodule/core (= 0.73.4) + - ReactCommon/turbomodule/bridging (0.73.4): + - DoubleConversion + - fmt (~> 6.2.1) - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) - - React-callinvoker (= 0.73.2) - - React-cxxreact (= 0.73.2) - - React-jsi (= 0.73.2) - - React-logger (= 0.73.2) - - React-perflogger (= 0.73.2) - - ReactCommon/turbomodule/bridging (= 0.73.2) - - ReactCommon/turbomodule/core (= 0.73.2) - - ReactCommon/turbomodule/bridging (0.73.2): + - React-callinvoker (= 0.73.4) + - React-cxxreact (= 0.73.4) + - React-jsi (= 0.73.4) + - React-logger (= 0.73.4) + - React-perflogger (= 0.73.4) + - ReactCommon/turbomodule/core (0.73.4): - DoubleConversion - fmt (~> 6.2.1) - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) - - React-callinvoker (= 0.73.2) - - React-cxxreact (= 0.73.2) - - React-jsi (= 0.73.2) - - React-logger (= 0.73.2) - - React-perflogger (= 0.73.2) - - ReactCommon/turbomodule/core (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) + - React-callinvoker (= 0.73.4) + - React-cxxreact (= 0.73.4) + - React-jsi (= 0.73.4) + - React-logger (= 0.73.4) + - React-perflogger (= 0.73.4) + - RNAppleAuthentication (2.2.2): + - React-Core + - RNCAsyncStorage (1.21.0): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNCClipboard (1.13.2): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNCPicker (2.6.1): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNDeviceInfo (10.3.1): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) - - React-callinvoker (= 0.73.2) - - React-cxxreact (= 0.73.2) - - React-jsi (= 0.73.2) - - React-logger (= 0.73.2) - - React-perflogger (= 0.73.2) - - RNAppleAuthentication (2.2.2): - - React-Core - - RNCAsyncStorage (1.21.0): - - React-Core - - RNCClipboard (1.13.2): - - React-Core - - RNCPicker (2.5.1): - - React-Core - - RNDeviceInfo (10.3.0): + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - RNDevMenu (4.1.1): - React-Core - React-Core/DevSupport @@ -1353,20 +1794,87 @@ PODS: - React-Core - RNFBApp - RNFlashList (1.6.3): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - RNFS (2.20.0): - React-Core - RNGestureHandler (2.14.1): - glog + - hermes-engine - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - RNGoogleSignin (10.0.1): - GoogleSignIn (~> 7.0) - React-Core - RNLiveMarkdown (0.1.38): - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNLiveMarkdown/common (= 0.1.38) + - Yoga + - RNLiveMarkdown/common (0.1.38): + - glog + - hermes-engine - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - RNLocalize (2.2.6): - React-Core - rnmapbox-maps (10.1.11): @@ -1376,32 +1884,158 @@ PODS: - rnmapbox-maps/DynamicLibrary (= 10.1.11) - Turf - rnmapbox-maps/DynamicLibrary (10.1.11): + - hermes-engine - MapboxMaps (~> 10.16.4) + - RCT-Folly + - RCTRequired + - RCTTypeSafety - React + - React-Codegen - React-Core + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core - Turf + - Yoga - RNPermissions (3.9.3): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - RNReactNativeHapticFeedback (2.2.0): + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - ReactCommon/turbomodule/core - RNReanimated (3.7.2): - glog + - hermes-engine - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - Yoga - RNScreens (3.29.0): - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNScreens/common (= 3.29.0) + - Yoga + - RNScreens/common (3.29.0): + - glog + - hermes-engine - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - RNShare (10.0.2): + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-RCTFabric + - ReactCommon/turbomodule/core - RNSound (0.11.2): - React-Core - RNSound/Core (= 0.11.2) - RNSound/Core (0.11.2): - React-Core - RNSVG (14.1.0): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNSVG/common (= 14.1.0) + - Yoga + - RNSVG/common (14.1.0): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - SDWebImage (5.17.0): - SDWebImage/Core (= 5.17.0) - SDWebImage/Core (5.17.0) @@ -1416,9 +2050,24 @@ PODS: - SocketRocket (0.6.1) - Turf (2.7.0) - VisionCamera (4.0.0-beta.13): - - React - - React-callinvoker + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga - Yoga (1.14.0) DEPENDENCIES: @@ -1433,7 +2082,6 @@ DEPENDENCIES: - ExpoImageManipulator (from `../node_modules/expo-image-manipulator/ios`) - ExpoModulesCore (from `../node_modules/expo-modules-core`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - libevent (~> 2.1.12) @@ -1460,6 +2108,7 @@ DEPENDENCIES: - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - "react-native-airship (from `../node_modules/@ua/react-native-airship`)" @@ -1498,7 +2147,10 @@ DEPENDENCIES: - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) - React-rncore (from `../node_modules/react-native/ReactCommon`) + - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) + - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) @@ -1593,8 +2245,6 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-modules-core" FBLazyVector: :path: "../node_modules/react-native/Libraries/FBLazyVector" - FBReactNativeSpec: - :path: "../node_modules/react-native/React/FBReactNativeSpec" glog: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: @@ -1642,6 +2292,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/jsiexecutor" React-jsinspector: :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" + React-jsitracing: + :path: "../node_modules/react-native/ReactCommon/hermes/executor/" React-logger: :path: "../node_modules/react-native/ReactCommon/logger" React-Mapbuffer: @@ -1718,8 +2370,14 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" React-rncore: :path: "../node_modules/react-native/ReactCommon" + React-RuntimeApple: + :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" + React-RuntimeCore: + :path: "../node_modules/react-native/ReactCommon/react/runtime" React-runtimeexecutor: :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-RuntimeHermes: + :path: "../node_modules/react-native/ReactCommon/react/runtime" React-runtimescheduler: :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" React-utils: @@ -1782,7 +2440,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Airship: 2f4510b497a8200780752a5e0304a9072bfffb6d AirshipFrameworkProxy: ea1b6c665c798637b93c465b5e505be3011f1d9d - AirshipServiceExtension: 89c6e25a69f3458d9dbd581c700cffb196b61930 + AirshipServiceExtension: 0a5fb14c3fd1879355ab05a81d10f64512a4f79c AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570 boost: d3f49c53809116a5d38da093a8aa78bf551aed09 BVLinearGradient: 421743791a59d259aec53f4c58793aad031da2ca @@ -1792,9 +2450,8 @@ SPEC CHECKSUMS: Expo: 1e3bcf9dd99de57a636127057f6b488f0609681a ExpoImage: 390c524542b258f8173f475c1cc71f016444a7be ExpoImageManipulator: c1d7cb865eacd620a35659f3da34c70531f10b59 - ExpoModulesCore: 96d1751929ad10622773bb729ab28a8423f0dd0c - FBLazyVector: fbc4957d9aa695250b55d879c1d86f79d7e69ab4 - FBReactNativeSpec: 86de768f89901ef6ed3207cd686362189d64ac88 + ExpoModulesCore: 83dfc98358de225bd0953401ce5b0c14fa8eabd0 + FBLazyVector: 84f6edbe225f38aebd9deaf1540a4160b1f087d7 Firebase: 629510f1a9ddb235f3a7c5c8ceb23ba887f0f814 FirebaseABTesting: 10cbce8db9985ae2e3847ea44e9947dd18f94e10 FirebaseAnalytics: 5506ea8b867d8423485a84b4cd612d279f7b0b8a @@ -1807,122 +2464,126 @@ SPEC CHECKSUMS: fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2 GoogleAppMeasurement: 5ba1164e3c844ba84272555e916d0a6d3d977e91 - GoogleDataTransport: 57c22343ab29bc686febbf7cbb13bad167c2d8fe + GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a GoogleSignIn: b232380cf495a429b8095d3178a8d5855b42e842 - GoogleUtilities: 0759d1a57ebb953965c2dfe0ba4c82e95ccc2e34 + GoogleUtilities: d053d902a8edaa9904e1bd00c37535385b8ed152 GTMAppAuth: 99fb010047ba3973b7026e45393f51f27ab965ae - GTMSessionFetcher: 41b9ef0b4c08a6db4b7eb51a21ae5183ec99a2c8 - hermes-engine: b361c9ef5ef3cda53f66e195599b47e1f84ffa35 + GTMSessionFetcher: 8a1b34ad97ebe6f909fb8b9b77fba99943007556 + hermes-engine: b2669ce35fc4ac14f523b307aff8896799829fe2 libaom: 144606b1da4b5915a1054383c3a4459ccdb3c661 libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7 libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 libvmaf: 27f523f1e63c694d14d534cd0fddd2fab0ae8711 libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009 lottie-ios: 3d98679b41fa6fd6aff2352b3953dbd3df8a397e - lottie-react-native: a2ae9c27c273b060b2affff2957bc0ff7fdca353 - MapboxCommon: 90f76693dc02438acbb5ea9a5b266a4c0eb1c875 - MapboxCoreMaps: 7b07d1ca8c454a4381daf09df901b9d6bf90bce0 - MapboxMaps: cbb38845a9bf49b124f0e937975d560a4e01894e + lottie-react-native: 80bda323805fa62005afff0583d2927a89108f20 + MapboxCommon: 20466d839cc43381c44df09d19f7f794b55b9a93 + MapboxCoreMaps: c21f433decbb295874f0c2464e492166db813b56 + MapboxMaps: c3b36646b9038706bbceb5de203bcdd0f411e9d0 MapboxMobileEvents: de50b3a4de180dd129c326e09cd12c8adaaa46d6 nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96 - Onfido: c52e797b10cc9e6d29ba91996cb62e501000bfdd - onfido-react-native-sdk: 4e7f0a7a986ed93cb906d2e0b67a6aab9202de0b - Plaid: 431ef9be5314a1345efb451bc5e6b067bfb3b4c6 - PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 + Onfido: 342cbecd7a4383e98dfe7f9c35e98aaece599062 + onfido-react-native-sdk: 81e930e77236a0fc3da90e6a6eb834734d8ec2f5 + Plaid: 7829e84db6d766a751c91a402702946d2977ddcb + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 RCT-Folly: 7169b2b1c44399c76a47b5deaaba715eeeb476c0 - RCTRequired: 9b1e7e262745fb671e33c51c1078d093bd30e322 - RCTTypeSafety: a759e3b086eccf3e2cbf2493d22f28e082f958e6 - React: 805f5dd55bbdb92c36b4914c64aaae4c97d358dc - React-callinvoker: 6a697867607c990c2c2c085296ee32cfb5e47c01 - React-Codegen: c4447ffa339f4e7a22e0c9c800eec9084f31899c - React-Core: 49f66fecc7695464e9b7bc7dc7cd9473d2c60584 - React-CoreModules: 710e7c557a1a8180bd1645f5b4bf79f4bd3f5417 - React-cxxreact: 345857b5e4be000c0527df78be3b41a0677a20ce - React-debug: f1637bce73342b2f6eee4982508fdfb088667a87 - React-Fabric: 4dfcff8f14d8e5a7a60b11b7862dad2a9d99c65b - React-FabricImage: 4a9e9510b7f28bbde6a743b18c0cb941a142e938 - React-graphics: dd5af9d8b1b45171fd6933e19fed522f373bcb10 - React-hermes: a52d183a5cf8ccb7020ce3df4275b89d01e6b53e - React-ImageManager: c5b7db131eff71443d7f3a8d686fd841d18befd3 - React-jserrorhandler: 97a6a12e2344c3c4fdd7ba1edefb005215c732f8 - React-jsi: a182068133f80918cd0eec77875abaf943a0b6be - React-jsiexecutor: dacd00ce8a18fc00a0ae6c25e3015a6437e5d2e8 - React-jsinspector: 03644c063fc3621c9a4e8bf263a8150909129618 - React-logger: 66b168e2b2bee57bd8ce9e69f739d805732a5570 - React-Mapbuffer: 9ee041e1d7be96da6d76a251f92e72b711c651d6 - react-native-airship: 6ded22e4ca54f2f80db80b7b911c2b9b696d9335 - react-native-blob-util: 30a6c9fd067aadf9177e61a998f2c7efb670598d - react-native-cameraroll: 3301d62d45616ee9da55ceed04be8d788c3de3ef - react-native-config: 7cd105e71d903104e8919261480858940a6b9c0e - react-native-document-picker: 3599b238843369026201d2ef466df53f77ae0452 - react-native-geolocation: 0f7fe8a4c2de477e278b0365cce27d089a8c5903 - react-native-image-picker: 2381c008bbb09e72395a2d043c147b11bd1523d9 - react-native-key-command: 5af6ee30ff4932f78da6a2109017549042932aa5 + RCTRequired: ab7f915c15569f04a49669e573e6e319a53f9faa + RCTTypeSafety: 63b97ced7b766865057e7154db0e81ce4ee6cf1e + React: 1c87497e50fa40ba9c54e5ea5e53483a0f8eecc0 + React-callinvoker: e3a52a9a93e3eb004d7282c26a4fb27003273fe6 + React-Codegen: 05f85e0e087f402978cfe57822a8debc07127a13 + React-Core: d0ecde72894b792cb8922efaa0990199cbe85169 + React-CoreModules: 2ff1684dd517f0c441495d90a704d499f05e9d0a + React-cxxreact: d9be2fac926741052395da0a6d0bab8d71e2f297 + React-debug: 4678e73a37cb501d784e99ff0f219b4940362a3b + React-Fabric: 460ee9d4b8b9de3382504a711430bfead1d5be1e + React-FabricImage: d0a0631bc8ad9143f42bfccf9d3d533a144cc3d6 + React-graphics: f0d5040263a9649e2a70ebe27b3120c49411afef + React-hermes: b9ac2f7b0c1eeb206eb883583cab7a973d570a6e + React-ImageManager: 6c4bf9d5ed363ead7b5aaf820a3feab221b7063e + React-jserrorhandler: 6e7a7e187583e14dc7a0053a2bdd66c252ea3b21 + React-jsi: 380cd24dd81a705dd042c18989fb10b07182210c + React-jsiexecutor: 8ed7a18b9f119440efdcd424c8257dc7e18067e2 + React-jsinspector: 9ac353eccf6ab54d1e0a33862ba91221d1e88460 + React-jsitracing: e8a2dafb9878dbcad02b6b2b88e66267fb427b74 + React-logger: 0a57b68dd2aec7ff738195f081f0520724b35dab + React-Mapbuffer: 63913773ed7f96b814a2521e13e6d010282096ad + react-native-airship: 2ed75ff2278f11ff1c1ab08ed68f5bf02727b971 + react-native-blob-util: a3ee23cfdde79c769c138d505670055de233b07a + react-native-cameraroll: 95ce0d1a7d2d1fe55bf627ab806b64de6c3e69e9 + react-native-config: 5ce986133b07fc258828b20b9506de0e683efc1c + react-native-document-picker: 8532b8af7c2c930f9e202aac484ac785b0f4f809 + react-native-geolocation: dcc37809bc117ffdb5946fecc127d62319ccd4a9 + react-native-image-picker: f8a13ff106bcc7eb00c71ce11fdc36aac2a44440 + react-native-key-command: 74d18ad516037536c2f671ef0914bcce7739b2f5 react-native-launch-arguments: 5f41e0abf88a15e3c5309b8875d6fd5ac43df49d - react-native-netinfo: 8a7fd3f7130ef4ad2fb4276d5c9f8d3f28d2df3d - react-native-pager-view: 02a5c4962530f7efc10dd51ee9cdabeff5e6c631 - react-native-pdf: b4ca3d37a9a86d9165287741c8b2ef4d8940c00e - react-native-performance: cef2b618d47b277fb5c3280b81a3aad1e72f2886 - react-native-plaid-link-sdk: df1618a85a615d62ff34e34b76abb7a56497fbc1 + react-native-netinfo: 6479e7e2198f936e5abc14a3ec4d469ccbaf81e2 + react-native-pager-view: 9ac6bc0fb3fa31c6d403b253ee361e62ff7ccf7f + react-native-pdf: cd256a00b9d65cb1008dcca2792d7bfb8874838d + react-native-performance: 1aa5960d005159f4ab20be15b44714b53b44e075 + react-native-plaid-link-sdk: 93870f8cd1de8e0acca5cb5020188bdc94e15db6 react-native-quick-sqlite: bcc7a7a250a40222f18913a97cd356bf82d0a6c4 - react-native-release-profiler: 86f2004d5f8c4fff17d90a5580513519a685d7ae + react-native-release-profiler: 42fc8e09b4f6f9b7d14cc5a15c72165e871c0918 react-native-render-html: 96c979fe7452a0a41559685d2f83b12b93edac8c - react-native-safe-area-context: 0ee144a6170530ccc37a0fd9388e28d06f516a89 + react-native-safe-area-context: e8bdd57d9f8d34cc336f0ee6acb30712a8454446 react-native-view-shot: 6b7ed61d77d88580fed10954d45fad0eb2d47688 - react-native-webview: 88293a0f23eca8465c0433c023ec632930e644d0 - React-nativeconfig: d753fbbc8cecc8ae413d615599ac378bbf6999bb - React-NativeModulesApple: 964f4eeab1b4325e8b6a799cf4444c3fd4eb0a9c - React-perflogger: 29efe63b7ef5fbaaa50ef6eaa92482f98a24b97e - React-RCTActionSheet: 69134c62aefd362027b20da01cd5d14ffd39db3f - React-RCTAnimation: 3b5a57087c7a5e727855b803d643ac1d445488f5 - React-RCTAppDelegate: a3ce9b69c0620a1717d08e826d4dc7ad8a3a3cae - React-RCTBlob: 26ea660f2be1e6de62f2d2ad9a9c7b9bfabb786f - React-RCTFabric: bb6dbbff2f80b9489f8b2f1d2554aa040aa2e3cd - React-RCTImage: 27b27f4663df9e776d0549ed2f3536213e793f1b - React-RCTLinking: 962880ce9d0e2ea83fd182953538fc4ed757d4da - React-RCTNetwork: 73a756b44d4ad584bae13a5f1484e3ce12accac8 - React-RCTSettings: 6d7f8d807f05de3d01cfb182d14e5f400716faac - React-RCTText: 73006e95ca359595c2510c1c0114027c85a6ddd3 - React-RCTVibration: 599f427f9cbdd9c4bf38959ca020e8fef0717211 - React-rendererdebug: f2946e0a1c3b906e71555a7c4a39aa6a6c0e639b - React-rncore: 74030de0ffef7b1a3fb77941168624534cc9ae7f - React-runtimeexecutor: 2d1f64f58193f00a3ad71d3f89c2bfbfe11cf5a5 - React-runtimescheduler: df8945a656356ff10f58f65a70820478bfcf33ad - React-utils: f5bc61e7ea3325c0732ae2d755f4441940163b85 - ReactCommon: 45b5d4f784e869c44a6f5a8fad5b114ca8f78c53 + react-native-webview: a5f5f316527235f869992aaaf05050776198806d + React-nativeconfig: d7af5bae6da70fa15ce44f045621cf99ed24087c + React-NativeModulesApple: 0123905d5699853ac68519607555a9a4f5c7b3ac + React-perflogger: 8a1e1af5733004bdd91258dcefbde21e0d1faccd + React-RCTActionSheet: 64bbff3a3963664c2d0146f870fe8e0264aee4c4 + React-RCTAnimation: b698168a7269265a4694727196484342d695f0c1 + React-RCTAppDelegate: a84b4bf99b871d87b41d7a768e7860d207fb4e31 + React-RCTBlob: 47f8c3b2b4b7fa2c5f19c43f0b7f77f57fb9d953 + React-RCTFabric: 6067a32d683d0c2b84d444548bc15a263c64abed + React-RCTImage: ac0e77a44c290b20db783649b2b9cddc93e3eb99 + React-RCTLinking: e626fd2900913fe5d25922ea1be394b7aafa09c9 + React-RCTNetwork: d3114bce3977dafe8bd06421b29812f5a8527ba0 + React-RCTSettings: a53511f90d8df637a1a11ac729179a4d2f734481 + React-RCTText: f0176f5f5952f9a4a2c7354f5ae71f7c420aaf34 + React-RCTVibration: 8160223c6eda5b187079fec204f80eca8b8f3177 + React-rendererdebug: ed286b4da8648c27d6ed3ae1410d4b21ba890d5a + React-rncore: 75cbcc46868e809bb7e738d4565ba85f3dbd5cdc + React-RuntimeApple: f4848a388e4c782d3b8d4ca9c48179163418fe56 + React-RuntimeCore: 272998adc56066404df36b1a3a2be9a56c6ee086 + React-runtimeexecutor: e6ab6bb083dbdbdd489cff426ed0bce0652e6edf + React-RuntimeHermes: d2c368065ef82d4f8e6daa662352de5a195bdb57 + React-runtimescheduler: ed48e5faac6751e66ee1261c4bd01643b436f112 + React-utils: 6e5ad394416482ae21831050928ae27348f83487 + ReactCommon: 840a955d37b7f3358554d819446bffcf624b2522 RNAppleAuthentication: 0571c08da8c327ae2afc0261b48b4a515b0286a6 - RNCAsyncStorage: 618d03a5f52fbccb3d7010076bc54712844c18ef - RNCClipboard: 60fed4b71560d7bfe40e9d35dea9762b024da86d - RNCPicker: 529d564911e93598cc399b56cc0769ce3675f8c8 - RNDeviceInfo: 4701f0bf2a06b34654745053db0ce4cb0c53ada7 + RNCAsyncStorage: 559f22cc4b582414e783fd7255974b29e24b451c + RNCClipboard: c73bbc2e9012120161f1012578418827983bfd0c + RNCPicker: c77efa39690952647b83d8085520bf50ebf94ecb + RNDeviceInfo: cbf78fdb515ae73e641ee7c6b474f77a0299e7e6 RNDevMenu: 72807568fe4188bd4c40ce32675d82434b43c45d RNFBAnalytics: f76bfa164ac235b00505deb9fc1776634056898c RNFBApp: 729c0666395b1953198dc4a1ec6deb8fbe1c302e RNFBCrashlytics: 2061ca863e8e2fa1aae9b12477d7dfa8e88ca0f9 RNFBPerf: 389914cda4000fe0d996a752532a591132cbf3f9 - RNFlashList: 4b4b6b093afc0df60ae08f9cbf6ccd4c836c667a + RNFlashList: 5b0e8311e4cf1ad91e410fd7c8526a89fb5826d1 RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 - RNGestureHandler: 25b969a1ffc806b9f9ad2e170d4a3b049c6af85e + RNGestureHandler: 1190c218cdaaf029ee1437076a3fbbc3297d89fb RNGoogleSignin: ccaa4a81582cf713eea562c5dd9dc1961a715fd0 - RNLiveMarkdown: 0f7819903c63a786bbb80fd620baba10d43dfe18 + RNLiveMarkdown: 9d974f060d0bd857f7d96fac0e9a1539363baa5e RNLocalize: d4b8af4e442d4bcca54e68fc687a2129b4d71a81 - rnmapbox-maps: fcf7f1cbdc8bd7569c267d07284e8a5c7bee06ed - RNPermissions: 9b086c8f05b2e2faa587fdc31f4c5ab4509728aa - RNReactNativeHapticFeedback: ec56a5f81c3941206fd85625fa669ffc7b4545f9 - RNReanimated: 3850671fd0c67051ea8e1e648e8c3e86bf3a28eb - RNScreens: b582cb834dc4133307562e930e8fa914b8c04ef2 - RNShare: 859ff710211285676b0bcedd156c12437ea1d564 + rnmapbox-maps: 3e273e0e867a079ec33df9ee33bb0482434b897d + RNPermissions: 8990fc2c10da3640938e6db1647cb6416095b729 + RNReactNativeHapticFeedback: 616c35bdec7d20d4c524a7949ca9829c09e35f37 + RNReanimated: 605409e0d0ced6f2e194ae585fedc2f8a1935bf2 + RNScreens: f7b8bb892b4957f6f91e5dfd9a191e7f13ce8baa + RNShare: 2a4cdfc0626ad56b0ef583d424f2038f772afe58 RNSound: 6c156f925295bdc83e8e422e7d8b38d33bc71852 - RNSVG: ba3e7232f45e34b7b47e74472386cf4e1a676d0a + RNSVG: db32cfcad0a221fd175e0882eff7bcba7690380a SDWebImage: 750adf017a315a280c60fde706ab1e552a3ae4e9 SDWebImageAVIFCoder: 8348fef6d0ec69e129c66c9fe4d74fbfbf366112 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c SDWebImageWebPCoder: af09429398d99d524cae2fe00f6f0f6e491ed102 SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 Turf: 13d1a92d969ca0311bbc26e8356cca178ce95da2 - VisionCamera: 9f26224fce1233ffdad9fa4e56863e3de2190dc0 - Yoga: e64aa65de36c0832d04e8c7bd614396c77a80047 + VisionCamera: 3033e0dd5272d46e97bcb406adea4ae0e6907abf + Yoga: 1b901a6d6eeba4e8a2e8f308f708691cdb5db312 -PODFILE CHECKSUM: a431c146e1501391834a2f299a74093bac53b530 +PODFILE CHECKSUM: a25a81f2b50270f0c0bd0aff2e2ebe4d0b4ec06d COCOAPODS: 1.13.0 diff --git a/ios/tmp.xcconfig b/ios/tmp.xcconfig deleted file mode 100644 index 8b137891791f..000000000000 --- a/ios/tmp.xcconfig +++ /dev/null @@ -1 +0,0 @@ - diff --git a/package-lock.json b/package-lock.json index d5e2fcef2392..d61279efb85b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "new.expensify", - "version": "1.4.60-7", + "version": "1.4.61-5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "new.expensify", - "version": "1.4.60-7", + "version": "1.4.61-5", "hasInstallScript": true, "license": "MIT", "dependencies": { "@dotlottie/react-player": "^1.6.3", - "@expensify/react-native-live-markdown": "0.1.38", + "@expensify/react-native-live-markdown": "github:Expensify/react-native-live-markdown#f762be6fa832419dbbecb8a0cf64bf7dce18545b", "@expo/metro-runtime": "~3.1.1", "@formatjs/intl-datetimeformat": "^6.10.0", "@formatjs/intl-listformat": "^7.2.2", @@ -33,13 +33,13 @@ "@react-native-firebase/crashlytics": "^12.3.0", "@react-native-firebase/perf": "^12.3.0", "@react-native-google-signin/google-signin": "^10.0.1", - "@react-native-picker/picker": "2.5.1", + "@react-native-picker/picker": "2.6.1", "@react-navigation/material-top-tabs": "^6.6.3", "@react-navigation/native": "6.1.12", "@react-navigation/stack": "6.3.16", "@react-ng/bounds-observer": "^0.2.1", - "@rnmapbox/maps": "^10.1.11", - "@shopify/flash-list": "^1.6.3", + "@rnmapbox/maps": "10.1.11", + "@shopify/flash-list": "1.6.3", "@ua/react-native-airship": "^15.3.1", "@vue/preload-webpack-plugin": "^2.0.0", "awesome-phonenumber": "^5.4.0", @@ -60,7 +60,7 @@ "jest-expo": "50.0.1", "jest-when": "^3.5.2", "lodash": "4.17.21", - "lottie-react-native": "6.4.1", + "lottie-react-native": "6.5.1", "mapbox-gl": "^2.15.0", "onfido-sdk-ui": "14.15.0", "process": "^0.11.10", @@ -72,15 +72,15 @@ "react-content-loader": "^7.0.0", "react-dom": "18.1.0", "react-error-boundary": "^4.0.11", - "react-fast-pdf": "^1.0.8", + "react-fast-pdf": "^1.0.6", "react-map-gl": "^7.1.3", - "react-native": "0.73.2", + "react-native": "0.73.4", "react-native-android-location-enabler": "^2.0.1", "react-native-blob-util": "0.19.4", "react-native-collapsible": "^1.6.1", - "react-native-config": "^1.4.5", + "react-native-config": "1.5.0", "react-native-dev-menu": "^4.1.1", - "react-native-device-info": "^10.3.0", + "react-native-device-info": "10.3.1", "react-native-document-picker": "^9.1.1", "react-native-draggable-flatlist": "^4.0.1", "react-native-fs": "^2.20.0", @@ -89,18 +89,18 @@ "react-native-haptic-feedback": "^2.2.0", "react-native-image-picker": "^7.0.3", "react-native-image-size": "git+https://github.com/Expensify/react-native-image-size#bf3ad41a61c4f6f80ed4d497599ef5247a2dd002", - "react-native-key-command": "^1.0.6", + "react-native-key-command": "^1.0.8", "react-native-launch-arguments": "^4.0.2", "react-native-linear-gradient": "^2.8.1", "react-native-localize": "^2.2.6", "react-native-modal": "^13.0.0", "react-native-onyx": "2.0.23", - "react-native-pager-view": "6.2.2", + "react-native-pager-view": "6.2.3", "react-native-pdf": "6.7.3", "react-native-performance": "^5.1.0", "react-native-permissions": "^3.9.3", "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#da50d2c5c54e268499047f9cc98b8df4196c1ddf", - "react-native-plaid-link-sdk": "10.8.0", + "react-native-plaid-link-sdk": "11.5.0", "react-native-qrcode-svg": "^6.2.0", "react-native-quick-sqlite": "^8.0.0-beta.2", "react-native-reanimated": "^3.7.2", @@ -118,7 +118,7 @@ "react-native-web": "^0.19.9", "react-native-web-linear-gradient": "^1.1.2", "react-native-web-sound": "^0.1.3", - "react-native-webview": "13.6.3", + "react-native-webview": "13.6.4", "react-pdf": "7.3.3", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", @@ -150,8 +150,8 @@ "@octokit/plugin-paginate-rest": "3.1.0", "@octokit/plugin-throttling": "4.1.0", "@react-native-community/eslint-config": "3.0.0", - "@react-native/babel-preset": "^0.73.19", - "@react-native/metro-config": "^0.73.3", + "@react-native/babel-preset": "^0.73.21", + "@react-native/metro-config": "^0.73.5", "@react-navigation/devtools": "^6.0.10", "@storybook/addon-a11y": "^6.5.9", "@storybook/addon-essentials": "^7.0.0", @@ -202,7 +202,7 @@ "css-loader": "^6.7.2", "diff-so-fancy": "^1.3.0", "dotenv": "^16.0.3", - "electron": "^29.0.0", + "electron": "^29.2.0", "electron-builder": "24.13.2", "eslint": "^7.6.0", "eslint-config-airbnb-typescript": "^17.1.0", @@ -3098,8 +3098,12 @@ }, "node_modules/@expensify/react-native-live-markdown": { "version": "0.1.38", - "resolved": "https://registry.npmjs.org/@expensify/react-native-live-markdown/-/react-native-live-markdown-0.1.38.tgz", - "integrity": "sha512-0EcXvK/eqeJdesX8DBibJ+V2KX9n5Gbmg0fWTk93mGOUA70h3W6lO68nuch40X+RgQdOgIf50BMfzbBzzVdJwA==", + "resolved": "git+ssh://git@github.com/Expensify/react-native-live-markdown.git#f762be6fa832419dbbecb8a0cf64bf7dce18545b", + "integrity": "sha512-m8+t3y1AtpvFAt3GAwRCiGwcOhUagOTCvwJ87kMGO5q/SKB2GCBHYMQ0QZaHw2QvAzRE6v2kCdqItX5DY+4MPQ==", + "license": "MIT", + "workspaces": [ + "example" + ], "engines": { "node": ">= 18.0.0" }, @@ -5184,11 +5188,13 @@ }, "node_modules/@hapi/hoek": { "version": "9.3.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" }, "node_modules/@hapi/topo": { "version": "5.1.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -7899,18 +7905,19 @@ } }, "node_modules/@react-native-community/cli": { - "version": "12.3.0", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-clean": "12.3.0", - "@react-native-community/cli-config": "12.3.0", - "@react-native-community/cli-debugger-ui": "12.3.0", - "@react-native-community/cli-doctor": "12.3.0", - "@react-native-community/cli-hermes": "12.3.0", - "@react-native-community/cli-plugin-metro": "12.3.0", - "@react-native-community/cli-server-api": "12.3.0", - "@react-native-community/cli-tools": "12.3.0", - "@react-native-community/cli-types": "12.3.0", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.2.tgz", + "integrity": "sha512-WgoUWwLDcf/G1Su2COUUVs3RzAwnV/vUTdISSpAUGgSc57mPabaAoUctKTnfYEhCnE3j02k3VtaVPwCAFRO3TQ==", + "dependencies": { + "@react-native-community/cli-clean": "12.3.2", + "@react-native-community/cli-config": "12.3.2", + "@react-native-community/cli-debugger-ui": "12.3.2", + "@react-native-community/cli-doctor": "12.3.2", + "@react-native-community/cli-hermes": "12.3.2", + "@react-native-community/cli-plugin-metro": "12.3.2", + "@react-native-community/cli-server-api": "12.3.2", + "@react-native-community/cli-tools": "12.3.2", + "@react-native-community/cli-types": "12.3.2", "chalk": "^4.1.2", "commander": "^9.4.1", "deepmerge": "^4.3.0", @@ -7929,17 +7936,19 @@ } }, "node_modules/@react-native-community/cli-clean": { - "version": "12.3.0", - "license": "MIT", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.2.tgz", + "integrity": "sha512-90k2hCX0ddSFPT7EN7h5SZj0XZPXP0+y/++v262hssoey3nhurwF57NGWN0XAR0o9BSW7+mBfeInfabzDraO6A==", "dependencies": { - "@react-native-community/cli-tools": "12.3.0", + "@react-native-community/cli-tools": "12.3.2", "chalk": "^4.1.2", "execa": "^5.0.0" } }, "node_modules/@react-native-community/cli-clean/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -7952,7 +7961,8 @@ }, "node_modules/@react-native-community/cli-clean/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7966,7 +7976,8 @@ }, "node_modules/@react-native-community/cli-clean/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -7976,18 +7987,21 @@ }, "node_modules/@react-native-community/cli-clean/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli-clean/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@react-native-community/cli-clean/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -7996,10 +8010,11 @@ } }, "node_modules/@react-native-community/cli-config": { - "version": "12.3.0", - "license": "MIT", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.2.tgz", + "integrity": "sha512-UUCzDjQgvAVL/57rL7eOuFUhd+d+6qfM7V8uOegQFeFEmSmvUUDLYoXpBa5vAK9JgQtSqMBJ1Shmwao+/oElxQ==", "dependencies": { - "@react-native-community/cli-tools": "12.3.0", + "@react-native-community/cli-tools": "12.3.2", "chalk": "^4.1.2", "cosmiconfig": "^5.1.0", "deepmerge": "^4.3.0", @@ -8009,7 +8024,8 @@ }, "node_modules/@react-native-community/cli-config/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -8022,7 +8038,8 @@ }, "node_modules/@react-native-community/cli-config/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8036,7 +8053,8 @@ }, "node_modules/@react-native-community/cli-config/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -8046,11 +8064,13 @@ }, "node_modules/@react-native-community/cli-config/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli-config/node_modules/cosmiconfig": { "version": "5.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dependencies": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", @@ -8063,14 +8083,16 @@ }, "node_modules/@react-native-community/cli-config/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@react-native-community/cli-config/node_modules/import-fresh": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", "dependencies": { "caller-path": "^2.0.0", "resolve-from": "^3.0.0" @@ -8081,7 +8103,8 @@ }, "node_modules/@react-native-community/cli-config/node_modules/parse-json": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -8092,14 +8115,16 @@ }, "node_modules/@react-native-community/cli-config/node_modules/resolve-from": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "engines": { "node": ">=4" } }, "node_modules/@react-native-community/cli-config/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -8108,20 +8133,22 @@ } }, "node_modules/@react-native-community/cli-debugger-ui": { - "version": "12.3.0", - "license": "MIT", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.2.tgz", + "integrity": "sha512-nSWQUL+51J682DlfcC1bjkUbQbGvHCC25jpqTwHIjmmVjYCX1uHuhPSqQKgPNdvtfOkrkACxczd7kVMmetxY2Q==", "dependencies": { "serve-static": "^1.13.1" } }, "node_modules/@react-native-community/cli-doctor": { - "version": "12.3.0", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-config": "12.3.0", - "@react-native-community/cli-platform-android": "12.3.0", - "@react-native-community/cli-platform-ios": "12.3.0", - "@react-native-community/cli-tools": "12.3.0", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.2.tgz", + "integrity": "sha512-GrAabdY4qtBX49knHFvEAdLtCjkmndjTeqhYO6BhsbAeKOtspcLT/0WRgdLIaKODRa61ADNB3K5Zm4dU0QrZOg==", + "dependencies": { + "@react-native-community/cli-config": "12.3.2", + "@react-native-community/cli-platform-android": "12.3.2", + "@react-native-community/cli-platform-ios": "12.3.2", + "@react-native-community/cli-tools": "12.3.2", "chalk": "^4.1.2", "command-exists": "^1.2.8", "deepmerge": "^4.3.0", @@ -8139,7 +8166,8 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -8152,7 +8180,8 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8166,7 +8195,8 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -8176,11 +8206,13 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli-doctor/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } @@ -8192,7 +8224,8 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -8202,7 +8235,8 @@ }, "node_modules/@react-native-community/cli-doctor/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -8211,11 +8245,12 @@ } }, "node_modules/@react-native-community/cli-hermes": { - "version": "12.3.0", - "license": "MIT", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.2.tgz", + "integrity": "sha512-SL6F9O8ghp4ESBFH2YAPLtIN39jdnvGBKnK4FGKpDCjtB3DnUmDsGFlH46S+GGt5M6VzfG2eeKEOKf3pZ6jUzA==", "dependencies": { - "@react-native-community/cli-platform-android": "12.3.0", - "@react-native-community/cli-tools": "12.3.0", + "@react-native-community/cli-platform-android": "12.3.2", + "@react-native-community/cli-tools": "12.3.2", "chalk": "^4.1.2", "hermes-profile-transformer": "^0.0.6", "ip": "^1.1.5" @@ -8223,7 +8258,8 @@ }, "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -8236,7 +8272,8 @@ }, "node_modules/@react-native-community/cli-hermes/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8250,7 +8287,8 @@ }, "node_modules/@react-native-community/cli-hermes/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -8260,11 +8298,13 @@ }, "node_modules/@react-native-community/cli-hermes/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli-hermes/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } @@ -8276,7 +8316,8 @@ }, "node_modules/@react-native-community/cli-hermes/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -8285,10 +8326,11 @@ } }, "node_modules/@react-native-community/cli-platform-android": { - "version": "12.3.0", - "license": "MIT", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.2.tgz", + "integrity": "sha512-MZ5nO8yi/N+Fj2i9BJcJ9C/ez+9/Ir7lQt49DWRo9YDmzye66mYLr/P2l/qxsixllbbDi7BXrlLpxaEhMrDopg==", "dependencies": { - "@react-native-community/cli-tools": "12.3.0", + "@react-native-community/cli-tools": "12.3.2", "chalk": "^4.1.2", "execa": "^5.0.0", "fast-xml-parser": "^4.2.4", @@ -8298,7 +8340,8 @@ }, "node_modules/@react-native-community/cli-platform-android/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -8311,7 +8354,8 @@ }, "node_modules/@react-native-community/cli-platform-android/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8325,7 +8369,8 @@ }, "node_modules/@react-native-community/cli-platform-android/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -8335,18 +8380,21 @@ }, "node_modules/@react-native-community/cli-platform-android/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@react-native-community/cli-platform-android/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -8355,10 +8403,11 @@ } }, "node_modules/@react-native-community/cli-platform-ios": { - "version": "12.3.0", - "license": "MIT", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.2.tgz", + "integrity": "sha512-OcWEAbkev1IL6SUiQnM6DQdsvfsKZhRZtoBNSj9MfdmwotVZSOEZJ+IjZ1FR9ChvMWayO9ns/o8LgoQxr1ZXeg==", "dependencies": { - "@react-native-community/cli-tools": "12.3.0", + "@react-native-community/cli-tools": "12.3.2", "chalk": "^4.1.2", "execa": "^5.0.0", "fast-xml-parser": "^4.0.12", @@ -8368,7 +8417,8 @@ }, "node_modules/@react-native-community/cli-platform-ios/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -8381,7 +8431,8 @@ }, "node_modules/@react-native-community/cli-platform-ios/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8395,7 +8446,8 @@ }, "node_modules/@react-native-community/cli-platform-ios/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -8405,18 +8457,21 @@ }, "node_modules/@react-native-community/cli-platform-ios/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli-platform-ios/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@react-native-community/cli-platform-ios/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -8425,15 +8480,17 @@ } }, "node_modules/@react-native-community/cli-plugin-metro": { - "version": "12.3.0", - "license": "MIT" + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.2.tgz", + "integrity": "sha512-FpFBwu+d2E7KRhYPTkKvQsWb2/JKsJv+t1tcqgQkn+oByhp+qGyXBobFB8/R3yYvRRDCSDhS+atWTJzk9TjM8g==" }, "node_modules/@react-native-community/cli-server-api": { - "version": "12.3.0", - "license": "MIT", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.2.tgz", + "integrity": "sha512-iwa7EO9XFA/OjI5pPLLpI/6mFVqv8L73kNck3CNOJIUCCveGXBKK0VMyOkXaf/BYnihgQrXh+x5cxbDbggr7+Q==", "dependencies": { - "@react-native-community/cli-debugger-ui": "12.3.0", - "@react-native-community/cli-tools": "12.3.0", + "@react-native-community/cli-debugger-ui": "12.3.2", + "@react-native-community/cli-tools": "12.3.2", "compression": "^1.7.1", "connect": "^3.6.5", "errorhandler": "^1.5.1", @@ -8468,14 +8525,16 @@ }, "node_modules/@react-native-community/cli-server-api/node_modules/ansi-regex": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" } }, "node_modules/@react-native-community/cli-server-api/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -8503,7 +8562,8 @@ }, "node_modules/@react-native-community/cli-server-api/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -8513,7 +8573,8 @@ }, "node_modules/@react-native-community/cli-server-api/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli-server-api/node_modules/has-flag": { "version": "4.0.0", @@ -8525,7 +8586,8 @@ }, "node_modules/@react-native-community/cli-server-api/node_modules/pretty-format": { "version": "26.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dependencies": { "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", @@ -8538,7 +8600,8 @@ }, "node_modules/@react-native-community/cli-server-api/node_modules/react-is": { "version": "17.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/@react-native-community/cli-server-api/node_modules/supports-color": { "version": "7.2.0", @@ -8553,7 +8616,8 @@ }, "node_modules/@react-native-community/cli-server-api/node_modules/ws": { "version": "7.5.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "engines": { "node": ">=8.3.0" }, @@ -8571,8 +8635,9 @@ } }, "node_modules/@react-native-community/cli-tools": { - "version": "12.3.0", - "license": "MIT", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.2.tgz", + "integrity": "sha512-nDH7vuEicHI2TI0jac/DjT3fr977iWXRdgVAqPZFFczlbs7A8GQvEdGnZ1G8dqRUmg+kptw0e4hwczAOG89JzQ==", "dependencies": { "appdirsjs": "^1.2.4", "chalk": "^4.1.2", @@ -8588,7 +8653,8 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -8601,7 +8667,8 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8615,7 +8682,8 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -8625,25 +8693,29 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@react-native-community/cli-tools/node_modules/is-wsl": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", "engines": { "node": ">=4" } }, "node_modules/@react-native-community/cli-tools/node_modules/open": { "version": "6.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", "dependencies": { "is-wsl": "^1.1.0" }, @@ -8653,7 +8725,8 @@ }, "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -8662,8 +8735,9 @@ } }, "node_modules/@react-native-community/cli-types": { - "version": "12.3.0", - "license": "MIT", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.2.tgz", + "integrity": "sha512-9D0UEFqLW8JmS16mjHJxUJWX8E+zJddrHILSH8AJHZ0NNHv4u2DXKdb0wFLMobFxGNxPT+VSOjc60fGvXzWHog==", "dependencies": { "joi": "^17.2.1" } @@ -8991,8 +9065,9 @@ } }, "node_modules/@react-native-picker/picker": { - "version": "2.5.1", - "license": "MIT", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.6.1.tgz", + "integrity": "sha512-oJftvmLOj6Y6/bF4kPcK6L83yNBALGmqNYugf94BzP0FQGpHBwimVN2ygqkQ2Sn2ZU3pGUZMs0jV6+Gku2GyYg==", "peerDependencies": { "react": ">=16", "react-native": ">=0.57" @@ -9006,18 +9081,20 @@ } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.73.2", - "license": "MIT", + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.4.tgz", + "integrity": "sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ==", "dependencies": { - "@react-native/codegen": "0.73.2" + "@react-native/codegen": "0.73.3" }, "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-preset": { - "version": "0.73.19", - "license": "MIT", + "version": "0.73.21", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.21.tgz", + "integrity": "sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==", "dependencies": { "@babel/core": "^7.20.0", "@babel/plugin-proposal-async-generator-functions": "^7.0.0", @@ -9058,7 +9135,7 @@ "@babel/plugin-transform-typescript": "^7.5.0", "@babel/plugin-transform-unicode-regex": "^7.0.0", "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.73.2", + "@react-native/babel-plugin-codegen": "0.73.4", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" }, @@ -9077,8 +9154,9 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.73.2", - "license": "MIT", + "version": "0.73.3", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.3.tgz", + "integrity": "sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==", "dependencies": { "@babel/parser": "^7.20.0", "flow-parser": "^0.206.0", @@ -9097,7 +9175,8 @@ }, "node_modules/@react-native/codegen/node_modules/mkdirp": { "version": "0.5.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dependencies": { "minimist": "^1.2.6" }, @@ -9106,13 +9185,14 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.73.12", - "license": "MIT", + "version": "0.73.16", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.16.tgz", + "integrity": "sha512-eNH3v3qJJF6f0n/Dck90qfC9gVOR4coAXMTdYECO33GfgjTi+73vf/SBqlXw9HICH/RNZYGPM3wca4FRF7TYeQ==", "dependencies": { - "@react-native-community/cli-server-api": "12.3.0", - "@react-native-community/cli-tools": "12.3.0", + "@react-native-community/cli-server-api": "12.3.2", + "@react-native-community/cli-tools": "12.3.2", "@react-native/dev-middleware": "0.73.7", - "@react-native/metro-babel-transformer": "0.73.13", + "@react-native/metro-babel-transformer": "0.73.15", "chalk": "^4.0.0", "execa": "^5.1.1", "metro": "^0.80.3", @@ -9127,7 +9207,8 @@ }, "node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -9140,7 +9221,8 @@ }, "node_modules/@react-native/community-cli-plugin/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9154,7 +9236,8 @@ }, "node_modules/@react-native/community-cli-plugin/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -9164,18 +9247,21 @@ }, "node_modules/@react-native/community-cli-plugin/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@react-native/community-cli-plugin/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@react-native/community-cli-plugin/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -9249,11 +9335,12 @@ } }, "node_modules/@react-native/metro-babel-transformer": { - "version": "0.73.13", - "license": "MIT", + "version": "0.73.15", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.15.tgz", + "integrity": "sha512-LlkSGaXCz+xdxc9819plmpsl4P4gZndoFtpjN3GMBIu6f7TBV0GVbyJAU4GE8fuAWPVSVL5ArOcdkWKSbI1klw==", "dependencies": { "@babel/core": "^7.20.0", - "@react-native/babel-preset": "0.73.19", + "@react-native/babel-preset": "0.73.21", "hermes-parser": "0.15.0", "nullthrows": "^1.1.1" }, @@ -9265,12 +9352,13 @@ } }, "node_modules/@react-native/metro-config": { - "version": "0.73.3", + "version": "0.73.5", + "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.73.5.tgz", + "integrity": "sha512-3bNWoHzOzP/+qoLJtRhOVXrnxKmSY3i4y5PXyMQlIvvOI/GQbXulPpEZxK/yUrf1MmeXHLLFufFbQWlfDEDoxA==", "dev": true, - "license": "MIT", "dependencies": { "@react-native/js-polyfills": "0.73.1", - "@react-native/metro-babel-transformer": "0.73.13", + "@react-native/metro-babel-transformer": "0.73.15", "metro-config": "^0.80.3", "metro-runtime": "^0.80.3" }, @@ -9481,19 +9569,22 @@ } }, "node_modules/@sideway/address": { - "version": "4.1.4", - "license": "BSD-3-Clause", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dependencies": { "@hapi/hoek": "^9.0.0" } }, "node_modules/@sideway/formula": { "version": "3.0.1", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@sinclair/typebox": { "version": "0.27.8", @@ -20301,7 +20392,8 @@ }, "node_modules/ansi-fragments": { "version": "0.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", "dependencies": { "colorette": "^1.0.7", "slice-ansi": "^2.0.0", @@ -20310,21 +20402,24 @@ }, "node_modules/ansi-fragments/node_modules/astral-regex": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "engines": { "node": ">=4" } }, "node_modules/ansi-fragments/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "engines": { "node": ">=4" } }, "node_modules/ansi-fragments/node_modules/slice-ansi": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dependencies": { "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", @@ -20336,7 +20431,8 @@ }, "node_modules/ansi-fragments/node_modules/strip-ansi": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -20515,7 +20611,8 @@ }, "node_modules/appdirsjs": { "version": "1.2.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", + "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==" }, "node_modules/application-config-path": { "version": "0.1.1", @@ -21113,7 +21210,8 @@ }, "node_modules/babel-core": { "version": "7.0.0-bridge.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", "peerDependencies": { "@babel/core": "^7.0.0-0" } @@ -23275,7 +23373,8 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -24986,7 +25085,8 @@ }, "node_modules/dayjs": { "version": "1.11.10", - "license": "MIT" + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" }, "node_modules/debounce": { "version": "1.2.1", @@ -25715,10 +25815,11 @@ } }, "node_modules/electron": { - "version": "29.0.0", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-29.2.0.tgz", + "integrity": "sha512-ALKrCN52RG4g9prx4DriXSPnY5WoiyRUCNp7zEVQuoiNOpHTNqMMpRidQAHzntV4hajF1LMWHVoBkwqIs1jHhg==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "@electron/get": "^2.0.0", "@types/node": "^20.9.0", @@ -26125,7 +26226,8 @@ }, "node_modules/errorhandler": { "version": "1.5.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", "dependencies": { "accepts": "~1.3.7", "escape-html": "~1.0.3" @@ -28104,7 +28206,9 @@ "license": "MIT" }, "node_modules/fast-xml-parser": { - "version": "4.3.2", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz", + "integrity": "sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==", "funding": [ { "type": "github", @@ -28115,7 +28219,6 @@ "url": "https://paypal.me/naturalintelligence" } ], - "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -28473,7 +28576,8 @@ }, "node_modules/flow-parser": { "version": "0.206.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.206.0.tgz", + "integrity": "sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==", "engines": { "node": ">=0.4.0" } @@ -29587,18 +29691,21 @@ }, "node_modules/hermes-estree": { "version": "0.15.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.15.0.tgz", + "integrity": "sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==" }, "node_modules/hermes-parser": { "version": "0.15.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.15.0.tgz", + "integrity": "sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==", "dependencies": { "hermes-estree": "0.15.0" } }, "node_modules/hermes-profile-transformer": { "version": "0.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", + "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", "dependencies": { "source-map": "^0.7.3" }, @@ -29608,7 +29715,8 @@ }, "node_modules/hermes-profile-transformer/node_modules/source-map": { "version": "0.7.4", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "engines": { "node": ">= 8" } @@ -30954,7 +31062,8 @@ }, "node_modules/is-interactive": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "engines": { "node": ">=8" } @@ -31177,7 +31286,8 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "engines": { "node": ">=10" }, @@ -34031,12 +34141,13 @@ } }, "node_modules/joi": { - "version": "17.11.0", - "license": "BSD-3-Clause", + "version": "17.12.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.3.tgz", + "integrity": "sha512-2RRziagf555owrm9IRVtdKynOBeITiDpuZqIpgwqXShPncPKNiRQoiGsl/T8SQdq+8ugRzH2LqY67irr2y/d+g==", "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } @@ -34086,7 +34197,8 @@ }, "node_modules/jscodeshift": { "version": "0.14.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", + "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", "dependencies": { "@babel/core": "^7.13.16", "@babel/parser": "^7.13.16", @@ -34117,7 +34229,8 @@ }, "node_modules/jscodeshift/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -34130,7 +34243,8 @@ }, "node_modules/jscodeshift/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -34144,7 +34258,8 @@ }, "node_modules/jscodeshift/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -34154,18 +34269,21 @@ }, "node_modules/jscodeshift/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/jscodeshift/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/jscodeshift/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -34707,7 +34825,8 @@ }, "node_modules/log-symbols": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -34721,7 +34840,8 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -34734,7 +34854,8 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -34748,7 +34869,8 @@ }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -34758,18 +34880,21 @@ }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -34779,7 +34904,8 @@ }, "node_modules/logkitty": { "version": "0.7.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", "dependencies": { "ansi-fragments": "^0.2.1", "dayjs": "^1.8.15", @@ -34791,7 +34917,8 @@ }, "node_modules/logkitty/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -34804,14 +34931,16 @@ }, "node_modules/logkitty/node_modules/camelcase": { "version": "5.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { "node": ">=6" } }, "node_modules/logkitty/node_modules/cliui": { "version": "6.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -34820,7 +34949,8 @@ }, "node_modules/logkitty/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -34830,11 +34960,13 @@ }, "node_modules/logkitty/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/logkitty/node_modules/find-up": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -34845,7 +34977,8 @@ }, "node_modules/logkitty/node_modules/locate-path": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { "p-locate": "^4.1.0" }, @@ -34855,7 +34988,8 @@ }, "node_modules/logkitty/node_modules/p-limit": { "version": "2.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { "p-try": "^2.0.0" }, @@ -34868,7 +35002,8 @@ }, "node_modules/logkitty/node_modules/p-locate": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { "p-limit": "^2.2.0" }, @@ -34878,14 +35013,16 @@ }, "node_modules/logkitty/node_modules/path-exists": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "engines": { "node": ">=8" } }, "node_modules/logkitty/node_modules/wrap-ansi": { "version": "6.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -34897,7 +35034,8 @@ }, "node_modules/logkitty/node_modules/yargs": { "version": "15.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -34917,7 +35055,8 @@ }, "node_modules/logkitty/node_modules/yargs-parser": { "version": "18.1.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -34944,8 +35083,9 @@ } }, "node_modules/lottie-react-native": { - "version": "6.4.1", - "license": "Apache-2.0", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-6.5.1.tgz", + "integrity": "sha512-pjih71P6qX6Ax5ucUBA+YJO7+fnveI581Bd8LmYeARm3spq3AnoGzEkrWaieM8odnK6WI4d5dwEJsxge/QjFPw==", "peerDependencies": { "@dotlottie/react-player": "^1.6.1", "@lottiefiles/react-lottie-player": "^3.5.3", @@ -36566,7 +36706,8 @@ }, "node_modules/nocache": { "version": "3.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", + "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", "engines": { "node": ">=12.0.0" } @@ -36701,7 +36842,8 @@ }, "node_modules/node-stream-zip": { "version": "1.15.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", "engines": { "node": ">=0.12.0" }, @@ -37235,7 +37377,8 @@ }, "node_modules/ora": { "version": "5.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -37256,7 +37399,8 @@ }, "node_modules/ora/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -37269,7 +37413,8 @@ }, "node_modules/ora/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -37283,7 +37428,8 @@ }, "node_modules/ora/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -37293,18 +37439,21 @@ }, "node_modules/ora/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/ora/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/ora/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -39050,9 +39199,9 @@ } }, "node_modules/react-fast-pdf": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/react-fast-pdf/-/react-fast-pdf-1.0.8.tgz", - "integrity": "sha512-OTNOcbcIR7HPVpdPJ5UB30fc4Ls0tnurQ7W9aWj7PWPMGRo9dgTzqtMa1JnfBB2VZAW69qfQZ+DG6axGaEJLEg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/react-fast-pdf/-/react-fast-pdf-1.0.6.tgz", + "integrity": "sha512-CdAnBSZaLCGLSEuiqWLzzXhV9Wvdf1VRixaXCrb3NFrXyeltahF7PY+u7eU6ynrWZGmNI6g0cMLPv0DQhJEeew==", "dependencies": { "react-pdf": "^7.7.0", "react-window": "^1.8.10" @@ -39162,16 +39311,17 @@ } }, "node_modules/react-native": { - "version": "0.73.2", - "license": "MIT", + "version": "0.73.4", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.73.4.tgz", + "integrity": "sha512-VtS+Yr6OOTIuJGDECIYWzNU8QpJjASQYvMtfa/Hvm/2/h5GdB6W9H9TOmh13x07Lj4AOhNMx3XSsz6TdrO4jIg==", "dependencies": { "@jest/create-cache-key-function": "^29.6.3", - "@react-native-community/cli": "12.3.0", - "@react-native-community/cli-platform-android": "12.3.0", - "@react-native-community/cli-platform-ios": "12.3.0", + "@react-native-community/cli": "12.3.2", + "@react-native-community/cli-platform-android": "12.3.2", + "@react-native-community/cli-platform-ios": "12.3.2", "@react-native/assets-registry": "0.73.1", - "@react-native/codegen": "0.73.2", - "@react-native/community-cli-plugin": "0.73.12", + "@react-native/codegen": "0.73.3", + "@react-native/community-cli-plugin": "0.73.16", "@react-native/gradle-plugin": "0.73.4", "@react-native/js-polyfills": "0.73.1", "@react-native/normalize-colors": "0.73.2", @@ -39180,6 +39330,7 @@ "anser": "^1.4.9", "ansi-regex": "^5.0.0", "base64-js": "^1.5.1", + "chalk": "^4.0.0", "deprecated-react-native-prop-types": "^5.0.0", "event-target-shim": "^5.0.1", "flow-enums-runtime": "^0.0.6", @@ -39281,8 +39432,9 @@ } }, "node_modules/react-native-config": { - "version": "1.4.6", - "license": "MIT", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/react-native-config/-/react-native-config-1.5.0.tgz", + "integrity": "sha512-slecooA/0tCwhb+RuWEbwLqtKirGh9vWPRpgDfH7uPAraCciqHNH2XjS9ylW+Spn4FUrHg5KWTqUGs9BdBADHg==", "peerDependencies": { "react-native-windows": ">=0.61" }, @@ -39300,8 +39452,9 @@ } }, "node_modules/react-native-device-info": { - "version": "10.3.0", - "license": "MIT", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-10.3.1.tgz", + "integrity": "sha512-KZU1luB7UrpRT8vYdWOoGJA0e2uAvF5J1Da90QMfLrtYBm1U0tbrlYO99qLCBRq7nQvBISlhqpqikzaS0vDYYw==", "peerDependencies": { "react-native": "*" } @@ -39410,8 +39563,9 @@ "license": "MIT" }, "node_modules/react-native-key-command": { - "version": "1.0.6", - "license": "MIT", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/react-native-key-command/-/react-native-key-command-1.0.8.tgz", + "integrity": "sha512-9iih5hio+4RIYCYP2ZKoJb7w+eGo6E506okTBi+7oenu2oGwhTifBC30GU51Ea+h4SJgUufoQARbUvgjyLbI3w==", "dependencies": { "eventemitter3": "^5.0.1", "underscore": "^1.13.4" @@ -39510,8 +39664,9 @@ } }, "node_modules/react-native-pager-view": { - "version": "6.2.2", - "license": "MIT", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-6.2.3.tgz", + "integrity": "sha512-dqVpXWFtPNfD3D2QQQr8BP+ullS5MhjRJuF8Z/qml4QTILcrWaW8F5iAxKkQR3Jl0ikcEryG/+SQlNcwlo0Ggg==", "peerDependencies": { "react": "*", "react-native": "*" @@ -39564,14 +39719,12 @@ } }, "node_modules/react-native-plaid-link-sdk": { - "version": "10.8.0", - "license": "MIT", - "dependencies": { - "react-native-plaid-link-sdk": "^10.4.0" - }, + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/react-native-plaid-link-sdk/-/react-native-plaid-link-sdk-11.5.0.tgz", + "integrity": "sha512-B3fwujxBS9nZwadXFcseU3nrYG7Ptob6p9eG/gXde65cqwErMaq2k1rVv3R17s/rpKnmU5Cx5pKOMmkxPUn08w==", "peerDependencies": { "react": "*", - "react-native": ">=0.66.0" + "react-native": "*" } }, "node_modules/react-native-qrcode-svg": { @@ -39822,8 +39975,9 @@ "license": "MIT" }, "node_modules/react-native-webview": { - "version": "13.6.3", - "license": "MIT", + "version": "13.6.4", + "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.6.4.tgz", + "integrity": "sha512-AdgmaMBHPcyERTvng9eSGgHX6AleyUlSusWAxngSOSdiYGgHW81T6C5A8j/ImJAF9oZg0bQDxp43Hu56tzENZQ==", "dependencies": { "escape-string-regexp": "2.0.0", "invariant": "2.2.4" @@ -40855,7 +41009,8 @@ }, "node_modules/readline": { "version": "1.3.0", - "license": "BSD" + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" }, "node_modules/reassure": { "version": "0.10.1", @@ -40869,7 +41024,8 @@ }, "node_modules/recast": { "version": "0.21.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", + "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", "dependencies": { "ast-types": "0.15.2", "esprima": "~4.0.0", @@ -40882,7 +41038,8 @@ }, "node_modules/recast/node_modules/ast-types": { "version": "0.15.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", "dependencies": { "tslib": "^2.0.1" }, @@ -41426,7 +41583,8 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -43126,7 +43284,8 @@ }, "node_modules/strnum": { "version": "1.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" }, "node_modules/structured-headers": { "version": "0.4.1", @@ -43204,7 +43363,8 @@ }, "node_modules/sudo-prompt": { "version": "9.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" }, "node_modules/sumchecker": { "version": "3.0.1", @@ -43564,7 +43724,8 @@ }, "node_modules/temp": { "version": "0.8.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", "dependencies": { "rimraf": "~2.6.2" }, @@ -43603,7 +43764,8 @@ }, "node_modules/temp/node_modules/rimraf": { "version": "2.6.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dependencies": { "glob": "^7.1.3" }, diff --git a/package.json b/package.json index 35a89ae364eb..0e988576aaa4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "new.expensify", - "version": "1.4.60-7", + "version": "1.4.61-5", "author": "Expensify, Inc.", "homepage": "https://new.expensify.com", "description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.", @@ -62,7 +62,7 @@ }, "dependencies": { "@dotlottie/react-player": "^1.6.3", - "@expensify/react-native-live-markdown": "0.1.38", + "@expensify/react-native-live-markdown": "github:Expensify/react-native-live-markdown#f762be6fa832419dbbecb8a0cf64bf7dce18545b", "@expo/metro-runtime": "~3.1.1", "@formatjs/intl-datetimeformat": "^6.10.0", "@formatjs/intl-listformat": "^7.2.2", @@ -84,13 +84,13 @@ "@react-native-firebase/crashlytics": "^12.3.0", "@react-native-firebase/perf": "^12.3.0", "@react-native-google-signin/google-signin": "^10.0.1", - "@react-native-picker/picker": "2.5.1", + "@react-native-picker/picker": "2.6.1", "@react-navigation/material-top-tabs": "^6.6.3", "@react-navigation/native": "6.1.12", "@react-navigation/stack": "6.3.16", "@react-ng/bounds-observer": "^0.2.1", - "@rnmapbox/maps": "^10.1.11", - "@shopify/flash-list": "^1.6.3", + "@rnmapbox/maps": "10.1.11", + "@shopify/flash-list": "1.6.3", "@ua/react-native-airship": "^15.3.1", "@vue/preload-webpack-plugin": "^2.0.0", "awesome-phonenumber": "^5.4.0", @@ -111,7 +111,7 @@ "jest-expo": "50.0.1", "jest-when": "^3.5.2", "lodash": "4.17.21", - "lottie-react-native": "6.4.1", + "lottie-react-native": "6.5.1", "mapbox-gl": "^2.15.0", "onfido-sdk-ui": "14.15.0", "process": "^0.11.10", @@ -123,15 +123,15 @@ "react-content-loader": "^7.0.0", "react-dom": "18.1.0", "react-error-boundary": "^4.0.11", - "react-fast-pdf": "^1.0.8", + "react-fast-pdf": "^1.0.6", "react-map-gl": "^7.1.3", - "react-native": "0.73.2", + "react-native": "0.73.4", "react-native-android-location-enabler": "^2.0.1", "react-native-blob-util": "0.19.4", "react-native-collapsible": "^1.6.1", - "react-native-config": "^1.4.5", + "react-native-config": "1.5.0", "react-native-dev-menu": "^4.1.1", - "react-native-device-info": "^10.3.0", + "react-native-device-info": "10.3.1", "react-native-document-picker": "^9.1.1", "react-native-draggable-flatlist": "^4.0.1", "react-native-fs": "^2.20.0", @@ -140,18 +140,18 @@ "react-native-haptic-feedback": "^2.2.0", "react-native-image-picker": "^7.0.3", "react-native-image-size": "git+https://github.com/Expensify/react-native-image-size#bf3ad41a61c4f6f80ed4d497599ef5247a2dd002", - "react-native-key-command": "^1.0.6", + "react-native-key-command": "^1.0.8", "react-native-launch-arguments": "^4.0.2", "react-native-linear-gradient": "^2.8.1", "react-native-localize": "^2.2.6", "react-native-modal": "^13.0.0", "react-native-onyx": "2.0.23", - "react-native-pager-view": "6.2.2", + "react-native-pager-view": "6.2.3", "react-native-pdf": "6.7.3", "react-native-performance": "^5.1.0", "react-native-permissions": "^3.9.3", "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#da50d2c5c54e268499047f9cc98b8df4196c1ddf", - "react-native-plaid-link-sdk": "10.8.0", + "react-native-plaid-link-sdk": "11.5.0", "react-native-qrcode-svg": "^6.2.0", "react-native-quick-sqlite": "^8.0.0-beta.2", "react-native-reanimated": "^3.7.2", @@ -169,7 +169,7 @@ "react-native-web": "^0.19.9", "react-native-web-linear-gradient": "^1.1.2", "react-native-web-sound": "^0.1.3", - "react-native-webview": "13.6.3", + "react-native-webview": "13.6.4", "react-pdf": "7.3.3", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", @@ -201,8 +201,8 @@ "@octokit/plugin-paginate-rest": "3.1.0", "@octokit/plugin-throttling": "4.1.0", "@react-native-community/eslint-config": "3.0.0", - "@react-native/babel-preset": "^0.73.19", - "@react-native/metro-config": "^0.73.3", + "@react-native/babel-preset": "^0.73.21", + "@react-native/metro-config": "^0.73.5", "@react-navigation/devtools": "^6.0.10", "@storybook/addon-a11y": "^6.5.9", "@storybook/addon-essentials": "^7.0.0", @@ -253,7 +253,7 @@ "css-loader": "^6.7.2", "diff-so-fancy": "^1.3.0", "dotenv": "^16.0.3", - "electron": "^29.0.0", + "electron": "^29.2.0", "electron-builder": "24.13.2", "eslint": "^7.6.0", "eslint-config-airbnb-typescript": "^17.1.0", @@ -298,7 +298,7 @@ "yaml": "^2.2.1" }, "overrides": { - "react-native": "$react-native", + "react-native": "0.73.4", "expo": "$expo", "react-native-svg": "$react-native-svg" }, diff --git a/patches/@onfido+react-native-sdk+10.6.0.patch b/patches/@onfido+react-native-sdk+10.6.0.patch index d61f4ab454c9..90e73ec197a1 100644 --- a/patches/@onfido+react-native-sdk+10.6.0.patch +++ b/patches/@onfido+react-native-sdk+10.6.0.patch @@ -1,12 +1,403 @@ +diff --git a/node_modules/@onfido/react-native-sdk/.yarnrc b/node_modules/@onfido/react-native-sdk/.yarnrc +new file mode 100644 +index 0000000..08b5d85 +--- /dev/null ++++ b/node_modules/@onfido/react-native-sdk/.yarnrc +@@ -0,0 +1 @@ ++registry "https://registry.npmjs.org" +\ No newline at end of file +diff --git a/node_modules/@onfido/react-native-sdk/CHANGELOG.md b/node_modules/@onfido/react-native-sdk/CHANGELOG.md +index 6491cb5..398e154 100644 +--- a/node_modules/@onfido/react-native-sdk/CHANGELOG.md ++++ b/node_modules/@onfido/react-native-sdk/CHANGELOG.md +@@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file. + The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) + and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + ++## [10.7.0] - 2024-02-01 ++ ++### Changed: ++ ++- Updated underlying Onfido native SDK version: ++ - iOS 29.7.x (up from 29.6.x) ++ - Android 19.6.x (up from 19.5.x) ++ ++### Fixed: ++ ++- Fixed the behaviour when using the configuration option `allowedDocumentTypes`: ++ - The order of steps (and SDK screens) has now been aligned with the native SDKs, for both Android and iOS. The order to be used is: Welcome - Document capture - Proof of address - Face capture - Final screen. ++ - The Welcome screen now correctly takes into account the `welcome` (boolean) flag in the configuration. ++ + ## [10.6.0] - 2023-12-11 + + ### Changed: +diff --git a/node_modules/@onfido/react-native-sdk/README.md b/node_modules/@onfido/react-native-sdk/README.md +index 03fb8da..0159a6f 100644 +--- a/node_modules/@onfido/react-native-sdk/README.md ++++ b/node_modules/@onfido/react-native-sdk/README.md +@@ -30,9 +30,7 @@ + - [Introduction](#introduction) + - [Implementation](#implementation) + - [User data](#user-data) +-- [Creating checks](#creating-checks) +- - [1. Obtaining an API token](#1-obtaining-an-api-token-1) +- - [2. Creating a check](#2-creating-a-check) ++- [Generating verification reports](#generating-verification-reports) + - [Theme Customization](#theme-customization) + - [Android](#android-1) + - [iOS](#ios-1) +@@ -57,7 +55,7 @@ This SDK provides a drop-in set of screens and tools for react native applicatio + > + > If you are integrating using Onfido Studio please see our [Studio integration guide](ONFIDO_STUDIO.md) + +-\* **Note**: the SDK is only responsible for capturing and uploading photos/videos. You still need to access the [Onfido API](https://documentation.onfido.com/) to create and manage checks. ++\* **Note**: The SDK is only responsible for capturing and uploading document photos, live selfies, live videos and motion captures. You still need to access the [Onfido API](https://documentation.onfido.com/) to manage applicants and [Onfido Studio](https://developers.onfido.com/guide/onfido-studio-product) to build verification workflows. + + * Supports iOS 11+ + * Supports Xcode 13+ +@@ -600,34 +598,17 @@ let byteArrayString = mediaResult.fileData; + let base64FileData = Onfido.byteArrayStringToBase64(byteArrayString); + ``` + +-## Creating checks ++## Generating verification reports + +-As the SDK is only responsible for capturing and uploading photos/videos, you would need to start a check on your backend server using the [Onfido API](https://documentation.onfido.com/). ++While the SDK is responsible for capturing and uploading document photos, live selfies, live videos and motion captures, identity verification reports themselves are generated based on workflows created using [Onfido Studio](https://developers.onfido.com/guide/onfido-studio-product). + +-### 1. Obtaining an API token +- +-All API requests must be made with an API token included in the request headers. You can find your API token (not to be mistaken with the mobile SDK token) inside your [Onfido Dashboard](https://onfido.com/dashboard/api/tokens). +- +-Refer to the [Authentication](https://documentation.onfido.com/#authentication) section in the API documentation for details. For testing, you should be using the sandbox, and not the live, token. +- +-### 2. Creating a check +- +-You will need to create a check by making a request to the [create check endpoint](https://documentation.onfido.com/#create-check), using the applicant id. If you are just verifying a document, you only have to include a [document report](https://documentation.onfido.com/#document-report) as part of the check. On the other hand, if you are verifying a document and a face photo/live video, you will also have to include a [facial similarity report](https://documentation.onfido.com/#facial-similarity-report) with the corresponding values: `facial_similarity_photo` for the photo option and `facial_similarity_video` for the video option. +- +-```shell +-$ curl https://api.onfido.com/v3/checks \ +- -H 'Authorization: Token token=YOUR_API_TOKEN' \ +- -d 'applicant_id=YOUR_APPLICANT_ID' \ +- -d 'report_names=[document,facial_similarity_photo]' +-``` +- +-**Note**: You can also submit the POST request in JSON format. ++For a step-by-step walkthrough of creating an identity verification using Onfido Studio and our SDKs, please refer to our [Quick Start Guide](https://developers.onfido.com/guide/quick-start-guide). + +-You will receive a response containing the check id instantly. As document and facial similarity reports do not always return actual [results](https://documentation.onfido.com/#results) straightaway, you need to set up a webhook to get notified when the results are ready. ++Alternatively, you can [create checks](https://documentation.onfido.com/#create-check) and [retrieve report results](https://documentation.onfido.com/#retrieve-report) manually using the Onfido API. You can also configure [webhooks](https://documentation.onfido.com/#webhooks) to be notified asynchronously of report results. + +-Finally, as you are testing with the sandbox token, please be aware that the results are pre-determined. You can learn more about sandbox responses [here](https://documentation.onfido.com/#pre-determined-responses). ++**Note**: If you're using API v2 for API calls, please check out [API v2 to v3 migration guide](https://developers.onfido.com/guide/v2-to-v3-migration-guide#checks-in-api-v3) to understand which changes need to be applied before starting to use API v3. + +-**Note**: If you're using API v2, please check out [API v2 to v3 migration guide](https://developers.onfido.com/guide/v2-to-v3-migration-guide#checks-in-api-v3) to understand which changes need to be applied before starting to use API v3. ++**Note**: If you are testing with a sandbox token, please be aware that report results are pre-determined. You can learn more about sandbox responses [here](https://documentation.onfido.com/#pre-determined-responses). + + ## Theme Customization + +diff --git a/node_modules/@onfido/react-native-sdk/android/.project b/node_modules/@onfido/react-native-sdk/android/.project +deleted file mode 100644 +index 357b6fc..0000000 +--- a/node_modules/@onfido/react-native-sdk/android/.project ++++ /dev/null +@@ -1,34 +0,0 @@ +- +- +- android +- Project android created by Buildship. +- +- +- +- +- org.eclipse.jdt.core.javabuilder +- +- +- +- +- org.eclipse.buildship.core.gradleprojectbuilder +- +- +- +- +- +- org.eclipse.jdt.core.javanature +- org.eclipse.buildship.core.gradleprojectnature +- +- +- +- 1684767677408 +- +- 30 +- +- org.eclipse.core.resources.regexFilterMatcher +- node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ +- +- +- +- +diff --git a/node_modules/@onfido/react-native-sdk/android/bin/README.md b/node_modules/@onfido/react-native-sdk/android/bin/README.md +deleted file mode 100644 +index 6746135..0000000 +--- a/node_modules/@onfido/react-native-sdk/android/bin/README.md ++++ /dev/null +@@ -1,33 +0,0 @@ +-README +-====== +- +-If you want to publish the lib as a maven dependency, follow these steps before publishing a new version to npm: +- +-1. Be sure to have the Android [SDK](https://developer.android.com/studio/index.html) and [NDK](https://developer.android.com/ndk/guides/index.html) installed +-2. Be sure to have a `local.properties` file in this folder that points to the Android SDK and NDK +-``` +-ndk.dir=/Users/{username}/Library/Android/sdk/ndk-bundle +-sdk.dir=/Users/{username}/Library/Android/sdk +-``` +-3. Run `./gradlew publishToMavenLocal` +-4. Go to the `~/.m2` directory. Verify that the pom file was generated successfully with the correct version. +- +- +-How to quickly develop the Android Java code using the TestApp: +-====== +-React Native's "Fast Refresh" feature will not update Java code as you make changes, and reinstalling all npm packages is slow. Instead, you can follow this process to recompile only the Java code when you make changes. +- +-In one console, from the `TestApp/` directory, run the following commands. It may take 2 or more minutes to build. You only need to run this once: leave it running in the background while you develop. +-```shell +-rm -rf node_modules/ && yarn && cd .. && watchman watch-del-all && npx react-native start --reset-cache +-``` +- +-In a second console, from the `TestApp/` directory, update the Android package and launch the virtual device. Run this each time you change Android code. +-```shell +-rsync -av ../ node_modules/@onfido/react-native-sdk/ --exclude=TestApp --exclude=SampleApp --exclude=node_modules --exclude=android/build --exclude=.git && npx react-native run-android +-``` +- +-How to run the tests +-====== +-1. Run "yarn" or "npm install" from the project root. This will download the React Native Facebook bridge library +-2. Run "./gradlew test" from the "/android" directory. +diff --git a/node_modules/@onfido/react-native-sdk/android/bin/build.gradle b/node_modules/@onfido/react-native-sdk/android/bin/build.gradle +deleted file mode 100644 +index d2810b6..0000000 +--- a/node_modules/@onfido/react-native-sdk/android/bin/build.gradle ++++ /dev/null +@@ -1,154 +0,0 @@ +-// android/build.gradle +- +-// based on: +-// +-// * https://github.com/facebook/react-native/blob/0.60-stable/template/android/build.gradle +-// original location: +-// - https://github.com/facebook/react-native/blob/0.58-stable/local-cli/templates/HelloWorld/android/build.gradle +-// +-// * https://github.com/facebook/react-native/blob/0.60-stable/template/android/app/build.gradle +-// original location: +-// - https://github.com/facebook/react-native/blob/0.58-stable/local-cli/templates/HelloWorld/android/app/build.gradle +- +-def DEFAULT_COMPILE_SDK_VERSION = 32 +-def DEFAULT_MIN_SDK_VERSION = 21 +-def DEFAULT_TARGET_SDK_VERSION = 31 +-def NATIVE_ANDROID_SDK_VERSION = "16.3.+" +- +-def safeExtGet(prop, fallback) { +- rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback +-} +- +-def androidExclusion = [ +- '**/databinding/**/*.*', +- '**/android/databinding/*Binding.*', +- '**/BR.*', +- '**/R.*', +- '**/R$*.*', +- '**/BuildConfig.*', +- '**/Manifest*.*', +- '**/*_MembersInjector.*', +- '**/Dagger*Component.*', +- '**/Dagger*Component$Builder.*', +- '**/*Module_*Factory.*', +- '**/*Fragment*.*', +- '**/*Activity*.*', +- '**/*Adapter*.*', +- '**/*ViewPager*.*', +- '**/*ViewHolder*.*', +- '**/*Module*.*' +-] +- +-buildscript { +- // The Android Gradle plugin is only required when opening the android folder stand-alone. +- // This avoids unnecessary downloads and potential conflicts when the library is included as a +- // module dependency in an application project. +- // ref: https://docs.gradle.org/current/userguide/tutorial_using_tasks.html#sec:build_script_external_dependencies +- if (project == rootProject) { +- repositories { +- mavenCentral() +- google() +- jcenter() +- } +- dependencies { +- classpath 'com.android.tools.build:gradle:7.4.2' +- } +- } +-} +- +-apply plugin: 'com.android.library' +-apply plugin: 'maven-publish' +-apply plugin: 'jacoco' +- +-apply from: 'publish.gradle' +- +-android { +- compileSdkVersion safeExtGet('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION) +- defaultConfig { +- minSdkVersion safeExtGet('minSdkVersion', DEFAULT_MIN_SDK_VERSION) +- targetSdkVersion safeExtGet('targetSdkVersion', DEFAULT_TARGET_SDK_VERSION) +- versionCode 1 +- versionName "1.0" +- multiDexEnabled true +- consumerProguardFiles 'proguard-rules.pro' +- } +- lintOptions { +- abortOnError false +- } +- +- buildFeatures { +- buildConfig = false +- } +- +- compileOptions { +- sourceCompatibility JavaVersion.VERSION_1_8 +- targetCompatibility JavaVersion.VERSION_1_8 +- } +-} +- +-repositories { +- // ref: https://www.baeldung.com/maven-local-repository +- mavenLocal() +- mavenCentral() +- maven { +- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm +- url "$rootDir/../node_modules/react-native/android" +- } +- maven { +- // Android JSC is installed from npm +- url "$rootDir/../node_modules/jsc-android/dist" +- } +- google() +- jcenter() +-} +- +-dependencies { +- //noinspection GradleDynamicVersion +- implementation 'com.facebook.react:react-native:+' // From node_modules +- implementation "com.onfido.sdk.capture:onfido-capture-sdk:$NATIVE_ANDROID_SDK_VERSION" +- implementation "com.onfido.sdk:onfido-workflow:$NATIVE_ANDROID_SDK_VERSION" +- implementation "com.squareup.okhttp3:logging-interceptor:3.14.9" +- implementation "com.squareup.okhttp3:okhttp:3.14.9" +- // Fix for crash due to 'java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/swiperefreshlayout/widget/SwipeRefreshLayout;'' +- implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' +- +- testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.1' +- testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.1' +- testCompileOnly 'junit:junit:4.13.2' +- testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.10.1' +- testImplementation 'org.mockito:mockito-core:2.+' +- testImplementation group: 'org.powermock', name: 'powermock-api-mockito2', version: '2.0.9' +- testImplementation group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.9' +-} +- +-afterEvaluate { project -> +- android.libraryVariants.all { variant -> +- def name = variant.name.capitalize() +- def javaCompileTask = variant.javaCompileProvider.get() +- +- task "jar${name}"(type: Jar, dependsOn: javaCompileTask) { +- from javaCompileTask.destinationDir +- } +- } +- +- task codeCoverageReport(type: JacocoReport, dependsOn: 'testDebugUnitTest') { +- group = "Reporting" +- description = "Generate Jacoco coverage reports after running tests." +- reports { +- xml.enabled = true +- html.enabled = true +- csv.enabled = true +- } +- classDirectories.setFrom(fileTree( +- dir: 'build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/onfido/reactnative/sdk', +- excludes: androidExclusion +- )) +- sourceDirectories.setFrom(files('src/main/java/com/onfido/reactnative/sdk')) +- executionData.setFrom(files('build/jacoco/testDebugUnitTest.exec')) +- } +- +- task getCoverage(type: Exec, dependsOn: 'codeCoverageReport') { +- group = "Reporting" +- commandLine "open", "$buildDir/reports/jacoco/codeCoverageReport/html/index.html" +- } +-} diff --git a/node_modules/@onfido/react-native-sdk/android/build.gradle b/node_modules/@onfido/react-native-sdk/android/build.gradle -index 33a4229..1720bef 100644 +index 33a4229..895bfd7 100644 --- a/node_modules/@onfido/react-native-sdk/android/build.gradle +++ b/node_modules/@onfido/react-native-sdk/android/build.gradle -@@ -84,6 +84,13 @@ android { +@@ -13,12 +13,20 @@ + def DEFAULT_COMPILE_SDK_VERSION = 33 + def DEFAULT_MIN_SDK_VERSION = 21 + def DEFAULT_TARGET_SDK_VERSION = 31 +-def NATIVE_ANDROID_SDK_VERSION = "19.5.+" ++def NATIVE_ANDROID_SDK_VERSION = "19.6.+" + + def safeExtGet(prop, fallback) { + rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback + } + ++def isNewArchitectureEnabled() { ++ // To opt-in for the New Architecture, you can either: ++ // - Set `newArchEnabled` to true inside the `gradle.properties` file ++ // - Invoke gradle with `-newArchEnabled=true` ++ // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true` ++ return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" ++} ++ + def androidExclusion = [ + '**/databinding/**/*.*', + '**/android/databinding/*Binding.*', +@@ -60,10 +68,24 @@ apply plugin: 'com.android.library' + apply plugin: 'maven-publish' + apply plugin: 'jacoco' + ++if (isNewArchitectureEnabled()) { ++ apply plugin: "com.facebook.react" ++} ++ + apply from: 'publish.gradle' + + android { + compileSdkVersion safeExtGet('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION) ++ ++ // Used to override the NDK path/version on internal CI or by allowing ++ // users to customize the NDK path/version from their root project (e.g. for M1 support) ++ if (rootProject.hasProperty("ndkPath")) { ++ ndkPath rootProject.ext.ndkPath ++ } ++ if (rootProject.hasProperty("ndkVersion")) { ++ ndkVersion rootProject.ext.ndkVersion ++ } ++ + defaultConfig { + minSdkVersion safeExtGet('minSdkVersion', DEFAULT_MIN_SDK_VERSION) + targetSdkVersion safeExtGet('targetSdkVersion', DEFAULT_TARGET_SDK_VERSION) +@@ -84,6 +106,20 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + ++ sourceSets.main { ++ java { ++ if (!isNewArchitectureEnabled()) { ++ srcDirs += 'src/paper/java' ++ } ++ } ++ } + publishing { + singleVariant('release') { + withSourcesJar() @@ -16,3 +407,902 @@ index 33a4229..1720bef 100644 } repositories { +@@ -103,8 +139,8 @@ repositories { + } + + dependencies { +- //noinspection GradleDynamicVersion +- implementation 'com.facebook.react:react-native:+' // From node_modules ++ implementation 'com.facebook.react:react-native:+' // from node_modules ++ + implementation "com.onfido.sdk.capture:onfido-capture-sdk:$NATIVE_ANDROID_SDK_VERSION" + implementation "com.onfido.sdk:onfido-workflow:$NATIVE_ANDROID_SDK_VERSION" + implementation "com.squareup.okhttp3:logging-interceptor:3.14.9" +diff --git a/node_modules/@onfido/react-native-sdk/android/src/main/AndroidManifest.xml b/node_modules/@onfido/react-native-sdk/android/src/main/AndroidManifest.xml +index 42ad0ca..903b090 100644 +--- a/node_modules/@onfido/react-native-sdk/android/src/main/AndroidManifest.xml ++++ b/node_modules/@onfido/react-native-sdk/android/src/main/AndroidManifest.xml +@@ -8,6 +8,6 @@ + + ++ android:value="10.7.0" /> + + +diff --git a/node_modules/@onfido/react-native-sdk/android/src/main/java/com/onfido/reactnative/sdk/OnfidoSdkModule.java b/node_modules/@onfido/react-native-sdk/android/src/main/java/com/onfido/reactnative/sdk/OnfidoSdkModule.java +index 93407a2..13f84fd 100644 +--- a/node_modules/@onfido/react-native-sdk/android/src/main/java/com/onfido/reactnative/sdk/OnfidoSdkModule.java ++++ b/node_modules/@onfido/react-native-sdk/android/src/main/java/com/onfido/reactnative/sdk/OnfidoSdkModule.java +@@ -3,14 +3,13 @@ package com.onfido.reactnative.sdk; + import android.annotation.SuppressLint; + import android.app.Activity; + +-import com.facebook.react.bridge.NoSuchKeyException; + import com.facebook.react.bridge.Promise; + import com.facebook.react.bridge.ReactApplicationContext; + import com.facebook.react.bridge.ReactContextBaseJavaModule; + import com.facebook.react.bridge.ReactMethod; + import com.facebook.react.bridge.ReadableArray; + import com.facebook.react.bridge.ReadableMap; +-import com.facebook.react.bridge.UnexpectedNativeTypeException; ++import com.facebook.react.module.annotations.ReactModule; + import com.facebook.react.bridge.WritableMap; + import com.facebook.react.modules.core.DeviceEventManagerModule; + import com.onfido.android.sdk.capture.DocumentType; +@@ -23,7 +22,6 @@ import com.onfido.android.sdk.capture.errors.EnterpriseFeatureNotEnabledExceptio + import com.onfido.android.sdk.capture.errors.EnterpriseFeaturesInvalidLogoCobrandingException; + import com.onfido.android.sdk.capture.ui.camera.face.FaceCaptureStep; + import com.onfido.android.sdk.capture.ui.camera.face.FaceCaptureVariantPhoto; +-import com.onfido.android.sdk.capture.ui.camera.face.FaceCaptureVariantVideo; + import com.onfido.android.sdk.capture.ui.camera.face.stepbuilder.FaceCaptureStepBuilder; + import com.onfido.android.sdk.capture.ui.camera.face.stepbuilder.PhotoCaptureStepBuilder; + import com.onfido.android.sdk.capture.ui.camera.face.stepbuilder.VideoCaptureStepBuilder; +@@ -43,7 +41,10 @@ enum CallbackType { + MEDIA + } + +-public class OnfidoSdkModule extends ReactContextBaseJavaModule { ++@ReactModule(name = OnfidoSdkModule.NAME) ++public class OnfidoSdkModule extends NativeOnfidoModuleSpec { ++ ++ public static final String NAME = "RNOnfidoSdk"; + + /* package */ final Onfido client; + private Promise currentPromise = null; +@@ -70,7 +71,7 @@ public class OnfidoSdkModule extends ReactContextBaseJavaModule { + + @Override + public String getName() { +- return "OnfidoSdk"; ++ return NAME; + } + + /** +@@ -81,6 +82,7 @@ public class OnfidoSdkModule extends ReactContextBaseJavaModule { + } + + @ReactMethod ++ @Override + public void start(final ReadableMap config, final Promise promise) { + + setPromise(promise); +@@ -147,7 +149,7 @@ public class OnfidoSdkModule extends ReactContextBaseJavaModule { + } + + OnfidoTheme onfidoTheme = getThemeFromConfig(config); +- if(onfidoTheme != null){ ++ if (onfidoTheme != null) { + onfidoConfigBuilder.withTheme(onfidoTheme); + } + +@@ -184,7 +186,7 @@ public class OnfidoSdkModule extends ReactContextBaseJavaModule { + } + + OnfidoTheme onfidoTheme = getThemeFromConfig(config); +- if(onfidoTheme != null){ ++ if (onfidoTheme != null) { + onfidoConfigBuilder.withTheme(onfidoTheme); + } + +@@ -237,9 +239,9 @@ public class OnfidoSdkModule extends ReactContextBaseJavaModule { + return config.hasKey(key) ? config.getString(key) : ""; + } + +- public static OnfidoTheme getThemeFromConfig(final ReadableMap config) throws Exception{ ++ public static OnfidoTheme getThemeFromConfig(final ReadableMap config) throws Exception { + String themeString = config.getString("theme"); +- if(themeString == null){ ++ if (themeString == null) { + return null; + } + OnfidoTheme onfidoTheme; +@@ -252,12 +254,18 @@ public class OnfidoSdkModule extends ReactContextBaseJavaModule { + return onfidoTheme; + } + ++ /* ++ (!) Please note that flow steps must be presented in a specific order, one which is also ++ implemented in the native SDKs, as well as in the iOS RN SDK. ++ ++ As per the Product indications in https://onfido.atlassian.net/browse/SDK-2390, this order ++ should be: Welcome->Doc->POA->Bio ++ */ + public static FlowStep[] getFlowStepsFromConfig( + final ReadableMap config, + OnfidoConfig.Builder configBuilder + ) throws Exception { + try { +- + final ReadableMap flowSteps = config.getMap("flowSteps"); + + final boolean welcomePageIsIncluded; +@@ -268,11 +276,12 @@ public class OnfidoSdkModule extends ReactContextBaseJavaModule { + } + + final boolean proofOfAddress; +- if(flowSteps.hasKey("proofOfAddress")){ ++ if (flowSteps.hasKey("proofOfAddress")) { + proofOfAddress = flowSteps.getBoolean("proofOfAddress"); +- }else{ ++ } else { + proofOfAddress = false; + } ++ + final List flowStepList = new ArrayList<>(); + + if (welcomePageIsIncluded) { +@@ -283,6 +292,10 @@ public class OnfidoSdkModule extends ReactContextBaseJavaModule { + extractCaptureDocumentStep(flowSteps, flowStepList, configBuilder); + } + ++ if (proofOfAddress) { ++ flowStepList.add(FlowStep.PROOF_OF_ADDRESS); ++ } ++ + final boolean captureFaceEnabled = flowSteps.hasKey("captureFace"); + final ReadableMap captureFace = captureFaceEnabled ? flowSteps.getMap("captureFace") : null; + +@@ -301,7 +314,7 @@ public class OnfidoSdkModule extends ReactContextBaseJavaModule { + flowStepList.add(faceStepFromMotionDefinition(captureFace)); + break; + default: +- throw new Exception("Invalid face capture type. \"type\" must be VIDEO or PHOTO."); ++ throw new Exception("Invalid face capture type. \"type\" must be VIDEO or PHOTO."); + } + } else { + // Default face capture type is photo. +@@ -309,12 +322,7 @@ public class OnfidoSdkModule extends ReactContextBaseJavaModule { + } + } + +- if(proofOfAddress){ +- flowStepList.add(FlowStep.PROOF_OF_ADDRESS); +- } +- + final FlowStep[] flowStepsWithOptions = flowStepList.toArray(new FlowStep[0]); +- + return flowStepsWithOptions; + } catch (final Exception e) { + e.printStackTrace(); +@@ -328,29 +336,10 @@ public class OnfidoSdkModule extends ReactContextBaseJavaModule { + List flowStepList, + OnfidoConfig.Builder configBuilder + ) throws Exception { +- ReadableMap captureDocument = null; +- Boolean captureDocumentBoolean = null; +- +- // ReadableMap does not have a way to get multi-typed values without throwing exceptions. +- try { +- captureDocumentBoolean = flowSteps.getBoolean("captureDocument"); +- } catch (final NoSuchKeyException | +- ClassCastException | +- UnexpectedNativeTypeException notFoundException) { +- captureDocument = flowSteps.getMap("captureDocument"); +- } +- +- if (captureDocumentBoolean != null) { +- if (captureDocumentBoolean) { +- flowStepList.add(FlowStep.CAPTURE_DOCUMENT); +- } +- return; +- } +- ++ ReadableMap captureDocument = flowSteps.getMap("captureDocument"); + if (captureDocument == null) { + return; + } +- + extractDocumentCaptureDetails(captureDocument, flowStepList, configBuilder); + } + +@@ -361,35 +350,46 @@ public class OnfidoSdkModule extends ReactContextBaseJavaModule { + ) throws Exception { + final boolean docTypeExists = captureDocument.hasKey("docType"); + final boolean countryCodeExists = captureDocument.hasKey("alpha2CountryCode"); +- final boolean allowedDocumentTypes = captureDocument.hasKey("allowedDocumentTypes"); ++ final boolean withAllowedDocumentTypes = captureDocument.hasKey("allowedDocumentTypes"); + +- if (allowedDocumentTypes && countryCodeExists && docTypeExists) { ++ // Validation: incorrect config - 2 filtering ways provided ++ if (withAllowedDocumentTypes && countryCodeExists && docTypeExists) { + throw new IllegalArgumentException("We can either filter the documents on DocumentSelection screen, or skip the selection and go directly to capture"); + } + +- if (!docTypeExists && !countryCodeExists && !allowedDocumentTypes) { ++ // Case 1: no filtering provided => showing general Doc Capture ++ if (!docTypeExists && !countryCodeExists && !withAllowedDocumentTypes) { + flowStepList.add(FlowStep.CAPTURE_DOCUMENT); + return; + } + ++ // Case 2: filtering for one document, one country + if (docTypeExists && countryCodeExists) { + extractDocTypeAndCountryForCaptureStep(captureDocument, flowStepList); + return; + } +- if (allowedDocumentTypes) { ++ ++ // Case 3: filtering for multiple documents ++ if (withAllowedDocumentTypes) { + extractAllowedDocumentTypes(captureDocument, configBuilder); ++ flowStepList.add(FlowStep.CAPTURE_DOCUMENT); + return; + } + + throw new Exception("For countryCode and docType: both must be specified, or both must be omitted."); + } + +- private static void extractAllowedDocumentTypes(ReadableMap captureDocument, OnfidoConfig.Builder configBuilder) { +- ReadableArray array = captureDocument.getArray("allowedDocumentTypes"); ++ private static void extractAllowedDocumentTypes( ++ ReadableMap captureDocument, ++ OnfidoConfig.Builder configBuilder ++ ) { ++ ReadableArray documentTypes = captureDocument.getArray("allowedDocumentTypes"); + ArrayList types = new ArrayList<>(); + +- for (int i = 0; i < array.size(); i++) { +- types.add(DocumentType.valueOf(array.getString(i))); ++ if (documentTypes != null) { ++ for (int i = 0; i < documentTypes.size(); i++) { ++ types.add(DocumentType.valueOf(documentTypes.getString(i))); ++ } + } + configBuilder.withAllowedDocumentTypes(types); + } +@@ -487,14 +487,14 @@ public class OnfidoSdkModule extends ReactContextBaseJavaModule { + } + + @ReactMethod +- public void removeListeners(int type) { ++ public void removeListeners(double type) { + // Keep: Required for RN build in the Event Emitter Calls + } + + private void sendEvent(String name, WritableMap map) { + getReactApplicationContext() +- .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) +- .emit(name, map); ++ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) ++ .emit(name, map); + } + + //region Media +diff --git a/node_modules/@onfido/react-native-sdk/android/src/main/java/com/onfido/reactnative/sdk/OnfidoSdkPackage.java b/node_modules/@onfido/react-native-sdk/android/src/main/java/com/onfido/reactnative/sdk/OnfidoSdkPackage.java +index 35c0ee6..16469e2 100644 +--- a/node_modules/@onfido/react-native-sdk/android/src/main/java/com/onfido/reactnative/sdk/OnfidoSdkPackage.java ++++ b/node_modules/@onfido/react-native-sdk/android/src/main/java/com/onfido/reactnative/sdk/OnfidoSdkPackage.java +@@ -1,23 +1,90 @@ + package com.onfido.reactnative.sdk; + ++import androidx.annotation.Nullable; ++ + import java.util.Arrays; + import java.util.Collections; ++import java.util.HashMap; + import java.util.List; ++import java.util.Map; + +-import com.facebook.react.ReactPackage; ++import com.facebook.react.TurboReactPackage; + import com.facebook.react.bridge.NativeModule; + import com.facebook.react.bridge.ReactApplicationContext; ++import com.facebook.react.module.annotations.ReactModule; ++import com.facebook.react.module.annotations.ReactModuleList; ++import com.facebook.react.module.model.ReactModuleInfo; ++import com.facebook.react.module.model.ReactModuleInfoProvider; ++import com.facebook.react.turbomodule.core.interfaces.TurboModule; + import com.facebook.react.uimanager.ViewManager; +-import com.facebook.react.bridge.JavaScriptModule; + +-public class OnfidoSdkPackage implements ReactPackage { ++@ReactModuleList( ++ nativeModules = { ++ OnfidoSdkModule.class ++ } ++) ++public class OnfidoSdkPackage extends TurboReactPackage { + @Override + public List createNativeModules(ReactApplicationContext reactContext) { + return Arrays.asList(new OnfidoSdkModule(reactContext)); + } + ++ @Nullable ++ @Override ++ public NativeModule getModule(String name, ReactApplicationContext reactApplicationContext) { ++ switch (name) { ++ case OnfidoSdkModule.NAME: ++ return new OnfidoSdkModule(reactApplicationContext); ++ default: ++ return null; ++ } ++ } ++ + @Override + public List createViewManagers(ReactApplicationContext reactContext) { + return Collections.emptyList(); + } ++ ++ @Override ++ public ReactModuleInfoProvider getReactModuleInfoProvider() { ++ try { ++ Class reactModuleInfoProviderClass = ++ Class.forName("com.onfido.reactnative.sdk.OnfidoSdkPackage$$ReactModuleInfoProvider"); ++ return (ReactModuleInfoProvider) reactModuleInfoProviderClass.newInstance(); ++ } catch (ClassNotFoundException e) { ++ // ReactModuleSpecProcessor does not run at build-time. Create this ReactModuleInfoProvider by ++ // hand. ++ return new ReactModuleInfoProvider() { ++ @Override ++ public Map getReactModuleInfos() { ++ final Map reactModuleInfoMap = new HashMap<>(); ++ ++ Class[] moduleList = ++ new Class[] { ++ OnfidoSdkModule.class, ++ }; ++ ++ for (Class moduleClass : moduleList) { ++ ReactModule reactModule = moduleClass.getAnnotation(ReactModule.class); ++ ++ reactModuleInfoMap.put( ++ reactModule.name(), ++ new ReactModuleInfo( ++ reactModule.name(), ++ moduleClass.getName(), ++ reactModule.canOverrideExistingModule(), ++ reactModule.needsEagerInit(), ++ reactModule.hasConstants(), ++ reactModule.isCxxModule(), ++ TurboModule.class.isAssignableFrom(moduleClass))); ++ } ++ ++ return reactModuleInfoMap; ++ } ++ }; ++ } catch (InstantiationException | IllegalAccessException e) { ++ throw new RuntimeException( ++ "No ReactModuleInfoProvider for com.onfido.reactnative.sdk.OnfidoSdkPackage$$ReactModuleInfoProvider", e); ++ } ++ } + } +diff --git a/node_modules/@onfido/react-native-sdk/android/src/paper/java/com/onfido/reactnative/sdk/NativeOnfidoModuleSpec.java b/node_modules/@onfido/react-native-sdk/android/src/paper/java/com/onfido/reactnative/sdk/NativeOnfidoModuleSpec.java +new file mode 100644 +index 0000000..16e880e +--- /dev/null ++++ b/node_modules/@onfido/react-native-sdk/android/src/paper/java/com/onfido/reactnative/sdk/NativeOnfidoModuleSpec.java +@@ -0,0 +1,52 @@ ++ ++/** ++ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). ++ * ++ * Do not edit this file as changes may cause incorrect behavior and will be lost ++ * once the code is regenerated. ++ * ++ * @generated by codegen project: GenerateModuleJavaSpec.js ++ * ++ * @nolint ++ */ ++ ++package com.onfido.reactnative.sdk; ++ ++import com.facebook.proguard.annotations.DoNotStrip; ++import com.facebook.react.bridge.Promise; ++import com.facebook.react.bridge.ReactApplicationContext; ++import com.facebook.react.bridge.ReactContextBaseJavaModule; ++import com.facebook.react.bridge.ReactMethod; ++import com.facebook.react.bridge.ReactModuleWithSpec; ++import com.facebook.react.bridge.ReadableMap; ++import com.facebook.react.turbomodule.core.interfaces.TurboModule; ++import javax.annotation.Nonnull; ++ ++public abstract class NativeOnfidoModuleSpec extends ReactContextBaseJavaModule implements ReactModuleWithSpec, TurboModule { ++ public static final String NAME = "RNOnfidoSdk"; ++ ++ public NativeOnfidoModuleSpec(ReactApplicationContext reactContext) { ++ super(reactContext); ++ } ++ ++ @Override ++ public @Nonnull String getName() { ++ return NAME; ++ } ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void start(ReadableMap config, Promise promise); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void withMediaCallbacksEnabled(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void addListener(String eventName); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void removeListeners(double count); ++} +diff --git a/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk-Bridging-Header.h b/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk-Bridging-Header.h +index ebf12f6..9acdb99 100644 +--- a/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk-Bridging-Header.h ++++ b/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk-Bridging-Header.h +@@ -3,4 +3,4 @@ + // + + #import +-#import ++#import "PluginMetadata.h" +diff --git a/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk.m b/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk.m +deleted file mode 100644 +index 328de71..0000000 +--- a/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk.m ++++ /dev/null +@@ -1,14 +0,0 @@ +-#import +-#import +-#import +-@interface RCT_EXTERN_MODULE(OnfidoSdk, RCTEventEmitter) +- +-RCT_EXTERN_METHOD( +- start:(NSDictionary *)config +- resolver:(RCTPromiseResolveBlock)resolve +- rejecter:(RCTPromiseRejectBlock)reject +-) +-RCT_EXTERN_METHOD(supportedEvents) +-RCT_EXTERN_METHOD(withMediaCallbacksEnabled) +- +-@end +diff --git a/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk.swift b/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk.swift +index 3829c99..e8788f0 100644 +--- a/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk.swift ++++ b/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk.swift +@@ -14,24 +14,31 @@ private enum CallbackType { + } + + @objc(OnfidoSdk) +-final class OnfidoSdk: RCTEventEmitter { ++public final class OnfidoSdk: NSObject { + + private let onfidoFlowBuilder = OnfidoFlowBuilder() + private let configParser = OnfidoConfigParser() + private var callbackTypes: [CallbackType] = [] + + @objc +- func start(_ config: NSDictionary, +- resolver resolve: @escaping RCTPromiseResolveBlock, +- rejecter reject: @escaping RCTPromiseRejectBlock) { ++ public var mediaCallbackHandler: (([String: Any]) -> Void)? ++ ++ // TODO: Using React types here (RCTPromiseResolveBlock and RCTPromiseRejectBlock) causes the project to fail to build. ++ // For some reason marking them as @escaping causes the XCode to add an import to non-existent header file in onfido_react_native_sdk-Swift.h. ++ @objc ++ public func start(_ config: NSDictionary, ++ resolver resolve: @escaping (Any) -> Void, ++ rejecter reject: @escaping (String, String, Error?) -> Void) -> Void { + DispatchQueue.main.async { [weak self] in + self?.run(withConfig: config, resolver: resolve, rejecter: reject) + } + } + ++ // TODO: Same as above + private func run(withConfig config: NSDictionary, +- resolver resolve: @escaping RCTPromiseResolveBlock, +- rejecter reject: @escaping RCTPromiseRejectBlock) { ++ resolver resolve: @escaping (Any) -> Void, ++ rejecter reject: @escaping (String, String, Error?) -> Void) { ++ + do { + let onfidoConfig: OnfidoPluginConfig = try configParser.parse(config) + +@@ -90,27 +97,17 @@ final class OnfidoSdk: RCTEventEmitter { + } + } + +- // MARK: - Callbacks +- +- @objc +- public override func supportedEvents() -> [String] { +- return ["onfidoMediaCallback"] +- } +- +- @objc +- override static func requiresMainQueueSetup() -> Bool { +- return false +- } +- + // MARK: Media + + @objc +- func withMediaCallbacksEnabled() { ++ public func withMediaCallbacksEnabled() { + callbackTypes.append(.media) + } + + private func processMediaResult(_ dictionary: [String: Any]) { +- sendEvent(withName: "onfidoMediaCallback", body: dictionary) ++ if let handler = mediaCallbackHandler { ++ handler(dictionary) ++ } + } + } + +diff --git a/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk.xcodeproj/project.pbxproj b/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk.xcodeproj/project.pbxproj +index e87f422..7958454 100644 +--- a/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk.xcodeproj/project.pbxproj ++++ b/node_modules/@onfido/react-native-sdk/ios/OnfidoSdk.xcodeproj/project.pbxproj +@@ -65,6 +65,8 @@ + 8517ACCD244290D10077E909 /* OnfidoSdkTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnfidoSdkTests.swift; sourceTree = ""; }; + 899A7F1B3979E0BB4044B867 /* libPods-OnfidoSdk-OnfidoSdkTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-OnfidoSdk-OnfidoSdkTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 8B8E5FE3BDE0C9C96B5FE8AB /* Pods-OnfidoSdk.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OnfidoSdk.debug.xcconfig"; path = "Target Support Files/Pods-OnfidoSdk/Pods-OnfidoSdk.debug.xcconfig"; sourceTree = ""; }; ++ 9B55F4FF2B61451700EC4D80 /* PluginMetadata.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PluginMetadata.m; sourceTree = ""; }; ++ 9B55F5002B61451700EC4D80 /* PluginMetadata.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PluginMetadata.h; sourceTree = ""; }; + 9BF206B12A3C839F00766D77 /* CallbackReceiver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallbackReceiver.swift; sourceTree = ""; }; + 9BF206B22A3C839F00766D77 /* BridgeUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BridgeUtils.swift; sourceTree = ""; }; + 9BF206B32A3C839F00766D77 /* OnfidoAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnfidoAppearance.swift; sourceTree = ""; }; +@@ -138,6 +140,8 @@ + 3AFE501B2408521F00E21479 /* OnfidoSdk-Bridging-Header.h */, + B3E7B5881CC2AC0600A0062D /* OnfidoSdk.h */, + B3E7B5891CC2AC0600A0062D /* OnfidoSdk.m */, ++ 9B55F5002B61451700EC4D80 /* PluginMetadata.h */, ++ 9B55F4FF2B61451700EC4D80 /* PluginMetadata.m */, + 3A9D42CA2412EEF50087A331 /* OnfidoSdkTests */, + 134814211AA4EA7D00B7C361 /* Products */, + 4A3724A27399FEFCC7B1F920 /* Pods */, +diff --git a/node_modules/@onfido/react-native-sdk/ios/PluginMetadata.h b/node_modules/@onfido/react-native-sdk/ios/PluginMetadata.h +new file mode 100644 +index 0000000..c263983 +--- /dev/null ++++ b/node_modules/@onfido/react-native-sdk/ios/PluginMetadata.h +@@ -0,0 +1,10 @@ ++#import ++ ++NS_ASSUME_NONNULL_BEGIN ++ ++@interface PluginMetadata : NSObject ++@property (nonatomic, readonly) NSString* pluginPlatform; ++@property (nonatomic, readonly) NSString* pluginVersion; ++@end ++ ++NS_ASSUME_NONNULL_END +diff --git a/node_modules/@onfido/react-native-sdk/ios/PluginMetadata.m b/node_modules/@onfido/react-native-sdk/ios/PluginMetadata.m +new file mode 100644 +index 0000000..3f9109e +--- /dev/null ++++ b/node_modules/@onfido/react-native-sdk/ios/PluginMetadata.m +@@ -0,0 +1,15 @@ ++#import "PluginMetadata.h" ++ ++@implementation PluginMetadata ++ ++- (instancetype)init ++{ ++ self = [super init]; ++ if (self) { ++ _pluginPlatform = @"react-native"; ++ _pluginVersion = @"10.7.0"; ++ } ++ return self; ++} ++ ++@end +diff --git a/node_modules/@onfido/react-native-sdk/ios/PluginMetadata.swift b/node_modules/@onfido/react-native-sdk/ios/PluginMetadata.swift +deleted file mode 100644 +index 9e2b0fc..0000000 +--- a/node_modules/@onfido/react-native-sdk/ios/PluginMetadata.swift ++++ /dev/null +@@ -1,11 +0,0 @@ +-// +-// PluginMetadata.swift +-// +-// Copyright © 2016-2023 Onfido. All rights reserved. +-// +- +-@objcMembers +-final class PluginMetadata: NSObject { +- let pluginPlatform = "react-native" +- let pluginVersion = "10.6.0" +-} +diff --git a/node_modules/@onfido/react-native-sdk/ios/Podfile b/node_modules/@onfido/react-native-sdk/ios/Podfile +index 8fc621f..38b66d9 100644 +--- a/node_modules/@onfido/react-native-sdk/ios/Podfile ++++ b/node_modules/@onfido/react-native-sdk/ios/Podfile +@@ -27,7 +27,7 @@ flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : Flip + # end + + target 'OnfidoSdk' do +- pod 'Onfido', '~> 29.6.0' ++ pod 'Onfido', '~> 29.7.0' + + config = use_native_modules! + use_react_native!( +@@ -41,6 +41,17 @@ target 'OnfidoSdk' do + target 'OnfidoSdkTests' do + # inherit! :search_paths + # Pods for testing ++ end + ++ # unary_function and binary_function are no longer provided in C++17 and newer standard modes as part of Xcode 15. ++ # They can be re-enabled with setting _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION ++ # Ref: https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes#Deprecations ++ # Solution: https://github.com/facebook/react-native/issues/37748#issuecomment-1580589448 ++ post_install do |installer| ++ installer.pods_project.targets.each do |target| ++ target.build_configurations.each do |config| ++ config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', '_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION'] ++ end ++ end + end + end +diff --git a/node_modules/@onfido/react-native-sdk/ios/Podfile.lock b/node_modules/@onfido/react-native-sdk/ios/Podfile.lock +index 87765b9..46aa9fb 100644 +--- a/node_modules/@onfido/react-native-sdk/ios/Podfile.lock ++++ b/node_modules/@onfido/react-native-sdk/ios/Podfile.lock +@@ -519,11 +519,11 @@ EXTERNAL SOURCES: + + SPEC CHECKSUMS: + boost: 57d2868c099736d80fcd648bf211b4431e51a558 +- DoubleConversion: cf9b38bf0b2d048436d9a82ad2abe1404f11e7de ++ DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 + FBLazyVector: 748c0ef74f2bf4b36cfcccf37916806940a64c32 + FBReactNativeSpec: 966f29e4e697de53a3b366355e8f57375c856ad9 + fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 +- glog: 73c2498ac6884b13ede40eda8228cb1eee9d9d62 ++ glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b + Onfido: c52e797b10cc9e6d29ba91996cb62e501000bfdd + RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1 + RCTRequired: 28469809442eb4eb5528462705f7d852948c8a74 +@@ -560,6 +560,6 @@ SPEC CHECKSUMS: + SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 + Yoga: b76f1acfda8212aa16b7e26bcce3983230c82603 + +-PODFILE CHECKSUM: ee04850b32b0f021f8e865806f0d8fc273717178 ++PODFILE CHECKSUM: b0afaaafeb2272120df31de2529a6e679929c7c5 + + COCOAPODS: 1.14.3 +diff --git a/node_modules/@onfido/react-native-sdk/ios/RNOnfidoSdk.h b/node_modules/@onfido/react-native-sdk/ios/RNOnfidoSdk.h +new file mode 100644 +index 0000000..3b65b7a +--- /dev/null ++++ b/node_modules/@onfido/react-native-sdk/ios/RNOnfidoSdk.h +@@ -0,0 +1,16 @@ ++#import ++#import ++#import ++ ++#ifdef RCT_NEW_ARCH_ENABLED ++ ++#import ++@interface RNOnfidoSdk : RCTEventEmitter ++ ++#else ++ ++@interface RNOnfidoSdk : RCTEventEmitter ++ ++#endif ++ ++@end +diff --git a/node_modules/@onfido/react-native-sdk/ios/RNOnfidoSdk.mm b/node_modules/@onfido/react-native-sdk/ios/RNOnfidoSdk.mm +new file mode 100644 +index 0000000..4d21970 +--- /dev/null ++++ b/node_modules/@onfido/react-native-sdk/ios/RNOnfidoSdk.mm +@@ -0,0 +1,59 @@ ++#import "RNOnfidoSdk.h" ++#import ++ ++@implementation RNOnfidoSdk { ++ OnfidoSdk *_onfidoSdk; ++} ++ ++RCT_EXPORT_MODULE() ++ +++ (BOOL)requiresMainQueueSetup { ++ return NO; ++} ++ ++- (instancetype)init ++{ ++ if (!(self = [super init])) { ++ return nil; ++ } ++ ++ _onfidoSdk = [[OnfidoSdk alloc] init]; ++ ++ // capture weak self reference to prevent retain cycle ++ __weak __typeof__(self) weakSelf = self; ++ ++ _onfidoSdk.mediaCallbackHandler = ^(NSDictionary *data) { ++ __typeof__(self) strongSelf = weakSelf; ++ ++ if (strongSelf != nullptr) { ++ [strongSelf sendEventWithName:@"onfidoMediaCallback" body:data]; ++ } ++ }; ++ ++ return self; ++} ++ ++- (NSArray *)supportedEvents ++{ ++ return @[@"onfidoMediaCallback"]; ++} ++ ++RCT_EXPORT_METHOD(start:(NSDictionary *)config resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) ++{ ++ [_onfidoSdk start:config resolver:resolve rejecter:reject]; ++} ++ ++RCT_EXPORT_METHOD(withMediaCallbacksEnabled) ++{ ++ [_onfidoSdk withMediaCallbacksEnabled]; ++} ++ ++#ifdef RCT_NEW_ARCH_ENABLED ++ ++- (std::shared_ptr)getTurboModule:(const facebook::react::ObjCTurboModule::InitParams &)params { ++ return std::make_shared(params); ++} ++ ++#endif ++ ++@end +diff --git a/node_modules/@onfido/react-native-sdk/js/NativeOnfidoModule.ts b/node_modules/@onfido/react-native-sdk/js/NativeOnfidoModule.ts +new file mode 100644 +index 0000000..c48f86e +--- /dev/null ++++ b/node_modules/@onfido/react-native-sdk/js/NativeOnfidoModule.ts +@@ -0,0 +1,13 @@ ++import { TurboModuleRegistry, TurboModule } from "react-native"; ++import { Int32 } from 'react-native/Libraries/Types/CodegenTypes'; ++ ++export interface Spec extends TurboModule { ++ start(config: Object): Promise; ++ withMediaCallbacksEnabled(): void; ++ ++ // those two are here for event emitter methods ++ addListener(eventName: string): void; ++ removeListeners(count: Int32): void; ++} ++ ++export default TurboModuleRegistry.getEnforcing("RNOnfidoSdk"); +diff --git a/node_modules/@onfido/react-native-sdk/js/Onfido.ts b/node_modules/@onfido/react-native-sdk/js/Onfido.ts +index db35471..8bb6a57 100644 +--- a/node_modules/@onfido/react-native-sdk/js/Onfido.ts ++++ b/node_modules/@onfido/react-native-sdk/js/Onfido.ts +@@ -1,4 +1,4 @@ +-import {NativeModules, Platform, NativeEventEmitter} from 'react-native'; ++import {Platform, NativeEventEmitter} from 'react-native'; + import { + OnfidoAlpha2CountryCode, + OnfidoCaptureType, +@@ -11,11 +11,9 @@ import { + } from "./config_constants"; + import { Base64 } from 'js-base64'; + +-const {OnfidoSdk} = NativeModules; +- +-const OndifoSdkModule = NativeModules.OnfidoSdk +-const eventEmitter = new NativeEventEmitter(OndifoSdkModule) ++import OnfidoSdk from "./NativeOnfidoModule"; + ++const eventEmitter = new NativeEventEmitter(OnfidoSdk) + + const Onfido = { + start(config: OnfidoConfig): Promise { +@@ -93,7 +91,7 @@ const Onfido = { + return OnfidoSdk.start(config).catch((error: any) => { + console.log(error); + throw error; +- }); ++ }) as Promise; + }, + + addCustomMediaCallback(callback: (result: OnfidoMediaResult) => OnfidoMediaResult) { +diff --git a/node_modules/@onfido/react-native-sdk/onfido-react-native-sdk.podspec b/node_modules/@onfido/react-native-sdk/onfido-react-native-sdk.podspec +index a9de0d0..fcd6d14 100644 +--- a/node_modules/@onfido/react-native-sdk/onfido-react-native-sdk.podspec ++++ b/node_modules/@onfido/react-native-sdk/onfido-react-native-sdk.podspec +@@ -2,6 +2,8 @@ require "json" + + package = JSON.parse(File.read(File.join(__dir__, "package.json"))) + ++fabric_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1' ++ + Pod::Spec.new do |s| + s.name = "onfido-react-native-sdk" + s.version = package["version"] +@@ -15,10 +17,15 @@ Pod::Spec.new do |s| + s.platforms = { :ios => "11.0" } + s.source = { :git => "https://github.com/onfido/react-native-sdk.git", :tag => "#{s.version}" } + +- s.source_files = "ios/**/*.{h,m,swift}" ++ s.source_files = "ios/**/*.{h,m,swift,mm}" + s.exclude_files = "ios/OnfidoSdkTests/" + s.requires_arc = true + +- s.dependency "React" +- s.dependency "Onfido", "~> 29.6.0" ++ s.dependency "Onfido", "~> 29.7.0" ++ ++ if defined?(install_modules_dependencies()) != nil ++ install_modules_dependencies(s) ++ else ++ s.dependency "React" ++ end + end +diff --git a/node_modules/@onfido/react-native-sdk/package.json b/node_modules/@onfido/react-native-sdk/package.json +index 50a331b..754c3c0 100644 +--- a/node_modules/@onfido/react-native-sdk/package.json ++++ b/node_modules/@onfido/react-native-sdk/package.json +@@ -24,7 +24,8 @@ + ], + "testPathIgnorePatterns": [ + "/TestApp", +- "/SampleApp" ++ "/SampleApp", ++ "/FabricSample" + ], + "globals": { + "__DEV__": true +@@ -82,6 +83,14 @@ + "react-native": "0.72.6", + "typescript": "^4.6.4" + }, ++ "codegenConfig": { ++ "name": "rnonfidosdk", ++ "type": "modules", ++ "jsSrcsDir": "./js", ++ "android": { ++ "javaPackageName": "com.onfido.reactnative.sdk" ++ } ++ }, + "dependencies": { + "js-base64": "3.7.5" + }, +diff --git a/node_modules/@onfido/react-native-sdk/scripts/update-integration-versions.sh b/node_modules/@onfido/react-native-sdk/scripts/update-integration-versions.sh +index 49f9d4c..1b9f304 100755 +--- a/node_modules/@onfido/react-native-sdk/scripts/update-integration-versions.sh ++++ b/node_modules/@onfido/react-native-sdk/scripts/update-integration-versions.sh +@@ -2,16 +2,16 @@ + + PROJ_DIR=. + MANIFEST_FILE=${PROJ_DIR}/android/src/main/AndroidManifest.xml +-IOS_PLUGIN_FILE=${PROJ_DIR}/ios/PluginMetadata.swift ++IOS_PLUGIN_FILE=${PROJ_DIR}/ios/PluginMetadata.m + + update_manifest() + { +- sed -i -e "s/android:value=\"[0-9]*\.[0-9]*\.[0-9]*\"/android:value=\"$2\"/g" $1 ++ sed -i '' -e "s/android:value=\"[0-9]*\.[0-9]*\.[0-9]*\"/android:value=\"$2\"/g" $1 + } + + update_plugin_file() + { +- sed -i -e "s/pluginVersion = \"[0-9]*\.[0-9]*\.[0-9]*\"/pluginVersion = \"$2\"/g" $1 ++ sed -i '' -e "s/_pluginVersion = @\"[0-9]*\.[0-9]*\.[0-9]*\"/_pluginVersion = @\"$2\"/g" $1 + } + + update_manifest ${MANIFEST_FILE} $PACKAGE_VERSION diff --git a/patches/@react-native+gradle-plugin+0.73.4.patch b/patches/@react-native+gradle-plugin+0.73.4.patch new file mode 100644 index 000000000000..680de81743e7 --- /dev/null +++ b/patches/@react-native+gradle-plugin+0.73.4.patch @@ -0,0 +1,21 @@ +diff --git a/node_modules/@react-native/gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTask.kt b/node_modules/@react-native/gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTask.kt +index f3b55e0..5ca7316 100644 +--- a/node_modules/@react-native/gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTask.kt ++++ b/node_modules/@react-native/gradle-plugin/src/main/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTask.kt +@@ -45,15 +45,9 @@ abstract class PreparePrefabHeadersTask : DefaultTask() { + fs.copy { + it.from(headerPath) + it.include("**/*.h") ++ it.include("**/*.hpp") + it.exclude("**/*.cpp") + it.exclude("**/*.txt") +- // We don't want to copy all the boost headers as they are 250Mb+ +- it.include("boost/config.hpp") +- it.include("boost/config/**/*.hpp") +- it.include("boost/core/*.hpp") +- it.include("boost/detail/workaround.hpp") +- it.include("boost/operators.hpp") +- it.include("boost/preprocessor/**/*.hpp") + it.into(File(outputFolder.asFile, headerPrefix)) + } + } diff --git a/patches/@react-native-community+cli-platform-android+12.3.0.patch b/patches/@react-native-community+cli-platform-android+12.3.2.patch similarity index 100% rename from patches/@react-native-community+cli-platform-android+12.3.0.patch rename to patches/@react-native-community+cli-platform-android+12.3.2.patch diff --git a/patches/@react-native-community+cli-platform-ios+12.3.0.patch b/patches/@react-native-community+cli-platform-ios+12.3.2.patch similarity index 100% rename from patches/@react-native-community+cli-platform-ios+12.3.0.patch rename to patches/@react-native-community+cli-platform-ios+12.3.2.patch diff --git a/patches/@react-native-community+geolocation+3.1.0.patch b/patches/@react-native-community+geolocation+3.1.0.patch new file mode 100644 index 000000000000..5afa0b8e0897 --- /dev/null +++ b/patches/@react-native-community+geolocation+3.1.0.patch @@ -0,0 +1,38 @@ +diff --git a/node_modules/@react-native-community/geolocation/react-native-geolocation.podspec b/node_modules/@react-native-community/geolocation/react-native-geolocation.podspec +index a319e73..c1ea11c 100644 +--- a/node_modules/@react-native-community/geolocation/react-native-geolocation.podspec ++++ b/node_modules/@react-native-community/geolocation/react-native-geolocation.podspec +@@ -1,8 +1,6 @@ + require 'json' + + package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) +-folly_version = '2021.07.22.00' +-folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' + + Pod::Spec.new do |s| + s.name = "react-native-geolocation" +@@ -17,20 +15,11 @@ Pod::Spec.new do |s| + s.source = { :git => "https://github.com/react-native-community/react-native-geolocation.git", :tag => "v#{s.version}" } + s.source_files = "ios/**/*.{h,m,mm}" + +- s.dependency 'React-Core' + s.frameworks = 'CoreLocation' + +- if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then +- s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1" +- s.pod_target_xcconfig = { +- "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"", +- "CLANG_CXX_LANGUAGE_STANDARD" => "c++17" +- } +- +- s.dependency "React-Codegen" +- s.dependency "RCT-Folly", folly_version +- s.dependency "RCTRequired" +- s.dependency "RCTTypeSafety" +- s.dependency "ReactCommon/turbomodule/core" ++ if defined?(install_modules_dependencies()) != nil ++ install_modules_dependencies(s) ++ else ++ s.dependency "React-Core" + end + end diff --git a/patches/@react-native-community+netinfo+11.2.1+001+initial.patch b/patches/@react-native-community+netinfo+11.2.1+001+initial.patch new file mode 100644 index 000000000000..9a5b031c6dc1 --- /dev/null +++ b/patches/@react-native-community+netinfo+11.2.1+001+initial.patch @@ -0,0 +1,8 @@ +diff --git a/node_modules/@react-native-community/netinfo/android/src/main/java/com/reactnativecommunity/netinfo/NetInfoModule.java b/node_modules/@react-native-community/netinfo/android/src/main/java/com/reactnativecommunity/netinfo/NetInfoModuleImpl.java +similarity index 100% +rename from node_modules/@react-native-community/netinfo/android/src/main/java/com/reactnativecommunity/netinfo/NetInfoModule.java +rename to node_modules/@react-native-community/netinfo/android/src/main/java/com/reactnativecommunity/netinfo/NetInfoModuleImpl.java +diff --git a/node_modules/@react-native-community/netinfo/ios/RNCNetInfo.m b/node_modules/@react-native-community/netinfo/ios/RNCNetInfo.mm +similarity index 100% +rename from node_modules/@react-native-community/netinfo/ios/RNCNetInfo.m +rename to node_modules/@react-native-community/netinfo/ios/RNCNetInfo.mm diff --git a/patches/@react-native-community+netinfo+11.2.1+002+turbomodule.patch b/patches/@react-native-community+netinfo+11.2.1+002+turbomodule.patch new file mode 100644 index 000000000000..f8e171008e14 --- /dev/null +++ b/patches/@react-native-community+netinfo+11.2.1+002+turbomodule.patch @@ -0,0 +1,3065 @@ +diff --git a/node_modules/@react-native-community/netinfo/android/build.gradle b/node_modules/@react-native-community/netinfo/android/build.gradle +index 0d617ed..e93d64a 100644 +--- a/node_modules/@react-native-community/netinfo/android/build.gradle ++++ b/node_modules/@react-native-community/netinfo/android/build.gradle +@@ -3,9 +3,10 @@ buildscript { + // This avoids unnecessary downloads and potential conflicts when the library is included as a + // module dependency in an application project. + if (project == rootProject) { +- repositories { +- google() +- mavenCentral() ++ repositories { ++ google() ++ mavenCentral() ++ gradlePluginPortal() + } + + dependencies { +@@ -26,8 +27,54 @@ def getExtOrIntegerDefault(name) { + return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties['ReactNativeNetInfo_' + name]).toInteger() + } + ++def isNewArchitectureEnabled() { ++ return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" ++} ++ ++def resolveReactNativeDirectory() { ++ def reactNativeLocation = getExtOrInitialValue("REACT_NATIVE_NODE_MODULES_DIR", null) ++ if (reactNativeLocation != null) { ++ return file(reactNativeLocation) ++ } ++ ++ // monorepo workaround ++ // react-native can be hoisted or in project's own node_modules ++ def reactNativeFromProjectNodeModules = file("${rootProject.projectDir}/../node_modules/react-native") ++ if (reactNativeFromProjectNodeModules.exists()) { ++ return reactNativeFromProjectNodeModules ++ } ++ ++ def reactNativeFromNodeModulesWithRNCNetInfo = file("${projectDir}/../../react-native") ++ if (reactNativeFromNodeModulesWithRNCNetInfo.exists()) { ++ return reactNativeFromNodeModulesWithRNCNetInfo ++ } ++ ++ throw new Exception( ++ "[react-native-netinfo] Unable to resolve react-native location in " + ++ "node_modules. You should add project extension property (in app/build.gradle) " + ++ "`REACT_NATIVE_NODE_MODULES_DIR` with path to react-native." ++ ) ++} ++ ++def getReactNativeMinorVersion() { ++ def REACT_NATIVE_DIR = resolveReactNativeDirectory() ++ ++ def reactProperties = new Properties() ++ file("$REACT_NATIVE_DIR/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) } ++ ++ def REACT_NATIVE_VERSION = reactProperties.getProperty("VERSION_NAME") ++ def REACT_NATIVE_MINOR_VERSION = REACT_NATIVE_VERSION.startsWith("0.0.0-") ? 1000 : REACT_NATIVE_VERSION.split("\\.")[1].toInteger() ++ ++ return REACT_NATIVE_MINOR_VERSION ++} ++ ++ + apply plugin: 'com.android.library' + ++if (isNewArchitectureEnabled()) { ++ apply plugin: 'com.facebook.react' ++} ++ + android { + compileSdkVersion getExtOrIntegerDefault('compileSdkVersion') + +@@ -45,10 +92,21 @@ android { + defaultConfig { + minSdkVersion getExtOrIntegerDefault('minSdkVersion') + targetSdkVersion getExtOrIntegerDefault('targetSdkVersion') ++ buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()) ++ } ++ sourceSets { ++ main { ++ if (isNewArchitectureEnabled()) { ++ java.srcDirs += ['src/newarch'] ++ } else { ++ java.srcDirs += ['src/oldarch'] ++ } ++ } + } + lintOptions{ + abortOnError false + } ++ + } + + repositories { +@@ -63,6 +121,9 @@ repositories { + + dependencies { + //noinspection GradleDynamicVersion +- implementation 'com.facebook.react:react-native:+' +- ++ if (isNewArchitectureEnabled() && getReactNativeMinorVersion() < 71) { ++ implementation project(":ReactAndroid") ++ } else { ++ implementation 'com.facebook.react:react-native:+' ++ } + } +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/android/src/main/java/com/reactnativecommunity/netinfo/NetInfoModuleImpl.java b/node_modules/@react-native-community/netinfo/android/src/main/java/com/reactnativecommunity/netinfo/NetInfoModuleImpl.java +index 2c3280b..296bbfd 100644 +--- a/node_modules/@react-native-community/netinfo/android/src/main/java/com/reactnativecommunity/netinfo/NetInfoModuleImpl.java ++++ b/node_modules/@react-native-community/netinfo/android/src/main/java/com/reactnativecommunity/netinfo/NetInfoModuleImpl.java +@@ -9,13 +9,11 @@ package com.reactnativecommunity.netinfo; + import android.os.Build; + import com.facebook.react.bridge.Promise; + import com.facebook.react.bridge.ReactApplicationContext; +-import com.facebook.react.bridge.ReactContextBaseJavaModule; + import com.facebook.react.bridge.ReactMethod; + import com.facebook.react.module.annotations.ReactModule; + + /** Module that monitors and provides information about the connectivity state of the device. */ +-@ReactModule(name = NetInfoModule.NAME) +-public class NetInfoModule extends ReactContextBaseJavaModule implements AmazonFireDeviceConnectivityPoller.ConnectivityChangedCallback { ++public class NetInfoModuleImpl implements AmazonFireDeviceConnectivityPoller.ConnectivityChangedCallback { + public static final String NAME = "RNCNetInfo"; + + private final ConnectivityReceiver mConnectivityReceiver; +@@ -23,8 +21,7 @@ public class NetInfoModule extends ReactContextBaseJavaModule implements AmazonF + + private int numberOfListeners = 0; + +- public NetInfoModule(ReactApplicationContext reactContext) { +- super(reactContext); ++ public NetInfoModuleImpl(ReactApplicationContext reactContext) { + // Create the connectivity receiver based on the API level we are running on + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + mConnectivityReceiver = new NetworkCallbackConnectivityReceiver(reactContext); +@@ -35,23 +32,17 @@ public class NetInfoModule extends ReactContextBaseJavaModule implements AmazonF + mAmazonConnectivityChecker = new AmazonFireDeviceConnectivityPoller(reactContext, this); + } + +- @Override ++ + public void initialize() { + mConnectivityReceiver.register(); + mAmazonConnectivityChecker.register(); + } + +- @Override + public void onCatalystInstanceDestroy() { + mAmazonConnectivityChecker.unregister(); + mConnectivityReceiver.unregister(); +- mConnectivityReceiver.hasListener = false; + } + +- @Override +- public String getName() { +- return NAME; +- } + + @ReactMethod + public void getCurrentState(final String requestedInterface, final Promise promise) { +@@ -63,14 +54,14 @@ public class NetInfoModule extends ReactContextBaseJavaModule implements AmazonF + mConnectivityReceiver.setIsInternetReachableOverride(isConnected); + } + +- @ReactMethod ++ + public void addListener(String eventName) { + numberOfListeners++; + mConnectivityReceiver.hasListener = true; + } + +- @ReactMethod +- public void removeListeners(Integer count) { ++ ++ public void removeListeners(double count) { + numberOfListeners -= count; + if (numberOfListeners == 0) { + mConnectivityReceiver.hasListener = false; +diff --git a/node_modules/@react-native-community/netinfo/android/src/main/java/com/reactnativecommunity/netinfo/NetInfoPackage.java b/node_modules/@react-native-community/netinfo/android/src/main/java/com/reactnativecommunity/netinfo/NetInfoPackage.java +index fcd4a5e..1bf0b62 100644 +--- a/node_modules/@react-native-community/netinfo/android/src/main/java/com/reactnativecommunity/netinfo/NetInfoPackage.java ++++ b/node_modules/@react-native-community/netinfo/android/src/main/java/com/reactnativecommunity/netinfo/NetInfoPackage.java +@@ -1,34 +1,46 @@ +-/** +- * Copyright (c) Facebook, Inc. and its affiliates. +- * +- * This source code is licensed under the MIT license found in the +- * LICENSE file in the root directory of this source tree. +- */ + package com.reactnativecommunity.netinfo; + +-import com.facebook.react.ReactPackage; +-import com.facebook.react.bridge.JavaScriptModule; ++import androidx.annotation.Nullable; + import com.facebook.react.bridge.NativeModule; + import com.facebook.react.bridge.ReactApplicationContext; +-import com.facebook.react.uimanager.ViewManager; +-import java.util.Arrays; ++import com.facebook.react.module.model.ReactModuleInfo; ++import com.facebook.react.module.model.ReactModuleInfoProvider; ++import com.facebook.react.TurboReactPackage; ++ + import java.util.Collections; ++import java.util.HashMap; + import java.util.List; ++import java.util.Map; + +-public class NetInfoPackage implements ReactPackage { +- @Override +- public List createNativeModules(ReactApplicationContext reactContext) { +- return Arrays.asList(new NetInfoModule(reactContext)); +- } ++public class NetInfoPackage extends TurboReactPackage { + +- // Deprecated from RN 0.47 +- public List> createJSModules() { +- return Collections.emptyList(); +- } ++ @Nullable ++ @Override ++ public NativeModule getModule(String name, ReactApplicationContext reactContext) { ++ if (name.equals(NetInfoModuleImpl.NAME)) { ++ return new NetInfoModule(reactContext); ++ } else { ++ return null; ++ } ++ } + +- @Override +- @SuppressWarnings("rawtypes") +- public List createViewManagers(ReactApplicationContext reactContext) { +- return Collections.emptyList(); +- } ++ @Override ++ public ReactModuleInfoProvider getReactModuleInfoProvider() { ++ return () -> { ++ final Map moduleInfos = new HashMap<>(); ++ boolean turboModulesEnabled = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; ++ moduleInfos.put( ++ NetInfoModuleImpl.NAME, ++ new ReactModuleInfo( ++ NetInfoModuleImpl.NAME, ++ NetInfoModuleImpl.NAME, ++ false, // canOverrideExistingModule ++ false, // needsEagerInit ++ true, // hasConstants ++ false, // isCxxModule ++ turboModulesEnabled // isTurboModule ++ )); ++ return moduleInfos; ++ }; ++ } + } +diff --git a/node_modules/@react-native-community/netinfo/android/src/newarch/com/reactnativecommunity/netinfo/NetInfoModule.java b/node_modules/@react-native-community/netinfo/android/src/newarch/com/reactnativecommunity/netinfo/NetInfoModule.java +new file mode 100644 +index 0000000..61e44c4 +--- /dev/null ++++ b/node_modules/@react-native-community/netinfo/android/src/newarch/com/reactnativecommunity/netinfo/NetInfoModule.java +@@ -0,0 +1,51 @@ ++package com.reactnativecommunity.netinfo; ++ ++import com.facebook.react.bridge.ReactApplicationContext; ++import com.facebook.react.bridge.Promise; ++import com.facebook.react.bridge.ReactMethod; ++import com.facebook.react.bridge.ReadableMap; ++ ++public class NetInfoModule extends NativeRNCNetInfoSpec { ++ ++ private NetInfoModuleImpl implementation; ++ ++ NetInfoModule(ReactApplicationContext context) { ++ super(context); ++ implementation = new NetInfoModuleImpl(context); ++ } ++ ++ @Override ++ public String getName() { ++ return NetInfoModuleImpl.NAME; ++ } ++ ++ @ReactMethod ++ public void getCurrentState(final String requestedInterface, final Promise promise) { ++ implementation.getCurrentState(requestedInterface, promise); ++ } ++ ++ @ReactMethod ++ public void configure(ReadableMap config) { ++ // iOS only ++ } ++ ++ @ReactMethod ++ public void addListener(String eventName) { ++ implementation.addListener(eventName); ++ } ++ ++ @ReactMethod ++ public void removeListeners(double count) { ++ implementation.removeListeners(count); ++ } ++ ++ @Override ++ public void onCatalystInstanceDestroy() { ++ implementation.onCatalystInstanceDestroy(); ++ } ++ ++ @Override ++ public void initialize() { ++ implementation.initialize(); ++ } ++} +diff --git a/node_modules/@react-native-community/netinfo/android/src/oldarch/com/reactnativecommunity/netinfo/NetInfoModule.java b/node_modules/@react-native-community/netinfo/android/src/oldarch/com/reactnativecommunity/netinfo/NetInfoModule.java +new file mode 100644 +index 0000000..4738d63 +--- /dev/null ++++ b/node_modules/@react-native-community/netinfo/android/src/oldarch/com/reactnativecommunity/netinfo/NetInfoModule.java +@@ -0,0 +1,59 @@ ++ ++ ++package com.reactnativecommunity.netinfo; ++ ++import com.facebook.react.bridge.NativeModule; ++import com.facebook.react.bridge.Promise; ++import com.facebook.react.bridge.ReactApplicationContext; ++import com.facebook.react.bridge.ReactContext; ++import com.facebook.react.bridge.ReactContextBaseJavaModule; ++import com.facebook.react.bridge.ReactMethod; ++import java.util.Map; ++import java.util.HashMap; ++import com.facebook.react.bridge.ReadableMap; ++ ++public class NetInfoModule extends ReactContextBaseJavaModule { ++ ++ private NetInfoModuleImpl implementation; ++ ++ NetInfoModule(ReactApplicationContext context) { ++ super(context); ++ implementation = new NetInfoModuleImpl(context); ++ } ++ ++ @Override ++ public String getName() { ++ return NetInfoModuleImpl.NAME; ++ } ++ ++ @ReactMethod ++ public void getCurrentState(final String requestedInterface, final Promise promise) { ++ implementation.getCurrentState(requestedInterface, promise); ++ } ++ ++ @Override ++ public void onCatalystInstanceDestroy() { ++ implementation.onCatalystInstanceDestroy(); ++ } ++ ++ ++ @Override ++ public void initialize() { ++ implementation.initialize(); ++ } ++ ++ @ReactMethod ++ public void addListener(String eventName) { ++ implementation.addListener(eventName); ++ } ++ ++ @ReactMethod ++ public void configure(ReadableMap config) { ++ // iOS only ++ } ++ ++ @ReactMethod ++ public void removeListeners(double count) { ++ implementation.removeListeners(count); ++ } ++} +diff --git a/node_modules/@react-native-community/netinfo/ios/RNCNetInfo.mm b/node_modules/@react-native-community/netinfo/ios/RNCNetInfo.mm +index e83b8c4..be520d9 100644 +--- a/node_modules/@react-native-community/netinfo/ios/RNCNetInfo.mm ++++ b/node_modules/@react-native-community/netinfo/ios/RNCNetInfo.mm +@@ -8,6 +8,10 @@ + #import "RNCNetInfo.h" + #import "RNCConnectionStateWatcher.h" + ++#ifdef RCT_NEW_ARCH_ENABLED ++#import "RNCNetInfoSpec.h" ++#endif ++ + #include + #include + +@@ -15,13 +19,18 @@ + #import + #import + #endif +-@import SystemConfiguration.CaptiveNetwork; ++#import ++ + + #import + #import + #import + ++#ifdef RCT_NEW_ARCH_ENABLED ++@interface RNCNetInfo () ++#else + @interface RNCNetInfo () ++#endif + + @property (nonatomic, strong) RNCConnectionStateWatcher *connectionStateWatcher; + @property (nonatomic) BOOL isObserving; +@@ -97,6 +106,7 @@ - (void)connectionStateWatcher:(RNCConnectionStateWatcher *)connectionStateWatch + resolve([self currentDictionaryFromUpdateState:state withInterface:requestedInterface]); + } + ++ + RCT_EXPORT_METHOD(configure:(NSDictionary *)config) + { + self.config = config; +@@ -265,4 +275,10 @@ - (NSString *)bssid + } + #endif + ++#ifdef RCT_NEW_ARCH_ENABLED ++- (std::shared_ptr)getTurboModule:(const facebook::react::ObjCTurboModule::InitParams &)params { ++ return std::make_shared(params); ++} ++#endif ++ + @end +diff --git a/node_modules/@react-native-community/netinfo/jest/netinfo-mock.js b/node_modules/@react-native-community/netinfo/jest/netinfo-mock.js +index 7f5769c..99b1aa3 100644 +--- a/node_modules/@react-native-community/netinfo/jest/netinfo-mock.js ++++ b/node_modules/@react-native-community/netinfo/jest/netinfo-mock.js +@@ -14,18 +14,17 @@ const defaultState = { + }; + + const NetInfoStateType = { +- unknown: "unknown", +- none: "none", +- cellular: "cellular", +- wifi: "wifi", +- bluetooth: "bluetooth", +- ethernet: "ethernet", +- wimax: "wimax", +- vpn: "vpn", +- other: "other", ++ unknown: 'unknown', ++ none: 'none', ++ cellular: 'cellular', ++ wifi: 'wifi', ++ bluetooth: 'bluetooth', ++ ethernet: 'ethernet', ++ wimax: 'wimax', ++ vpn: 'vpn', ++ other: 'other', + }; + +- + const RNCNetInfoMock = { + NetInfoStateType, + configure: jest.fn(), +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/index.js b/node_modules/@react-native-community/netinfo/lib/commonjs/index.js +index f5afe24..8f06bc8 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/index.js ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/index.js +@@ -11,26 +11,19 @@ var _exportNames = { + useNetInfo: true, + useNetInfoInstance: true + }; ++exports.addEventListener = addEventListener; + exports.configure = configure; ++exports.default = void 0; + exports.fetch = fetch; + exports.refresh = refresh; +-exports.addEventListener = addEventListener; + exports.useNetInfo = useNetInfo; + exports.useNetInfoInstance = useNetInfoInstance; +-exports.default = void 0; +- + var _react = require("react"); +- + var _reactNative = require("react-native"); +- + var _defaultConfiguration = _interopRequireDefault(require("./internal/defaultConfiguration")); +- + var _nativeInterface = _interopRequireDefault(require("./internal/nativeInterface")); +- + var _state2 = _interopRequireDefault(require("./internal/state")); +- + var Types = _interopRequireWildcard(require("./internal/types")); +- + Object.keys(Types).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; +@@ -42,13 +35,9 @@ Object.keys(Types).forEach(function (key) { + } + }); + }); +- +-function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } +- +-function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +- ++function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } ++function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +- + /** + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -57,14 +46,16 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de + * + * @format + */ ++ + // Stores the currently used configuration +-let _configuration = _defaultConfiguration.default; // Stores the singleton reference to the state manager ++let _configuration = _defaultConfiguration.default; + ++// Stores the singleton reference to the state manager + let _state = null; +- + const createState = () => { + return new _state2.default(_configuration); + }; ++ + /** + * Configures the library with the given configuration. Note that calling this will stop all + * previously added listeners from being called again. It is best to call this right when your +@@ -72,23 +63,20 @@ const createState = () => { + * + * @param configuration The new configuration to set. + */ +- +- + function configure(configuration) { +- _configuration = { ..._defaultConfiguration.default, ++ _configuration = { ++ ..._defaultConfiguration.default, + ...configuration + }; +- + if (_state) { + _state.tearDown(); +- + _state = createState(); + } +- + if (_reactNative.Platform.OS === 'ios') { + _nativeInterface.default.configure(configuration); + } + } ++ + /** + * Returns a `Promise` that resolves to a `NetInfoState` object. + * This function operates on the global singleton instance configured using `configure()` +@@ -97,29 +85,25 @@ function configure(configuration) { + * + * @returns A Promise which contains the current connection state. + */ +- +- + function fetch(requestedInterface) { + if (!_state) { + _state = createState(); + } +- + return _state.latest(requestedInterface); + } ++ + /** + * Force-refreshes the internal state of the global singleton managed by this library. + * + * @returns A Promise which contains the updated connection state. + */ +- +- + function refresh() { + if (!_state) { + _state = createState(); + } +- + return _state._fetchCurrentState(); + } ++ + /** + * Subscribe to the global singleton's connection information. The callback is called with a parameter of type + * [`NetInfoState`](README.md#netinfostate) whenever the connection state changes. Your listener +@@ -131,19 +115,16 @@ function refresh() { + * + * @returns A function which can be called to unsubscribe. + */ +- +- + function addEventListener(listener) { + if (!_state) { + _state = createState(); + } +- + _state.add(listener); +- + return () => { + _state && _state.remove(listener); + }; + } ++ + /** + * A React Hook into this library's singleton which updates when the connection state changes. + * +@@ -151,13 +132,10 @@ function addEventListener(listener) { + * + * @returns The connection state. + */ +- +- + function useNetInfo(configuration) { + if (configuration) { + configure(configuration); + } +- + const [netInfo, setNetInfo] = (0, _react.useState)({ + type: Types.NetInfoStateType.unknown, + isConnected: null, +@@ -169,6 +147,7 @@ function useNetInfo(configuration) { + }, []); + return netInfo; + } ++ + /** + * A React Hook which manages an isolated instance of the network info manager. + * This is not a hook into a singleton shared state. NetInfo.configure, NetInfo.addEventListener, +@@ -178,8 +157,6 @@ function useNetInfo(configuration) { + * + * @returns the netInfo state and a refresh function + */ +- +- + function useNetInfoInstance(isPaused = false, configuration) { + const [networkInfoManager, setNetworkInfoManager] = (0, _react.useState)(); + const [netInfo, setNetInfo] = (0, _react.useState)({ +@@ -192,8 +169,8 @@ function useNetInfoInstance(isPaused = false, configuration) { + if (isPaused) { + return; + } +- +- const config = { ..._defaultConfiguration.default, ++ const config = { ++ ..._defaultConfiguration.default, + ...configuration + }; + const state = new _state2.default(config); +@@ -209,8 +186,7 @@ function useNetInfoInstance(isPaused = false, configuration) { + refresh + }; + } +- +-var _default = { ++var _default = exports.default = { + configure, + fetch, + refresh, +@@ -218,5 +194,4 @@ var _default = { + useNetInfo, + useNetInfoInstance + }; +-exports.default = _default; + //# sourceMappingURL=index.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/index.js.map b/node_modules/@react-native-community/netinfo/lib/commonjs/index.js.map +index c778a40..51f1ed7 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/index.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/index.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["index.ts"],"names":["_configuration","DEFAULT_CONFIGURATION","_state","createState","State","configure","configuration","tearDown","Platform","OS","NativeInterface","fetch","requestedInterface","latest","refresh","_fetchCurrentState","addEventListener","listener","add","remove","useNetInfo","netInfo","setNetInfo","type","Types","NetInfoStateType","unknown","isConnected","isInternetReachable","details","useNetInfoInstance","isPaused","networkInfoManager","setNetworkInfoManager","config","state"],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {useState, useEffect, useCallback} from 'react';\nimport {Platform} from 'react-native';\nimport DEFAULT_CONFIGURATION from './internal/defaultConfiguration';\nimport NativeInterface from './internal/nativeInterface';\nimport State from './internal/state';\nimport * as Types from './internal/types';\n\n// Stores the currently used configuration\nlet _configuration = DEFAULT_CONFIGURATION;\n\n// Stores the singleton reference to the state manager\nlet _state: State | null = null;\nconst createState = (): State => {\n return new State(_configuration);\n};\n\n/**\n * Configures the library with the given configuration. Note that calling this will stop all\n * previously added listeners from being called again. It is best to call this right when your\n * application is started to avoid issues. The configuration sets up a global singleton instance.\n *\n * @param configuration The new configuration to set.\n */\nexport function configure(\n configuration: Partial,\n): void {\n _configuration = {\n ...DEFAULT_CONFIGURATION,\n ...configuration,\n };\n\n if (_state) {\n _state.tearDown();\n _state = createState();\n }\n\n if (Platform.OS === 'ios') {\n NativeInterface.configure(configuration);\n }\n}\n\n/**\n * Returns a `Promise` that resolves to a `NetInfoState` object.\n * This function operates on the global singleton instance configured using `configure()`\n *\n * @param [requestedInterface] interface from which to obtain the information\n *\n * @returns A Promise which contains the current connection state.\n */\nexport function fetch(\n requestedInterface?: string,\n): Promise {\n if (!_state) {\n _state = createState();\n }\n return _state.latest(requestedInterface);\n}\n\n/**\n * Force-refreshes the internal state of the global singleton managed by this library.\n *\n * @returns A Promise which contains the updated connection state.\n */\nexport function refresh(): Promise {\n if (!_state) {\n _state = createState();\n }\n return _state._fetchCurrentState();\n}\n\n/**\n * Subscribe to the global singleton's connection information. The callback is called with a parameter of type\n * [`NetInfoState`](README.md#netinfostate) whenever the connection state changes. Your listener\n * will be called with the latest information soon after you subscribe and then with any\n * subsequent changes afterwards. You should not assume that the listener is called in the same\n * way across devices or platforms.\n *\n * @param listener The listener which is called when the network state changes.\n *\n * @returns A function which can be called to unsubscribe.\n */\nexport function addEventListener(\n listener: Types.NetInfoChangeHandler,\n): Types.NetInfoSubscription {\n if (!_state) {\n _state = createState();\n }\n\n _state.add(listener);\n return (): void => {\n _state && _state.remove(listener);\n };\n}\n\n/**\n * A React Hook into this library's singleton which updates when the connection state changes.\n *\n * @param {Partial} configuration - Configure the isolated network checker managed by this hook\n *\n * @returns The connection state.\n */\nexport function useNetInfo(\n configuration?: Partial,\n): Types.NetInfoState {\n if (configuration) {\n configure(configuration);\n }\n\n const [netInfo, setNetInfo] = useState({\n type: Types.NetInfoStateType.unknown,\n isConnected: null,\n isInternetReachable: null,\n details: null,\n });\n\n useEffect((): (() => void) => {\n return addEventListener(setNetInfo);\n }, []);\n\n return netInfo;\n}\n\n/**\n * A React Hook which manages an isolated instance of the network info manager.\n * This is not a hook into a singleton shared state. NetInfo.configure, NetInfo.addEventListener,\n * NetInfo.fetch, NetInfo.refresh are performed on a global singleton and have no affect on this hook.\n * @param {boolean} isPaused - Pause the internal network checks.\n * @param {Partial} configuration - Configure the isolated network checker managed by this hook\n *\n * @returns the netInfo state and a refresh function\n */\nexport function useNetInfoInstance(\n isPaused = false,\n configuration?: Partial,\n) {\n const [networkInfoManager, setNetworkInfoManager] = useState();\n const [netInfo, setNetInfo] = useState({\n type: Types.NetInfoStateType.unknown,\n isConnected: null,\n isInternetReachable: null,\n details: null,\n });\n\n useEffect(() => {\n if (isPaused) {\n return;\n }\n const config = {\n ...DEFAULT_CONFIGURATION,\n ...configuration,\n };\n const state = new State(config);\n setNetworkInfoManager(state);\n state.add(setNetInfo);\n return state.tearDown;\n }, [isPaused, configuration]);\n\n const refresh = useCallback(() => {\n networkInfoManager && networkInfoManager._fetchCurrentState();\n }, [networkInfoManager]);\n\n return {\n netInfo,\n refresh,\n };\n}\n\nexport * from './internal/types';\n\nexport default {\n configure,\n fetch,\n refresh,\n addEventListener,\n useNetInfo,\n useNetInfoInstance,\n};\n"]} +\ No newline at end of file ++{"version":3,"names":["_react","require","_reactNative","_defaultConfiguration","_interopRequireDefault","_nativeInterface","_state2","Types","_interopRequireWildcard","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","obj","_configuration","DEFAULT_CONFIGURATION","_state","createState","State","configure","configuration","tearDown","Platform","OS","NativeInterface","fetch","requestedInterface","latest","refresh","_fetchCurrentState","addEventListener","listener","add","remove","useNetInfo","netInfo","setNetInfo","useState","type","NetInfoStateType","unknown","isConnected","isInternetReachable","details","useEffect","useNetInfoInstance","isPaused","networkInfoManager","setNetworkInfoManager","config","state","useCallback","_default"],"sources":["index.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {useState, useEffect, useCallback} from 'react';\nimport {Platform} from 'react-native';\nimport DEFAULT_CONFIGURATION from './internal/defaultConfiguration';\nimport NativeInterface from './internal/nativeInterface';\nimport State from './internal/state';\nimport * as Types from './internal/types';\n\n// Stores the currently used configuration\nlet _configuration = DEFAULT_CONFIGURATION;\n\n// Stores the singleton reference to the state manager\nlet _state: State | null = null;\nconst createState = (): State => {\n return new State(_configuration);\n};\n\n/**\n * Configures the library with the given configuration. Note that calling this will stop all\n * previously added listeners from being called again. It is best to call this right when your\n * application is started to avoid issues. The configuration sets up a global singleton instance.\n *\n * @param configuration The new configuration to set.\n */\nexport function configure(\n configuration: Partial,\n): void {\n _configuration = {\n ...DEFAULT_CONFIGURATION,\n ...configuration,\n };\n\n if (_state) {\n _state.tearDown();\n _state = createState();\n }\n\n if (Platform.OS === 'ios') {\n NativeInterface.configure(configuration);\n }\n}\n\n/**\n * Returns a `Promise` that resolves to a `NetInfoState` object.\n * This function operates on the global singleton instance configured using `configure()`\n *\n * @param [requestedInterface] interface from which to obtain the information\n *\n * @returns A Promise which contains the current connection state.\n */\nexport function fetch(\n requestedInterface?: string,\n): Promise {\n if (!_state) {\n _state = createState();\n }\n return _state.latest(requestedInterface);\n}\n\n/**\n * Force-refreshes the internal state of the global singleton managed by this library.\n *\n * @returns A Promise which contains the updated connection state.\n */\nexport function refresh(): Promise {\n if (!_state) {\n _state = createState();\n }\n return _state._fetchCurrentState();\n}\n\n/**\n * Subscribe to the global singleton's connection information. The callback is called with a parameter of type\n * [`NetInfoState`](README.md#netinfostate) whenever the connection state changes. Your listener\n * will be called with the latest information soon after you subscribe and then with any\n * subsequent changes afterwards. You should not assume that the listener is called in the same\n * way across devices or platforms.\n *\n * @param listener The listener which is called when the network state changes.\n *\n * @returns A function which can be called to unsubscribe.\n */\nexport function addEventListener(\n listener: Types.NetInfoChangeHandler,\n): Types.NetInfoSubscription {\n if (!_state) {\n _state = createState();\n }\n\n _state.add(listener);\n return (): void => {\n _state && _state.remove(listener);\n };\n}\n\n/**\n * A React Hook into this library's singleton which updates when the connection state changes.\n *\n * @param {Partial} configuration - Configure the isolated network checker managed by this hook\n *\n * @returns The connection state.\n */\nexport function useNetInfo(\n configuration?: Partial,\n): Types.NetInfoState {\n if (configuration) {\n configure(configuration);\n }\n\n const [netInfo, setNetInfo] = useState({\n type: Types.NetInfoStateType.unknown,\n isConnected: null,\n isInternetReachable: null,\n details: null,\n });\n\n useEffect((): (() => void) => {\n return addEventListener(setNetInfo);\n }, []);\n\n return netInfo;\n}\n\n/**\n * A React Hook which manages an isolated instance of the network info manager.\n * This is not a hook into a singleton shared state. NetInfo.configure, NetInfo.addEventListener,\n * NetInfo.fetch, NetInfo.refresh are performed on a global singleton and have no affect on this hook.\n * @param {boolean} isPaused - Pause the internal network checks.\n * @param {Partial} configuration - Configure the isolated network checker managed by this hook\n *\n * @returns the netInfo state and a refresh function\n */\nexport function useNetInfoInstance(\n isPaused = false,\n configuration?: Partial,\n) {\n const [networkInfoManager, setNetworkInfoManager] = useState();\n const [netInfo, setNetInfo] = useState({\n type: Types.NetInfoStateType.unknown,\n isConnected: null,\n isInternetReachable: null,\n details: null,\n });\n\n useEffect(() => {\n if (isPaused) {\n return;\n }\n const config = {\n ...DEFAULT_CONFIGURATION,\n ...configuration,\n };\n const state = new State(config);\n setNetworkInfoManager(state);\n state.add(setNetInfo);\n return state.tearDown;\n }, [isPaused, configuration]);\n\n const refresh = useCallback(() => {\n networkInfoManager && networkInfoManager._fetchCurrentState();\n }, [networkInfoManager]);\n\n return {\n netInfo,\n refresh,\n };\n}\n\nexport * from './internal/types';\n\nexport default {\n configure,\n fetch,\n refresh,\n addEventListener,\n useNetInfo,\n useNetInfoInstance,\n};\n"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/NativeRNCNetInfo.js b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/NativeRNCNetInfo.js +new file mode 100644 +index 0000000..e3949ec +--- /dev/null ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/NativeRNCNetInfo.js +@@ -0,0 +1,10 @@ ++"use strict"; ++ ++Object.defineProperty(exports, "__esModule", { ++ value: true ++}); ++exports.default = void 0; ++var _reactNative = require("react-native"); ++/* eslint-disable @typescript-eslint/ban-types */ ++var _default = exports.default = _reactNative.TurboModuleRegistry.getEnforcing('RNCNetInfo'); ++//# sourceMappingURL=NativeRNCNetInfo.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/NativeRNCNetInfo.js.map b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/NativeRNCNetInfo.js.map +new file mode 100644 +index 0000000..86d23d4 +--- /dev/null ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/NativeRNCNetInfo.js.map +@@ -0,0 +1 @@ ++{"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sources":["NativeRNCNetInfo.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\nimport type { TurboModule } from 'react-native';\nimport { TurboModuleRegistry } from 'react-native';\n\nexport interface Spec extends TurboModule {\n configure: (config: Object) => void;\n getCurrentState(requestedInterface?: string): Promise;\n // Events\n addListener: (eventName: string) => void;\n removeListeners: (count: number) => void;\n}\n\nexport default TurboModuleRegistry.getEnforcing('RNCNetInfo');\n\n"],"mappings":";;;;;;AAEA,IAAAA,YAAA,GAAAC,OAAA;AAFA;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAYeC,gCAAmB,CAACC,YAAY,CAAO,YAAY,CAAC"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.js b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.js +index 166a58d..c5b4e66 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.js ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.js +@@ -19,6 +19,5 @@ const DEFAULT_CONFIGURATION = { + shouldFetchWiFiSSID: false, + useNativeReachability: true + }; +-var _default = DEFAULT_CONFIGURATION; +-exports.default = _default; ++var _default = exports.default = DEFAULT_CONFIGURATION; + //# sourceMappingURL=defaultConfiguration.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.js.map b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.js.map +index 03f9097..be92be9 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["defaultConfiguration.ts"],"names":["DEFAULT_CONFIGURATION","reachabilityUrl","reachabilityMethod","reachabilityHeaders","reachabilityTest","response","Promise","resolve","status","reachabilityShortTimeout","reachabilityLongTimeout","reachabilityRequestTimeout","reachabilityShouldRun","shouldFetchWiFiSSID","useNativeReachability"],"mappings":";;;;;;AAEA,MAAMA,qBAAiD,GAAG;AACxDC,EAAAA,eAAe,EAAE,0CADuC;AAExDC,EAAAA,kBAAkB,EAAE,MAFoC;AAGxDC,EAAAA,mBAAmB,EAAE,EAHmC;AAIxDC,EAAAA,gBAAgB,EAAGC,QAAD,IAChBC,OAAO,CAACC,OAAR,CAAgBF,QAAQ,CAACG,MAAT,KAAoB,GAApC,CALsD;AAMxDC,EAAAA,wBAAwB,EAAE,IAAI,IAN0B;AAMpB;AACpCC,EAAAA,uBAAuB,EAAE,KAAK,IAP0B;AAOpB;AACpCC,EAAAA,0BAA0B,EAAE,KAAK,IARuB;AAQjB;AACvCC,EAAAA,qBAAqB,EAAE,MAAe,IATkB;AAUxDC,EAAAA,mBAAmB,EAAE,KAVmC;AAWxDC,EAAAA,qBAAqB,EAAE;AAXiC,CAA1D;eAced,qB","sourcesContent":["import * as Types from './types';\n\nconst DEFAULT_CONFIGURATION: Types.NetInfoConfiguration = {\n reachabilityUrl: 'https://clients3.google.com/generate_204',\n reachabilityMethod: 'HEAD',\n reachabilityHeaders: {},\n reachabilityTest: (response: Response): Promise =>\n Promise.resolve(response.status === 204),\n reachabilityShortTimeout: 5 * 1000, // 5s\n reachabilityLongTimeout: 60 * 1000, // 60s\n reachabilityRequestTimeout: 15 * 1000, // 15s\n reachabilityShouldRun: (): boolean => true,\n shouldFetchWiFiSSID: false,\n useNativeReachability: true\n};\n\nexport default DEFAULT_CONFIGURATION;"]} +\ No newline at end of file ++{"version":3,"names":["DEFAULT_CONFIGURATION","reachabilityUrl","reachabilityMethod","reachabilityHeaders","reachabilityTest","response","Promise","resolve","status","reachabilityShortTimeout","reachabilityLongTimeout","reachabilityRequestTimeout","reachabilityShouldRun","shouldFetchWiFiSSID","useNativeReachability","_default","exports","default"],"sources":["defaultConfiguration.ts"],"sourcesContent":["import * as Types from './types';\n\nconst DEFAULT_CONFIGURATION: Types.NetInfoConfiguration = {\n reachabilityUrl: 'https://clients3.google.com/generate_204',\n reachabilityMethod: 'HEAD',\n reachabilityHeaders: {},\n reachabilityTest: (response: Response): Promise =>\n Promise.resolve(response.status === 204),\n reachabilityShortTimeout: 5 * 1000, // 5s\n reachabilityLongTimeout: 60 * 1000, // 60s\n reachabilityRequestTimeout: 15 * 1000, // 15s\n reachabilityShouldRun: (): boolean => true,\n shouldFetchWiFiSSID: false,\n useNativeReachability: true\n};\n\nexport default DEFAULT_CONFIGURATION;"],"mappings":";;;;;;AAEA,MAAMA,qBAAiD,GAAG;EACxDC,eAAe,EAAE,0CAA0C;EAC3DC,kBAAkB,EAAE,MAAM;EAC1BC,mBAAmB,EAAE,CAAC,CAAC;EACvBC,gBAAgB,EAAGC,QAAkB,IACnCC,OAAO,CAACC,OAAO,CAACF,QAAQ,CAACG,MAAM,KAAK,GAAG,CAAC;EAC1CC,wBAAwB,EAAE,CAAC,GAAG,IAAI;EAAE;EACpCC,uBAAuB,EAAE,EAAE,GAAG,IAAI;EAAE;EACpCC,0BAA0B,EAAE,EAAE,GAAG,IAAI;EAAE;EACvCC,qBAAqB,EAAEA,CAAA,KAAe,IAAI;EAC1CC,mBAAmB,EAAE,KAAK;EAC1BC,qBAAqB,EAAE;AACzB,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEajB,qBAAqB"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.web.js b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.web.js +index 410b7b0..a1e0456 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.web.js ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.web.js +@@ -19,6 +19,5 @@ const DEFAULT_CONFIGURATION = { + shouldFetchWiFiSSID: true, + useNativeReachability: true + }; +-var _default = DEFAULT_CONFIGURATION; +-exports.default = _default; ++var _default = exports.default = DEFAULT_CONFIGURATION; + //# sourceMappingURL=defaultConfiguration.web.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.web.js.map b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.web.js.map +index edf0c39..d6ee21a 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.web.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/defaultConfiguration.web.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["defaultConfiguration.web.ts"],"names":["DEFAULT_CONFIGURATION","reachabilityUrl","reachabilityMethod","reachabilityHeaders","reachabilityTest","response","Promise","resolve","status","reachabilityShortTimeout","reachabilityLongTimeout","reachabilityRequestTimeout","reachabilityShouldRun","shouldFetchWiFiSSID","useNativeReachability"],"mappings":";;;;;;AAEA,MAAMA,qBAAiD,GAAG;AACxDC,EAAAA,eAAe,EAAE,GADuC;AAExDC,EAAAA,kBAAkB,EAAE,MAFoC;AAGxDC,EAAAA,mBAAmB,EAAE,EAHmC;AAIxDC,EAAAA,gBAAgB,EAAGC,QAAD,IAChBC,OAAO,CAACC,OAAR,CAAgBF,QAAQ,CAACG,MAAT,KAAoB,GAApC,CALsD;AAMxDC,EAAAA,wBAAwB,EAAE,IAAI,IAN0B;AAMpB;AACpCC,EAAAA,uBAAuB,EAAE,KAAK,IAP0B;AAOpB;AACpCC,EAAAA,0BAA0B,EAAE,KAAK,IARuB;AAQjB;AACvCC,EAAAA,qBAAqB,EAAE,MAAe,IATkB;AAUxDC,EAAAA,mBAAmB,EAAE,IAVmC;AAWxDC,EAAAA,qBAAqB,EAAE;AAXiC,CAA1D;eAced,qB","sourcesContent":["import * as Types from './types';\n\nconst DEFAULT_CONFIGURATION: Types.NetInfoConfiguration = {\n reachabilityUrl: '/',\n reachabilityMethod: \"HEAD\",\n reachabilityHeaders: {},\n reachabilityTest: (response: Response): Promise =>\n Promise.resolve(response.status === 200),\n reachabilityShortTimeout: 5 * 1000, // 5s\n reachabilityLongTimeout: 60 * 1000, // 60s\n reachabilityRequestTimeout: 15 * 1000, // 15s\n reachabilityShouldRun: (): boolean => true,\n shouldFetchWiFiSSID: true,\n useNativeReachability: true\n};\n\nexport default DEFAULT_CONFIGURATION"]} +\ No newline at end of file ++{"version":3,"names":["DEFAULT_CONFIGURATION","reachabilityUrl","reachabilityMethod","reachabilityHeaders","reachabilityTest","response","Promise","resolve","status","reachabilityShortTimeout","reachabilityLongTimeout","reachabilityRequestTimeout","reachabilityShouldRun","shouldFetchWiFiSSID","useNativeReachability","_default","exports","default"],"sources":["defaultConfiguration.web.ts"],"sourcesContent":["import * as Types from './types';\n\nconst DEFAULT_CONFIGURATION: Types.NetInfoConfiguration = {\n reachabilityUrl: '/',\n reachabilityMethod: \"HEAD\",\n reachabilityHeaders: {},\n reachabilityTest: (response: Response): Promise =>\n Promise.resolve(response.status === 200),\n reachabilityShortTimeout: 5 * 1000, // 5s\n reachabilityLongTimeout: 60 * 1000, // 60s\n reachabilityRequestTimeout: 15 * 1000, // 15s\n reachabilityShouldRun: (): boolean => true,\n shouldFetchWiFiSSID: true,\n useNativeReachability: true\n};\n\nexport default DEFAULT_CONFIGURATION"],"mappings":";;;;;;AAEA,MAAMA,qBAAiD,GAAG;EACxDC,eAAe,EAAE,GAAG;EACpBC,kBAAkB,EAAE,MAAM;EAC1BC,mBAAmB,EAAE,CAAC,CAAC;EACvBC,gBAAgB,EAAGC,QAAkB,IACnCC,OAAO,CAACC,OAAO,CAACF,QAAQ,CAACG,MAAM,KAAK,GAAG,CAAC;EAC1CC,wBAAwB,EAAE,CAAC,GAAG,IAAI;EAAE;EACpCC,uBAAuB,EAAE,EAAE,GAAG,IAAI;EAAE;EACpCC,0BAA0B,EAAE,EAAE,GAAG,IAAI;EAAE;EACvCC,qBAAqB,EAAEA,CAAA,KAAe,IAAI;EAC1CC,mBAAmB,EAAE,IAAI;EACzBC,qBAAqB,EAAE;AACzB,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEajB,qBAAqB"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/internetReachability.js b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/internetReachability.js +index 45296d9..5169ed8 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/internetReachability.js ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/internetReachability.js +@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +- +-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +- ++function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } ++function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } ++function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } + /** + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -15,57 +15,45 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope + * + * @format + */ ++ + class InternetReachability { + constructor(configuration, listener) { + _defineProperty(this, "_configuration", void 0); +- + _defineProperty(this, "_listener", void 0); +- + _defineProperty(this, "_isInternetReachable", undefined); +- + _defineProperty(this, "_currentInternetReachabilityCheckHandler", null); +- + _defineProperty(this, "_currentTimeoutHandle", null); +- + _defineProperty(this, "_setIsInternetReachable", isInternetReachable => { + if (this._isInternetReachable === isInternetReachable) { + return; + } +- + this._isInternetReachable = isInternetReachable; +- + this._listener(this._isInternetReachable); + }); +- + _defineProperty(this, "_setExpectsConnection", expectsConnection => { + // Cancel any pending check + if (this._currentInternetReachabilityCheckHandler !== null) { + this._currentInternetReachabilityCheckHandler.cancel(); +- + this._currentInternetReachabilityCheckHandler = null; +- } // Cancel any pending timeout +- +- ++ } ++ // Cancel any pending timeout + if (this._currentTimeoutHandle !== null) { + clearTimeout(this._currentTimeoutHandle); + this._currentTimeoutHandle = null; + } +- + if (expectsConnection && this._configuration.reachabilityShouldRun()) { + // If we expect a connection, start the process for finding if we have one + // Set the state to "null" if it was previously false + if (!this._isInternetReachable) { + this._setIsInternetReachable(null); +- } // Start a network request to check for internet +- +- ++ } ++ // Start a network request to check for internet + this._currentInternetReachabilityCheckHandler = this._checkInternetReachability(); + } else { + // If we don't expect a connection or don't run reachability check, just change the state to "false" + this._setIsInternetReachable(false); + } + }); +- + _defineProperty(this, "_checkInternetReachability", () => { + const controller = new AbortController(); + const responsePromise = fetch(this._configuration.reachabilityUrl, { +@@ -73,16 +61,17 @@ class InternetReachability { + method: this._configuration.reachabilityMethod, + cache: 'no-cache', + signal: controller.signal +- }); // Create promise that will reject after the request timeout has been reached ++ }); + ++ // Create promise that will reject after the request timeout has been reached + let timeoutHandle; +- const timeoutPromise = new Promise(() => { +- timeoutHandle = setTimeout(() => controller.abort('timedout'), this._configuration.reachabilityRequestTimeout); +- }); // Create promise that makes it possible to cancel a pending request through a reject +- // eslint-disable-next-line @typescript-eslint/no-empty-function ++ const timeoutPromise = new Promise((_, reject) => { ++ timeoutHandle = setTimeout(() => reject('timedout'), this._configuration.reachabilityRequestTimeout); ++ }); + ++ // Create promise that makes it possible to cancel a pending request through a reject ++ // eslint-disable-next-line @typescript-eslint/no-empty-function + let cancel = () => {}; +- + const cancelPromise = new Promise((_, reject) => { + cancel = () => reject('canceled'); + }); +@@ -90,18 +79,25 @@ class InternetReachability { + return this._configuration.reachabilityTest(response); + }).then(result => { + this._setIsInternetReachable(result); +- + const nextTimeoutInterval = this._isInternetReachable ? this._configuration.reachabilityLongTimeout : this._configuration.reachabilityShortTimeout; + this._currentTimeoutHandle = setTimeout(this._checkInternetReachability, nextTimeoutInterval); ++ }).catch(error => { ++ if (error !== 'canceled') { ++ this._setIsInternetReachable(false); ++ this._currentTimeoutHandle = setTimeout(this._checkInternetReachability, this._configuration.reachabilityShortTimeout); ++ } + }).catch(error => { + if ('canceled' === error) { + controller.abort(); + } else { ++ if ('timedout' === error) { ++ controller.abort(); ++ } + this._setIsInternetReachable(false); +- + this._currentTimeoutHandle = setTimeout(this._checkInternetReachability, this._configuration.reachabilityShortTimeout); + } +- }) // Clear request timeout and propagate any errors ++ }) ++ // Clear request timeout and propagate any errors + .then(() => { + clearTimeout(timeoutHandle); + }, error => { +@@ -113,7 +109,6 @@ class InternetReachability { + cancel + }; + }); +- + _defineProperty(this, "update", state => { + if (typeof state.isInternetReachable === 'boolean' && this._configuration.useNativeReachability) { + this._setIsInternetReachable(state.isInternetReachable); +@@ -121,31 +116,25 @@ class InternetReachability { + this._setExpectsConnection(state.isConnected); + } + }); +- + _defineProperty(this, "currentState", () => { + return this._isInternetReachable; + }); +- + _defineProperty(this, "tearDown", () => { + // Cancel any pending check + if (this._currentInternetReachabilityCheckHandler !== null) { + this._currentInternetReachabilityCheckHandler.cancel(); +- + this._currentInternetReachabilityCheckHandler = null; +- } // Cancel any pending timeout +- ++ } + ++ // Cancel any pending timeout + if (this._currentTimeoutHandle !== null) { + clearTimeout(this._currentTimeoutHandle); + this._currentTimeoutHandle = null; + } + }); +- + this._configuration = configuration; + this._listener = listener; + } +- + } +- + exports.default = InternetReachability; + //# sourceMappingURL=internetReachability.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/internetReachability.js.map b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/internetReachability.js.map +index 6d12691..63bd2df 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/internetReachability.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/internetReachability.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["internetReachability.ts"],"names":["InternetReachability","constructor","configuration","listener","undefined","isInternetReachable","_isInternetReachable","_listener","expectsConnection","_currentInternetReachabilityCheckHandler","cancel","_currentTimeoutHandle","clearTimeout","_configuration","reachabilityShouldRun","_setIsInternetReachable","_checkInternetReachability","controller","AbortController","responsePromise","fetch","reachabilityUrl","headers","reachabilityHeaders","method","reachabilityMethod","cache","signal","timeoutHandle","timeoutPromise","Promise","setTimeout","abort","reachabilityRequestTimeout","cancelPromise","_","reject","promise","race","then","response","reachabilityTest","result","nextTimeoutInterval","reachabilityLongTimeout","reachabilityShortTimeout","catch","error","state","useNativeReachability","_setExpectsConnection","isConnected"],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport * as PrivateTypes from './privateTypes';\nimport * as Types from './types';\n\ninterface InternetReachabilityCheckHandler {\n promise: Promise;\n cancel: () => void;\n}\n\nexport default class InternetReachability {\n private _configuration: Types.NetInfoConfiguration;\n private _listener: PrivateTypes.NetInfoInternetReachabilityChangeListener;\n private _isInternetReachable: boolean | null | undefined = undefined;\n private _currentInternetReachabilityCheckHandler: InternetReachabilityCheckHandler | null = null;\n private _currentTimeoutHandle: ReturnType | null = null;\n\n constructor(\n configuration: Types.NetInfoConfiguration,\n listener: PrivateTypes.NetInfoInternetReachabilityChangeListener,\n ) {\n this._configuration = configuration;\n this._listener = listener;\n }\n\n private _setIsInternetReachable = (\n isInternetReachable: boolean | null,\n ): void => {\n if (this._isInternetReachable === isInternetReachable) {\n return;\n }\n\n this._isInternetReachable = isInternetReachable;\n this._listener(this._isInternetReachable);\n };\n\n private _setExpectsConnection = (expectsConnection: boolean | null): void => {\n // Cancel any pending check\n if (this._currentInternetReachabilityCheckHandler !== null) {\n this._currentInternetReachabilityCheckHandler.cancel();\n this._currentInternetReachabilityCheckHandler = null;\n }\n // Cancel any pending timeout\n if (this._currentTimeoutHandle !== null) {\n clearTimeout(this._currentTimeoutHandle);\n this._currentTimeoutHandle = null;\n }\n\n if (expectsConnection && this._configuration.reachabilityShouldRun()) {\n // If we expect a connection, start the process for finding if we have one\n // Set the state to \"null\" if it was previously false\n if (!this._isInternetReachable) {\n this._setIsInternetReachable(null);\n }\n // Start a network request to check for internet\n this._currentInternetReachabilityCheckHandler = this._checkInternetReachability();\n } else {\n // If we don't expect a connection or don't run reachability check, just change the state to \"false\"\n this._setIsInternetReachable(false);\n }\n };\n\n private _checkInternetReachability = (): InternetReachabilityCheckHandler => {\n const controller = new AbortController();\n\n const responsePromise = fetch(this._configuration.reachabilityUrl, {\n headers: this._configuration.reachabilityHeaders,\n method: this._configuration.reachabilityMethod,\n cache: 'no-cache',\n signal: controller.signal,\n });\n\n // Create promise that will reject after the request timeout has been reached\n let timeoutHandle: ReturnType;\n const timeoutPromise = new Promise((): void => {\n timeoutHandle = setTimeout(\n (): void => controller.abort('timedout'),\n this._configuration.reachabilityRequestTimeout,\n );\n });\n\n // Create promise that makes it possible to cancel a pending request through a reject\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n let cancel: () => void = (): void => {};\n const cancelPromise = new Promise((_, reject): void => {\n cancel = (): void => reject('canceled');\n });\n\n const promise = Promise.race([\n responsePromise,\n timeoutPromise,\n cancelPromise,\n ])\n .then(\n (response): Promise => {\n return this._configuration.reachabilityTest(response);\n },\n )\n .then(\n (result): void => {\n this._setIsInternetReachable(result);\n const nextTimeoutInterval = this._isInternetReachable\n ? this._configuration.reachabilityLongTimeout\n : this._configuration.reachabilityShortTimeout;\n this._currentTimeoutHandle = setTimeout(\n this._checkInternetReachability,\n nextTimeoutInterval,\n );\n },\n )\n .catch(\n (error: Error | 'timedout' | 'canceled'): void => {\n if ('canceled' === error) {\n controller.abort();\n } else {\n this._setIsInternetReachable(false);\n this._currentTimeoutHandle = setTimeout(\n this._checkInternetReachability,\n this._configuration.reachabilityShortTimeout,\n );\n }\n },\n )\n // Clear request timeout and propagate any errors\n .then(\n (): void => {\n clearTimeout(timeoutHandle);\n },\n (error: Error): void => {\n clearTimeout(timeoutHandle);\n throw error;\n },\n );\n\n return {\n promise,\n cancel,\n };\n };\n\n public update = (state: PrivateTypes.NetInfoNativeModuleState): void => {\n if (\n typeof state.isInternetReachable === 'boolean' &&\n this._configuration.useNativeReachability\n ) {\n this._setIsInternetReachable(state.isInternetReachable);\n } else {\n this._setExpectsConnection(state.isConnected);\n }\n };\n\n public currentState = (): boolean | null | undefined => {\n return this._isInternetReachable;\n };\n\n public tearDown = (): void => {\n // Cancel any pending check\n if (this._currentInternetReachabilityCheckHandler !== null) {\n this._currentInternetReachabilityCheckHandler.cancel();\n this._currentInternetReachabilityCheckHandler = null;\n }\n\n // Cancel any pending timeout\n if (this._currentTimeoutHandle !== null) {\n clearTimeout(this._currentTimeoutHandle);\n this._currentTimeoutHandle = null;\n }\n };\n}\n"]} +\ No newline at end of file ++{"version":3,"names":["InternetReachability","constructor","configuration","listener","_defineProperty","undefined","isInternetReachable","_isInternetReachable","_listener","expectsConnection","_currentInternetReachabilityCheckHandler","cancel","_currentTimeoutHandle","clearTimeout","_configuration","reachabilityShouldRun","_setIsInternetReachable","_checkInternetReachability","controller","AbortController","responsePromise","fetch","reachabilityUrl","headers","reachabilityHeaders","method","reachabilityMethod","cache","signal","timeoutHandle","timeoutPromise","Promise","_","reject","setTimeout","reachabilityRequestTimeout","cancelPromise","promise","race","then","response","reachabilityTest","result","nextTimeoutInterval","reachabilityLongTimeout","reachabilityShortTimeout","catch","error","abort","state","useNativeReachability","_setExpectsConnection","isConnected","exports","default"],"sources":["internetReachability.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport * as PrivateTypes from './privateTypes';\nimport * as Types from './types';\n\ninterface InternetReachabilityCheckHandler {\n promise: Promise;\n cancel: () => void;\n}\n\nexport default class InternetReachability {\n private _configuration: Types.NetInfoConfiguration;\n private _listener: PrivateTypes.NetInfoInternetReachabilityChangeListener;\n private _isInternetReachable: boolean | null | undefined = undefined;\n private _currentInternetReachabilityCheckHandler: InternetReachabilityCheckHandler | null =\n null;\n private _currentTimeoutHandle: ReturnType | null = null;\n\n constructor(\n configuration: Types.NetInfoConfiguration,\n listener: PrivateTypes.NetInfoInternetReachabilityChangeListener,\n ) {\n this._configuration = configuration;\n this._listener = listener;\n }\n\n private _setIsInternetReachable = (\n isInternetReachable: boolean | null,\n ): void => {\n if (this._isInternetReachable === isInternetReachable) {\n return;\n }\n\n this._isInternetReachable = isInternetReachable;\n this._listener(this._isInternetReachable);\n };\n\n private _setExpectsConnection = (expectsConnection: boolean | null): void => {\n // Cancel any pending check\n if (this._currentInternetReachabilityCheckHandler !== null) {\n this._currentInternetReachabilityCheckHandler.cancel();\n this._currentInternetReachabilityCheckHandler = null;\n }\n // Cancel any pending timeout\n if (this._currentTimeoutHandle !== null) {\n clearTimeout(this._currentTimeoutHandle);\n this._currentTimeoutHandle = null;\n }\n\n if (expectsConnection && this._configuration.reachabilityShouldRun()) {\n // If we expect a connection, start the process for finding if we have one\n // Set the state to \"null\" if it was previously false\n if (!this._isInternetReachable) {\n this._setIsInternetReachable(null);\n }\n // Start a network request to check for internet\n this._currentInternetReachabilityCheckHandler =\n this._checkInternetReachability();\n } else {\n // If we don't expect a connection or don't run reachability check, just change the state to \"false\"\n this._setIsInternetReachable(false);\n }\n };\n\n private _checkInternetReachability = (): InternetReachabilityCheckHandler => {\n const controller = new AbortController();\n\n const responsePromise = fetch(this._configuration.reachabilityUrl, {\n headers: this._configuration.reachabilityHeaders,\n method: this._configuration.reachabilityMethod,\n cache: 'no-cache',\n signal: controller.signal,\n });\n\n // Create promise that will reject after the request timeout has been reached\n let timeoutHandle: ReturnType;\n const timeoutPromise = new Promise((_, reject): void => {\n timeoutHandle = setTimeout(\n (): void => reject('timedout'),\n this._configuration.reachabilityRequestTimeout,\n );\n });\n\n // Create promise that makes it possible to cancel a pending request through a reject\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n let cancel: () => void = (): void => {};\n const cancelPromise = new Promise((_, reject): void => {\n cancel = (): void => reject('canceled');\n });\n\n const promise = Promise.race([\n responsePromise,\n timeoutPromise,\n cancelPromise,\n ])\n .then((response): Promise => {\n return this._configuration.reachabilityTest(response);\n })\n .then((result): void => {\n this._setIsInternetReachable(result);\n const nextTimeoutInterval = this._isInternetReachable\n ? this._configuration.reachabilityLongTimeout\n : this._configuration.reachabilityShortTimeout;\n this._currentTimeoutHandle = setTimeout(\n this._checkInternetReachability,\n nextTimeoutInterval,\n );\n })\n .catch((error: Error | 'timedout' | 'canceled'): void => {\n if (error !== 'canceled') {\n this._setIsInternetReachable(false);\n this._currentTimeoutHandle = setTimeout(\n this._checkInternetReachability,\n this._configuration.reachabilityShortTimeout,\n );\n }\n })\n .catch(\n (error: Error | 'timedout' | 'canceled'): void => {\n if ('canceled' === error) {\n controller.abort();\n } else {\n if ('timedout' === error) {\n controller.abort();\n }\n \n this._setIsInternetReachable(false);\n this._currentTimeoutHandle = setTimeout(\n this._checkInternetReachability,\n this._configuration.reachabilityShortTimeout,\n );\n }\n },\n )\n // Clear request timeout and propagate any errors\n .then(\n (): void => {\n clearTimeout(timeoutHandle);\n },\n (error: Error): void => {\n clearTimeout(timeoutHandle);\n throw error;\n },\n );\n\n return {\n promise,\n cancel,\n };\n };\n\n public update = (state: PrivateTypes.NetInfoNativeModuleState): void => {\n if (\n typeof state.isInternetReachable === 'boolean' &&\n this._configuration.useNativeReachability\n ) {\n this._setIsInternetReachable(state.isInternetReachable);\n } else {\n this._setExpectsConnection(state.isConnected);\n }\n };\n\n public currentState = (): boolean | null | undefined => {\n return this._isInternetReachable;\n };\n\n public tearDown = (): void => {\n // Cancel any pending check\n if (this._currentInternetReachabilityCheckHandler !== null) {\n this._currentInternetReachabilityCheckHandler.cancel();\n this._currentInternetReachabilityCheckHandler = null;\n }\n\n // Cancel any pending timeout\n if (this._currentTimeoutHandle !== null) {\n clearTimeout(this._currentTimeoutHandle);\n this._currentTimeoutHandle = null;\n }\n };\n}\n"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.js b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.js +index 7a50da5..cb7d968 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.js ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.js +@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +- + var _reactNative = require("react-native"); +- + var _nativeModule = _interopRequireDefault(require("./nativeModule")); +- + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +- + /** + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -19,6 +15,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de + * + * @format + */ ++ + // Produce an error if we don't have the native module + if (!_nativeModule.default) { + throw new Error(`@react-native-community/netinfo: NativeModule.RNCNetInfo is null. To fix this issue try these steps: +@@ -31,27 +28,26 @@ if (!_nativeModule.default) { + + If none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-community/react-native-netinfo`); + } ++ + /** + * We export the native interface in this way to give easy shared access to it between the + * JavaScript code and the tests + */ +- +- + let nativeEventEmitter = null; +-var _default = { ..._nativeModule.default, +- ++var _default = exports.default = { ++ configure: _nativeModule.default.configure, ++ addListener: _nativeModule.default.addListener, ++ removeListeners: _nativeModule.default.removeListeners, ++ getCurrentState: _nativeModule.default.getCurrentState, + get eventEmitter() { + if (!nativeEventEmitter) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + /// @ts-ignore + nativeEventEmitter = new _reactNative.NativeEventEmitter(_nativeModule.default); +- } // eslint-disable-next-line @typescript-eslint/ban-ts-comment ++ } ++ // eslint-disable-next-line @typescript-eslint/ban-ts-comment + /// @ts-ignore +- +- + return nativeEventEmitter; + } +- + }; +-exports.default = _default; + //# sourceMappingURL=nativeInterface.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.js.map b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.js.map +index 1e7ac57..33b4bc0 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["nativeInterface.ts"],"names":["RNCNetInfo","Error","nativeEventEmitter","eventEmitter","NativeEventEmitter"],"mappings":";;;;;;;AASA;;AACA;;;;AAVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA,IAAI,CAACA,qBAAL,EAAiB;AACf,QAAM,IAAIC,KAAJ,CAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8IARQ,CAAN;AASD;AAED;AACA;AACA;AACA;;;AACA,IAAIC,kBAA6C,GAAG,IAApD;eACe,EACb,GAAGF,qBADU;;AAEb,MAAIG,YAAJ,GAAuC;AACrC,QAAI,CAACD,kBAAL,EAAyB;AACvB;AACA;AACAA,MAAAA,kBAAkB,GAAG,IAAIE,+BAAJ,CAAuBJ,qBAAvB,CAArB;AACD,KALoC,CAMrC;AACA;;;AACA,WAAOE,kBAAP;AACD;;AAXY,C","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeEventEmitter} from 'react-native';\nimport RNCNetInfo from './nativeModule';\n\n// Produce an error if we don't have the native module\nif (!RNCNetInfo) {\n throw new Error(`@react-native-community/netinfo: NativeModule.RNCNetInfo is null. To fix this issue try these steps:\n\n• Run \\`react-native link @react-native-community/netinfo\\` in the project root.\n• Rebuild and re-run the app.\n• If you are using CocoaPods on iOS, run \\`pod install\\` in the \\`ios\\` directory and then rebuild and re-run the app. You may also need to re-open Xcode to get the new pods.\n• Check that the library was linked correctly when you used the link command by running through the manual installation instructions in the README.\n* If you are getting this error while unit testing you need to mock the native module. Follow the guide in the README.\n\nIf none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-community/react-native-netinfo`);\n}\n\n/**\n * We export the native interface in this way to give easy shared access to it between the\n * JavaScript code and the tests\n */\nlet nativeEventEmitter: NativeEventEmitter | null = null;\nexport default {\n ...RNCNetInfo,\n get eventEmitter(): NativeEventEmitter {\n if (!nativeEventEmitter) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /// @ts-ignore\n nativeEventEmitter = new NativeEventEmitter(RNCNetInfo);\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /// @ts-ignore\n return nativeEventEmitter;\n },\n};\n"]} +\ No newline at end of file ++{"version":3,"names":["_reactNative","require","_nativeModule","_interopRequireDefault","obj","__esModule","default","RNCNetInfo","Error","nativeEventEmitter","_default","exports","configure","addListener","removeListeners","getCurrentState","eventEmitter","NativeEventEmitter"],"sources":["nativeInterface.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeEventEmitter} from 'react-native';\nimport RNCNetInfo from './nativeModule';\n\n// Produce an error if we don't have the native module\nif (!RNCNetInfo) {\n throw new Error(`@react-native-community/netinfo: NativeModule.RNCNetInfo is null. To fix this issue try these steps:\n\n• Run \\`react-native link @react-native-community/netinfo\\` in the project root.\n• Rebuild and re-run the app.\n• If you are using CocoaPods on iOS, run \\`pod install\\` in the \\`ios\\` directory and then rebuild and re-run the app. You may also need to re-open Xcode to get the new pods.\n• Check that the library was linked correctly when you used the link command by running through the manual installation instructions in the README.\n* If you are getting this error while unit testing you need to mock the native module. Follow the guide in the README.\n\nIf none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-community/react-native-netinfo`);\n}\n\n/**\n * We export the native interface in this way to give easy shared access to it between the\n * JavaScript code and the tests\n */\nlet nativeEventEmitter: NativeEventEmitter | null = null;\n\nexport default {\n configure: RNCNetInfo.configure,\n addListener: RNCNetInfo.addListener,\n removeListeners: RNCNetInfo.removeListeners,\n getCurrentState: RNCNetInfo.getCurrentState,\n get eventEmitter(): NativeEventEmitter {\n if (!nativeEventEmitter) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /// @ts-ignore\n nativeEventEmitter = new NativeEventEmitter(RNCNetInfo);\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /// @ts-ignore\n return nativeEventEmitter;\n },\n};\n"],"mappings":";;;;;;AASA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAwC,SAAAE,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAVxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA,IAAI,CAACG,qBAAU,EAAE;EACf,MAAM,IAAIC,KAAK,CAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8IAA8I,CAAC;AAC/I;;AAEA;AACA;AACA;AACA;AACA,IAAIC,kBAA6C,GAAG,IAAI;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAL,OAAA,GAE1C;EACbM,SAAS,EAAEL,qBAAU,CAACK,SAAS;EAC/BC,WAAW,EAAEN,qBAAU,CAACM,WAAW;EACnCC,eAAe,EAAEP,qBAAU,CAACO,eAAe;EAC3CC,eAAe,EAAER,qBAAU,CAACQ,eAAe;EAC3C,IAAIC,YAAYA,CAAA,EAAuB;IACrC,IAAI,CAACP,kBAAkB,EAAE;MACvB;MACA;MACAA,kBAAkB,GAAG,IAAIQ,+BAAkB,CAACV,qBAAU,CAAC;IACzD;IACA;IACA;IACA,OAAOE,kBAAkB;EAC3B;AACF,CAAC"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.web.js b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.web.js +index 5e77388..d591606 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.web.js ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.web.js +@@ -4,15 +4,10 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +- + var _reactNative = require("react-native"); +- + var _nativeModule = _interopRequireDefault(require("./nativeModule")); +- + var _privateTypes = require("./privateTypes"); +- + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +- + /** + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -21,14 +16,15 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de + * + * @format + */ +-const nativeEventEmitter = new _reactNative.NativeEventEmitter(); // Listen to connectivity events + ++const nativeEventEmitter = new _reactNative.NativeEventEmitter(); ++ ++// Listen to connectivity events + _nativeModule.default.addListener(_privateTypes.DEVICE_CONNECTIVITY_EVENT, event => { + nativeEventEmitter.emit(_privateTypes.DEVICE_CONNECTIVITY_EVENT, event); + }); +- +-var _default = { ..._nativeModule.default, ++var _default = exports.default = { ++ ..._nativeModule.default, + eventEmitter: nativeEventEmitter + }; +-exports.default = _default; + //# sourceMappingURL=nativeInterface.web.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.web.js.map b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.web.js.map +index 9fc4a6d..9b6f4b4 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.web.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeInterface.web.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["nativeInterface.web.ts"],"names":["nativeEventEmitter","NativeEventEmitter","RNCNetInfo","addListener","DEVICE_CONNECTIVITY_EVENT","event","emit","eventEmitter"],"mappings":";;;;;;;AASA;;AACA;;AACA;;;;AAXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA,MAAMA,kBAAkB,GAAG,IAAIC,+BAAJ,EAA3B,C,CAEA;;AACAC,sBAAWC,WAAX,CACEC,uCADF,EAEGC,KAAD,IAAiB;AACfL,EAAAA,kBAAkB,CAACM,IAAnB,CAAwBF,uCAAxB,EAAmDC,KAAnD;AACD,CAJH;;eAOe,EACb,GAAGH,qBADU;AAEbK,EAAAA,YAAY,EAAEP;AAFD,C","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeEventEmitter} from 'react-native';\nimport RNCNetInfo from './nativeModule';\nimport {DEVICE_CONNECTIVITY_EVENT} from './privateTypes';\n\nconst nativeEventEmitter = new NativeEventEmitter();\n\n// Listen to connectivity events\nRNCNetInfo.addListener(\n DEVICE_CONNECTIVITY_EVENT,\n (event): void => {\n nativeEventEmitter.emit(DEVICE_CONNECTIVITY_EVENT, event);\n },\n);\n\nexport default {\n ...RNCNetInfo,\n eventEmitter: nativeEventEmitter,\n};\n"]} +\ No newline at end of file ++{"version":3,"names":["_reactNative","require","_nativeModule","_interopRequireDefault","_privateTypes","obj","__esModule","default","nativeEventEmitter","NativeEventEmitter","RNCNetInfo","addListener","DEVICE_CONNECTIVITY_EVENT","event","emit","_default","exports","eventEmitter"],"sources":["nativeInterface.web.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeEventEmitter} from 'react-native';\nimport RNCNetInfo from './nativeModule';\nimport {DEVICE_CONNECTIVITY_EVENT} from './privateTypes';\n\nconst nativeEventEmitter = new NativeEventEmitter();\n\n// Listen to connectivity events\nRNCNetInfo.addListener(DEVICE_CONNECTIVITY_EVENT, (event): void => {\n nativeEventEmitter.emit(DEVICE_CONNECTIVITY_EVENT, event);\n});\n\nexport default {\n ...RNCNetInfo,\n eventEmitter: nativeEventEmitter,\n};\n"],"mappings":";;;;;;AASA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AAAyD,SAAAE,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAXzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA,MAAMG,kBAAkB,GAAG,IAAIC,+BAAkB,CAAC,CAAC;;AAEnD;AACAC,qBAAU,CAACC,WAAW,CAACC,uCAAyB,EAAGC,KAAK,IAAW;EACjEL,kBAAkB,CAACM,IAAI,CAACF,uCAAyB,EAAEC,KAAK,CAAC;AAC3D,CAAC,CAAC;AAAC,IAAAE,QAAA,GAAAC,OAAA,CAAAT,OAAA,GAEY;EACb,GAAGG,qBAAU;EACbO,YAAY,EAAET;AAChB,CAAC"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.js b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.js +index 8fd237d..6d06932 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.js ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.js +@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +- + var _reactNative = require("react-native"); +- + /** + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -15,7 +13,15 @@ var _reactNative = require("react-native"); + * + * @format + */ +-const RNCNetInfo = _reactNative.NativeModules.RNCNetInfo; +-var _default = RNCNetInfo; +-exports.default = _default; ++ ++// React Native sets `__turboModuleProxy` on global when TurboModules are enabled. ++// Currently, this is the recommended way to detect TurboModules. ++// https://reactnative.dev/docs/the-new-architecture/backward-compatibility-turbomodules#unify-the-javascript-specs ++// eslint-disable-next-line @typescript-eslint/ban-ts-comment ++// @ts-ignore ++const isTurboModuleEnabled = global.__turboModuleProxy != null; ++const RNCNetInfo = isTurboModuleEnabled ? ++// eslint-disable-next-line @typescript-eslint/no-var-requires ++require('./NativeRNCNetInfo').default : _reactNative.NativeModules.RNCNetInfo; ++var _default = exports.default = RNCNetInfo; + //# sourceMappingURL=nativeModule.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.js.map b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.js.map +index dcf6159..5d5bb50 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["nativeModule.ts"],"names":["RNCNetInfo","NativeModules"],"mappings":";;;;;;;AASA;;AATA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA,MAAMA,UAA+B,GAAGC,2BAAcD,UAAtD;eAEeA,U","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeModules} from 'react-native';\nimport {NetInfoNativeModule} from './privateTypes';\n\nconst RNCNetInfo: NetInfoNativeModule = NativeModules.RNCNetInfo;\n\nexport default RNCNetInfo;\n"]} +\ No newline at end of file ++{"version":3,"names":["_reactNative","require","isTurboModuleEnabled","global","__turboModuleProxy","RNCNetInfo","default","NativeModules","_default","exports"],"sources":["nativeModule.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeModules} from 'react-native';\nimport {NetInfoNativeModule} from './privateTypes';\n\n// React Native sets `__turboModuleProxy` on global when TurboModules are enabled.\n// Currently, this is the recommended way to detect TurboModules.\n// https://reactnative.dev/docs/the-new-architecture/backward-compatibility-turbomodules#unify-the-javascript-specs\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst isTurboModuleEnabled = global.__turboModuleProxy != null;\n\nconst RNCNetInfo: NetInfoNativeModule = isTurboModuleEnabled\n ? // eslint-disable-next-line @typescript-eslint/no-var-requires\n require('./NativeRNCNetInfo').default\n : NativeModules.RNCNetInfo;\n\nexport default RNCNetInfo;\n"],"mappings":";;;;;;AASA,IAAAA,YAAA,GAAAC,OAAA;AATA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA,MAAMC,oBAAoB,GAAGC,MAAM,CAACC,kBAAkB,IAAI,IAAI;AAE9D,MAAMC,UAA+B,GAAGH,oBAAoB;AACxD;AACAD,OAAO,CAAC,oBAAoB,CAAC,CAACK,OAAO,GACrCC,0BAAa,CAACF,UAAU;AAAC,IAAAG,QAAA,GAAAC,OAAA,CAAAH,OAAA,GAEdD,UAAU"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.web.js b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.web.js +index ad66cbe..0da582c 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.web.js ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.web.js +@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +- + var _privateTypes = require("./privateTypes"); +- + var _types = require("./types"); +- + /** + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -17,12 +14,23 @@ var _types = require("./types"); + * + * @format + */ ++ ++// See https://wicg.github.io/netinfo/#dom-connectiontype ++ ++// See https://wicg.github.io/netinfo/#dom-effectiveconnectiontype ++ ++// https://wicg.github.io/netinfo/#dom-networkinformation-savedata ++ ++// Create (optional) connection APIs on navigator ++ + // Use a constant test of this form because in SSR on next.js, optional chaining is not sufficient, + // but this test correctly detects that window is not available and allows for conditionals before access +-const isWindowPresent = typeof window !== 'undefined'; // Check if window exists and if the browser supports the connection API ++const isWindowPresent = typeof window !== 'undefined'; + +-const connection = isWindowPresent && !window.hasOwnProperty('tizen') && !window.hasOwnProperty('webOS') ? window.navigator.connection || window.navigator.mozConnection || window.navigator.webkitConnection : undefined; // Map browser types to native types ++// Check if window exists and if the browser supports the connection API ++const connection = isWindowPresent && !window.hasOwnProperty('tizen') && !window.hasOwnProperty('webOS') ? window.navigator.connection || window.navigator.mozConnection || window.navigator.webkitConnection : undefined; + ++// Map browser types to native types + const typeMapping = { + bluetooth: _types.NetInfoStateType.bluetooth, + cellular: _types.NetInfoStateType.cellular, +@@ -39,17 +47,20 @@ const effectiveTypeMapping = { + '3g': _types.NetInfoCellularGeneration['3g'], + '4g': _types.NetInfoCellularGeneration['4g'], + 'slow-2g': _types.NetInfoCellularGeneration['2g'] +-}; // Determine current state of connection ++}; + ++// Determine current state of connection + const getCurrentState = _requestedInterface => { + const isConnected = isWindowPresent ? navigator.onLine : false; + const baseState = { + isInternetReachable: null +- }; // If we don't have a connection object, we return minimal information ++ }; + ++ // If we don't have a connection object, we return minimal information + if (!connection) { + if (isConnected) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: true, + type: _types.NetInfoStateType.other, + details: { +@@ -58,22 +69,22 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } +- +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: false, + isInternetReachable: false, + type: _types.NetInfoStateType.none, + details: null + }; + return state; +- } // Otherwise try to return detailed information +- ++ } + ++ // Otherwise try to return detailed information + const isConnectionExpensive = connection.saveData; + const type = connection.type ? typeMapping[connection.type] : isConnected ? _types.NetInfoStateType.other : _types.NetInfoStateType.unknown; +- + if (type === _types.NetInfoStateType.bluetooth) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: true, + type, + details: { +@@ -82,7 +93,8 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } else if (type === _types.NetInfoStateType.cellular) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: true, + type, + details: { +@@ -93,7 +105,8 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } else if (type === _types.NetInfoStateType.ethernet) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: true, + type, + details: { +@@ -104,7 +117,8 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } else if (type === _types.NetInfoStateType.wifi) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: true, + type, + details: { +@@ -122,7 +136,8 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } else if (type === _types.NetInfoStateType.wimax) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: true, + type, + details: { +@@ -131,7 +146,8 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } else if (type === _types.NetInfoStateType.none) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: false, + isInternetReachable: false, + type, +@@ -139,7 +155,8 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } else if (type === _types.NetInfoStateType.unknown) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected, + isInternetReachable: null, + type, +@@ -147,8 +164,8 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } +- +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: true, + type: _types.NetInfoStateType.other, + details: { +@@ -157,7 +174,6 @@ const getCurrentState = _requestedInterface => { + }; + return state; + }; +- + const handlers = []; + const nativeHandlers = []; + const RNCNetInfo = { +@@ -168,7 +184,6 @@ const RNCNetInfo = { + const nativeHandler = () => { + handler(getCurrentState()); + }; +- + if (connection) { + connection.addEventListener('change', nativeHandler); + } else { +@@ -176,16 +191,15 @@ const RNCNetInfo = { + window.addEventListener('online', nativeHandler, false); + window.addEventListener('offline', nativeHandler, false); + } +- } // Remember handlers +- ++ } + ++ // Remember handlers + handlers.push(handler); + nativeHandlers.push(nativeHandler); + break; + } + } + }, +- + removeListeners(type, handler) { + switch (type) { + case _privateTypes.DEVICE_CONNECTIVITY_EVENT: +@@ -193,7 +207,6 @@ const RNCNetInfo = { + // Get native handler + const index = handlers.indexOf(handler); + const nativeHandler = nativeHandlers[index]; +- + if (connection) { + connection.removeEventListener('change', nativeHandler); + } else { +@@ -201,25 +214,21 @@ const RNCNetInfo = { + window.removeEventListener('online', nativeHandler); + window.removeEventListener('offline', nativeHandler); + } +- } // Remove handlers +- ++ } + ++ // Remove handlers + handlers.splice(index, 1); + nativeHandlers.splice(index, 1); + break; + } + } + }, +- + async getCurrentState(requestedInterface) { + return getCurrentState(requestedInterface); + }, +- + configure() { + return; + } +- + }; +-var _default = RNCNetInfo; +-exports.default = _default; ++var _default = exports.default = RNCNetInfo; + //# sourceMappingURL=nativeModule.web.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.web.js.map b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.web.js.map +index 7dcfca9..a0632f9 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.web.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/nativeModule.web.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["nativeModule.web.ts"],"names":["isWindowPresent","window","connection","hasOwnProperty","navigator","mozConnection","webkitConnection","undefined","typeMapping","bluetooth","NetInfoStateType","cellular","ethernet","none","other","unknown","wifi","wimax","mixed","effectiveTypeMapping","NetInfoCellularGeneration","getCurrentState","_requestedInterface","isConnected","onLine","baseState","isInternetReachable","state","type","details","isConnectionExpensive","saveData","cellularGeneration","effectiveType","carrier","ipAddress","subnet","ssid","bssid","strength","frequency","linkSpeed","rxLinkSpeed","txLinkSpeed","handlers","nativeHandlers","RNCNetInfo","addListener","handler","DEVICE_CONNECTIVITY_EVENT","nativeHandler","addEventListener","push","removeListeners","index","indexOf","removeEventListener","splice","requestedInterface","configure"],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {\n DEVICE_CONNECTIVITY_EVENT,\n NetInfoNativeModule,\n NetInfoNativeModuleState,\n} from './privateTypes';\nimport {\n NetInfoBluetoothState,\n NetInfoCellularGeneration,\n NetInfoCellularState,\n NetInfoEthernetState,\n NetInfoNoConnectionState,\n NetInfoOtherState,\n NetInfoState,\n NetInfoStateType,\n NetInfoUnknownState,\n NetInfoWifiState,\n NetInfoWimaxState,\n} from './types';\n\n// See https://wicg.github.io/netinfo/#dom-connectiontype\ntype ConnectionType =\n | 'bluetooth'\n | 'cellular'\n | 'ethernet'\n | 'mixed'\n | 'none'\n | 'other'\n | 'unknown'\n | 'wifi'\n | 'wimax';\n\n// See https://wicg.github.io/netinfo/#dom-effectiveconnectiontype\ntype ConnectionEffectiveType = '2g' | '3g' | '4g' | 'slow-2g';\n\n// https://wicg.github.io/netinfo/#dom-networkinformation-savedata\ntype ConnectionSaveData = boolean;\n\ninterface Events {\n change: Event;\n}\n\ninterface Connection {\n type: ConnectionType;\n effectiveType: ConnectionEffectiveType;\n saveData: ConnectionSaveData;\n addEventListener(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n removeEventListener(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n}\n\n// Create (optional) connection APIs on navigator\ndeclare global {\n interface Navigator {\n connection?: Connection;\n mozConnection?: Connection;\n webkitConnection?: Connection;\n }\n}\n// Use a constant test of this form because in SSR on next.js, optional chaining is not sufficient,\n// but this test correctly detects that window is not available and allows for conditionals before access\nconst isWindowPresent = typeof window !== 'undefined';\n\n// Check if window exists and if the browser supports the connection API\nconst connection = (isWindowPresent && !window.hasOwnProperty('tizen') && !window.hasOwnProperty('webOS'))\n ? window.navigator.connection ||\n window.navigator.mozConnection ||\n window.navigator.webkitConnection\n : undefined;\n\n// Map browser types to native types\nconst typeMapping: Record = {\n bluetooth: NetInfoStateType.bluetooth,\n cellular: NetInfoStateType.cellular,\n ethernet: NetInfoStateType.ethernet,\n none: NetInfoStateType.none,\n other: NetInfoStateType.other,\n unknown: NetInfoStateType.unknown,\n wifi: NetInfoStateType.wifi,\n wimax: NetInfoStateType.wimax,\n mixed: NetInfoStateType.other,\n};\nconst effectiveTypeMapping: Record<\n ConnectionEffectiveType,\n NetInfoCellularGeneration\n> = {\n '2g': NetInfoCellularGeneration['2g'],\n '3g': NetInfoCellularGeneration['3g'],\n '4g': NetInfoCellularGeneration['4g'],\n 'slow-2g': NetInfoCellularGeneration['2g'],\n};\n\n// Determine current state of connection\nconst getCurrentState = (\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _requestedInterface?: string,\n): Pick> => {\n const isConnected = isWindowPresent ? navigator.onLine : false;\n const baseState = {\n isInternetReachable: null,\n };\n\n // If we don't have a connection object, we return minimal information\n if (!connection) {\n if (isConnected) {\n const state: NetInfoOtherState = {\n ...baseState,\n isConnected: true,\n type: NetInfoStateType.other,\n details: {\n isConnectionExpensive: false,\n },\n };\n return state;\n }\n\n const state: NetInfoNoConnectionState = {\n ...baseState,\n isConnected: false,\n isInternetReachable: false,\n type: NetInfoStateType.none,\n details: null,\n };\n return state;\n }\n\n // Otherwise try to return detailed information\n const isConnectionExpensive = connection.saveData;\n const type: NetInfoStateType = connection.type\n ? typeMapping[connection.type]\n : isConnected\n ? NetInfoStateType.other\n : NetInfoStateType.unknown;\n\n if (type === NetInfoStateType.bluetooth) {\n const state: NetInfoBluetoothState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n },\n };\n return state;\n } else if (type === NetInfoStateType.cellular) {\n const state: NetInfoCellularState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n cellularGeneration:\n effectiveTypeMapping[connection.effectiveType] || null,\n carrier: null,\n },\n };\n return state;\n } else if (type === NetInfoStateType.ethernet) {\n const state: NetInfoEthernetState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n ipAddress: null,\n subnet: null,\n },\n };\n return state;\n } else if (type === NetInfoStateType.wifi) {\n const state: NetInfoWifiState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n ssid: null,\n bssid: null,\n strength: null,\n ipAddress: null,\n subnet: null,\n frequency: null,\n linkSpeed: null,\n rxLinkSpeed: null,\n txLinkSpeed: null,\n },\n };\n return state;\n } else if (type === NetInfoStateType.wimax) {\n const state: NetInfoWimaxState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n },\n };\n return state;\n } else if (type === NetInfoStateType.none) {\n const state: NetInfoNoConnectionState = {\n ...baseState,\n isConnected: false,\n isInternetReachable: false,\n type,\n details: null,\n };\n return state;\n } else if (type === NetInfoStateType.unknown) {\n const state: NetInfoUnknownState = {\n ...baseState,\n isConnected,\n isInternetReachable: null,\n type,\n details: null,\n };\n return state;\n }\n\n const state: NetInfoOtherState = {\n ...baseState,\n isConnected: true,\n type: NetInfoStateType.other,\n details: {\n isConnectionExpensive,\n },\n };\n return state;\n};\n\nconst handlers: ((state: NetInfoNativeModuleState) => void)[] = [];\nconst nativeHandlers: (() => void)[] = [];\n\nconst RNCNetInfo: NetInfoNativeModule = {\n addListener(type, handler): void {\n switch (type) {\n case DEVICE_CONNECTIVITY_EVENT: {\n const nativeHandler = (): void => {\n handler(getCurrentState());\n };\n\n if (connection) {\n connection.addEventListener('change', nativeHandler);\n } else {\n if (isWindowPresent) {\n window.addEventListener('online', nativeHandler, false);\n window.addEventListener('offline', nativeHandler, false);\n }\n }\n\n // Remember handlers\n handlers.push(handler);\n nativeHandlers.push(nativeHandler);\n\n break;\n }\n }\n },\n\n removeListeners(type, handler): void {\n switch (type) {\n case DEVICE_CONNECTIVITY_EVENT: {\n // Get native handler\n const index = handlers.indexOf(handler);\n const nativeHandler = nativeHandlers[index];\n\n if (connection) {\n connection.removeEventListener('change', nativeHandler);\n } else {\n if (isWindowPresent) {\n window.removeEventListener('online', nativeHandler);\n window.removeEventListener('offline', nativeHandler);\n }\n }\n\n // Remove handlers\n handlers.splice(index, 1);\n nativeHandlers.splice(index, 1);\n\n break;\n }\n }\n },\n\n async getCurrentState(requestedInterface): Promise {\n return getCurrentState(requestedInterface);\n },\n\n configure(): void {\n return;\n },\n};\n\nexport default RNCNetInfo;\n"]} +\ No newline at end of file ++{"version":3,"names":["_privateTypes","require","_types","isWindowPresent","window","connection","hasOwnProperty","navigator","mozConnection","webkitConnection","undefined","typeMapping","bluetooth","NetInfoStateType","cellular","ethernet","none","other","unknown","wifi","wimax","mixed","effectiveTypeMapping","NetInfoCellularGeneration","getCurrentState","_requestedInterface","isConnected","onLine","baseState","isInternetReachable","state","type","details","isConnectionExpensive","saveData","cellularGeneration","effectiveType","carrier","ipAddress","subnet","ssid","bssid","strength","frequency","linkSpeed","rxLinkSpeed","txLinkSpeed","handlers","nativeHandlers","RNCNetInfo","addListener","handler","DEVICE_CONNECTIVITY_EVENT","nativeHandler","addEventListener","push","removeListeners","index","indexOf","removeEventListener","splice","requestedInterface","configure","_default","exports","default"],"sources":["nativeModule.web.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {\n DEVICE_CONNECTIVITY_EVENT,\n NetInfoNativeModule,\n NetInfoNativeModuleState,\n} from './privateTypes';\nimport {\n NetInfoBluetoothState,\n NetInfoCellularGeneration,\n NetInfoCellularState,\n NetInfoEthernetState,\n NetInfoNoConnectionState,\n NetInfoOtherState,\n NetInfoState,\n NetInfoStateType,\n NetInfoUnknownState,\n NetInfoWifiState,\n NetInfoWimaxState,\n} from './types';\n\n// See https://wicg.github.io/netinfo/#dom-connectiontype\ntype ConnectionType =\n | 'bluetooth'\n | 'cellular'\n | 'ethernet'\n | 'mixed'\n | 'none'\n | 'other'\n | 'unknown'\n | 'wifi'\n | 'wimax';\n\n// See https://wicg.github.io/netinfo/#dom-effectiveconnectiontype\ntype ConnectionEffectiveType = '2g' | '3g' | '4g' | 'slow-2g';\n\n// https://wicg.github.io/netinfo/#dom-networkinformation-savedata\ntype ConnectionSaveData = boolean;\n\ninterface Events {\n change: Event;\n}\n\ninterface Connection {\n type: ConnectionType;\n effectiveType: ConnectionEffectiveType;\n saveData: ConnectionSaveData;\n addEventListener(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n removeEventListener(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n}\n\n// Create (optional) connection APIs on navigator\ndeclare global {\n interface Navigator {\n connection?: Connection;\n mozConnection?: Connection;\n webkitConnection?: Connection;\n }\n}\n// Use a constant test of this form because in SSR on next.js, optional chaining is not sufficient,\n// but this test correctly detects that window is not available and allows for conditionals before access\nconst isWindowPresent = typeof window !== 'undefined';\n\n// Check if window exists and if the browser supports the connection API\nconst connection = (isWindowPresent && !window.hasOwnProperty('tizen') && !window.hasOwnProperty('webOS'))\n ? window.navigator.connection ||\n window.navigator.mozConnection ||\n window.navigator.webkitConnection\n : undefined;\n\n// Map browser types to native types\nconst typeMapping: Record = {\n bluetooth: NetInfoStateType.bluetooth,\n cellular: NetInfoStateType.cellular,\n ethernet: NetInfoStateType.ethernet,\n none: NetInfoStateType.none,\n other: NetInfoStateType.other,\n unknown: NetInfoStateType.unknown,\n wifi: NetInfoStateType.wifi,\n wimax: NetInfoStateType.wimax,\n mixed: NetInfoStateType.other,\n};\nconst effectiveTypeMapping: Record<\n ConnectionEffectiveType,\n NetInfoCellularGeneration\n> = {\n '2g': NetInfoCellularGeneration['2g'],\n '3g': NetInfoCellularGeneration['3g'],\n '4g': NetInfoCellularGeneration['4g'],\n 'slow-2g': NetInfoCellularGeneration['2g'],\n};\n\n// Determine current state of connection\nconst getCurrentState = (\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _requestedInterface?: string,\n): Pick> => {\n const isConnected = isWindowPresent ? navigator.onLine : false;\n const baseState = {\n isInternetReachable: null,\n };\n\n // If we don't have a connection object, we return minimal information\n if (!connection) {\n if (isConnected) {\n const state: NetInfoOtherState = {\n ...baseState,\n isConnected: true,\n type: NetInfoStateType.other,\n details: {\n isConnectionExpensive: false,\n },\n };\n return state;\n }\n\n const state: NetInfoNoConnectionState = {\n ...baseState,\n isConnected: false,\n isInternetReachable: false,\n type: NetInfoStateType.none,\n details: null,\n };\n return state;\n }\n\n // Otherwise try to return detailed information\n const isConnectionExpensive = connection.saveData;\n const type: NetInfoStateType = connection.type\n ? typeMapping[connection.type]\n : isConnected\n ? NetInfoStateType.other\n : NetInfoStateType.unknown;\n\n if (type === NetInfoStateType.bluetooth) {\n const state: NetInfoBluetoothState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n },\n };\n return state;\n } else if (type === NetInfoStateType.cellular) {\n const state: NetInfoCellularState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n cellularGeneration:\n effectiveTypeMapping[connection.effectiveType] || null,\n carrier: null,\n },\n };\n return state;\n } else if (type === NetInfoStateType.ethernet) {\n const state: NetInfoEthernetState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n ipAddress: null,\n subnet: null,\n },\n };\n return state;\n } else if (type === NetInfoStateType.wifi) {\n const state: NetInfoWifiState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n ssid: null,\n bssid: null,\n strength: null,\n ipAddress: null,\n subnet: null,\n frequency: null,\n linkSpeed: null,\n rxLinkSpeed: null,\n txLinkSpeed: null,\n },\n };\n return state;\n } else if (type === NetInfoStateType.wimax) {\n const state: NetInfoWimaxState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n },\n };\n return state;\n } else if (type === NetInfoStateType.none) {\n const state: NetInfoNoConnectionState = {\n ...baseState,\n isConnected: false,\n isInternetReachable: false,\n type,\n details: null,\n };\n return state;\n } else if (type === NetInfoStateType.unknown) {\n const state: NetInfoUnknownState = {\n ...baseState,\n isConnected,\n isInternetReachable: null,\n type,\n details: null,\n };\n return state;\n }\n\n const state: NetInfoOtherState = {\n ...baseState,\n isConnected: true,\n type: NetInfoStateType.other,\n details: {\n isConnectionExpensive,\n },\n };\n return state;\n};\n\nconst handlers: ((state: NetInfoNativeModuleState) => void)[] = [];\nconst nativeHandlers: (() => void)[] = [];\n\nconst RNCNetInfo: NetInfoNativeModule = {\n addListener(type, handler): void {\n switch (type) {\n case DEVICE_CONNECTIVITY_EVENT: {\n const nativeHandler = (): void => {\n handler(getCurrentState());\n };\n\n if (connection) {\n connection.addEventListener('change', nativeHandler);\n } else {\n if (isWindowPresent) {\n window.addEventListener('online', nativeHandler, false);\n window.addEventListener('offline', nativeHandler, false);\n }\n }\n\n // Remember handlers\n handlers.push(handler);\n nativeHandlers.push(nativeHandler);\n\n break;\n }\n }\n },\n\n removeListeners(type, handler): void {\n switch (type) {\n case DEVICE_CONNECTIVITY_EVENT: {\n // Get native handler\n const index = handlers.indexOf(handler);\n const nativeHandler = nativeHandlers[index];\n\n if (connection) {\n connection.removeEventListener('change', nativeHandler);\n } else {\n if (isWindowPresent) {\n window.removeEventListener('online', nativeHandler);\n window.removeEventListener('offline', nativeHandler);\n }\n }\n\n // Remove handlers\n handlers.splice(index, 1);\n nativeHandlers.splice(index, 1);\n\n break;\n }\n }\n },\n\n async getCurrentState(requestedInterface): Promise {\n return getCurrentState(requestedInterface);\n },\n\n configure(): void {\n return;\n },\n};\n\nexport default RNCNetInfo;\n"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/privateTypes.js b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/privateTypes.js +index 3112de1..ca209c1 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/privateTypes.js ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/privateTypes.js +@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.DEVICE_CONNECTIVITY_EVENT = void 0; +- + /** + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -13,7 +12,8 @@ exports.DEVICE_CONNECTIVITY_EVENT = void 0; + * + * @format + */ +-const DEVICE_CONNECTIVITY_EVENT = 'netInfo.networkStatusDidChange'; // Certain properties are optional when sent by the native module and are handled by the JS code + +-exports.DEVICE_CONNECTIVITY_EVENT = DEVICE_CONNECTIVITY_EVENT; ++const DEVICE_CONNECTIVITY_EVENT = exports.DEVICE_CONNECTIVITY_EVENT = 'netInfo.networkStatusDidChange'; ++ ++// Certain properties are optional when sent by the native module and are handled by the JS code + //# sourceMappingURL=privateTypes.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/privateTypes.js.map b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/privateTypes.js.map +index 2838e9a..a56f61c 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/privateTypes.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/privateTypes.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["privateTypes.ts"],"names":["DEVICE_CONNECTIVITY_EVENT"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIO,MAAMA,yBAAyB,GAAG,gCAAlC,C,CAEP","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NetInfoConfiguration, NetInfoState} from './types';\n\nexport const DEVICE_CONNECTIVITY_EVENT = 'netInfo.networkStatusDidChange';\n\n// Certain properties are optional when sent by the native module and are handled by the JS code\nexport type NetInfoNativeModuleState = Pick<\n NetInfoState,\n Exclude\n> & {isInternetReachable?: boolean};\n\nexport interface Events {\n [DEVICE_CONNECTIVITY_EVENT]: NetInfoNativeModuleState;\n}\n\nexport interface NetInfoNativeModule {\n configure: (config: Partial) => void;\n getCurrentState: (\n requestedInterface?: string,\n ) => Promise;\n addListener(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n removeListeners(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n}\n\nexport type NetInfoInternetReachabilityChangeListener = (\n isInternetReachable: boolean | null | undefined,\n) => void;\n"]} +\ No newline at end of file ++{"version":3,"names":["DEVICE_CONNECTIVITY_EVENT","exports"],"sources":["privateTypes.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NetInfoConfiguration, NetInfoState} from './types';\n\nexport const DEVICE_CONNECTIVITY_EVENT = 'netInfo.networkStatusDidChange';\n\n// Certain properties are optional when sent by the native module and are handled by the JS code\nexport type NetInfoNativeModuleState = Pick<\n NetInfoState,\n Exclude\n> & {isInternetReachable?: boolean};\n\nexport interface Events {\n [DEVICE_CONNECTIVITY_EVENT]: NetInfoNativeModuleState;\n}\n\nexport interface NetInfoNativeModule {\n configure: (config: Partial) => void;\n getCurrentState: (\n requestedInterface?: string,\n ) => Promise;\n addListener(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n removeListeners(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n}\n\nexport type NetInfoInternetReachabilityChangeListener = (\n isInternetReachable: boolean | null | undefined,\n) => void;\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIO,MAAMA,yBAAyB,GAAAC,OAAA,CAAAD,yBAAA,GAAG,gCAAgC;;AAEzE"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/state.js b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/state.js +index 80dce38..57b8fbf 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/state.js ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/state.js +@@ -4,84 +4,73 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = void 0; +- + var _nativeInterface = _interopRequireDefault(require("./nativeInterface")); +- + var _internetReachability = _interopRequireDefault(require("./internetReachability")); +- + var PrivateTypes = _interopRequireWildcard(require("./privateTypes")); +- +-function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } +- +-function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +- ++function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } ++function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +- +-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +- ++function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } ++function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } ++function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } /** ++ * Copyright (c) Facebook, Inc. and its affiliates. ++ * ++ * This source code is licensed under the MIT license found in the ++ * LICENSE file in the root directory of this source tree. ++ * ++ * @format ++ */ + class State { + constructor(configuration) { + _defineProperty(this, "_nativeEventSubscription", null); +- + _defineProperty(this, "_subscriptions", new Set()); +- + _defineProperty(this, "_latestState", null); +- + _defineProperty(this, "_internetReachability", void 0); +- + _defineProperty(this, "_handleNativeStateUpdate", state => { + // Update the internet reachability module +- this._internetReachability.update(state); // Convert the state from native to JS shape +- +- +- const convertedState = this._convertState(state); // Update the listeners ++ this._internetReachability.update(state); + ++ // Convert the state from native to JS shape ++ const convertedState = this._convertState(state); + ++ // Update the listeners + this._latestState = convertedState; +- + this._subscriptions.forEach(handler => handler(convertedState)); + }); +- + _defineProperty(this, "_handleInternetReachabilityUpdate", isInternetReachable => { + if (!this._latestState) { + return; + } +- +- const nextState = { ...this._latestState, ++ const nextState = { ++ ...this._latestState, + isInternetReachable + }; + this._latestState = nextState; +- + this._subscriptions.forEach(handler => handler(nextState)); + }); +- + _defineProperty(this, "_fetchCurrentState", async requestedInterface => { +- const state = await _nativeInterface.default.getCurrentState(requestedInterface); // Update the internet reachability module +- +- this._internetReachability.update(state); // Convert and store the new state +- ++ const state = await _nativeInterface.default.getCurrentState(requestedInterface); + ++ // Update the internet reachability module ++ this._internetReachability.update(state); ++ // Convert and store the new state + const convertedState = this._convertState(state); +- + if (!requestedInterface) { + this._latestState = convertedState; +- + this._subscriptions.forEach(handler => handler(convertedState)); + } +- + return convertedState; + }); +- + _defineProperty(this, "_convertState", input => { + if (typeof input.isInternetReachable === 'boolean') { + return input; + } else { +- return { ...input, ++ return { ++ ...input, + isInternetReachable: this._internetReachability.currentState() + }; + } + }); +- + _defineProperty(this, "latest", requestedInterface => { + if (requestedInterface) { + return this._fetchCurrentState(requestedInterface); +@@ -91,44 +80,38 @@ class State { + return this._fetchCurrentState(); + } + }); +- + _defineProperty(this, "add", handler => { + // Add the subscription handler to our set +- this._subscriptions.add(handler); // Send it the latest data we have +- ++ this._subscriptions.add(handler); + ++ // Send it the latest data we have + if (this._latestState) { + handler(this._latestState); + } else { + this.latest().then(handler); + } + }); +- + _defineProperty(this, "remove", handler => { + this._subscriptions.delete(handler); + }); +- + _defineProperty(this, "tearDown", () => { + if (this._internetReachability) { + this._internetReachability.tearDown(); + } +- + if (this._nativeEventSubscription) { + this._nativeEventSubscription.remove(); + } +- + this._subscriptions.clear(); + }); +- + // Add the listener to the internet connectivity events +- this._internetReachability = new _internetReachability.default(configuration, this._handleInternetReachabilityUpdate); // Add the subscription to the native events ++ this._internetReachability = new _internetReachability.default(configuration, this._handleInternetReachabilityUpdate); + +- this._nativeEventSubscription = _nativeInterface.default.eventEmitter.addListener(PrivateTypes.DEVICE_CONNECTIVITY_EVENT, this._handleNativeStateUpdate); // Fetch the current state from the native module ++ // Add the subscription to the native events ++ this._nativeEventSubscription = _nativeInterface.default.eventEmitter.addListener(PrivateTypes.DEVICE_CONNECTIVITY_EVENT, this._handleNativeStateUpdate); + ++ // Fetch the current state from the native module + this._fetchCurrentState(); + } +- + } +- + exports.default = State; + //# sourceMappingURL=state.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/state.js.map b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/state.js.map +index 40ae85c..473e940 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/state.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/state.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["state.ts"],"names":["State","constructor","configuration","Set","state","_internetReachability","update","convertedState","_convertState","_latestState","_subscriptions","forEach","handler","isInternetReachable","nextState","requestedInterface","NativeInterface","getCurrentState","input","currentState","_fetchCurrentState","Promise","resolve","add","latest","then","delete","tearDown","_nativeEventSubscription","remove","clear","InternetReachability","_handleInternetReachabilityUpdate","eventEmitter","addListener","PrivateTypes","DEVICE_CONNECTIVITY_EVENT","_handleNativeStateUpdate"],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeEventSubscription} from 'react-native';\nimport NativeInterface from './nativeInterface';\nimport InternetReachability from './internetReachability';\nimport * as Types from './types';\nimport * as PrivateTypes from './privateTypes';\n\nexport default class State {\n private _nativeEventSubscription: NativeEventSubscription | null = null;\n private _subscriptions = new Set();\n private _latestState: Types.NetInfoState | null = null;\n private _internetReachability: InternetReachability;\n\n constructor(configuration: Types.NetInfoConfiguration) {\n // Add the listener to the internet connectivity events\n this._internetReachability = new InternetReachability(\n configuration,\n this._handleInternetReachabilityUpdate,\n );\n\n // Add the subscription to the native events\n this._nativeEventSubscription = NativeInterface.eventEmitter.addListener(\n PrivateTypes.DEVICE_CONNECTIVITY_EVENT,\n this._handleNativeStateUpdate,\n );\n\n // Fetch the current state from the native module\n this._fetchCurrentState();\n }\n\n private _handleNativeStateUpdate = (\n state: PrivateTypes.NetInfoNativeModuleState,\n ): void => {\n // Update the internet reachability module\n this._internetReachability.update(state);\n\n // Convert the state from native to JS shape\n const convertedState = this._convertState(state);\n\n // Update the listeners\n this._latestState = convertedState;\n this._subscriptions.forEach((handler): void => handler(convertedState));\n };\n\n private _handleInternetReachabilityUpdate = (\n isInternetReachable: boolean | null | undefined,\n ): void => {\n if (!this._latestState) {\n return;\n }\n\n const nextState = {\n ...this._latestState,\n isInternetReachable,\n } as Types.NetInfoState;\n this._latestState = nextState;\n this._subscriptions.forEach((handler): void => handler(nextState));\n };\n\n public _fetchCurrentState = async (\n requestedInterface?: string,\n ): Promise => {\n const state = await NativeInterface.getCurrentState(requestedInterface);\n\n // Update the internet reachability module\n this._internetReachability.update(state);\n // Convert and store the new state\n const convertedState = this._convertState(state);\n if (!requestedInterface) {\n this._latestState = convertedState;\n this._subscriptions.forEach((handler): void => handler(convertedState));\n }\n\n return convertedState;\n };\n\n private _convertState = (\n input: PrivateTypes.NetInfoNativeModuleState,\n ): Types.NetInfoState => {\n if (typeof input.isInternetReachable === 'boolean') {\n return input as Types.NetInfoState;\n } else {\n return {\n ...input,\n isInternetReachable: this._internetReachability.currentState(),\n } as Types.NetInfoState;\n }\n };\n\n public latest = (\n requestedInterface?: string,\n ): Promise => {\n if (requestedInterface) {\n return this._fetchCurrentState(requestedInterface);\n } else if (this._latestState) {\n return Promise.resolve(this._latestState);\n } else {\n return this._fetchCurrentState();\n }\n };\n\n public add = (handler: Types.NetInfoChangeHandler): void => {\n // Add the subscription handler to our set\n this._subscriptions.add(handler);\n\n // Send it the latest data we have\n if (this._latestState) {\n handler(this._latestState);\n } else {\n this.latest().then(handler);\n }\n };\n\n public remove = (handler: Types.NetInfoChangeHandler): void => {\n this._subscriptions.delete(handler);\n };\n\n public tearDown = (): void => {\n if (this._internetReachability) {\n this._internetReachability.tearDown();\n }\n\n if (this._nativeEventSubscription) {\n this._nativeEventSubscription.remove();\n }\n\n this._subscriptions.clear();\n };\n}\n"]} +\ No newline at end of file ++{"version":3,"names":["_nativeInterface","_interopRequireDefault","require","_internetReachability","PrivateTypes","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","_defineProperty","key","value","_toPropertyKey","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","TypeError","Number","State","constructor","configuration","Set","state","update","convertedState","_convertState","_latestState","_subscriptions","forEach","handler","isInternetReachable","nextState","requestedInterface","NativeInterface","getCurrentState","currentState","_fetchCurrentState","Promise","resolve","add","latest","then","delete","tearDown","_nativeEventSubscription","remove","clear","InternetReachability","_handleInternetReachabilityUpdate","eventEmitter","addListener","DEVICE_CONNECTIVITY_EVENT","_handleNativeStateUpdate","exports"],"sources":["state.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeEventSubscription} from 'react-native';\nimport NativeInterface from './nativeInterface';\nimport InternetReachability from './internetReachability';\nimport * as Types from './types';\nimport * as PrivateTypes from './privateTypes';\n\nexport default class State {\n private _nativeEventSubscription: NativeEventSubscription | null = null;\n private _subscriptions = new Set();\n private _latestState: Types.NetInfoState | null = null;\n private _internetReachability: InternetReachability;\n\n constructor(configuration: Types.NetInfoConfiguration) {\n // Add the listener to the internet connectivity events\n this._internetReachability = new InternetReachability(\n configuration,\n this._handleInternetReachabilityUpdate,\n );\n\n // Add the subscription to the native events\n this._nativeEventSubscription = NativeInterface.eventEmitter.addListener(\n PrivateTypes.DEVICE_CONNECTIVITY_EVENT,\n this._handleNativeStateUpdate,\n );\n\n // Fetch the current state from the native module\n this._fetchCurrentState();\n }\n\n private _handleNativeStateUpdate = (\n state: PrivateTypes.NetInfoNativeModuleState,\n ): void => {\n // Update the internet reachability module\n this._internetReachability.update(state);\n\n // Convert the state from native to JS shape\n const convertedState = this._convertState(state);\n\n // Update the listeners\n this._latestState = convertedState;\n this._subscriptions.forEach((handler): void => handler(convertedState));\n };\n\n private _handleInternetReachabilityUpdate = (\n isInternetReachable: boolean | null | undefined,\n ): void => {\n if (!this._latestState) {\n return;\n }\n\n const nextState = {\n ...this._latestState,\n isInternetReachable,\n } as Types.NetInfoState;\n this._latestState = nextState;\n this._subscriptions.forEach((handler): void => handler(nextState));\n };\n\n public _fetchCurrentState = async (\n requestedInterface?: string,\n ): Promise => {\n const state = await NativeInterface.getCurrentState(requestedInterface);\n\n // Update the internet reachability module\n this._internetReachability.update(state);\n // Convert and store the new state\n const convertedState = this._convertState(state);\n if (!requestedInterface) {\n this._latestState = convertedState;\n this._subscriptions.forEach((handler): void => handler(convertedState));\n }\n\n return convertedState;\n };\n\n private _convertState = (\n input: PrivateTypes.NetInfoNativeModuleState,\n ): Types.NetInfoState => {\n if (typeof input.isInternetReachable === 'boolean') {\n return input as Types.NetInfoState;\n } else {\n return {\n ...input,\n isInternetReachable: this._internetReachability.currentState(),\n } as Types.NetInfoState;\n }\n };\n\n public latest = (\n requestedInterface?: string,\n ): Promise => {\n if (requestedInterface) {\n return this._fetchCurrentState(requestedInterface);\n } else if (this._latestState) {\n return Promise.resolve(this._latestState);\n } else {\n return this._fetchCurrentState();\n }\n };\n\n public add = (handler: Types.NetInfoChangeHandler): void => {\n // Add the subscription handler to our set\n this._subscriptions.add(handler);\n\n // Send it the latest data we have\n if (this._latestState) {\n handler(this._latestState);\n } else {\n this.latest().then(handler);\n }\n };\n\n public remove = (handler: Types.NetInfoChangeHandler): void => {\n this._subscriptions.delete(handler);\n };\n\n public tearDown = (): void => {\n if (this._internetReachability) {\n this._internetReachability.tearDown();\n }\n\n if (this._nativeEventSubscription) {\n this._nativeEventSubscription.remove();\n }\n\n this._subscriptions.clear();\n };\n}\n"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/types.js b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/types.js +index 39e4871..92824aa 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/types.js ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/types.js +@@ -3,8 +3,7 @@ + Object.defineProperty(exports, "__esModule", { + value: true + }); +-exports.NetInfoCellularGeneration = exports.NetInfoStateType = void 0; +- ++exports.NetInfoStateType = exports.NetInfoCellularGeneration = void 0; + /** + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -13,10 +12,7 @@ exports.NetInfoCellularGeneration = exports.NetInfoStateType = void 0; + * + * @format + */ +-let NetInfoStateType; +-exports.NetInfoStateType = NetInfoStateType; +- +-(function (NetInfoStateType) { ++let NetInfoStateType = exports.NetInfoStateType = /*#__PURE__*/function (NetInfoStateType) { + NetInfoStateType["unknown"] = "unknown"; + NetInfoStateType["none"] = "none"; + NetInfoStateType["cellular"] = "cellular"; +@@ -26,15 +22,13 @@ exports.NetInfoStateType = NetInfoStateType; + NetInfoStateType["wimax"] = "wimax"; + NetInfoStateType["vpn"] = "vpn"; + NetInfoStateType["other"] = "other"; +-})(NetInfoStateType || (exports.NetInfoStateType = NetInfoStateType = {})); +- +-let NetInfoCellularGeneration; +-exports.NetInfoCellularGeneration = NetInfoCellularGeneration; +- +-(function (NetInfoCellularGeneration) { ++ return NetInfoStateType; ++}({}); ++let NetInfoCellularGeneration = exports.NetInfoCellularGeneration = /*#__PURE__*/function (NetInfoCellularGeneration) { + NetInfoCellularGeneration["2g"] = "2g"; + NetInfoCellularGeneration["3g"] = "3g"; + NetInfoCellularGeneration["4g"] = "4g"; + NetInfoCellularGeneration["5g"] = "5g"; +-})(NetInfoCellularGeneration || (exports.NetInfoCellularGeneration = NetInfoCellularGeneration = {})); ++ return NetInfoCellularGeneration; ++}({}); + //# sourceMappingURL=types.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/types.js.map b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/types.js.map +index 095dd3b..596ace1 100644 +--- a/node_modules/@react-native-community/netinfo/lib/commonjs/internal/types.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/commonjs/internal/types.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["types.ts"],"names":["NetInfoStateType","NetInfoCellularGeneration"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IAEYA,gB;;;WAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;GAAAA,gB,gCAAAA,gB;;IAcAC,yB;;;WAAAA,yB;AAAAA,EAAAA,yB;AAAAA,EAAAA,yB;AAAAA,EAAAA,yB;AAAAA,EAAAA,yB;GAAAA,yB,yCAAAA,yB","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nexport enum NetInfoStateType {\n unknown = 'unknown',\n none = 'none',\n cellular = 'cellular',\n wifi = 'wifi',\n bluetooth = 'bluetooth',\n ethernet = 'ethernet',\n wimax = 'wimax',\n vpn = 'vpn',\n other = 'other',\n}\n\nexport type NetInfoMethodType = 'HEAD' | 'GET';\n\nexport enum NetInfoCellularGeneration {\n '2g' = '2g',\n '3g' = '3g',\n '4g' = '4g',\n '5g' = '5g',\n}\n\nexport interface NetInfoConnectedDetails {\n isConnectionExpensive: boolean;\n}\n\ninterface NetInfoConnectedState<\n T extends NetInfoStateType,\n D extends Record = Record\n> {\n type: T;\n isConnected: true;\n isInternetReachable: boolean | null;\n details: D & NetInfoConnectedDetails;\n isWifiEnabled?: boolean;\n}\n\ninterface NetInfoDisconnectedState {\n type: T;\n isConnected: false;\n isInternetReachable: false;\n details: null;\n isWifiEnabled?: boolean;\n}\n\nexport interface NetInfoUnknownState {\n type: NetInfoStateType.unknown;\n isConnected: boolean | null;\n isInternetReachable: null;\n details: null;\n isWifiEnabled?: boolean;\n}\n\nexport type NetInfoNoConnectionState = NetInfoDisconnectedState<\n NetInfoStateType.none\n>;\nexport type NetInfoDisconnectedStates =\n | NetInfoUnknownState\n | NetInfoNoConnectionState;\n\nexport type NetInfoCellularState = NetInfoConnectedState<\n NetInfoStateType.cellular,\n {\n cellularGeneration: NetInfoCellularGeneration | null;\n carrier: string | null;\n }\n>;\nexport type NetInfoWifiState = NetInfoConnectedState<\n NetInfoStateType.wifi,\n {\n ssid: string | null;\n bssid: string | null;\n strength: number | null;\n ipAddress: string | null;\n subnet: string | null;\n frequency: number | null;\n linkSpeed: number | null;\n rxLinkSpeed: number | null;\n txLinkSpeed: number | null;\n }\n>;\nexport type NetInfoBluetoothState = NetInfoConnectedState<\n NetInfoStateType.bluetooth\n>;\nexport type NetInfoEthernetState = NetInfoConnectedState<\n NetInfoStateType.ethernet,\n {\n ipAddress: string | null;\n subnet: string | null;\n }\n>;\nexport type NetInfoWimaxState = NetInfoConnectedState;\nexport type NetInfoVpnState = NetInfoConnectedState;\nexport type NetInfoOtherState = NetInfoConnectedState;\nexport type NetInfoConnectedStates =\n | NetInfoCellularState\n | NetInfoWifiState\n | NetInfoBluetoothState\n | NetInfoEthernetState\n | NetInfoWimaxState\n | NetInfoVpnState\n | NetInfoOtherState;\n\nexport type NetInfoState = NetInfoDisconnectedStates | NetInfoConnectedStates;\n\nexport type NetInfoChangeHandler = (state: NetInfoState) => void;\nexport type NetInfoSubscription = () => void;\n\nexport interface NetInfoConfiguration {\n reachabilityUrl: string;\n reachabilityMethod?: NetInfoMethodType;\n reachabilityHeaders?: Record;\n reachabilityTest: (response: Response) => Promise;\n reachabilityLongTimeout: number;\n reachabilityShortTimeout: number;\n reachabilityRequestTimeout: number;\n reachabilityShouldRun: () => boolean;\n shouldFetchWiFiSSID: boolean;\n useNativeReachability: boolean;\n}\n"]} +\ No newline at end of file ++{"version":3,"names":["NetInfoStateType","exports","NetInfoCellularGeneration"],"sources":["types.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nexport enum NetInfoStateType {\n unknown = 'unknown',\n none = 'none',\n cellular = 'cellular',\n wifi = 'wifi',\n bluetooth = 'bluetooth',\n ethernet = 'ethernet',\n wimax = 'wimax',\n vpn = 'vpn',\n other = 'other',\n}\n\nexport type NetInfoMethodType = 'HEAD' | 'GET';\n\nexport enum NetInfoCellularGeneration {\n '2g' = '2g',\n '3g' = '3g',\n '4g' = '4g',\n '5g' = '5g',\n}\n\nexport interface NetInfoConnectedDetails {\n isConnectionExpensive: boolean;\n}\n\ninterface NetInfoConnectedState<\n T extends NetInfoStateType,\n D extends Record = Record,\n> {\n type: T;\n isConnected: true;\n isInternetReachable: boolean | null;\n details: D & NetInfoConnectedDetails;\n isWifiEnabled?: boolean;\n}\n\ninterface NetInfoDisconnectedState {\n type: T;\n isConnected: false;\n isInternetReachable: false;\n details: null;\n isWifiEnabled?: boolean;\n}\n\nexport interface NetInfoUnknownState {\n type: NetInfoStateType.unknown;\n isConnected: boolean | null;\n isInternetReachable: null;\n details: null;\n isWifiEnabled?: boolean;\n}\n\nexport type NetInfoNoConnectionState =\n NetInfoDisconnectedState;\nexport type NetInfoDisconnectedStates =\n | NetInfoUnknownState\n | NetInfoNoConnectionState;\n\nexport type NetInfoCellularState = NetInfoConnectedState<\n NetInfoStateType.cellular,\n {\n cellularGeneration: NetInfoCellularGeneration | null;\n carrier: string | null;\n }\n>;\nexport type NetInfoWifiState = NetInfoConnectedState<\n NetInfoStateType.wifi,\n {\n ssid: string | null;\n bssid: string | null;\n strength: number | null;\n ipAddress: string | null;\n subnet: string | null;\n frequency: number | null;\n linkSpeed: number | null;\n rxLinkSpeed: number | null;\n txLinkSpeed: number | null;\n }\n>;\nexport type NetInfoBluetoothState =\n NetInfoConnectedState;\nexport type NetInfoEthernetState = NetInfoConnectedState<\n NetInfoStateType.ethernet,\n {\n ipAddress: string | null;\n subnet: string | null;\n }\n>;\nexport type NetInfoWimaxState = NetInfoConnectedState;\nexport type NetInfoVpnState = NetInfoConnectedState;\nexport type NetInfoOtherState = NetInfoConnectedState;\nexport type NetInfoConnectedStates =\n | NetInfoCellularState\n | NetInfoWifiState\n | NetInfoBluetoothState\n | NetInfoEthernetState\n | NetInfoWimaxState\n | NetInfoVpnState\n | NetInfoOtherState;\n\nexport type NetInfoState = NetInfoDisconnectedStates | NetInfoConnectedStates;\n\nexport type NetInfoChangeHandler = (state: NetInfoState) => void;\nexport type NetInfoSubscription = () => void;\n\nexport interface NetInfoConfiguration {\n reachabilityUrl: string;\n reachabilityMethod?: NetInfoMethodType;\n reachabilityHeaders?: Record;\n reachabilityTest: (response: Response) => Promise;\n reachabilityLongTimeout: number;\n reachabilityShortTimeout: number;\n reachabilityRequestTimeout: number;\n reachabilityShouldRun: () => boolean;\n shouldFetchWiFiSSID: boolean;\n useNativeReachability: boolean;\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA,IASYA,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,0BAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAA,OAAhBA,gBAAgB;AAAA;AAAA,IAchBE,yBAAyB,GAAAD,OAAA,CAAAC,yBAAA,0BAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAA,OAAzBA,yBAAyB;AAAA"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/index.js b/node_modules/@react-native-community/netinfo/lib/module/index.js +index 147c72e..02aa0db 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/index.js ++++ b/node_modules/@react-native-community/netinfo/lib/module/index.js +@@ -6,20 +6,23 @@ + * + * @format + */ ++ + import { useState, useEffect, useCallback } from 'react'; + import { Platform } from 'react-native'; + import DEFAULT_CONFIGURATION from './internal/defaultConfiguration'; + import NativeInterface from './internal/nativeInterface'; + import State from './internal/state'; +-import * as Types from './internal/types'; // Stores the currently used configuration ++import * as Types from './internal/types'; + +-let _configuration = DEFAULT_CONFIGURATION; // Stores the singleton reference to the state manager ++// Stores the currently used configuration ++let _configuration = DEFAULT_CONFIGURATION; + ++// Stores the singleton reference to the state manager + let _state = null; +- + const createState = () => { + return new State(_configuration); + }; ++ + /** + * Configures the library with the given configuration. Note that calling this will stop all + * previously added listeners from being called again. It is best to call this right when your +@@ -27,23 +30,20 @@ const createState = () => { + * + * @param configuration The new configuration to set. + */ +- +- + export function configure(configuration) { +- _configuration = { ...DEFAULT_CONFIGURATION, ++ _configuration = { ++ ...DEFAULT_CONFIGURATION, + ...configuration + }; +- + if (_state) { + _state.tearDown(); +- + _state = createState(); + } +- + if (Platform.OS === 'ios') { + NativeInterface.configure(configuration); + } + } ++ + /** + * Returns a `Promise` that resolves to a `NetInfoState` object. + * This function operates on the global singleton instance configured using `configure()` +@@ -52,27 +52,25 @@ export function configure(configuration) { + * + * @returns A Promise which contains the current connection state. + */ +- + export function fetch(requestedInterface) { + if (!_state) { + _state = createState(); + } +- + return _state.latest(requestedInterface); + } ++ + /** + * Force-refreshes the internal state of the global singleton managed by this library. + * + * @returns A Promise which contains the updated connection state. + */ +- + export function refresh() { + if (!_state) { + _state = createState(); + } +- + return _state._fetchCurrentState(); + } ++ + /** + * Subscribe to the global singleton's connection information. The callback is called with a parameter of type + * [`NetInfoState`](README.md#netinfostate) whenever the connection state changes. Your listener +@@ -84,18 +82,16 @@ export function refresh() { + * + * @returns A function which can be called to unsubscribe. + */ +- + export function addEventListener(listener) { + if (!_state) { + _state = createState(); + } +- + _state.add(listener); +- + return () => { + _state && _state.remove(listener); + }; + } ++ + /** + * A React Hook into this library's singleton which updates when the connection state changes. + * +@@ -103,12 +99,10 @@ export function addEventListener(listener) { + * + * @returns The connection state. + */ +- + export function useNetInfo(configuration) { + if (configuration) { + configure(configuration); + } +- + const [netInfo, setNetInfo] = useState({ + type: Types.NetInfoStateType.unknown, + isConnected: null, +@@ -120,6 +114,7 @@ export function useNetInfo(configuration) { + }, []); + return netInfo; + } ++ + /** + * A React Hook which manages an isolated instance of the network info manager. + * This is not a hook into a singleton shared state. NetInfo.configure, NetInfo.addEventListener, +@@ -129,7 +124,6 @@ export function useNetInfo(configuration) { + * + * @returns the netInfo state and a refresh function + */ +- + export function useNetInfoInstance(isPaused = false, configuration) { + const [networkInfoManager, setNetworkInfoManager] = useState(); + const [netInfo, setNetInfo] = useState({ +@@ -142,8 +136,8 @@ export function useNetInfoInstance(isPaused = false, configuration) { + if (isPaused) { + return; + } +- +- const config = { ...DEFAULT_CONFIGURATION, ++ const config = { ++ ...DEFAULT_CONFIGURATION, + ...configuration + }; + const state = new State(config); +diff --git a/node_modules/@react-native-community/netinfo/lib/module/index.js.map b/node_modules/@react-native-community/netinfo/lib/module/index.js.map +index 937c538..268c26e 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/index.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/module/index.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["index.ts"],"names":["useState","useEffect","useCallback","Platform","DEFAULT_CONFIGURATION","NativeInterface","State","Types","_configuration","_state","createState","configure","configuration","tearDown","OS","fetch","requestedInterface","latest","refresh","_fetchCurrentState","addEventListener","listener","add","remove","useNetInfo","netInfo","setNetInfo","type","NetInfoStateType","unknown","isConnected","isInternetReachable","details","useNetInfoInstance","isPaused","networkInfoManager","setNetworkInfoManager","config","state"],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {useState, useEffect, useCallback} from 'react';\nimport {Platform} from 'react-native';\nimport DEFAULT_CONFIGURATION from './internal/defaultConfiguration';\nimport NativeInterface from './internal/nativeInterface';\nimport State from './internal/state';\nimport * as Types from './internal/types';\n\n// Stores the currently used configuration\nlet _configuration = DEFAULT_CONFIGURATION;\n\n// Stores the singleton reference to the state manager\nlet _state: State | null = null;\nconst createState = (): State => {\n return new State(_configuration);\n};\n\n/**\n * Configures the library with the given configuration. Note that calling this will stop all\n * previously added listeners from being called again. It is best to call this right when your\n * application is started to avoid issues. The configuration sets up a global singleton instance.\n *\n * @param configuration The new configuration to set.\n */\nexport function configure(\n configuration: Partial,\n): void {\n _configuration = {\n ...DEFAULT_CONFIGURATION,\n ...configuration,\n };\n\n if (_state) {\n _state.tearDown();\n _state = createState();\n }\n\n if (Platform.OS === 'ios') {\n NativeInterface.configure(configuration);\n }\n}\n\n/**\n * Returns a `Promise` that resolves to a `NetInfoState` object.\n * This function operates on the global singleton instance configured using `configure()`\n *\n * @param [requestedInterface] interface from which to obtain the information\n *\n * @returns A Promise which contains the current connection state.\n */\nexport function fetch(\n requestedInterface?: string,\n): Promise {\n if (!_state) {\n _state = createState();\n }\n return _state.latest(requestedInterface);\n}\n\n/**\n * Force-refreshes the internal state of the global singleton managed by this library.\n *\n * @returns A Promise which contains the updated connection state.\n */\nexport function refresh(): Promise {\n if (!_state) {\n _state = createState();\n }\n return _state._fetchCurrentState();\n}\n\n/**\n * Subscribe to the global singleton's connection information. The callback is called with a parameter of type\n * [`NetInfoState`](README.md#netinfostate) whenever the connection state changes. Your listener\n * will be called with the latest information soon after you subscribe and then with any\n * subsequent changes afterwards. You should not assume that the listener is called in the same\n * way across devices or platforms.\n *\n * @param listener The listener which is called when the network state changes.\n *\n * @returns A function which can be called to unsubscribe.\n */\nexport function addEventListener(\n listener: Types.NetInfoChangeHandler,\n): Types.NetInfoSubscription {\n if (!_state) {\n _state = createState();\n }\n\n _state.add(listener);\n return (): void => {\n _state && _state.remove(listener);\n };\n}\n\n/**\n * A React Hook into this library's singleton which updates when the connection state changes.\n *\n * @param {Partial} configuration - Configure the isolated network checker managed by this hook\n *\n * @returns The connection state.\n */\nexport function useNetInfo(\n configuration?: Partial,\n): Types.NetInfoState {\n if (configuration) {\n configure(configuration);\n }\n\n const [netInfo, setNetInfo] = useState({\n type: Types.NetInfoStateType.unknown,\n isConnected: null,\n isInternetReachable: null,\n details: null,\n });\n\n useEffect((): (() => void) => {\n return addEventListener(setNetInfo);\n }, []);\n\n return netInfo;\n}\n\n/**\n * A React Hook which manages an isolated instance of the network info manager.\n * This is not a hook into a singleton shared state. NetInfo.configure, NetInfo.addEventListener,\n * NetInfo.fetch, NetInfo.refresh are performed on a global singleton and have no affect on this hook.\n * @param {boolean} isPaused - Pause the internal network checks.\n * @param {Partial} configuration - Configure the isolated network checker managed by this hook\n *\n * @returns the netInfo state and a refresh function\n */\nexport function useNetInfoInstance(\n isPaused = false,\n configuration?: Partial,\n) {\n const [networkInfoManager, setNetworkInfoManager] = useState();\n const [netInfo, setNetInfo] = useState({\n type: Types.NetInfoStateType.unknown,\n isConnected: null,\n isInternetReachable: null,\n details: null,\n });\n\n useEffect(() => {\n if (isPaused) {\n return;\n }\n const config = {\n ...DEFAULT_CONFIGURATION,\n ...configuration,\n };\n const state = new State(config);\n setNetworkInfoManager(state);\n state.add(setNetInfo);\n return state.tearDown;\n }, [isPaused, configuration]);\n\n const refresh = useCallback(() => {\n networkInfoManager && networkInfoManager._fetchCurrentState();\n }, [networkInfoManager]);\n\n return {\n netInfo,\n refresh,\n };\n}\n\nexport * from './internal/types';\n\nexport default {\n configure,\n fetch,\n refresh,\n addEventListener,\n useNetInfo,\n useNetInfoInstance,\n};\n"]} +\ No newline at end of file ++{"version":3,"names":["useState","useEffect","useCallback","Platform","DEFAULT_CONFIGURATION","NativeInterface","State","Types","_configuration","_state","createState","configure","configuration","tearDown","OS","fetch","requestedInterface","latest","refresh","_fetchCurrentState","addEventListener","listener","add","remove","useNetInfo","netInfo","setNetInfo","type","NetInfoStateType","unknown","isConnected","isInternetReachable","details","useNetInfoInstance","isPaused","networkInfoManager","setNetworkInfoManager","config","state"],"sources":["index.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {useState, useEffect, useCallback} from 'react';\nimport {Platform} from 'react-native';\nimport DEFAULT_CONFIGURATION from './internal/defaultConfiguration';\nimport NativeInterface from './internal/nativeInterface';\nimport State from './internal/state';\nimport * as Types from './internal/types';\n\n// Stores the currently used configuration\nlet _configuration = DEFAULT_CONFIGURATION;\n\n// Stores the singleton reference to the state manager\nlet _state: State | null = null;\nconst createState = (): State => {\n return new State(_configuration);\n};\n\n/**\n * Configures the library with the given configuration. Note that calling this will stop all\n * previously added listeners from being called again. It is best to call this right when your\n * application is started to avoid issues. The configuration sets up a global singleton instance.\n *\n * @param configuration The new configuration to set.\n */\nexport function configure(\n configuration: Partial,\n): void {\n _configuration = {\n ...DEFAULT_CONFIGURATION,\n ...configuration,\n };\n\n if (_state) {\n _state.tearDown();\n _state = createState();\n }\n\n if (Platform.OS === 'ios') {\n NativeInterface.configure(configuration);\n }\n}\n\n/**\n * Returns a `Promise` that resolves to a `NetInfoState` object.\n * This function operates on the global singleton instance configured using `configure()`\n *\n * @param [requestedInterface] interface from which to obtain the information\n *\n * @returns A Promise which contains the current connection state.\n */\nexport function fetch(\n requestedInterface?: string,\n): Promise {\n if (!_state) {\n _state = createState();\n }\n return _state.latest(requestedInterface);\n}\n\n/**\n * Force-refreshes the internal state of the global singleton managed by this library.\n *\n * @returns A Promise which contains the updated connection state.\n */\nexport function refresh(): Promise {\n if (!_state) {\n _state = createState();\n }\n return _state._fetchCurrentState();\n}\n\n/**\n * Subscribe to the global singleton's connection information. The callback is called with a parameter of type\n * [`NetInfoState`](README.md#netinfostate) whenever the connection state changes. Your listener\n * will be called with the latest information soon after you subscribe and then with any\n * subsequent changes afterwards. You should not assume that the listener is called in the same\n * way across devices or platforms.\n *\n * @param listener The listener which is called when the network state changes.\n *\n * @returns A function which can be called to unsubscribe.\n */\nexport function addEventListener(\n listener: Types.NetInfoChangeHandler,\n): Types.NetInfoSubscription {\n if (!_state) {\n _state = createState();\n }\n\n _state.add(listener);\n return (): void => {\n _state && _state.remove(listener);\n };\n}\n\n/**\n * A React Hook into this library's singleton which updates when the connection state changes.\n *\n * @param {Partial} configuration - Configure the isolated network checker managed by this hook\n *\n * @returns The connection state.\n */\nexport function useNetInfo(\n configuration?: Partial,\n): Types.NetInfoState {\n if (configuration) {\n configure(configuration);\n }\n\n const [netInfo, setNetInfo] = useState({\n type: Types.NetInfoStateType.unknown,\n isConnected: null,\n isInternetReachable: null,\n details: null,\n });\n\n useEffect((): (() => void) => {\n return addEventListener(setNetInfo);\n }, []);\n\n return netInfo;\n}\n\n/**\n * A React Hook which manages an isolated instance of the network info manager.\n * This is not a hook into a singleton shared state. NetInfo.configure, NetInfo.addEventListener,\n * NetInfo.fetch, NetInfo.refresh are performed on a global singleton and have no affect on this hook.\n * @param {boolean} isPaused - Pause the internal network checks.\n * @param {Partial} configuration - Configure the isolated network checker managed by this hook\n *\n * @returns the netInfo state and a refresh function\n */\nexport function useNetInfoInstance(\n isPaused = false,\n configuration?: Partial,\n) {\n const [networkInfoManager, setNetworkInfoManager] = useState();\n const [netInfo, setNetInfo] = useState({\n type: Types.NetInfoStateType.unknown,\n isConnected: null,\n isInternetReachable: null,\n details: null,\n });\n\n useEffect(() => {\n if (isPaused) {\n return;\n }\n const config = {\n ...DEFAULT_CONFIGURATION,\n ...configuration,\n };\n const state = new State(config);\n setNetworkInfoManager(state);\n state.add(setNetInfo);\n return state.tearDown;\n }, [isPaused, configuration]);\n\n const refresh = useCallback(() => {\n networkInfoManager && networkInfoManager._fetchCurrentState();\n }, [networkInfoManager]);\n\n return {\n netInfo,\n refresh,\n };\n}\n\nexport * from './internal/types';\n\nexport default {\n configure,\n fetch,\n refresh,\n addEventListener,\n useNetInfo,\n useNetInfoInstance,\n};\n"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/NativeRNCNetInfo.js b/node_modules/@react-native-community/netinfo/lib/module/internal/NativeRNCNetInfo.js +new file mode 100644 +index 0000000..54a9e1b +--- /dev/null ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/NativeRNCNetInfo.js +@@ -0,0 +1,5 @@ ++/* eslint-disable @typescript-eslint/ban-types */ ++ ++import { TurboModuleRegistry } from 'react-native'; ++export default TurboModuleRegistry.getEnforcing('RNCNetInfo'); ++//# sourceMappingURL=NativeRNCNetInfo.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/NativeRNCNetInfo.js.map b/node_modules/@react-native-community/netinfo/lib/module/internal/NativeRNCNetInfo.js.map +new file mode 100644 +index 0000000..d366286 +--- /dev/null ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/NativeRNCNetInfo.js.map +@@ -0,0 +1 @@ ++{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sources":["NativeRNCNetInfo.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\nimport type { TurboModule } from 'react-native';\nimport { TurboModuleRegistry } from 'react-native';\n\nexport interface Spec extends TurboModule {\n configure: (config: Object) => void;\n getCurrentState(requestedInterface?: string): Promise;\n // Events\n addListener: (eventName: string) => void;\n removeListeners: (count: number) => void;\n}\n\nexport default TurboModuleRegistry.getEnforcing('RNCNetInfo');\n\n"],"mappings":"AAAA;;AAEA,SAASA,mBAAmB,QAAQ,cAAc;AAUlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,YAAY,CAAC"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/defaultConfiguration.js.map b/node_modules/@react-native-community/netinfo/lib/module/internal/defaultConfiguration.js.map +index 6a190c8..0ec7a12 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/defaultConfiguration.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/defaultConfiguration.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["defaultConfiguration.ts"],"names":["DEFAULT_CONFIGURATION","reachabilityUrl","reachabilityMethod","reachabilityHeaders","reachabilityTest","response","Promise","resolve","status","reachabilityShortTimeout","reachabilityLongTimeout","reachabilityRequestTimeout","reachabilityShouldRun","shouldFetchWiFiSSID","useNativeReachability"],"mappings":"AAEA,MAAMA,qBAAiD,GAAG;AACxDC,EAAAA,eAAe,EAAE,0CADuC;AAExDC,EAAAA,kBAAkB,EAAE,MAFoC;AAGxDC,EAAAA,mBAAmB,EAAE,EAHmC;AAIxDC,EAAAA,gBAAgB,EAAGC,QAAD,IAChBC,OAAO,CAACC,OAAR,CAAgBF,QAAQ,CAACG,MAAT,KAAoB,GAApC,CALsD;AAMxDC,EAAAA,wBAAwB,EAAE,IAAI,IAN0B;AAMpB;AACpCC,EAAAA,uBAAuB,EAAE,KAAK,IAP0B;AAOpB;AACpCC,EAAAA,0BAA0B,EAAE,KAAK,IARuB;AAQjB;AACvCC,EAAAA,qBAAqB,EAAE,MAAe,IATkB;AAUxDC,EAAAA,mBAAmB,EAAE,KAVmC;AAWxDC,EAAAA,qBAAqB,EAAE;AAXiC,CAA1D;AAcA,eAAed,qBAAf","sourcesContent":["import * as Types from './types';\n\nconst DEFAULT_CONFIGURATION: Types.NetInfoConfiguration = {\n reachabilityUrl: 'https://clients3.google.com/generate_204',\n reachabilityMethod: 'HEAD',\n reachabilityHeaders: {},\n reachabilityTest: (response: Response): Promise =>\n Promise.resolve(response.status === 204),\n reachabilityShortTimeout: 5 * 1000, // 5s\n reachabilityLongTimeout: 60 * 1000, // 60s\n reachabilityRequestTimeout: 15 * 1000, // 15s\n reachabilityShouldRun: (): boolean => true,\n shouldFetchWiFiSSID: false,\n useNativeReachability: true\n};\n\nexport default DEFAULT_CONFIGURATION;"]} +\ No newline at end of file ++{"version":3,"names":["DEFAULT_CONFIGURATION","reachabilityUrl","reachabilityMethod","reachabilityHeaders","reachabilityTest","response","Promise","resolve","status","reachabilityShortTimeout","reachabilityLongTimeout","reachabilityRequestTimeout","reachabilityShouldRun","shouldFetchWiFiSSID","useNativeReachability"],"sources":["defaultConfiguration.ts"],"sourcesContent":["import * as Types from './types';\n\nconst DEFAULT_CONFIGURATION: Types.NetInfoConfiguration = {\n reachabilityUrl: 'https://clients3.google.com/generate_204',\n reachabilityMethod: 'HEAD',\n reachabilityHeaders: {},\n reachabilityTest: (response: Response): Promise =>\n Promise.resolve(response.status === 204),\n reachabilityShortTimeout: 5 * 1000, // 5s\n reachabilityLongTimeout: 60 * 1000, // 60s\n reachabilityRequestTimeout: 15 * 1000, // 15s\n reachabilityShouldRun: (): boolean => true,\n shouldFetchWiFiSSID: false,\n useNativeReachability: true\n};\n\nexport default DEFAULT_CONFIGURATION;"],"mappings":"AAEA,MAAMA,qBAAiD,GAAG;EACxDC,eAAe,EAAE,0CAA0C;EAC3DC,kBAAkB,EAAE,MAAM;EAC1BC,mBAAmB,EAAE,CAAC,CAAC;EACvBC,gBAAgB,EAAGC,QAAkB,IACnCC,OAAO,CAACC,OAAO,CAACF,QAAQ,CAACG,MAAM,KAAK,GAAG,CAAC;EAC1CC,wBAAwB,EAAE,CAAC,GAAG,IAAI;EAAE;EACpCC,uBAAuB,EAAE,EAAE,GAAG,IAAI;EAAE;EACpCC,0BAA0B,EAAE,EAAE,GAAG,IAAI;EAAE;EACvCC,qBAAqB,EAAEA,CAAA,KAAe,IAAI;EAC1CC,mBAAmB,EAAE,KAAK;EAC1BC,qBAAqB,EAAE;AACzB,CAAC;AAED,eAAed,qBAAqB"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/defaultConfiguration.web.js.map b/node_modules/@react-native-community/netinfo/lib/module/internal/defaultConfiguration.web.js.map +index ba01d7a..011de62 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/defaultConfiguration.web.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/defaultConfiguration.web.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["defaultConfiguration.web.ts"],"names":["DEFAULT_CONFIGURATION","reachabilityUrl","reachabilityMethod","reachabilityHeaders","reachabilityTest","response","Promise","resolve","status","reachabilityShortTimeout","reachabilityLongTimeout","reachabilityRequestTimeout","reachabilityShouldRun","shouldFetchWiFiSSID","useNativeReachability"],"mappings":"AAEA,MAAMA,qBAAiD,GAAG;AACxDC,EAAAA,eAAe,EAAE,GADuC;AAExDC,EAAAA,kBAAkB,EAAE,MAFoC;AAGxDC,EAAAA,mBAAmB,EAAE,EAHmC;AAIxDC,EAAAA,gBAAgB,EAAGC,QAAD,IAChBC,OAAO,CAACC,OAAR,CAAgBF,QAAQ,CAACG,MAAT,KAAoB,GAApC,CALsD;AAMxDC,EAAAA,wBAAwB,EAAE,IAAI,IAN0B;AAMpB;AACpCC,EAAAA,uBAAuB,EAAE,KAAK,IAP0B;AAOpB;AACpCC,EAAAA,0BAA0B,EAAE,KAAK,IARuB;AAQjB;AACvCC,EAAAA,qBAAqB,EAAE,MAAe,IATkB;AAUxDC,EAAAA,mBAAmB,EAAE,IAVmC;AAWxDC,EAAAA,qBAAqB,EAAE;AAXiC,CAA1D;AAcA,eAAed,qBAAf","sourcesContent":["import * as Types from './types';\n\nconst DEFAULT_CONFIGURATION: Types.NetInfoConfiguration = {\n reachabilityUrl: '/',\n reachabilityMethod: \"HEAD\",\n reachabilityHeaders: {},\n reachabilityTest: (response: Response): Promise =>\n Promise.resolve(response.status === 200),\n reachabilityShortTimeout: 5 * 1000, // 5s\n reachabilityLongTimeout: 60 * 1000, // 60s\n reachabilityRequestTimeout: 15 * 1000, // 15s\n reachabilityShouldRun: (): boolean => true,\n shouldFetchWiFiSSID: true,\n useNativeReachability: true\n};\n\nexport default DEFAULT_CONFIGURATION"]} +\ No newline at end of file ++{"version":3,"names":["DEFAULT_CONFIGURATION","reachabilityUrl","reachabilityMethod","reachabilityHeaders","reachabilityTest","response","Promise","resolve","status","reachabilityShortTimeout","reachabilityLongTimeout","reachabilityRequestTimeout","reachabilityShouldRun","shouldFetchWiFiSSID","useNativeReachability"],"sources":["defaultConfiguration.web.ts"],"sourcesContent":["import * as Types from './types';\n\nconst DEFAULT_CONFIGURATION: Types.NetInfoConfiguration = {\n reachabilityUrl: '/',\n reachabilityMethod: \"HEAD\",\n reachabilityHeaders: {},\n reachabilityTest: (response: Response): Promise =>\n Promise.resolve(response.status === 200),\n reachabilityShortTimeout: 5 * 1000, // 5s\n reachabilityLongTimeout: 60 * 1000, // 60s\n reachabilityRequestTimeout: 15 * 1000, // 15s\n reachabilityShouldRun: (): boolean => true,\n shouldFetchWiFiSSID: true,\n useNativeReachability: true\n};\n\nexport default DEFAULT_CONFIGURATION"],"mappings":"AAEA,MAAMA,qBAAiD,GAAG;EACxDC,eAAe,EAAE,GAAG;EACpBC,kBAAkB,EAAE,MAAM;EAC1BC,mBAAmB,EAAE,CAAC,CAAC;EACvBC,gBAAgB,EAAGC,QAAkB,IACnCC,OAAO,CAACC,OAAO,CAACF,QAAQ,CAACG,MAAM,KAAK,GAAG,CAAC;EAC1CC,wBAAwB,EAAE,CAAC,GAAG,IAAI;EAAE;EACpCC,uBAAuB,EAAE,EAAE,GAAG,IAAI;EAAE;EACpCC,0BAA0B,EAAE,EAAE,GAAG,IAAI;EAAE;EACvCC,qBAAqB,EAAEA,CAAA,KAAe,IAAI;EAC1CC,mBAAmB,EAAE,IAAI;EACzBC,qBAAqB,EAAE;AACzB,CAAC;AAED,eAAed,qBAAqB"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/internetReachability.js b/node_modules/@react-native-community/netinfo/lib/module/internal/internetReachability.js +index 408453a..e373eef 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/internetReachability.js ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/internetReachability.js +@@ -1,5 +1,6 @@ +-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +- ++function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } ++function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } ++function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } + /** + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -8,57 +9,45 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope + * + * @format + */ ++ + export default class InternetReachability { + constructor(configuration, listener) { + _defineProperty(this, "_configuration", void 0); +- + _defineProperty(this, "_listener", void 0); +- + _defineProperty(this, "_isInternetReachable", undefined); +- + _defineProperty(this, "_currentInternetReachabilityCheckHandler", null); +- + _defineProperty(this, "_currentTimeoutHandle", null); +- + _defineProperty(this, "_setIsInternetReachable", isInternetReachable => { + if (this._isInternetReachable === isInternetReachable) { + return; + } +- + this._isInternetReachable = isInternetReachable; +- + this._listener(this._isInternetReachable); + }); +- + _defineProperty(this, "_setExpectsConnection", expectsConnection => { + // Cancel any pending check + if (this._currentInternetReachabilityCheckHandler !== null) { + this._currentInternetReachabilityCheckHandler.cancel(); +- + this._currentInternetReachabilityCheckHandler = null; +- } // Cancel any pending timeout +- +- ++ } ++ // Cancel any pending timeout + if (this._currentTimeoutHandle !== null) { + clearTimeout(this._currentTimeoutHandle); + this._currentTimeoutHandle = null; + } +- + if (expectsConnection && this._configuration.reachabilityShouldRun()) { + // If we expect a connection, start the process for finding if we have one + // Set the state to "null" if it was previously false + if (!this._isInternetReachable) { + this._setIsInternetReachable(null); +- } // Start a network request to check for internet +- +- ++ } ++ // Start a network request to check for internet + this._currentInternetReachabilityCheckHandler = this._checkInternetReachability(); + } else { + // If we don't expect a connection or don't run reachability check, just change the state to "false" + this._setIsInternetReachable(false); + } + }); +- + _defineProperty(this, "_checkInternetReachability", () => { + const controller = new AbortController(); + const responsePromise = fetch(this._configuration.reachabilityUrl, { +@@ -66,16 +55,17 @@ export default class InternetReachability { + method: this._configuration.reachabilityMethod, + cache: 'no-cache', + signal: controller.signal +- }); // Create promise that will reject after the request timeout has been reached ++ }); + ++ // Create promise that will reject after the request timeout has been reached + let timeoutHandle; +- const timeoutPromise = new Promise(() => { +- timeoutHandle = setTimeout(() => controller.abort('timedout'), this._configuration.reachabilityRequestTimeout); +- }); // Create promise that makes it possible to cancel a pending request through a reject +- // eslint-disable-next-line @typescript-eslint/no-empty-function ++ const timeoutPromise = new Promise((_, reject) => { ++ timeoutHandle = setTimeout(() => reject('timedout'), this._configuration.reachabilityRequestTimeout); ++ }); + ++ // Create promise that makes it possible to cancel a pending request through a reject ++ // eslint-disable-next-line @typescript-eslint/no-empty-function + let cancel = () => {}; +- + const cancelPromise = new Promise((_, reject) => { + cancel = () => reject('canceled'); + }); +@@ -83,18 +73,25 @@ export default class InternetReachability { + return this._configuration.reachabilityTest(response); + }).then(result => { + this._setIsInternetReachable(result); +- + const nextTimeoutInterval = this._isInternetReachable ? this._configuration.reachabilityLongTimeout : this._configuration.reachabilityShortTimeout; + this._currentTimeoutHandle = setTimeout(this._checkInternetReachability, nextTimeoutInterval); ++ }).catch(error => { ++ if (error !== 'canceled') { ++ this._setIsInternetReachable(false); ++ this._currentTimeoutHandle = setTimeout(this._checkInternetReachability, this._configuration.reachabilityShortTimeout); ++ } + }).catch(error => { + if ('canceled' === error) { + controller.abort(); + } else { ++ if ('timedout' === error) { ++ controller.abort(); ++ } + this._setIsInternetReachable(false); +- + this._currentTimeoutHandle = setTimeout(this._checkInternetReachability, this._configuration.reachabilityShortTimeout); + } +- }) // Clear request timeout and propagate any errors ++ }) ++ // Clear request timeout and propagate any errors + .then(() => { + clearTimeout(timeoutHandle); + }, error => { +@@ -106,7 +103,6 @@ export default class InternetReachability { + cancel + }; + }); +- + _defineProperty(this, "update", state => { + if (typeof state.isInternetReachable === 'boolean' && this._configuration.useNativeReachability) { + this._setIsInternetReachable(state.isInternetReachable); +@@ -114,29 +110,24 @@ export default class InternetReachability { + this._setExpectsConnection(state.isConnected); + } + }); +- + _defineProperty(this, "currentState", () => { + return this._isInternetReachable; + }); +- + _defineProperty(this, "tearDown", () => { + // Cancel any pending check + if (this._currentInternetReachabilityCheckHandler !== null) { + this._currentInternetReachabilityCheckHandler.cancel(); +- + this._currentInternetReachabilityCheckHandler = null; +- } // Cancel any pending timeout +- ++ } + ++ // Cancel any pending timeout + if (this._currentTimeoutHandle !== null) { + clearTimeout(this._currentTimeoutHandle); + this._currentTimeoutHandle = null; + } + }); +- + this._configuration = configuration; + this._listener = listener; + } +- + } + //# sourceMappingURL=internetReachability.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/internetReachability.js.map b/node_modules/@react-native-community/netinfo/lib/module/internal/internetReachability.js.map +index a998c5f..544e5cb 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/internetReachability.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/internetReachability.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["internetReachability.ts"],"names":["InternetReachability","constructor","configuration","listener","undefined","isInternetReachable","_isInternetReachable","_listener","expectsConnection","_currentInternetReachabilityCheckHandler","cancel","_currentTimeoutHandle","clearTimeout","_configuration","reachabilityShouldRun","_setIsInternetReachable","_checkInternetReachability","controller","AbortController","responsePromise","fetch","reachabilityUrl","headers","reachabilityHeaders","method","reachabilityMethod","cache","signal","timeoutHandle","timeoutPromise","Promise","setTimeout","abort","reachabilityRequestTimeout","cancelPromise","_","reject","promise","race","then","response","reachabilityTest","result","nextTimeoutInterval","reachabilityLongTimeout","reachabilityShortTimeout","catch","error","state","useNativeReachability","_setExpectsConnection","isConnected"],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport * as PrivateTypes from './privateTypes';\nimport * as Types from './types';\n\ninterface InternetReachabilityCheckHandler {\n promise: Promise;\n cancel: () => void;\n}\n\nexport default class InternetReachability {\n private _configuration: Types.NetInfoConfiguration;\n private _listener: PrivateTypes.NetInfoInternetReachabilityChangeListener;\n private _isInternetReachable: boolean | null | undefined = undefined;\n private _currentInternetReachabilityCheckHandler: InternetReachabilityCheckHandler | null = null;\n private _currentTimeoutHandle: ReturnType | null = null;\n\n constructor(\n configuration: Types.NetInfoConfiguration,\n listener: PrivateTypes.NetInfoInternetReachabilityChangeListener,\n ) {\n this._configuration = configuration;\n this._listener = listener;\n }\n\n private _setIsInternetReachable = (\n isInternetReachable: boolean | null,\n ): void => {\n if (this._isInternetReachable === isInternetReachable) {\n return;\n }\n\n this._isInternetReachable = isInternetReachable;\n this._listener(this._isInternetReachable);\n };\n\n private _setExpectsConnection = (expectsConnection: boolean | null): void => {\n // Cancel any pending check\n if (this._currentInternetReachabilityCheckHandler !== null) {\n this._currentInternetReachabilityCheckHandler.cancel();\n this._currentInternetReachabilityCheckHandler = null;\n }\n // Cancel any pending timeout\n if (this._currentTimeoutHandle !== null) {\n clearTimeout(this._currentTimeoutHandle);\n this._currentTimeoutHandle = null;\n }\n\n if (expectsConnection && this._configuration.reachabilityShouldRun()) {\n // If we expect a connection, start the process for finding if we have one\n // Set the state to \"null\" if it was previously false\n if (!this._isInternetReachable) {\n this._setIsInternetReachable(null);\n }\n // Start a network request to check for internet\n this._currentInternetReachabilityCheckHandler = this._checkInternetReachability();\n } else {\n // If we don't expect a connection or don't run reachability check, just change the state to \"false\"\n this._setIsInternetReachable(false);\n }\n };\n\n private _checkInternetReachability = (): InternetReachabilityCheckHandler => {\n const controller = new AbortController();\n\n const responsePromise = fetch(this._configuration.reachabilityUrl, {\n headers: this._configuration.reachabilityHeaders,\n method: this._configuration.reachabilityMethod,\n cache: 'no-cache',\n signal: controller.signal,\n });\n\n // Create promise that will reject after the request timeout has been reached\n let timeoutHandle: ReturnType;\n const timeoutPromise = new Promise((): void => {\n timeoutHandle = setTimeout(\n (): void => controller.abort('timedout'),\n this._configuration.reachabilityRequestTimeout,\n );\n });\n\n // Create promise that makes it possible to cancel a pending request through a reject\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n let cancel: () => void = (): void => {};\n const cancelPromise = new Promise((_, reject): void => {\n cancel = (): void => reject('canceled');\n });\n\n const promise = Promise.race([\n responsePromise,\n timeoutPromise,\n cancelPromise,\n ])\n .then(\n (response): Promise => {\n return this._configuration.reachabilityTest(response);\n },\n )\n .then(\n (result): void => {\n this._setIsInternetReachable(result);\n const nextTimeoutInterval = this._isInternetReachable\n ? this._configuration.reachabilityLongTimeout\n : this._configuration.reachabilityShortTimeout;\n this._currentTimeoutHandle = setTimeout(\n this._checkInternetReachability,\n nextTimeoutInterval,\n );\n },\n )\n .catch(\n (error: Error | 'timedout' | 'canceled'): void => {\n if ('canceled' === error) {\n controller.abort();\n } else {\n this._setIsInternetReachable(false);\n this._currentTimeoutHandle = setTimeout(\n this._checkInternetReachability,\n this._configuration.reachabilityShortTimeout,\n );\n }\n },\n )\n // Clear request timeout and propagate any errors\n .then(\n (): void => {\n clearTimeout(timeoutHandle);\n },\n (error: Error): void => {\n clearTimeout(timeoutHandle);\n throw error;\n },\n );\n\n return {\n promise,\n cancel,\n };\n };\n\n public update = (state: PrivateTypes.NetInfoNativeModuleState): void => {\n if (\n typeof state.isInternetReachable === 'boolean' &&\n this._configuration.useNativeReachability\n ) {\n this._setIsInternetReachable(state.isInternetReachable);\n } else {\n this._setExpectsConnection(state.isConnected);\n }\n };\n\n public currentState = (): boolean | null | undefined => {\n return this._isInternetReachable;\n };\n\n public tearDown = (): void => {\n // Cancel any pending check\n if (this._currentInternetReachabilityCheckHandler !== null) {\n this._currentInternetReachabilityCheckHandler.cancel();\n this._currentInternetReachabilityCheckHandler = null;\n }\n\n // Cancel any pending timeout\n if (this._currentTimeoutHandle !== null) {\n clearTimeout(this._currentTimeoutHandle);\n this._currentTimeoutHandle = null;\n }\n };\n}\n"]} +\ No newline at end of file ++{"version":3,"names":["InternetReachability","constructor","configuration","listener","_defineProperty","undefined","isInternetReachable","_isInternetReachable","_listener","expectsConnection","_currentInternetReachabilityCheckHandler","cancel","_currentTimeoutHandle","clearTimeout","_configuration","reachabilityShouldRun","_setIsInternetReachable","_checkInternetReachability","controller","AbortController","responsePromise","fetch","reachabilityUrl","headers","reachabilityHeaders","method","reachabilityMethod","cache","signal","timeoutHandle","timeoutPromise","Promise","_","reject","setTimeout","reachabilityRequestTimeout","cancelPromise","promise","race","then","response","reachabilityTest","result","nextTimeoutInterval","reachabilityLongTimeout","reachabilityShortTimeout","catch","error","abort","state","useNativeReachability","_setExpectsConnection","isConnected"],"sources":["internetReachability.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport * as PrivateTypes from './privateTypes';\nimport * as Types from './types';\n\ninterface InternetReachabilityCheckHandler {\n promise: Promise;\n cancel: () => void;\n}\n\nexport default class InternetReachability {\n private _configuration: Types.NetInfoConfiguration;\n private _listener: PrivateTypes.NetInfoInternetReachabilityChangeListener;\n private _isInternetReachable: boolean | null | undefined = undefined;\n private _currentInternetReachabilityCheckHandler: InternetReachabilityCheckHandler | null =\n null;\n private _currentTimeoutHandle: ReturnType | null = null;\n\n constructor(\n configuration: Types.NetInfoConfiguration,\n listener: PrivateTypes.NetInfoInternetReachabilityChangeListener,\n ) {\n this._configuration = configuration;\n this._listener = listener;\n }\n\n private _setIsInternetReachable = (\n isInternetReachable: boolean | null,\n ): void => {\n if (this._isInternetReachable === isInternetReachable) {\n return;\n }\n\n this._isInternetReachable = isInternetReachable;\n this._listener(this._isInternetReachable);\n };\n\n private _setExpectsConnection = (expectsConnection: boolean | null): void => {\n // Cancel any pending check\n if (this._currentInternetReachabilityCheckHandler !== null) {\n this._currentInternetReachabilityCheckHandler.cancel();\n this._currentInternetReachabilityCheckHandler = null;\n }\n // Cancel any pending timeout\n if (this._currentTimeoutHandle !== null) {\n clearTimeout(this._currentTimeoutHandle);\n this._currentTimeoutHandle = null;\n }\n\n if (expectsConnection && this._configuration.reachabilityShouldRun()) {\n // If we expect a connection, start the process for finding if we have one\n // Set the state to \"null\" if it was previously false\n if (!this._isInternetReachable) {\n this._setIsInternetReachable(null);\n }\n // Start a network request to check for internet\n this._currentInternetReachabilityCheckHandler =\n this._checkInternetReachability();\n } else {\n // If we don't expect a connection or don't run reachability check, just change the state to \"false\"\n this._setIsInternetReachable(false);\n }\n };\n\n private _checkInternetReachability = (): InternetReachabilityCheckHandler => {\n const controller = new AbortController();\n\n const responsePromise = fetch(this._configuration.reachabilityUrl, {\n headers: this._configuration.reachabilityHeaders,\n method: this._configuration.reachabilityMethod,\n cache: 'no-cache',\n signal: controller.signal,\n });\n\n // Create promise that will reject after the request timeout has been reached\n let timeoutHandle: ReturnType;\n const timeoutPromise = new Promise((_, reject): void => {\n timeoutHandle = setTimeout(\n (): void => reject('timedout'),\n this._configuration.reachabilityRequestTimeout,\n );\n });\n\n // Create promise that makes it possible to cancel a pending request through a reject\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n let cancel: () => void = (): void => {};\n const cancelPromise = new Promise((_, reject): void => {\n cancel = (): void => reject('canceled');\n });\n\n const promise = Promise.race([\n responsePromise,\n timeoutPromise,\n cancelPromise,\n ])\n .then((response): Promise => {\n return this._configuration.reachabilityTest(response);\n })\n .then((result): void => {\n this._setIsInternetReachable(result);\n const nextTimeoutInterval = this._isInternetReachable\n ? this._configuration.reachabilityLongTimeout\n : this._configuration.reachabilityShortTimeout;\n this._currentTimeoutHandle = setTimeout(\n this._checkInternetReachability,\n nextTimeoutInterval,\n );\n })\n .catch((error: Error | 'timedout' | 'canceled'): void => {\n if (error !== 'canceled') {\n this._setIsInternetReachable(false);\n this._currentTimeoutHandle = setTimeout(\n this._checkInternetReachability,\n this._configuration.reachabilityShortTimeout,\n );\n }\n })\n .catch(\n (error: Error | 'timedout' | 'canceled'): void => {\n if ('canceled' === error) {\n controller.abort();\n } else {\n if ('timedout' === error) {\n controller.abort();\n }\n \n this._setIsInternetReachable(false);\n this._currentTimeoutHandle = setTimeout(\n this._checkInternetReachability,\n this._configuration.reachabilityShortTimeout,\n );\n }\n },\n )\n // Clear request timeout and propagate any errors\n .then(\n (): void => {\n clearTimeout(timeoutHandle);\n },\n (error: Error): void => {\n clearTimeout(timeoutHandle);\n throw error;\n },\n );\n\n return {\n promise,\n cancel,\n };\n };\n\n public update = (state: PrivateTypes.NetInfoNativeModuleState): void => {\n if (\n typeof state.isInternetReachable === 'boolean' &&\n this._configuration.useNativeReachability\n ) {\n this._setIsInternetReachable(state.isInternetReachable);\n } else {\n this._setExpectsConnection(state.isConnected);\n }\n };\n\n public currentState = (): boolean | null | undefined => {\n return this._isInternetReachable;\n };\n\n public tearDown = (): void => {\n // Cancel any pending check\n if (this._currentInternetReachabilityCheckHandler !== null) {\n this._currentInternetReachabilityCheckHandler.cancel();\n this._currentInternetReachabilityCheckHandler = null;\n }\n\n // Cancel any pending timeout\n if (this._currentTimeoutHandle !== null) {\n clearTimeout(this._currentTimeoutHandle);\n this._currentTimeoutHandle = null;\n }\n };\n}\n"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.js b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.js +index f9a0320..5c9c6bf 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.js ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.js +@@ -6,9 +6,11 @@ + * + * @format + */ ++ + import { NativeEventEmitter } from 'react-native'; +-import RNCNetInfo from './nativeModule'; // Produce an error if we don't have the native module ++import RNCNetInfo from './nativeModule'; + ++// Produce an error if we don't have the native module + if (!RNCNetInfo) { + throw new Error(`@react-native-community/netinfo: NativeModule.RNCNetInfo is null. To fix this issue try these steps: + +@@ -20,26 +22,26 @@ if (!RNCNetInfo) { + + If none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-community/react-native-netinfo`); + } ++ + /** + * We export the native interface in this way to give easy shared access to it between the + * JavaScript code and the tests + */ +- +- + let nativeEventEmitter = null; +-export default { ...RNCNetInfo, +- ++export default { ++ configure: RNCNetInfo.configure, ++ addListener: RNCNetInfo.addListener, ++ removeListeners: RNCNetInfo.removeListeners, ++ getCurrentState: RNCNetInfo.getCurrentState, + get eventEmitter() { + if (!nativeEventEmitter) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + /// @ts-ignore + nativeEventEmitter = new NativeEventEmitter(RNCNetInfo); +- } // eslint-disable-next-line @typescript-eslint/ban-ts-comment ++ } ++ // eslint-disable-next-line @typescript-eslint/ban-ts-comment + /// @ts-ignore +- +- + return nativeEventEmitter; + } +- + }; + //# sourceMappingURL=nativeInterface.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.js.map b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.js.map +index 084d180..be2bae7 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["nativeInterface.ts"],"names":["NativeEventEmitter","RNCNetInfo","Error","nativeEventEmitter","eventEmitter"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,SAAQA,kBAAR,QAAiC,cAAjC;AACA,OAAOC,UAAP,MAAuB,gBAAvB,C,CAEA;;AACA,IAAI,CAACA,UAAL,EAAiB;AACf,QAAM,IAAIC,KAAJ,CAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8IARQ,CAAN;AASD;AAED;AACA;AACA;AACA;;;AACA,IAAIC,kBAA6C,GAAG,IAApD;AACA,eAAe,EACb,GAAGF,UADU;;AAEb,MAAIG,YAAJ,GAAuC;AACrC,QAAI,CAACD,kBAAL,EAAyB;AACvB;AACA;AACAA,MAAAA,kBAAkB,GAAG,IAAIH,kBAAJ,CAAuBC,UAAvB,CAArB;AACD,KALoC,CAMrC;AACA;;;AACA,WAAOE,kBAAP;AACD;;AAXY,CAAf","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeEventEmitter} from 'react-native';\nimport RNCNetInfo from './nativeModule';\n\n// Produce an error if we don't have the native module\nif (!RNCNetInfo) {\n throw new Error(`@react-native-community/netinfo: NativeModule.RNCNetInfo is null. To fix this issue try these steps:\n\n• Run \\`react-native link @react-native-community/netinfo\\` in the project root.\n• Rebuild and re-run the app.\n• If you are using CocoaPods on iOS, run \\`pod install\\` in the \\`ios\\` directory and then rebuild and re-run the app. You may also need to re-open Xcode to get the new pods.\n• Check that the library was linked correctly when you used the link command by running through the manual installation instructions in the README.\n* If you are getting this error while unit testing you need to mock the native module. Follow the guide in the README.\n\nIf none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-community/react-native-netinfo`);\n}\n\n/**\n * We export the native interface in this way to give easy shared access to it between the\n * JavaScript code and the tests\n */\nlet nativeEventEmitter: NativeEventEmitter | null = null;\nexport default {\n ...RNCNetInfo,\n get eventEmitter(): NativeEventEmitter {\n if (!nativeEventEmitter) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /// @ts-ignore\n nativeEventEmitter = new NativeEventEmitter(RNCNetInfo);\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /// @ts-ignore\n return nativeEventEmitter;\n },\n};\n"]} +\ No newline at end of file ++{"version":3,"names":["NativeEventEmitter","RNCNetInfo","Error","nativeEventEmitter","configure","addListener","removeListeners","getCurrentState","eventEmitter"],"sources":["nativeInterface.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeEventEmitter} from 'react-native';\nimport RNCNetInfo from './nativeModule';\n\n// Produce an error if we don't have the native module\nif (!RNCNetInfo) {\n throw new Error(`@react-native-community/netinfo: NativeModule.RNCNetInfo is null. To fix this issue try these steps:\n\n• Run \\`react-native link @react-native-community/netinfo\\` in the project root.\n• Rebuild and re-run the app.\n• If you are using CocoaPods on iOS, run \\`pod install\\` in the \\`ios\\` directory and then rebuild and re-run the app. You may also need to re-open Xcode to get the new pods.\n• Check that the library was linked correctly when you used the link command by running through the manual installation instructions in the README.\n* If you are getting this error while unit testing you need to mock the native module. Follow the guide in the README.\n\nIf none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-community/react-native-netinfo`);\n}\n\n/**\n * We export the native interface in this way to give easy shared access to it between the\n * JavaScript code and the tests\n */\nlet nativeEventEmitter: NativeEventEmitter | null = null;\n\nexport default {\n configure: RNCNetInfo.configure,\n addListener: RNCNetInfo.addListener,\n removeListeners: RNCNetInfo.removeListeners,\n getCurrentState: RNCNetInfo.getCurrentState,\n get eventEmitter(): NativeEventEmitter {\n if (!nativeEventEmitter) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /// @ts-ignore\n nativeEventEmitter = new NativeEventEmitter(RNCNetInfo);\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /// @ts-ignore\n return nativeEventEmitter;\n },\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQA,kBAAkB,QAAO,cAAc;AAC/C,OAAOC,UAAU,MAAM,gBAAgB;;AAEvC;AACA,IAAI,CAACA,UAAU,EAAE;EACf,MAAM,IAAIC,KAAK,CAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8IAA8I,CAAC;AAC/I;;AAEA;AACA;AACA;AACA;AACA,IAAIC,kBAA6C,GAAG,IAAI;AAExD,eAAe;EACbC,SAAS,EAAEH,UAAU,CAACG,SAAS;EAC/BC,WAAW,EAAEJ,UAAU,CAACI,WAAW;EACnCC,eAAe,EAAEL,UAAU,CAACK,eAAe;EAC3CC,eAAe,EAAEN,UAAU,CAACM,eAAe;EAC3C,IAAIC,YAAYA,CAAA,EAAuB;IACrC,IAAI,CAACL,kBAAkB,EAAE;MACvB;MACA;MACAA,kBAAkB,GAAG,IAAIH,kBAAkB,CAACC,UAAU,CAAC;IACzD;IACA;IACA;IACA,OAAOE,kBAAkB;EAC3B;AACF,CAAC"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.web.js b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.web.js +index 2effbe1..90042df 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.web.js ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.web.js +@@ -6,15 +6,18 @@ + * + * @format + */ ++ + import { NativeEventEmitter } from 'react-native'; + import RNCNetInfo from './nativeModule'; + import { DEVICE_CONNECTIVITY_EVENT } from './privateTypes'; +-const nativeEventEmitter = new NativeEventEmitter(); // Listen to connectivity events ++const nativeEventEmitter = new NativeEventEmitter(); + ++// Listen to connectivity events + RNCNetInfo.addListener(DEVICE_CONNECTIVITY_EVENT, event => { + nativeEventEmitter.emit(DEVICE_CONNECTIVITY_EVENT, event); + }); +-export default { ...RNCNetInfo, ++export default { ++ ...RNCNetInfo, + eventEmitter: nativeEventEmitter + }; + //# sourceMappingURL=nativeInterface.web.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.web.js.map b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.web.js.map +index 0a0bf4f..c0c0af8 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.web.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeInterface.web.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["nativeInterface.web.ts"],"names":["NativeEventEmitter","RNCNetInfo","DEVICE_CONNECTIVITY_EVENT","nativeEventEmitter","addListener","event","emit","eventEmitter"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,SAAQA,kBAAR,QAAiC,cAAjC;AACA,OAAOC,UAAP,MAAuB,gBAAvB;AACA,SAAQC,yBAAR,QAAwC,gBAAxC;AAEA,MAAMC,kBAAkB,GAAG,IAAIH,kBAAJ,EAA3B,C,CAEA;;AACAC,UAAU,CAACG,WAAX,CACEF,yBADF,EAEGG,KAAD,IAAiB;AACfF,EAAAA,kBAAkB,CAACG,IAAnB,CAAwBJ,yBAAxB,EAAmDG,KAAnD;AACD,CAJH;AAOA,eAAe,EACb,GAAGJ,UADU;AAEbM,EAAAA,YAAY,EAAEJ;AAFD,CAAf","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeEventEmitter} from 'react-native';\nimport RNCNetInfo from './nativeModule';\nimport {DEVICE_CONNECTIVITY_EVENT} from './privateTypes';\n\nconst nativeEventEmitter = new NativeEventEmitter();\n\n// Listen to connectivity events\nRNCNetInfo.addListener(\n DEVICE_CONNECTIVITY_EVENT,\n (event): void => {\n nativeEventEmitter.emit(DEVICE_CONNECTIVITY_EVENT, event);\n },\n);\n\nexport default {\n ...RNCNetInfo,\n eventEmitter: nativeEventEmitter,\n};\n"]} +\ No newline at end of file ++{"version":3,"names":["NativeEventEmitter","RNCNetInfo","DEVICE_CONNECTIVITY_EVENT","nativeEventEmitter","addListener","event","emit","eventEmitter"],"sources":["nativeInterface.web.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeEventEmitter} from 'react-native';\nimport RNCNetInfo from './nativeModule';\nimport {DEVICE_CONNECTIVITY_EVENT} from './privateTypes';\n\nconst nativeEventEmitter = new NativeEventEmitter();\n\n// Listen to connectivity events\nRNCNetInfo.addListener(DEVICE_CONNECTIVITY_EVENT, (event): void => {\n nativeEventEmitter.emit(DEVICE_CONNECTIVITY_EVENT, event);\n});\n\nexport default {\n ...RNCNetInfo,\n eventEmitter: nativeEventEmitter,\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQA,kBAAkB,QAAO,cAAc;AAC/C,OAAOC,UAAU,MAAM,gBAAgB;AACvC,SAAQC,yBAAyB,QAAO,gBAAgB;AAExD,MAAMC,kBAAkB,GAAG,IAAIH,kBAAkB,CAAC,CAAC;;AAEnD;AACAC,UAAU,CAACG,WAAW,CAACF,yBAAyB,EAAGG,KAAK,IAAW;EACjEF,kBAAkB,CAACG,IAAI,CAACJ,yBAAyB,EAAEG,KAAK,CAAC;AAC3D,CAAC,CAAC;AAEF,eAAe;EACb,GAAGJ,UAAU;EACbM,YAAY,EAAEJ;AAChB,CAAC"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.js b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.js +index 11b32ce..4d606d8 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.js ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.js +@@ -6,7 +6,16 @@ + * + * @format + */ ++ + import { NativeModules } from 'react-native'; +-const RNCNetInfo = NativeModules.RNCNetInfo; ++// React Native sets `__turboModuleProxy` on global when TurboModules are enabled. ++// Currently, this is the recommended way to detect TurboModules. ++// https://reactnative.dev/docs/the-new-architecture/backward-compatibility-turbomodules#unify-the-javascript-specs ++// eslint-disable-next-line @typescript-eslint/ban-ts-comment ++// @ts-ignore ++const isTurboModuleEnabled = global.__turboModuleProxy != null; ++const RNCNetInfo = isTurboModuleEnabled ? ++// eslint-disable-next-line @typescript-eslint/no-var-requires ++require('./NativeRNCNetInfo').default : NativeModules.RNCNetInfo; + export default RNCNetInfo; + //# sourceMappingURL=nativeModule.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.js.map b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.js.map +index 4599032..7df218b 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["nativeModule.ts"],"names":["NativeModules","RNCNetInfo"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,SAAQA,aAAR,QAA4B,cAA5B;AAGA,MAAMC,UAA+B,GAAGD,aAAa,CAACC,UAAtD;AAEA,eAAeA,UAAf","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeModules} from 'react-native';\nimport {NetInfoNativeModule} from './privateTypes';\n\nconst RNCNetInfo: NetInfoNativeModule = NativeModules.RNCNetInfo;\n\nexport default RNCNetInfo;\n"]} +\ No newline at end of file ++{"version":3,"names":["NativeModules","isTurboModuleEnabled","global","__turboModuleProxy","RNCNetInfo","require","default"],"sources":["nativeModule.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeModules} from 'react-native';\nimport {NetInfoNativeModule} from './privateTypes';\n\n// React Native sets `__turboModuleProxy` on global when TurboModules are enabled.\n// Currently, this is the recommended way to detect TurboModules.\n// https://reactnative.dev/docs/the-new-architecture/backward-compatibility-turbomodules#unify-the-javascript-specs\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst isTurboModuleEnabled = global.__turboModuleProxy != null;\n\nconst RNCNetInfo: NetInfoNativeModule = isTurboModuleEnabled\n ? // eslint-disable-next-line @typescript-eslint/no-var-requires\n require('./NativeRNCNetInfo').default\n : NativeModules.RNCNetInfo;\n\nexport default RNCNetInfo;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQA,aAAa,QAAO,cAAc;AAG1C;AACA;AACA;AACA;AACA;AACA,MAAMC,oBAAoB,GAAGC,MAAM,CAACC,kBAAkB,IAAI,IAAI;AAE9D,MAAMC,UAA+B,GAAGH,oBAAoB;AACxD;AACAI,OAAO,CAAC,oBAAoB,CAAC,CAACC,OAAO,GACrCN,aAAa,CAACI,UAAU;AAE5B,eAAeA,UAAU"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.web.js b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.web.js +index 32f2ca5..5547977 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.web.js ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.web.js +@@ -6,15 +6,26 @@ + * + * @format + */ ++ + import { DEVICE_CONNECTIVITY_EVENT } from './privateTypes'; +-import { NetInfoCellularGeneration, NetInfoStateType } from './types'; // See https://wicg.github.io/netinfo/#dom-connectiontype ++import { NetInfoCellularGeneration, NetInfoStateType } from './types'; ++ ++// See https://wicg.github.io/netinfo/#dom-connectiontype ++ ++// See https://wicg.github.io/netinfo/#dom-effectiveconnectiontype ++ ++// https://wicg.github.io/netinfo/#dom-networkinformation-savedata ++ ++// Create (optional) connection APIs on navigator + + // Use a constant test of this form because in SSR on next.js, optional chaining is not sufficient, + // but this test correctly detects that window is not available and allows for conditionals before access +-const isWindowPresent = typeof window !== 'undefined'; // Check if window exists and if the browser supports the connection API ++const isWindowPresent = typeof window !== 'undefined'; + +-const connection = isWindowPresent && !window.hasOwnProperty('tizen') && !window.hasOwnProperty('webOS') ? window.navigator.connection || window.navigator.mozConnection || window.navigator.webkitConnection : undefined; // Map browser types to native types ++// Check if window exists and if the browser supports the connection API ++const connection = isWindowPresent && !window.hasOwnProperty('tizen') && !window.hasOwnProperty('webOS') ? window.navigator.connection || window.navigator.mozConnection || window.navigator.webkitConnection : undefined; + ++// Map browser types to native types + const typeMapping = { + bluetooth: NetInfoStateType.bluetooth, + cellular: NetInfoStateType.cellular, +@@ -31,17 +42,20 @@ const effectiveTypeMapping = { + '3g': NetInfoCellularGeneration['3g'], + '4g': NetInfoCellularGeneration['4g'], + 'slow-2g': NetInfoCellularGeneration['2g'] +-}; // Determine current state of connection ++}; + ++// Determine current state of connection + const getCurrentState = _requestedInterface => { + const isConnected = isWindowPresent ? navigator.onLine : false; + const baseState = { + isInternetReachable: null +- }; // If we don't have a connection object, we return minimal information ++ }; + ++ // If we don't have a connection object, we return minimal information + if (!connection) { + if (isConnected) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: true, + type: NetInfoStateType.other, + details: { +@@ -50,22 +64,22 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } +- +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: false, + isInternetReachable: false, + type: NetInfoStateType.none, + details: null + }; + return state; +- } // Otherwise try to return detailed information +- ++ } + ++ // Otherwise try to return detailed information + const isConnectionExpensive = connection.saveData; + const type = connection.type ? typeMapping[connection.type] : isConnected ? NetInfoStateType.other : NetInfoStateType.unknown; +- + if (type === NetInfoStateType.bluetooth) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: true, + type, + details: { +@@ -74,7 +88,8 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } else if (type === NetInfoStateType.cellular) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: true, + type, + details: { +@@ -85,7 +100,8 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } else if (type === NetInfoStateType.ethernet) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: true, + type, + details: { +@@ -96,7 +112,8 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } else if (type === NetInfoStateType.wifi) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: true, + type, + details: { +@@ -114,7 +131,8 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } else if (type === NetInfoStateType.wimax) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: true, + type, + details: { +@@ -123,7 +141,8 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } else if (type === NetInfoStateType.none) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: false, + isInternetReachable: false, + type, +@@ -131,7 +150,8 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } else if (type === NetInfoStateType.unknown) { +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected, + isInternetReachable: null, + type, +@@ -139,8 +159,8 @@ const getCurrentState = _requestedInterface => { + }; + return state; + } +- +- const state = { ...baseState, ++ const state = { ++ ...baseState, + isConnected: true, + type: NetInfoStateType.other, + details: { +@@ -149,7 +169,6 @@ const getCurrentState = _requestedInterface => { + }; + return state; + }; +- + const handlers = []; + const nativeHandlers = []; + const RNCNetInfo = { +@@ -160,7 +179,6 @@ const RNCNetInfo = { + const nativeHandler = () => { + handler(getCurrentState()); + }; +- + if (connection) { + connection.addEventListener('change', nativeHandler); + } else { +@@ -168,16 +186,15 @@ const RNCNetInfo = { + window.addEventListener('online', nativeHandler, false); + window.addEventListener('offline', nativeHandler, false); + } +- } // Remember handlers +- ++ } + ++ // Remember handlers + handlers.push(handler); + nativeHandlers.push(nativeHandler); + break; + } + } + }, +- + removeListeners(type, handler) { + switch (type) { + case DEVICE_CONNECTIVITY_EVENT: +@@ -185,7 +202,6 @@ const RNCNetInfo = { + // Get native handler + const index = handlers.indexOf(handler); + const nativeHandler = nativeHandlers[index]; +- + if (connection) { + connection.removeEventListener('change', nativeHandler); + } else { +@@ -193,24 +209,21 @@ const RNCNetInfo = { + window.removeEventListener('online', nativeHandler); + window.removeEventListener('offline', nativeHandler); + } +- } // Remove handlers +- ++ } + ++ // Remove handlers + handlers.splice(index, 1); + nativeHandlers.splice(index, 1); + break; + } + } + }, +- + async getCurrentState(requestedInterface) { + return getCurrentState(requestedInterface); + }, +- + configure() { + return; + } +- + }; + export default RNCNetInfo; + //# sourceMappingURL=nativeModule.web.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.web.js.map b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.web.js.map +index 2b50d96..0bdd63e 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.web.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/nativeModule.web.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["nativeModule.web.ts"],"names":["DEVICE_CONNECTIVITY_EVENT","NetInfoCellularGeneration","NetInfoStateType","isWindowPresent","window","connection","hasOwnProperty","navigator","mozConnection","webkitConnection","undefined","typeMapping","bluetooth","cellular","ethernet","none","other","unknown","wifi","wimax","mixed","effectiveTypeMapping","getCurrentState","_requestedInterface","isConnected","onLine","baseState","isInternetReachable","state","type","details","isConnectionExpensive","saveData","cellularGeneration","effectiveType","carrier","ipAddress","subnet","ssid","bssid","strength","frequency","linkSpeed","rxLinkSpeed","txLinkSpeed","handlers","nativeHandlers","RNCNetInfo","addListener","handler","nativeHandler","addEventListener","push","removeListeners","index","indexOf","removeEventListener","splice","requestedInterface","configure"],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {\n DEVICE_CONNECTIVITY_EVENT,\n NetInfoNativeModule,\n NetInfoNativeModuleState,\n} from './privateTypes';\nimport {\n NetInfoBluetoothState,\n NetInfoCellularGeneration,\n NetInfoCellularState,\n NetInfoEthernetState,\n NetInfoNoConnectionState,\n NetInfoOtherState,\n NetInfoState,\n NetInfoStateType,\n NetInfoUnknownState,\n NetInfoWifiState,\n NetInfoWimaxState,\n} from './types';\n\n// See https://wicg.github.io/netinfo/#dom-connectiontype\ntype ConnectionType =\n | 'bluetooth'\n | 'cellular'\n | 'ethernet'\n | 'mixed'\n | 'none'\n | 'other'\n | 'unknown'\n | 'wifi'\n | 'wimax';\n\n// See https://wicg.github.io/netinfo/#dom-effectiveconnectiontype\ntype ConnectionEffectiveType = '2g' | '3g' | '4g' | 'slow-2g';\n\n// https://wicg.github.io/netinfo/#dom-networkinformation-savedata\ntype ConnectionSaveData = boolean;\n\ninterface Events {\n change: Event;\n}\n\ninterface Connection {\n type: ConnectionType;\n effectiveType: ConnectionEffectiveType;\n saveData: ConnectionSaveData;\n addEventListener(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n removeEventListener(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n}\n\n// Create (optional) connection APIs on navigator\ndeclare global {\n interface Navigator {\n connection?: Connection;\n mozConnection?: Connection;\n webkitConnection?: Connection;\n }\n}\n// Use a constant test of this form because in SSR on next.js, optional chaining is not sufficient,\n// but this test correctly detects that window is not available and allows for conditionals before access\nconst isWindowPresent = typeof window !== 'undefined';\n\n// Check if window exists and if the browser supports the connection API\nconst connection = (isWindowPresent && !window.hasOwnProperty('tizen') && !window.hasOwnProperty('webOS'))\n ? window.navigator.connection ||\n window.navigator.mozConnection ||\n window.navigator.webkitConnection\n : undefined;\n\n// Map browser types to native types\nconst typeMapping: Record = {\n bluetooth: NetInfoStateType.bluetooth,\n cellular: NetInfoStateType.cellular,\n ethernet: NetInfoStateType.ethernet,\n none: NetInfoStateType.none,\n other: NetInfoStateType.other,\n unknown: NetInfoStateType.unknown,\n wifi: NetInfoStateType.wifi,\n wimax: NetInfoStateType.wimax,\n mixed: NetInfoStateType.other,\n};\nconst effectiveTypeMapping: Record<\n ConnectionEffectiveType,\n NetInfoCellularGeneration\n> = {\n '2g': NetInfoCellularGeneration['2g'],\n '3g': NetInfoCellularGeneration['3g'],\n '4g': NetInfoCellularGeneration['4g'],\n 'slow-2g': NetInfoCellularGeneration['2g'],\n};\n\n// Determine current state of connection\nconst getCurrentState = (\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _requestedInterface?: string,\n): Pick> => {\n const isConnected = isWindowPresent ? navigator.onLine : false;\n const baseState = {\n isInternetReachable: null,\n };\n\n // If we don't have a connection object, we return minimal information\n if (!connection) {\n if (isConnected) {\n const state: NetInfoOtherState = {\n ...baseState,\n isConnected: true,\n type: NetInfoStateType.other,\n details: {\n isConnectionExpensive: false,\n },\n };\n return state;\n }\n\n const state: NetInfoNoConnectionState = {\n ...baseState,\n isConnected: false,\n isInternetReachable: false,\n type: NetInfoStateType.none,\n details: null,\n };\n return state;\n }\n\n // Otherwise try to return detailed information\n const isConnectionExpensive = connection.saveData;\n const type: NetInfoStateType = connection.type\n ? typeMapping[connection.type]\n : isConnected\n ? NetInfoStateType.other\n : NetInfoStateType.unknown;\n\n if (type === NetInfoStateType.bluetooth) {\n const state: NetInfoBluetoothState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n },\n };\n return state;\n } else if (type === NetInfoStateType.cellular) {\n const state: NetInfoCellularState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n cellularGeneration:\n effectiveTypeMapping[connection.effectiveType] || null,\n carrier: null,\n },\n };\n return state;\n } else if (type === NetInfoStateType.ethernet) {\n const state: NetInfoEthernetState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n ipAddress: null,\n subnet: null,\n },\n };\n return state;\n } else if (type === NetInfoStateType.wifi) {\n const state: NetInfoWifiState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n ssid: null,\n bssid: null,\n strength: null,\n ipAddress: null,\n subnet: null,\n frequency: null,\n linkSpeed: null,\n rxLinkSpeed: null,\n txLinkSpeed: null,\n },\n };\n return state;\n } else if (type === NetInfoStateType.wimax) {\n const state: NetInfoWimaxState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n },\n };\n return state;\n } else if (type === NetInfoStateType.none) {\n const state: NetInfoNoConnectionState = {\n ...baseState,\n isConnected: false,\n isInternetReachable: false,\n type,\n details: null,\n };\n return state;\n } else if (type === NetInfoStateType.unknown) {\n const state: NetInfoUnknownState = {\n ...baseState,\n isConnected,\n isInternetReachable: null,\n type,\n details: null,\n };\n return state;\n }\n\n const state: NetInfoOtherState = {\n ...baseState,\n isConnected: true,\n type: NetInfoStateType.other,\n details: {\n isConnectionExpensive,\n },\n };\n return state;\n};\n\nconst handlers: ((state: NetInfoNativeModuleState) => void)[] = [];\nconst nativeHandlers: (() => void)[] = [];\n\nconst RNCNetInfo: NetInfoNativeModule = {\n addListener(type, handler): void {\n switch (type) {\n case DEVICE_CONNECTIVITY_EVENT: {\n const nativeHandler = (): void => {\n handler(getCurrentState());\n };\n\n if (connection) {\n connection.addEventListener('change', nativeHandler);\n } else {\n if (isWindowPresent) {\n window.addEventListener('online', nativeHandler, false);\n window.addEventListener('offline', nativeHandler, false);\n }\n }\n\n // Remember handlers\n handlers.push(handler);\n nativeHandlers.push(nativeHandler);\n\n break;\n }\n }\n },\n\n removeListeners(type, handler): void {\n switch (type) {\n case DEVICE_CONNECTIVITY_EVENT: {\n // Get native handler\n const index = handlers.indexOf(handler);\n const nativeHandler = nativeHandlers[index];\n\n if (connection) {\n connection.removeEventListener('change', nativeHandler);\n } else {\n if (isWindowPresent) {\n window.removeEventListener('online', nativeHandler);\n window.removeEventListener('offline', nativeHandler);\n }\n }\n\n // Remove handlers\n handlers.splice(index, 1);\n nativeHandlers.splice(index, 1);\n\n break;\n }\n }\n },\n\n async getCurrentState(requestedInterface): Promise {\n return getCurrentState(requestedInterface);\n },\n\n configure(): void {\n return;\n },\n};\n\nexport default RNCNetInfo;\n"]} +\ No newline at end of file ++{"version":3,"names":["DEVICE_CONNECTIVITY_EVENT","NetInfoCellularGeneration","NetInfoStateType","isWindowPresent","window","connection","hasOwnProperty","navigator","mozConnection","webkitConnection","undefined","typeMapping","bluetooth","cellular","ethernet","none","other","unknown","wifi","wimax","mixed","effectiveTypeMapping","getCurrentState","_requestedInterface","isConnected","onLine","baseState","isInternetReachable","state","type","details","isConnectionExpensive","saveData","cellularGeneration","effectiveType","carrier","ipAddress","subnet","ssid","bssid","strength","frequency","linkSpeed","rxLinkSpeed","txLinkSpeed","handlers","nativeHandlers","RNCNetInfo","addListener","handler","nativeHandler","addEventListener","push","removeListeners","index","indexOf","removeEventListener","splice","requestedInterface","configure"],"sources":["nativeModule.web.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {\n DEVICE_CONNECTIVITY_EVENT,\n NetInfoNativeModule,\n NetInfoNativeModuleState,\n} from './privateTypes';\nimport {\n NetInfoBluetoothState,\n NetInfoCellularGeneration,\n NetInfoCellularState,\n NetInfoEthernetState,\n NetInfoNoConnectionState,\n NetInfoOtherState,\n NetInfoState,\n NetInfoStateType,\n NetInfoUnknownState,\n NetInfoWifiState,\n NetInfoWimaxState,\n} from './types';\n\n// See https://wicg.github.io/netinfo/#dom-connectiontype\ntype ConnectionType =\n | 'bluetooth'\n | 'cellular'\n | 'ethernet'\n | 'mixed'\n | 'none'\n | 'other'\n | 'unknown'\n | 'wifi'\n | 'wimax';\n\n// See https://wicg.github.io/netinfo/#dom-effectiveconnectiontype\ntype ConnectionEffectiveType = '2g' | '3g' | '4g' | 'slow-2g';\n\n// https://wicg.github.io/netinfo/#dom-networkinformation-savedata\ntype ConnectionSaveData = boolean;\n\ninterface Events {\n change: Event;\n}\n\ninterface Connection {\n type: ConnectionType;\n effectiveType: ConnectionEffectiveType;\n saveData: ConnectionSaveData;\n addEventListener(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n removeEventListener(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n}\n\n// Create (optional) connection APIs on navigator\ndeclare global {\n interface Navigator {\n connection?: Connection;\n mozConnection?: Connection;\n webkitConnection?: Connection;\n }\n}\n// Use a constant test of this form because in SSR on next.js, optional chaining is not sufficient,\n// but this test correctly detects that window is not available and allows for conditionals before access\nconst isWindowPresent = typeof window !== 'undefined';\n\n// Check if window exists and if the browser supports the connection API\nconst connection = (isWindowPresent && !window.hasOwnProperty('tizen') && !window.hasOwnProperty('webOS'))\n ? window.navigator.connection ||\n window.navigator.mozConnection ||\n window.navigator.webkitConnection\n : undefined;\n\n// Map browser types to native types\nconst typeMapping: Record = {\n bluetooth: NetInfoStateType.bluetooth,\n cellular: NetInfoStateType.cellular,\n ethernet: NetInfoStateType.ethernet,\n none: NetInfoStateType.none,\n other: NetInfoStateType.other,\n unknown: NetInfoStateType.unknown,\n wifi: NetInfoStateType.wifi,\n wimax: NetInfoStateType.wimax,\n mixed: NetInfoStateType.other,\n};\nconst effectiveTypeMapping: Record<\n ConnectionEffectiveType,\n NetInfoCellularGeneration\n> = {\n '2g': NetInfoCellularGeneration['2g'],\n '3g': NetInfoCellularGeneration['3g'],\n '4g': NetInfoCellularGeneration['4g'],\n 'slow-2g': NetInfoCellularGeneration['2g'],\n};\n\n// Determine current state of connection\nconst getCurrentState = (\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _requestedInterface?: string,\n): Pick> => {\n const isConnected = isWindowPresent ? navigator.onLine : false;\n const baseState = {\n isInternetReachable: null,\n };\n\n // If we don't have a connection object, we return minimal information\n if (!connection) {\n if (isConnected) {\n const state: NetInfoOtherState = {\n ...baseState,\n isConnected: true,\n type: NetInfoStateType.other,\n details: {\n isConnectionExpensive: false,\n },\n };\n return state;\n }\n\n const state: NetInfoNoConnectionState = {\n ...baseState,\n isConnected: false,\n isInternetReachable: false,\n type: NetInfoStateType.none,\n details: null,\n };\n return state;\n }\n\n // Otherwise try to return detailed information\n const isConnectionExpensive = connection.saveData;\n const type: NetInfoStateType = connection.type\n ? typeMapping[connection.type]\n : isConnected\n ? NetInfoStateType.other\n : NetInfoStateType.unknown;\n\n if (type === NetInfoStateType.bluetooth) {\n const state: NetInfoBluetoothState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n },\n };\n return state;\n } else if (type === NetInfoStateType.cellular) {\n const state: NetInfoCellularState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n cellularGeneration:\n effectiveTypeMapping[connection.effectiveType] || null,\n carrier: null,\n },\n };\n return state;\n } else if (type === NetInfoStateType.ethernet) {\n const state: NetInfoEthernetState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n ipAddress: null,\n subnet: null,\n },\n };\n return state;\n } else if (type === NetInfoStateType.wifi) {\n const state: NetInfoWifiState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n ssid: null,\n bssid: null,\n strength: null,\n ipAddress: null,\n subnet: null,\n frequency: null,\n linkSpeed: null,\n rxLinkSpeed: null,\n txLinkSpeed: null,\n },\n };\n return state;\n } else if (type === NetInfoStateType.wimax) {\n const state: NetInfoWimaxState = {\n ...baseState,\n isConnected: true,\n type,\n details: {\n isConnectionExpensive,\n },\n };\n return state;\n } else if (type === NetInfoStateType.none) {\n const state: NetInfoNoConnectionState = {\n ...baseState,\n isConnected: false,\n isInternetReachable: false,\n type,\n details: null,\n };\n return state;\n } else if (type === NetInfoStateType.unknown) {\n const state: NetInfoUnknownState = {\n ...baseState,\n isConnected,\n isInternetReachable: null,\n type,\n details: null,\n };\n return state;\n }\n\n const state: NetInfoOtherState = {\n ...baseState,\n isConnected: true,\n type: NetInfoStateType.other,\n details: {\n isConnectionExpensive,\n },\n };\n return state;\n};\n\nconst handlers: ((state: NetInfoNativeModuleState) => void)[] = [];\nconst nativeHandlers: (() => void)[] = [];\n\nconst RNCNetInfo: NetInfoNativeModule = {\n addListener(type, handler): void {\n switch (type) {\n case DEVICE_CONNECTIVITY_EVENT: {\n const nativeHandler = (): void => {\n handler(getCurrentState());\n };\n\n if (connection) {\n connection.addEventListener('change', nativeHandler);\n } else {\n if (isWindowPresent) {\n window.addEventListener('online', nativeHandler, false);\n window.addEventListener('offline', nativeHandler, false);\n }\n }\n\n // Remember handlers\n handlers.push(handler);\n nativeHandlers.push(nativeHandler);\n\n break;\n }\n }\n },\n\n removeListeners(type, handler): void {\n switch (type) {\n case DEVICE_CONNECTIVITY_EVENT: {\n // Get native handler\n const index = handlers.indexOf(handler);\n const nativeHandler = nativeHandlers[index];\n\n if (connection) {\n connection.removeEventListener('change', nativeHandler);\n } else {\n if (isWindowPresent) {\n window.removeEventListener('online', nativeHandler);\n window.removeEventListener('offline', nativeHandler);\n }\n }\n\n // Remove handlers\n handlers.splice(index, 1);\n nativeHandlers.splice(index, 1);\n\n break;\n }\n }\n },\n\n async getCurrentState(requestedInterface): Promise {\n return getCurrentState(requestedInterface);\n },\n\n configure(): void {\n return;\n },\n};\n\nexport default RNCNetInfo;\n"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/privateTypes.js b/node_modules/@react-native-community/netinfo/lib/module/internal/privateTypes.js +index 4b88052..64831b1 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/privateTypes.js ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/privateTypes.js +@@ -6,5 +6,8 @@ + * + * @format + */ +-export const DEVICE_CONNECTIVITY_EVENT = 'netInfo.networkStatusDidChange'; // Certain properties are optional when sent by the native module and are handled by the JS code ++ ++export const DEVICE_CONNECTIVITY_EVENT = 'netInfo.networkStatusDidChange'; ++ ++// Certain properties are optional when sent by the native module and are handled by the JS code + //# sourceMappingURL=privateTypes.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/privateTypes.js.map b/node_modules/@react-native-community/netinfo/lib/module/internal/privateTypes.js.map +index db99fe3..9ef56cb 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/privateTypes.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/privateTypes.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["privateTypes.ts"],"names":["DEVICE_CONNECTIVITY_EVENT"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA,OAAO,MAAMA,yBAAyB,GAAG,gCAAlC,C,CAEP","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NetInfoConfiguration, NetInfoState} from './types';\n\nexport const DEVICE_CONNECTIVITY_EVENT = 'netInfo.networkStatusDidChange';\n\n// Certain properties are optional when sent by the native module and are handled by the JS code\nexport type NetInfoNativeModuleState = Pick<\n NetInfoState,\n Exclude\n> & {isInternetReachable?: boolean};\n\nexport interface Events {\n [DEVICE_CONNECTIVITY_EVENT]: NetInfoNativeModuleState;\n}\n\nexport interface NetInfoNativeModule {\n configure: (config: Partial) => void;\n getCurrentState: (\n requestedInterface?: string,\n ) => Promise;\n addListener(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n removeListeners(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n}\n\nexport type NetInfoInternetReachabilityChangeListener = (\n isInternetReachable: boolean | null | undefined,\n) => void;\n"]} +\ No newline at end of file ++{"version":3,"names":["DEVICE_CONNECTIVITY_EVENT"],"sources":["privateTypes.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NetInfoConfiguration, NetInfoState} from './types';\n\nexport const DEVICE_CONNECTIVITY_EVENT = 'netInfo.networkStatusDidChange';\n\n// Certain properties are optional when sent by the native module and are handled by the JS code\nexport type NetInfoNativeModuleState = Pick<\n NetInfoState,\n Exclude\n> & {isInternetReachable?: boolean};\n\nexport interface Events {\n [DEVICE_CONNECTIVITY_EVENT]: NetInfoNativeModuleState;\n}\n\nexport interface NetInfoNativeModule {\n configure: (config: Partial) => void;\n getCurrentState: (\n requestedInterface?: string,\n ) => Promise;\n addListener(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n removeListeners(\n type: K,\n listener: (event: Events[K]) => void,\n ): void;\n}\n\nexport type NetInfoInternetReachabilityChangeListener = (\n isInternetReachable: boolean | null | undefined,\n) => void;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,OAAO,MAAMA,yBAAyB,GAAG,gCAAgC;;AAEzE"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/state.js b/node_modules/@react-native-community/netinfo/lib/module/internal/state.js +index 305d286..7d12f6a 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/state.js ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/state.js +@@ -1,5 +1,6 @@ +-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +- ++function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } ++function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } ++function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } + /** + * Copyright (c) Facebook, Inc. and its affiliates. + * +@@ -8,72 +9,61 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope + * + * @format + */ ++ + import NativeInterface from './nativeInterface'; + import InternetReachability from './internetReachability'; + import * as PrivateTypes from './privateTypes'; + export default class State { + constructor(configuration) { + _defineProperty(this, "_nativeEventSubscription", null); +- + _defineProperty(this, "_subscriptions", new Set()); +- + _defineProperty(this, "_latestState", null); +- + _defineProperty(this, "_internetReachability", void 0); +- + _defineProperty(this, "_handleNativeStateUpdate", state => { + // Update the internet reachability module +- this._internetReachability.update(state); // Convert the state from native to JS shape +- +- +- const convertedState = this._convertState(state); // Update the listeners ++ this._internetReachability.update(state); + ++ // Convert the state from native to JS shape ++ const convertedState = this._convertState(state); + ++ // Update the listeners + this._latestState = convertedState; +- + this._subscriptions.forEach(handler => handler(convertedState)); + }); +- + _defineProperty(this, "_handleInternetReachabilityUpdate", isInternetReachable => { + if (!this._latestState) { + return; + } +- +- const nextState = { ...this._latestState, ++ const nextState = { ++ ...this._latestState, + isInternetReachable + }; + this._latestState = nextState; +- + this._subscriptions.forEach(handler => handler(nextState)); + }); +- + _defineProperty(this, "_fetchCurrentState", async requestedInterface => { +- const state = await NativeInterface.getCurrentState(requestedInterface); // Update the internet reachability module +- +- this._internetReachability.update(state); // Convert and store the new state +- ++ const state = await NativeInterface.getCurrentState(requestedInterface); + ++ // Update the internet reachability module ++ this._internetReachability.update(state); ++ // Convert and store the new state + const convertedState = this._convertState(state); +- + if (!requestedInterface) { + this._latestState = convertedState; +- + this._subscriptions.forEach(handler => handler(convertedState)); + } +- + return convertedState; + }); +- + _defineProperty(this, "_convertState", input => { + if (typeof input.isInternetReachable === 'boolean') { + return input; + } else { +- return { ...input, ++ return { ++ ...input, + isInternetReachable: this._internetReachability.currentState() + }; + } + }); +- + _defineProperty(this, "latest", requestedInterface => { + if (requestedInterface) { + return this._fetchCurrentState(requestedInterface); +@@ -83,42 +73,37 @@ export default class State { + return this._fetchCurrentState(); + } + }); +- + _defineProperty(this, "add", handler => { + // Add the subscription handler to our set +- this._subscriptions.add(handler); // Send it the latest data we have +- ++ this._subscriptions.add(handler); + ++ // Send it the latest data we have + if (this._latestState) { + handler(this._latestState); + } else { + this.latest().then(handler); + } + }); +- + _defineProperty(this, "remove", handler => { + this._subscriptions.delete(handler); + }); +- + _defineProperty(this, "tearDown", () => { + if (this._internetReachability) { + this._internetReachability.tearDown(); + } +- + if (this._nativeEventSubscription) { + this._nativeEventSubscription.remove(); + } +- + this._subscriptions.clear(); + }); +- + // Add the listener to the internet connectivity events +- this._internetReachability = new InternetReachability(configuration, this._handleInternetReachabilityUpdate); // Add the subscription to the native events ++ this._internetReachability = new InternetReachability(configuration, this._handleInternetReachabilityUpdate); + +- this._nativeEventSubscription = NativeInterface.eventEmitter.addListener(PrivateTypes.DEVICE_CONNECTIVITY_EVENT, this._handleNativeStateUpdate); // Fetch the current state from the native module ++ // Add the subscription to the native events ++ this._nativeEventSubscription = NativeInterface.eventEmitter.addListener(PrivateTypes.DEVICE_CONNECTIVITY_EVENT, this._handleNativeStateUpdate); + ++ // Fetch the current state from the native module + this._fetchCurrentState(); + } +- + } + //# sourceMappingURL=state.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/state.js.map b/node_modules/@react-native-community/netinfo/lib/module/internal/state.js.map +index e6e8249..053e584 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/state.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/state.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["state.ts"],"names":["NativeInterface","InternetReachability","PrivateTypes","State","constructor","configuration","Set","state","_internetReachability","update","convertedState","_convertState","_latestState","_subscriptions","forEach","handler","isInternetReachable","nextState","requestedInterface","getCurrentState","input","currentState","_fetchCurrentState","Promise","resolve","add","latest","then","delete","tearDown","_nativeEventSubscription","remove","clear","_handleInternetReachabilityUpdate","eventEmitter","addListener","DEVICE_CONNECTIVITY_EVENT","_handleNativeStateUpdate"],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeEventSubscription} from 'react-native';\nimport NativeInterface from './nativeInterface';\nimport InternetReachability from './internetReachability';\nimport * as Types from './types';\nimport * as PrivateTypes from './privateTypes';\n\nexport default class State {\n private _nativeEventSubscription: NativeEventSubscription | null = null;\n private _subscriptions = new Set();\n private _latestState: Types.NetInfoState | null = null;\n private _internetReachability: InternetReachability;\n\n constructor(configuration: Types.NetInfoConfiguration) {\n // Add the listener to the internet connectivity events\n this._internetReachability = new InternetReachability(\n configuration,\n this._handleInternetReachabilityUpdate,\n );\n\n // Add the subscription to the native events\n this._nativeEventSubscription = NativeInterface.eventEmitter.addListener(\n PrivateTypes.DEVICE_CONNECTIVITY_EVENT,\n this._handleNativeStateUpdate,\n );\n\n // Fetch the current state from the native module\n this._fetchCurrentState();\n }\n\n private _handleNativeStateUpdate = (\n state: PrivateTypes.NetInfoNativeModuleState,\n ): void => {\n // Update the internet reachability module\n this._internetReachability.update(state);\n\n // Convert the state from native to JS shape\n const convertedState = this._convertState(state);\n\n // Update the listeners\n this._latestState = convertedState;\n this._subscriptions.forEach((handler): void => handler(convertedState));\n };\n\n private _handleInternetReachabilityUpdate = (\n isInternetReachable: boolean | null | undefined,\n ): void => {\n if (!this._latestState) {\n return;\n }\n\n const nextState = {\n ...this._latestState,\n isInternetReachable,\n } as Types.NetInfoState;\n this._latestState = nextState;\n this._subscriptions.forEach((handler): void => handler(nextState));\n };\n\n public _fetchCurrentState = async (\n requestedInterface?: string,\n ): Promise => {\n const state = await NativeInterface.getCurrentState(requestedInterface);\n\n // Update the internet reachability module\n this._internetReachability.update(state);\n // Convert and store the new state\n const convertedState = this._convertState(state);\n if (!requestedInterface) {\n this._latestState = convertedState;\n this._subscriptions.forEach((handler): void => handler(convertedState));\n }\n\n return convertedState;\n };\n\n private _convertState = (\n input: PrivateTypes.NetInfoNativeModuleState,\n ): Types.NetInfoState => {\n if (typeof input.isInternetReachable === 'boolean') {\n return input as Types.NetInfoState;\n } else {\n return {\n ...input,\n isInternetReachable: this._internetReachability.currentState(),\n } as Types.NetInfoState;\n }\n };\n\n public latest = (\n requestedInterface?: string,\n ): Promise => {\n if (requestedInterface) {\n return this._fetchCurrentState(requestedInterface);\n } else if (this._latestState) {\n return Promise.resolve(this._latestState);\n } else {\n return this._fetchCurrentState();\n }\n };\n\n public add = (handler: Types.NetInfoChangeHandler): void => {\n // Add the subscription handler to our set\n this._subscriptions.add(handler);\n\n // Send it the latest data we have\n if (this._latestState) {\n handler(this._latestState);\n } else {\n this.latest().then(handler);\n }\n };\n\n public remove = (handler: Types.NetInfoChangeHandler): void => {\n this._subscriptions.delete(handler);\n };\n\n public tearDown = (): void => {\n if (this._internetReachability) {\n this._internetReachability.tearDown();\n }\n\n if (this._nativeEventSubscription) {\n this._nativeEventSubscription.remove();\n }\n\n this._subscriptions.clear();\n };\n}\n"]} +\ No newline at end of file ++{"version":3,"names":["NativeInterface","InternetReachability","PrivateTypes","State","constructor","configuration","_defineProperty","Set","state","_internetReachability","update","convertedState","_convertState","_latestState","_subscriptions","forEach","handler","isInternetReachable","nextState","requestedInterface","getCurrentState","input","currentState","_fetchCurrentState","Promise","resolve","add","latest","then","delete","tearDown","_nativeEventSubscription","remove","clear","_handleInternetReachabilityUpdate","eventEmitter","addListener","DEVICE_CONNECTIVITY_EVENT","_handleNativeStateUpdate"],"sources":["state.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nimport {NativeEventSubscription} from 'react-native';\nimport NativeInterface from './nativeInterface';\nimport InternetReachability from './internetReachability';\nimport * as Types from './types';\nimport * as PrivateTypes from './privateTypes';\n\nexport default class State {\n private _nativeEventSubscription: NativeEventSubscription | null = null;\n private _subscriptions = new Set();\n private _latestState: Types.NetInfoState | null = null;\n private _internetReachability: InternetReachability;\n\n constructor(configuration: Types.NetInfoConfiguration) {\n // Add the listener to the internet connectivity events\n this._internetReachability = new InternetReachability(\n configuration,\n this._handleInternetReachabilityUpdate,\n );\n\n // Add the subscription to the native events\n this._nativeEventSubscription = NativeInterface.eventEmitter.addListener(\n PrivateTypes.DEVICE_CONNECTIVITY_EVENT,\n this._handleNativeStateUpdate,\n );\n\n // Fetch the current state from the native module\n this._fetchCurrentState();\n }\n\n private _handleNativeStateUpdate = (\n state: PrivateTypes.NetInfoNativeModuleState,\n ): void => {\n // Update the internet reachability module\n this._internetReachability.update(state);\n\n // Convert the state from native to JS shape\n const convertedState = this._convertState(state);\n\n // Update the listeners\n this._latestState = convertedState;\n this._subscriptions.forEach((handler): void => handler(convertedState));\n };\n\n private _handleInternetReachabilityUpdate = (\n isInternetReachable: boolean | null | undefined,\n ): void => {\n if (!this._latestState) {\n return;\n }\n\n const nextState = {\n ...this._latestState,\n isInternetReachable,\n } as Types.NetInfoState;\n this._latestState = nextState;\n this._subscriptions.forEach((handler): void => handler(nextState));\n };\n\n public _fetchCurrentState = async (\n requestedInterface?: string,\n ): Promise => {\n const state = await NativeInterface.getCurrentState(requestedInterface);\n\n // Update the internet reachability module\n this._internetReachability.update(state);\n // Convert and store the new state\n const convertedState = this._convertState(state);\n if (!requestedInterface) {\n this._latestState = convertedState;\n this._subscriptions.forEach((handler): void => handler(convertedState));\n }\n\n return convertedState;\n };\n\n private _convertState = (\n input: PrivateTypes.NetInfoNativeModuleState,\n ): Types.NetInfoState => {\n if (typeof input.isInternetReachable === 'boolean') {\n return input as Types.NetInfoState;\n } else {\n return {\n ...input,\n isInternetReachable: this._internetReachability.currentState(),\n } as Types.NetInfoState;\n }\n };\n\n public latest = (\n requestedInterface?: string,\n ): Promise => {\n if (requestedInterface) {\n return this._fetchCurrentState(requestedInterface);\n } else if (this._latestState) {\n return Promise.resolve(this._latestState);\n } else {\n return this._fetchCurrentState();\n }\n };\n\n public add = (handler: Types.NetInfoChangeHandler): void => {\n // Add the subscription handler to our set\n this._subscriptions.add(handler);\n\n // Send it the latest data we have\n if (this._latestState) {\n handler(this._latestState);\n } else {\n this.latest().then(handler);\n }\n };\n\n public remove = (handler: Types.NetInfoChangeHandler): void => {\n this._subscriptions.delete(handler);\n };\n\n public tearDown = (): void => {\n if (this._internetReachability) {\n this._internetReachability.tearDown();\n }\n\n if (this._nativeEventSubscription) {\n this._nativeEventSubscription.remove();\n }\n\n this._subscriptions.clear();\n };\n}\n"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/types.js b/node_modules/@react-native-community/netinfo/lib/module/internal/types.js +index ac35a3d..ebe70e5 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/types.js ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/types.js +@@ -6,9 +6,8 @@ + * + * @format + */ +-export let NetInfoStateType; + +-(function (NetInfoStateType) { ++export let NetInfoStateType = /*#__PURE__*/function (NetInfoStateType) { + NetInfoStateType["unknown"] = "unknown"; + NetInfoStateType["none"] = "none"; + NetInfoStateType["cellular"] = "cellular"; +@@ -18,14 +17,13 @@ export let NetInfoStateType; + NetInfoStateType["wimax"] = "wimax"; + NetInfoStateType["vpn"] = "vpn"; + NetInfoStateType["other"] = "other"; +-})(NetInfoStateType || (NetInfoStateType = {})); +- +-export let NetInfoCellularGeneration; +- +-(function (NetInfoCellularGeneration) { ++ return NetInfoStateType; ++}({}); ++export let NetInfoCellularGeneration = /*#__PURE__*/function (NetInfoCellularGeneration) { + NetInfoCellularGeneration["2g"] = "2g"; + NetInfoCellularGeneration["3g"] = "3g"; + NetInfoCellularGeneration["4g"] = "4g"; + NetInfoCellularGeneration["5g"] = "5g"; +-})(NetInfoCellularGeneration || (NetInfoCellularGeneration = {})); ++ return NetInfoCellularGeneration; ++}({}); + //# sourceMappingURL=types.js.map +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/module/internal/types.js.map b/node_modules/@react-native-community/netinfo/lib/module/internal/types.js.map +index 340dc4a..afd20ec 100644 +--- a/node_modules/@react-native-community/netinfo/lib/module/internal/types.js.map ++++ b/node_modules/@react-native-community/netinfo/lib/module/internal/types.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["types.ts"],"names":["NetInfoStateType","NetInfoCellularGeneration"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,WAAYA,gBAAZ;;WAAYA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;GAAAA,gB,KAAAA,gB;;AAcZ,WAAYC,yBAAZ;;WAAYA,yB;AAAAA,EAAAA,yB;AAAAA,EAAAA,yB;AAAAA,EAAAA,yB;AAAAA,EAAAA,yB;GAAAA,yB,KAAAA,yB","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nexport enum NetInfoStateType {\n unknown = 'unknown',\n none = 'none',\n cellular = 'cellular',\n wifi = 'wifi',\n bluetooth = 'bluetooth',\n ethernet = 'ethernet',\n wimax = 'wimax',\n vpn = 'vpn',\n other = 'other',\n}\n\nexport type NetInfoMethodType = 'HEAD' | 'GET';\n\nexport enum NetInfoCellularGeneration {\n '2g' = '2g',\n '3g' = '3g',\n '4g' = '4g',\n '5g' = '5g',\n}\n\nexport interface NetInfoConnectedDetails {\n isConnectionExpensive: boolean;\n}\n\ninterface NetInfoConnectedState<\n T extends NetInfoStateType,\n D extends Record = Record\n> {\n type: T;\n isConnected: true;\n isInternetReachable: boolean | null;\n details: D & NetInfoConnectedDetails;\n isWifiEnabled?: boolean;\n}\n\ninterface NetInfoDisconnectedState {\n type: T;\n isConnected: false;\n isInternetReachable: false;\n details: null;\n isWifiEnabled?: boolean;\n}\n\nexport interface NetInfoUnknownState {\n type: NetInfoStateType.unknown;\n isConnected: boolean | null;\n isInternetReachable: null;\n details: null;\n isWifiEnabled?: boolean;\n}\n\nexport type NetInfoNoConnectionState = NetInfoDisconnectedState<\n NetInfoStateType.none\n>;\nexport type NetInfoDisconnectedStates =\n | NetInfoUnknownState\n | NetInfoNoConnectionState;\n\nexport type NetInfoCellularState = NetInfoConnectedState<\n NetInfoStateType.cellular,\n {\n cellularGeneration: NetInfoCellularGeneration | null;\n carrier: string | null;\n }\n>;\nexport type NetInfoWifiState = NetInfoConnectedState<\n NetInfoStateType.wifi,\n {\n ssid: string | null;\n bssid: string | null;\n strength: number | null;\n ipAddress: string | null;\n subnet: string | null;\n frequency: number | null;\n linkSpeed: number | null;\n rxLinkSpeed: number | null;\n txLinkSpeed: number | null;\n }\n>;\nexport type NetInfoBluetoothState = NetInfoConnectedState<\n NetInfoStateType.bluetooth\n>;\nexport type NetInfoEthernetState = NetInfoConnectedState<\n NetInfoStateType.ethernet,\n {\n ipAddress: string | null;\n subnet: string | null;\n }\n>;\nexport type NetInfoWimaxState = NetInfoConnectedState;\nexport type NetInfoVpnState = NetInfoConnectedState;\nexport type NetInfoOtherState = NetInfoConnectedState;\nexport type NetInfoConnectedStates =\n | NetInfoCellularState\n | NetInfoWifiState\n | NetInfoBluetoothState\n | NetInfoEthernetState\n | NetInfoWimaxState\n | NetInfoVpnState\n | NetInfoOtherState;\n\nexport type NetInfoState = NetInfoDisconnectedStates | NetInfoConnectedStates;\n\nexport type NetInfoChangeHandler = (state: NetInfoState) => void;\nexport type NetInfoSubscription = () => void;\n\nexport interface NetInfoConfiguration {\n reachabilityUrl: string;\n reachabilityMethod?: NetInfoMethodType;\n reachabilityHeaders?: Record;\n reachabilityTest: (response: Response) => Promise;\n reachabilityLongTimeout: number;\n reachabilityShortTimeout: number;\n reachabilityRequestTimeout: number;\n reachabilityShouldRun: () => boolean;\n shouldFetchWiFiSSID: boolean;\n useNativeReachability: boolean;\n}\n"]} +\ No newline at end of file ++{"version":3,"names":["NetInfoStateType","NetInfoCellularGeneration"],"sources":["types.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nexport enum NetInfoStateType {\n unknown = 'unknown',\n none = 'none',\n cellular = 'cellular',\n wifi = 'wifi',\n bluetooth = 'bluetooth',\n ethernet = 'ethernet',\n wimax = 'wimax',\n vpn = 'vpn',\n other = 'other',\n}\n\nexport type NetInfoMethodType = 'HEAD' | 'GET';\n\nexport enum NetInfoCellularGeneration {\n '2g' = '2g',\n '3g' = '3g',\n '4g' = '4g',\n '5g' = '5g',\n}\n\nexport interface NetInfoConnectedDetails {\n isConnectionExpensive: boolean;\n}\n\ninterface NetInfoConnectedState<\n T extends NetInfoStateType,\n D extends Record = Record,\n> {\n type: T;\n isConnected: true;\n isInternetReachable: boolean | null;\n details: D & NetInfoConnectedDetails;\n isWifiEnabled?: boolean;\n}\n\ninterface NetInfoDisconnectedState {\n type: T;\n isConnected: false;\n isInternetReachable: false;\n details: null;\n isWifiEnabled?: boolean;\n}\n\nexport interface NetInfoUnknownState {\n type: NetInfoStateType.unknown;\n isConnected: boolean | null;\n isInternetReachable: null;\n details: null;\n isWifiEnabled?: boolean;\n}\n\nexport type NetInfoNoConnectionState =\n NetInfoDisconnectedState;\nexport type NetInfoDisconnectedStates =\n | NetInfoUnknownState\n | NetInfoNoConnectionState;\n\nexport type NetInfoCellularState = NetInfoConnectedState<\n NetInfoStateType.cellular,\n {\n cellularGeneration: NetInfoCellularGeneration | null;\n carrier: string | null;\n }\n>;\nexport type NetInfoWifiState = NetInfoConnectedState<\n NetInfoStateType.wifi,\n {\n ssid: string | null;\n bssid: string | null;\n strength: number | null;\n ipAddress: string | null;\n subnet: string | null;\n frequency: number | null;\n linkSpeed: number | null;\n rxLinkSpeed: number | null;\n txLinkSpeed: number | null;\n }\n>;\nexport type NetInfoBluetoothState =\n NetInfoConnectedState;\nexport type NetInfoEthernetState = NetInfoConnectedState<\n NetInfoStateType.ethernet,\n {\n ipAddress: string | null;\n subnet: string | null;\n }\n>;\nexport type NetInfoWimaxState = NetInfoConnectedState;\nexport type NetInfoVpnState = NetInfoConnectedState;\nexport type NetInfoOtherState = NetInfoConnectedState;\nexport type NetInfoConnectedStates =\n | NetInfoCellularState\n | NetInfoWifiState\n | NetInfoBluetoothState\n | NetInfoEthernetState\n | NetInfoWimaxState\n | NetInfoVpnState\n | NetInfoOtherState;\n\nexport type NetInfoState = NetInfoDisconnectedStates | NetInfoConnectedStates;\n\nexport type NetInfoChangeHandler = (state: NetInfoState) => void;\nexport type NetInfoSubscription = () => void;\n\nexport interface NetInfoConfiguration {\n reachabilityUrl: string;\n reachabilityMethod?: NetInfoMethodType;\n reachabilityHeaders?: Record;\n reachabilityTest: (response: Response) => Promise;\n reachabilityLongTimeout: number;\n reachabilityShortTimeout: number;\n reachabilityRequestTimeout: number;\n reachabilityShouldRun: () => boolean;\n shouldFetchWiFiSSID: boolean;\n useNativeReachability: boolean;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAYA,gBAAgB,0BAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAA,OAAhBA,gBAAgB;AAAA;AAc5B,WAAYC,yBAAyB,0BAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAA,OAAzBA,yBAAyB;AAAA"} +\ No newline at end of file +diff --git a/node_modules/@react-native-community/netinfo/lib/typescript/src/internal/NativeRNCNetInfo.d.ts b/node_modules/@react-native-community/netinfo/lib/typescript/src/internal/NativeRNCNetInfo.d.ts +new file mode 100644 +index 0000000..b5db384 +--- /dev/null ++++ b/node_modules/@react-native-community/netinfo/lib/typescript/src/internal/NativeRNCNetInfo.d.ts +@@ -0,0 +1,9 @@ ++import type { TurboModule } from 'react-native'; ++export interface Spec extends TurboModule { ++ configure: (config: Object) => void; ++ getCurrentState(requestedInterface?: string): Promise; ++ addListener: (eventName: string) => void; ++ removeListeners: (count: number) => void; ++} ++declare const _default: Spec; ++export default _default; +diff --git a/node_modules/@react-native-community/netinfo/lib/typescript/src/internal/nativeInterface.d.ts b/node_modules/@react-native-community/netinfo/lib/typescript/src/internal/nativeInterface.d.ts +index 6982220..b515270 100644 +--- a/node_modules/@react-native-community/netinfo/lib/typescript/src/internal/nativeInterface.d.ts ++++ b/node_modules/@react-native-community/netinfo/lib/typescript/src/internal/nativeInterface.d.ts +@@ -8,10 +8,10 @@ + */ + import { NativeEventEmitter } from 'react-native'; + declare const _default: { +- eventEmitter: NativeEventEmitter; + configure: (config: Partial) => void; ++ addListener: (type: K, listener: (event: import("./privateTypes").Events[K]) => void) => void; ++ removeListeners: (type: K_1, listener: (event: import("./privateTypes").Events[K_1]) => void) => void; + getCurrentState: (requestedInterface?: string | undefined) => Promise; +- addListener(type: K, listener: (event: import("./privateTypes").Events[K]) => void): void; +- removeListeners(type: K_1, listener: (event: import("./privateTypes").Events[K_1]) => void): void; ++ readonly eventEmitter: NativeEventEmitter; + }; + export default _default; +diff --git a/node_modules/@react-native-community/netinfo/package.json b/node_modules/@react-native-community/netinfo/package.json +index 3c80db2..61e6564 100644 +--- a/node_modules/@react-native-community/netinfo/package.json ++++ b/node_modules/@react-native-community/netinfo/package.json +@@ -48,6 +48,7 @@ + "network info" + ], + "peerDependencies": { ++ "react": "*", + "react-native": ">=0.59" + }, + "dependencies": {}, +@@ -121,5 +122,13 @@ + "yarn eslint --fix", + "git add" + ] ++ }, ++ "codegenConfig": { ++ "name": "RNCNetInfoSpec", ++ "type": "modules", ++ "jsSrcsDir": "src/internal", ++ "android": { ++ "javaPackageName": "com.reactnativecommunity.netinfo" ++ } + } + } +diff --git a/node_modules/@react-native-community/netinfo/react-native-netinfo.podspec b/node_modules/@react-native-community/netinfo/react-native-netinfo.podspec +index e34e728..9090eb1 100644 +--- a/node_modules/@react-native-community/netinfo/react-native-netinfo.podspec ++++ b/node_modules/@react-native-community/netinfo/react-native-netinfo.podspec +@@ -2,6 +2,8 @@ require 'json' + + package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) + ++is_new_arch_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1' ++ + Pod::Spec.new do |s| + s.name = "react-native-netinfo" + s.version = package['version'] +@@ -13,7 +15,11 @@ Pod::Spec.new do |s| + s.platforms = { :ios => "9.0", :tvos => "9.2", :osx => "10.14" } + + s.source = { :git => "https://github.com/react-native-community/react-native-netinfo.git", :tag => "v#{s.version}" } +- s.source_files = "ios/**/*.{h,m}" ++ s.source_files = "ios/**/*.{h,m,mm,swift}" + +- s.dependency 'React-Core' ++ if is_new_arch_enabled ++ install_modules_dependencies(s) ++ else ++ s.dependency 'React-Core' ++ end + end +diff --git a/node_modules/@react-native-community/netinfo/src/__tests__/eventListenerCallbacks.spec.ts b/node_modules/@react-native-community/netinfo/src/__tests__/eventListenerCallbacks.spec.ts +index 4ba58e9..9f87df7 100644 +--- a/node_modules/@react-native-community/netinfo/src/__tests__/eventListenerCallbacks.spec.ts ++++ b/node_modules/@react-native-community/netinfo/src/__tests__/eventListenerCallbacks.spec.ts +@@ -32,7 +32,7 @@ beforeAll(() => { + + describe('@react-native-community/netinfo listener', () => { + describe('Event listener callbacks', () => { +- it('should call the listener on listening', done => { ++ it('should call the listener on listening', (done) => { + const listener = jest.fn(); + NetInfo.addEventListener(listener); + +@@ -42,7 +42,7 @@ describe('@react-native-community/netinfo listener', () => { + }, 0); + }); + +- it('should call the listener on listening with multiple listeners', done => { ++ it('should call the listener on listening with multiple listeners', (done) => { + const listener1 = jest.fn(); + const listener2 = jest.fn(); + NetInfo.addEventListener(listener1); +@@ -303,7 +303,7 @@ describe('@react-native-community/netinfo listener', () => { + ]; + } + +- dataProvider().forEach(testCase => { ++ dataProvider().forEach((testCase) => { + it(testCase.description, () => { + NetInfo.configure(testCase.configuration); + +diff --git a/node_modules/@react-native-community/netinfo/src/__tests__/fetch.spec.ts b/node_modules/@react-native-community/netinfo/src/__tests__/fetch.spec.ts +index 4b56e4f..b790659 100644 +--- a/node_modules/@react-native-community/netinfo/src/__tests__/fetch.spec.ts ++++ b/node_modules/@react-native-community/netinfo/src/__tests__/fetch.spec.ts +@@ -69,7 +69,7 @@ describe('@react-native-community/netinfo fetch', () => { + ]; + } + +- dataProvider().forEach(testCase => { ++ dataProvider().forEach((testCase) => { + it(testCase.description, () => { + mockNativeModule.getCurrentState.mockResolvedValue( + testCase.expectedConnectionInfo, +@@ -131,7 +131,7 @@ describe('@react-native-community/netinfo fetch', () => { + ]; + } + +- dataProvider().forEach(testCase => { ++ dataProvider().forEach((testCase) => { + it(testCase.description, () => { + mockNativeModule.getCurrentState.mockResolvedValue( + testCase.expectedConnectionInfo, +@@ -193,7 +193,7 @@ describe('@react-native-community/netinfo fetch', () => { + ]; + } + +- dataProvider().forEach(testCase => { ++ dataProvider().forEach((testCase) => { + it(testCase.description, () => { + mockNativeModule.getCurrentState.mockResolvedValue( + testCase.expectedConnectionInfo, +@@ -255,7 +255,7 @@ describe('@react-native-community/netinfo fetch', () => { + ]; + } + +- dataProvider().forEach(testCase => { ++ dataProvider().forEach((testCase) => { + it(testCase.description, () => { + mockNativeModule.getCurrentState.mockResolvedValue( + testCase.expectedConnectionInfo, +@@ -317,7 +317,7 @@ describe('@react-native-community/netinfo fetch', () => { + ]; + } + +- dataProvider().forEach(testCase => { ++ dataProvider().forEach((testCase) => { + it(testCase.description, () => { + mockNativeModule.getCurrentState.mockResolvedValue( + testCase.expectedConnectionInfo, +@@ -361,7 +361,7 @@ describe('@react-native-community/netinfo fetch', () => { + ]; + } + +- dataProvider().forEach(testCase => { ++ dataProvider().forEach((testCase) => { + it(testCase.description, () => { + mockNativeModule.getCurrentState.mockResolvedValue( + testCase.expectedConnectionInfo, +@@ -455,7 +455,7 @@ describe('@react-native-community/netinfo fetch', () => { + ]; + } + +- dataProvider().forEach(testCase => { ++ dataProvider().forEach((testCase) => { + it(testCase.description, async () => { + mockNativeModule.getCurrentState.mockResolvedValue( + testCase.expectedConnectionInfo, +diff --git a/node_modules/@react-native-community/netinfo/src/internal/NativeRNCNetInfo.ts b/node_modules/@react-native-community/netinfo/src/internal/NativeRNCNetInfo.ts +new file mode 100644 +index 0000000..deada41 +--- /dev/null ++++ b/node_modules/@react-native-community/netinfo/src/internal/NativeRNCNetInfo.ts +@@ -0,0 +1,14 @@ ++/* eslint-disable @typescript-eslint/ban-types */ ++import type { TurboModule } from 'react-native'; ++import { TurboModuleRegistry } from 'react-native'; ++ ++export interface Spec extends TurboModule { ++ configure: (config: Object) => void; ++ getCurrentState(requestedInterface?: string): Promise; ++ // Events ++ addListener: (eventName: string) => void; ++ removeListeners: (count: number) => void; ++} ++ ++export default TurboModuleRegistry.getEnforcing('RNCNetInfo'); ++ +diff --git a/node_modules/@react-native-community/netinfo/src/internal/internetReachability.ts b/node_modules/@react-native-community/netinfo/src/internal/internetReachability.ts +index 5cf797b..f9940a5 100644 +--- a/node_modules/@react-native-community/netinfo/src/internal/internetReachability.ts ++++ b/node_modules/@react-native-community/netinfo/src/internal/internetReachability.ts +@@ -19,7 +19,8 @@ export default class InternetReachability { + private _configuration: Types.NetInfoConfiguration; + private _listener: PrivateTypes.NetInfoInternetReachabilityChangeListener; + private _isInternetReachable: boolean | null | undefined = undefined; +- private _currentInternetReachabilityCheckHandler: InternetReachabilityCheckHandler | null = null; ++ private _currentInternetReachabilityCheckHandler: InternetReachabilityCheckHandler | null = ++ null; + private _currentTimeoutHandle: ReturnType | null = null; + + constructor( +@@ -60,7 +61,8 @@ export default class InternetReachability { + this._setIsInternetReachable(null); + } + // Start a network request to check for internet +- this._currentInternetReachabilityCheckHandler = this._checkInternetReachability(); ++ this._currentInternetReachabilityCheckHandler = ++ this._checkInternetReachability(); + } else { + // If we don't expect a connection or don't run reachability check, just change the state to "false" + this._setIsInternetReachable(false); +@@ -79,9 +81,9 @@ export default class InternetReachability { + + // Create promise that will reject after the request timeout has been reached + let timeoutHandle: ReturnType; +- const timeoutPromise = new Promise((): void => { ++ const timeoutPromise = new Promise((_, reject): void => { + timeoutHandle = setTimeout( +- (): void => controller.abort('timedout'), ++ (): void => reject('timedout'), + this._configuration.reachabilityRequestTimeout, + ); + }); +@@ -98,28 +100,37 @@ export default class InternetReachability { + timeoutPromise, + cancelPromise, + ]) +- .then( +- (response): Promise => { +- return this._configuration.reachabilityTest(response); +- }, +- ) +- .then( +- (result): void => { +- this._setIsInternetReachable(result); +- const nextTimeoutInterval = this._isInternetReachable +- ? this._configuration.reachabilityLongTimeout +- : this._configuration.reachabilityShortTimeout; ++ .then((response): Promise => { ++ return this._configuration.reachabilityTest(response); ++ }) ++ .then((result): void => { ++ this._setIsInternetReachable(result); ++ const nextTimeoutInterval = this._isInternetReachable ++ ? this._configuration.reachabilityLongTimeout ++ : this._configuration.reachabilityShortTimeout; ++ this._currentTimeoutHandle = setTimeout( ++ this._checkInternetReachability, ++ nextTimeoutInterval, ++ ); ++ }) ++ .catch((error: Error | 'timedout' | 'canceled'): void => { ++ if (error !== 'canceled') { ++ this._setIsInternetReachable(false); + this._currentTimeoutHandle = setTimeout( + this._checkInternetReachability, +- nextTimeoutInterval, ++ this._configuration.reachabilityShortTimeout, + ); +- }, +- ) ++ } ++ }) + .catch( + (error: Error | 'timedout' | 'canceled'): void => { + if ('canceled' === error) { + controller.abort(); + } else { ++ if ('timedout' === error) { ++ controller.abort(); ++ } ++ + this._setIsInternetReachable(false); + this._currentTimeoutHandle = setTimeout( + this._checkInternetReachability, +diff --git a/node_modules/@react-native-community/netinfo/src/internal/nativeInterface.ts b/node_modules/@react-native-community/netinfo/src/internal/nativeInterface.ts +index c0d9ec4..912a903 100644 +--- a/node_modules/@react-native-community/netinfo/src/internal/nativeInterface.ts ++++ b/node_modules/@react-native-community/netinfo/src/internal/nativeInterface.ts +@@ -28,8 +28,12 @@ If none of these fix the issue, please open an issue on the Github repository: h + * JavaScript code and the tests + */ + let nativeEventEmitter: NativeEventEmitter | null = null; ++ + export default { +- ...RNCNetInfo, ++ configure: RNCNetInfo.configure, ++ addListener: RNCNetInfo.addListener, ++ removeListeners: RNCNetInfo.removeListeners, ++ getCurrentState: RNCNetInfo.getCurrentState, + get eventEmitter(): NativeEventEmitter { + if (!nativeEventEmitter) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment +diff --git a/node_modules/@react-native-community/netinfo/src/internal/nativeInterface.web.ts b/node_modules/@react-native-community/netinfo/src/internal/nativeInterface.web.ts +index b665235..41863a4 100644 +--- a/node_modules/@react-native-community/netinfo/src/internal/nativeInterface.web.ts ++++ b/node_modules/@react-native-community/netinfo/src/internal/nativeInterface.web.ts +@@ -14,12 +14,9 @@ import {DEVICE_CONNECTIVITY_EVENT} from './privateTypes'; + const nativeEventEmitter = new NativeEventEmitter(); + + // Listen to connectivity events +-RNCNetInfo.addListener( +- DEVICE_CONNECTIVITY_EVENT, +- (event): void => { +- nativeEventEmitter.emit(DEVICE_CONNECTIVITY_EVENT, event); +- }, +-); ++RNCNetInfo.addListener(DEVICE_CONNECTIVITY_EVENT, (event): void => { ++ nativeEventEmitter.emit(DEVICE_CONNECTIVITY_EVENT, event); ++}); + + export default { + ...RNCNetInfo, +diff --git a/node_modules/@react-native-community/netinfo/src/internal/nativeModule.ts b/node_modules/@react-native-community/netinfo/src/internal/nativeModule.ts +index 206a69a..7aff149 100644 +--- a/node_modules/@react-native-community/netinfo/src/internal/nativeModule.ts ++++ b/node_modules/@react-native-community/netinfo/src/internal/nativeModule.ts +@@ -10,6 +10,16 @@ + import {NativeModules} from 'react-native'; + import {NetInfoNativeModule} from './privateTypes'; + +-const RNCNetInfo: NetInfoNativeModule = NativeModules.RNCNetInfo; ++// React Native sets `__turboModuleProxy` on global when TurboModules are enabled. ++// Currently, this is the recommended way to detect TurboModules. ++// https://reactnative.dev/docs/the-new-architecture/backward-compatibility-turbomodules#unify-the-javascript-specs ++// eslint-disable-next-line @typescript-eslint/ban-ts-comment ++// @ts-ignore ++const isTurboModuleEnabled = global.__turboModuleProxy != null; ++ ++const RNCNetInfo: NetInfoNativeModule = isTurboModuleEnabled ++ ? // eslint-disable-next-line @typescript-eslint/no-var-requires ++ require('./NativeRNCNetInfo').default ++ : NativeModules.RNCNetInfo; + + export default RNCNetInfo; +diff --git a/node_modules/@react-native-community/netinfo/src/internal/types.ts b/node_modules/@react-native-community/netinfo/src/internal/types.ts +index 427db82..6a8f94a 100644 +--- a/node_modules/@react-native-community/netinfo/src/internal/types.ts ++++ b/node_modules/@react-native-community/netinfo/src/internal/types.ts +@@ -34,7 +34,7 @@ export interface NetInfoConnectedDetails { + + interface NetInfoConnectedState< + T extends NetInfoStateType, +- D extends Record = Record ++ D extends Record = Record, + > { + type: T; + isConnected: true; +@@ -59,9 +59,8 @@ export interface NetInfoUnknownState { + isWifiEnabled?: boolean; + } + +-export type NetInfoNoConnectionState = NetInfoDisconnectedState< +- NetInfoStateType.none +->; ++export type NetInfoNoConnectionState = ++ NetInfoDisconnectedState; + export type NetInfoDisconnectedStates = + | NetInfoUnknownState + | NetInfoNoConnectionState; +@@ -87,9 +86,8 @@ export type NetInfoWifiState = NetInfoConnectedState< + txLinkSpeed: number | null; + } + >; +-export type NetInfoBluetoothState = NetInfoConnectedState< +- NetInfoStateType.bluetooth +->; ++export type NetInfoBluetoothState = ++ NetInfoConnectedState; + export type NetInfoEthernetState = NetInfoConnectedState< + NetInfoStateType.ethernet, + { +diff --git a/node_modules/@react-native-community/netinfo/windows/.npmignore b/node_modules/@react-native-community/netinfo/windows/.npmignore +deleted file mode 100644 +index 878f7ba..0000000 +--- a/node_modules/@react-native-community/netinfo/windows/.npmignore ++++ /dev/null +@@ -1,92 +0,0 @@ +-*AppPackages* +-*BundleArtifacts* +- +-#OS junk files +-[Tt]humbs.db +-*.DS_Store +- +-#Visual Studio files +-*.[Oo]bj +-*.user +-*.aps +-*.pch +-*.vspscc +-*.vssscc +-*_i.c +-*_p.c +-*.ncb +-*.suo +-*.tlb +-*.tlh +-*.bak +-*.[Cc]ache +-*.ilk +-*.log +-*.lib +-*.sbr +-*.sdf +-*.opensdf +-*.opendb +-*.unsuccessfulbuild +-ipch/ +-[Oo]bj/ +-[Bb]in +-[Dd]ebug*/ +-[Rr]elease*/ +-Ankh.NoLoad +- +-# Visual C++ cache files +-ipch/ +-*.aps +-*.ncb +-*.opendb +-*.opensdf +-*.sdf +-*.cachefile +-*.VC.db +-*.VC.VC.opendb +- +-#MonoDevelop +-*.pidb +-*.userprefs +- +-#Tooling +-_ReSharper*/ +-*.resharper +-[Tt]est[Rr]esult* +-*.sass-cache +- +-#Project files +-[Bb]uild/ +- +-#Subversion files +-.svn +- +-# Office Temp Files +-~$* +- +-# vim Temp Files +-*~ +- +-#NuGet +-packages/ +-*.nupkg +- +-#ncrunch +-*ncrunch* +-*crunch*.local.xml +- +-# visual studio database projects +-*.dbmdl +- +-#Test files +-*.testsettings +- +-#Other files +-*.DotSettings +-.vs/ +-*project.lock.json +- +-#Files generated by the VS build +-**/Generated Files/** +- diff --git a/patches/@react-navigation+stack+6.3.16+003+fixKeyboardFlicker.patch b/patches/@react-navigation+stack+6.3.16+003+fixKeyboardFlicker.patch new file mode 100644 index 000000000000..2b2819f098d2 --- /dev/null +++ b/patches/@react-navigation+stack+6.3.16+003+fixKeyboardFlicker.patch @@ -0,0 +1,13 @@ +diff --git a/node_modules/@react-navigation/stack/src/views/Stack/Card.tsx b/node_modules/@react-navigation/stack/src/views/Stack/Card.tsx +index 913218e..ebc2f93 100755 +--- a/node_modules/@react-navigation/stack/src/views/Stack/Card.tsx ++++ b/node_modules/@react-navigation/stack/src/views/Stack/Card.tsx +@@ -517,7 +517,7 @@ export default class Card extends React.Component { + // Make sure that this view isn't removed. If this view is removed, our style with animated value won't apply + collapsable={false} + /> +- ++ + {overlayEnabled ? ( + + {overlay({ style: overlayStyle })} diff --git a/patches/@rnmapbox+maps+10.1.11.patch b/patches/@rnmapbox+maps+10.1.11.patch new file mode 100644 index 000000000000..9f2df5f4ee6e --- /dev/null +++ b/patches/@rnmapbox+maps+10.1.11.patch @@ -0,0 +1,13 @@ +diff --git a/node_modules/@rnmapbox/maps/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt b/node_modules/@rnmapbox/maps/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt +index dbd6d0b..1d043f2 100644 +--- a/node_modules/@rnmapbox/maps/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt ++++ b/node_modules/@rnmapbox/maps/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt +@@ -188,7 +188,7 @@ class RNMBXCamera(private val mContext: Context, private val mManager: RNMBXCame + + private fun setInitialCamera() { + mDefaultStop?.let { +- val mapView = mMapView!! ++ val mapView = mMapView ?: return + val map = mapView.getMapboxMap() + + it.setDuration(0) diff --git a/patches/@shopify+flash-list++recyclerlistview+4.2.0.patch b/patches/@shopify+flash-list++recyclerlistview+4.2.0.patch new file mode 100644 index 000000000000..3bfe2597c816 --- /dev/null +++ b/patches/@shopify+flash-list++recyclerlistview+4.2.0.patch @@ -0,0 +1,92 @@ +diff --git a/node_modules/@shopify/flash-list/node_modules/recyclerlistview/dist/reactnative/core/RecyclerListView.js b/node_modules/@shopify/flash-list/node_modules/recyclerlistview/dist/reactnative/core/RecyclerListView.js +index a98072e..67b8f30 100644 +--- a/node_modules/@shopify/flash-list/node_modules/recyclerlistview/dist/reactnative/core/RecyclerListView.js ++++ b/node_modules/@shopify/flash-list/node_modules/recyclerlistview/dist/reactnative/core/RecyclerListView.js +@@ -375,6 +375,12 @@ var RecyclerListView = /** @class */ (function (_super) { + } + return null; + }; ++ RecyclerListView.prototype.getNativeScrollRef = function () { ++ if (this._scrollComponent && this._scrollComponent.getNativeScrollRef) { ++ return this._scrollComponent.getNativeScrollRef(); ++ } ++ return null; ++ }; + RecyclerListView.prototype.renderCompat = function () { + //TODO:Talha + // const { +diff --git a/node_modules/@shopify/flash-list/node_modules/recyclerlistview/dist/reactnative/core/scrollcomponent/BaseScrollComponent.js b/node_modules/@shopify/flash-list/node_modules/recyclerlistview/dist/reactnative/core/scrollcomponent/BaseScrollComponent.js +index 96355ba..4d32c92 100644 +--- a/node_modules/@shopify/flash-list/node_modules/recyclerlistview/dist/reactnative/core/scrollcomponent/BaseScrollComponent.js ++++ b/node_modules/@shopify/flash-list/node_modules/recyclerlistview/dist/reactnative/core/scrollcomponent/BaseScrollComponent.js +@@ -23,6 +23,9 @@ var BaseScrollComponent = /** @class */ (function (_super) { + BaseScrollComponent.prototype.getScrollableNode = function () { + return null; + }; ++ BaseScrollComponent.prototype.getNativeScrollRef = function () { ++ return null; ++ }; + return BaseScrollComponent; + }(React.Component)); + exports.default = BaseScrollComponent; +diff --git a/node_modules/@shopify/flash-list/node_modules/recyclerlistview/dist/reactnative/platform/reactnative/scrollcomponent/ScrollComponent.js b/node_modules/@shopify/flash-list/node_modules/recyclerlistview/dist/reactnative/platform/reactnative/scrollcomponent/ScrollComponent.js +index 2f7033c..a559e18 100644 +--- a/node_modules/@shopify/flash-list/node_modules/recyclerlistview/dist/reactnative/platform/reactnative/scrollcomponent/ScrollComponent.js ++++ b/node_modules/@shopify/flash-list/node_modules/recyclerlistview/dist/reactnative/platform/reactnative/scrollcomponent/ScrollComponent.js +@@ -76,6 +76,9 @@ var ScrollComponent = /** @class */ (function (_super) { + } + return null; + }; ++ ScrollComponent.prototype.getNativeScrollRef = function () { ++ return this._scrollViewRef; ++ }; + ScrollComponent.prototype.render = function () { + var Scroller = TSCast_1.default.cast(this.props.externalScrollView); //TSI + var renderContentContainer = this.props.renderContentContainer ? this.props.renderContentContainer : this._defaultContainer; +diff --git a/node_modules/@shopify/flash-list/node_modules/recyclerlistview/src/core/RecyclerListView.tsx b/node_modules/@shopify/flash-list/node_modules/recyclerlistview/src/core/RecyclerListView.tsx +index 95dd87b..03de7ed 100644 +--- a/node_modules/@shopify/flash-list/node_modules/recyclerlistview/src/core/RecyclerListView.tsx ++++ b/node_modules/@shopify/flash-list/node_modules/recyclerlistview/src/core/RecyclerListView.tsx +@@ -394,6 +394,13 @@ export default class RecyclerListView

(this.props.externalScrollView); //TSI + const renderContentContainer = this.props.renderContentContainer ? this.props.renderContentContainer : this._defaultContainer; diff --git a/patches/@shopify+flash-list+1.6.3.patch b/patches/@shopify+flash-list+1.6.3.patch new file mode 100644 index 000000000000..4910bb20b4ec --- /dev/null +++ b/patches/@shopify+flash-list+1.6.3.patch @@ -0,0 +1,1360 @@ +diff --git a/node_modules/@shopify/flash-list/CHANGELOG.md b/node_modules/@shopify/flash-list/CHANGELOG.md +deleted file mode 100644 +index 9c6bc58..0000000 +--- a/node_modules/@shopify/flash-list/CHANGELOG.md ++++ /dev/null +@@ -1,279 +0,0 @@ +-# Changelog +- +-All notable changes to this project will be documented in this file. +- +-The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +-and adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +- +-## [Unreleased] +- +-## [1.6.3] - 2023-11-09 +- +-- Changes for RN 0.73 support +- - https://github.com/Shopify/flash-list/pull/930 +- +-## [1.6.2] - 2023-10-19 +- +-- Move shouldRefreshWithAnchoring configuration so it is possible to disable it from outside FlashList by invalidating layout +- - https://github.com/Shopify/flash-list/pull/935 +- +-## [1.6.1] - 2023-09-14 +- +-- Prevent an expired layout provider from being used again +- - https://github.com/Shopify/flash-list/pull/915 +- +-## [1.6.0] - 2023-09-13 +- +-- Update types to match `react-native@0.72` view types. +- - https://github.com/Shopify/flash-list/pull/890 +-- Add option to clear cached layouts on update +- - https://github.com/Shopify/flash-list/pull/910 +- +-## [1.5.0] - 2023-07-12 +- +-- Update kotlin version to 1.8.10 for RN 0.72 compatibility +- - https://github.com/Shopify/flash-list/pull/865 +- +-## [1.4.3] - 2023-04-24 +- +-- Fix definition conflicts with previous value +- - https://github.com/Shopify/flash-list/pull/795 +-- Fix Android unit test +- - https://github.com/Shopify/flash-list/pull/815 +-- Fix performance issues with inverted lists on Android +- - https://github.com/Shopify/flash-list/pull/819 +- +-## [1.4.2] - 2023-03-20 +- +-- Apply layout correction only to consecutive cells +- - https://github.com/Shopify/flash-list/pull/788 +- +-## [1.4.1] - 2023-01-24 +- +-- Prevent overflow of sticky headers +- - https://github.com/Shopify/flash-list/pull/714 +-- Skip footer correction when layout correction is skipped +- - https://github.com/Shopify/flash-list/pull/743 +- +-## [1.4.0] - 2022-11-07 +- +-- Add content padding support to FlashList +- - https://github.com/Shopify/flash-list/pull/626 +-- Upgrade recyclerlistview to v4.2.0 +- - https://github.com/Shopify/flash-list/pull/660 +- +-## [1.3.1] - 2022-10-11 +- +-- Expose `columnIndex` and `columnSpan` to `MasonryFlashList.renderItem` +- - https://github.com/Shopify/flash-list/pull/625 +- +-## [1.3.0] - 2022-09-26 +- +-- Added `MasonryFlashList` which adds support for rendering masonry layouts +- - https://github.com/Shopify/flash-list/pull/587 +- +-## [1.2.2] - 2022-09-06 +- +-- Fixes type checking error in `AutoLayoutView` due to `children` not being an explicit type +- - https://github.com/Shopify/flash-list/pull/567 +- +-## [1.2.1] - 2022-08-03 +- +-- Fixed crash when `estimatedListSize` is used in an empty list +- - https://github.com/Shopify/flash-list/pull/546 +- +-## [1.2.0] - 2022-07-18 +- +-- Fixed out of bound read from data +- - https://github.com/Shopify/flash-list/pull/523 +-- Added JS only fallbacks for unsupported platforms +- - https://github.com/Shopify/flash-list/pull/518 +-- Added footer correction in AutoLayoutView +- - https://github.com/Shopify/flash-list/pull/519 +-- Added `viewPosition` and `viewOffset` support scrollTo methods +- - https://github.com/Shopify/flash-list/pull/521 +-- Fix inverted mode while being horizontal +- - https://github.com/Shopify/flash-list/pull/520 +-- Upgrade recyclerlistview to v4.1.1 +- - https://github.com/Shopify/flash-list/pull/526 +- +-## [1.1.0] - 2022-07-06 +- +-- Added render target info to `renderItem` callback +- - https://github.com/Shopify/flash-list/pull/454 +-- Add Apple TV support +- - https://github.com/Shopify/flash-list/pull/511 +-- Clarify installation instructions in Expo projects +- - https://github.com/Shopify/flash-list/pull/497 +-- Upgrade recyclerlistview to v4.0.1 +- - https://github.com/Shopify/flash-list/pull/507 +-- Add tslib as a dependency +- - https://github.com/Shopify/flash-list/pull/514 +- +-## [1.0.4] - 2022-07-02 +- +-- Build fix for Android projects having `kotlinVersion` defined in `build.gradle`. +-- Allow providing an external scrollview. +- - https://github.com/Shopify/flash-list/pull/502 +- +-## [1.0.3] - 2022-07-01 +- +-- Add kotlin-gradle-plugin to buildscript in project build.gradle +- - https://github.com/Shopify/flash-list/pull/481 +- +-## [1.0.2] - 2022-06-30 +- +-- Minor changes +- +-## [1.0.1] - 2022-06-30 +- +-- `data` prop change will force update items only if `renderItem` is also updated +- - https://github.com/Shopify/flash-list/pull/453 +- +-## [1.0.0] - 2022-06-17 +- +-- Upgrade recyclerlistview to v3.3.0-beta.2 +- - https://github.com/Shopify/flash-list/pull/445 +-- Added web support +- - https://github.com/Shopify/flash-list/pull/444 +-- Added `disableAutoLayout` prop to prevent conflicts with custom `CellRendererComponent` +- - https://github.com/Shopify/flash-list/pull/452 +- +-## [0.6.1] - 2022-05-26 +- +-- Fix amending layout on iOS +- - https://github.com/Shopify/flash-list/pull/412 +-- Define `FlashList` props previously inherited from `VirtualizedList` and `FlatList` explicitly +- - https://github.com/Shopify/flash-list/pull/386 +-- Make `estimatedItemSize` optional +- - https://github.com/Shopify/flash-list/pull/378 +-- Change `overrideItemType` prop name to `getItemType` +- - https://github.com/Shopify/flash-list/pull/369 +-- Added `useBlankAreaTracker` hook for tracking blank area in production +- - https://github.com/Shopify/flash-list/pull/411 +-- Added `CellRendererComponent` prop +- - https://github.com/Shopify/flash-list/pull/362 +-- Added automatic height measurement for horizontal lists even when parent isn't deterministic +- - https://github.com/Shopify/flash-list/pull/409 +- +-## [0.5.0] - 2022-04-29 +- +-- Fix finding props with testId +- - https://github.com/Shopify/flash-list/pull/357 +-- Reuse cached layouts on orientation change +- - https://github.com/Shopify/flash-list/pull/319 +- +-## [0.4.6] - 2022-04-13 +- +-- Match FlashList's empty list behavior with FlatList +- - https://github.com/Shopify/flash-list/pull/312 +- +-## [0.4.5] - 2022-04-13 +- +-- Upgrade recyclerlistview to v3.2.0-beta.4 +- +- - https://github.com/Shopify/flash-list/pull/315 +- +-- Add viewability callbacks +- +- - https://github.com/Shopify/flash-list/pull/301 +- +-- Calculate average item sizes automatically +- - https://github.com/Shopify/flash-list/pull/296 +- +-## [0.4.4] - 2022-04-06 +- +-- Fix `FlashList` mock when no data is provided +- - https://github.com/Shopify/flash-list/pull/295 +- +-## [0.4.3] - 2022-04-04 +- +-- Reduce number of render item calls +- +- - https://github.com/Shopify/flash-list/pull/253 +- +-- Upgrade recyclerlistview to v3.2.0-beta.2 +- - https://github.com/Shopify/flash-list/pull/284 +- +-## [0.4.2] - 2022-04-04 +- +-- Minor changes +- +-## [0.4.1] - 2022-03-29 +- +-- Crash fix for android activity switching (#256) +- +- - https://github.com/Shopify/flash-list/pull/257 +- +-- initialScrollIndex, scrollTo methods will now account for size of header +- +- - https://github.com/Shopify/flash-list/pull/194 +- +-- Added a new mock for easier testing of components with `FlashList` +- - https://github.com/Shopify/flash-list/pull/236 +- +-## [0.4.0] - 2022-03-23 +- +-- Add support for layout animations +- +- - https://github.com/Shopify/flash-list/pull/183 +- +-- Suppress recyclerlistview's bounded size exception for some missing cases. +- +- - https://github.com/Shopify/flash-list/pull/192 +- +-- Expose reference to recyclerlistview and firstItemOffset +- +- - https://github.com/Shopify/flash-list/pull/217 +- +-- recyclerlistview upgraded to v3.1.0-alpha.9 +- - https://github.com/Shopify/flash-list/pull/227 +- +-## [0.3.3] - 2022-03-16 +- +-- Prevent implicit scroll to top on device orientation change +-- Change recyclerlistview's bounded size exception to a warning +- - https://github.com/Shopify/flash-list/pull/187 +- +-## [0.3.2] - 2022-03-15 +- +-- Minor changes +- +-## [0.3.1] - 2022-03-15 +- +-- Revert react-native-safe-area upgrade and minSdkVersion bump +- - https://github.com/Shopify/flash-list/pull/184 +- +-## [0.3.0] - 2022-03-15 +- +-- Fixed untranspiled library code by enforcing stricter TS rules. +- - https://github.com/Shopify/flash-list/pull/181 +- +-## [0.2.4] - 2022-03-14 +- +-- Added `onLoad` event that is called once the list has rendered items. This is required because FlashList doesn't render items in the first cycle. +- - https://github.com/Shopify/flash-list/pull/180 +- +-## [0.2.3] - 2022-03-10 +- +-- Fixing publish steps for transpiled code +- - https://github.com/Shopify/flash-list/pull/150 +- +-## [0.2.2] - 2022-03-10 +- +-- Fixing publish steps for transpiled code +- - https://github.com/Shopify/flash-list/pull/149 +- +-## [0.2.1] - 2022-03-09 +- +-- Bug fix for style and last separator +- - https://github.com/Shopify/flash-list/pull/141 +- +-## [0.2.0] - 2022-03-08 +- +-- Rename the component from `RecyclerFlatList` to `FlashList` +- - https://github.com/Shopify/flash-list/pull/140 +- +-## [0.1.0] - 2022-03-02 +- +-- Initial release +diff --git a/node_modules/@shopify/flash-list/RNFlashList.podspec b/node_modules/@shopify/flash-list/RNFlashList.podspec +index 38ff029..a749f6c 100644 +--- a/node_modules/@shopify/flash-list/RNFlashList.podspec ++++ b/node_modules/@shopify/flash-list/RNFlashList.podspec +@@ -9,14 +9,20 @@ Pod::Spec.new do |s| + s.homepage = package['homepage'] + s.license = package['license'] + s.author = package['author'] +- s.platforms = { :ios => '11.0', :tvos => '12.0' } + s.source = { git: 'https://github.com/shopify/flash-list.git', tag: "v#{s.version}" } + s.source_files = 'ios/Sources/**/*' + s.requires_arc = true + s.swift_version = '5.0' ++ s.pod_target_xcconfig = { 'OTHER_SWIFT_FLAGS' => '-D RCT_NEW_ARCH_ENABLED', } + +- # Dependencies +- s.dependency 'React-Core' ++ if defined?(install_modules_dependencies()) != nil ++ install_modules_dependencies(s) ++ s.ios.deployment_target = "12.4" ++ s.platforms = { :ios => '12.4', :tvos => '12.0' } ++ else ++ s.dependency "React-Core" ++ s.platforms = { :ios => '11.0', :tvos => '12.0' } ++ end + + # Tests spec + s.test_spec 'Tests' do |test_spec| +diff --git a/node_modules/@shopify/flash-list/android/build.gradle b/node_modules/@shopify/flash-list/android/build.gradle +index bed08cd..bad4465 100644 +--- a/node_modules/@shopify/flash-list/android/build.gradle ++++ b/node_modules/@shopify/flash-list/android/build.gradle +@@ -1,7 +1,14 @@ +-apply plugin: 'com.android.library' ++def isNewArchitectureEnabled() { ++ return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" ++} + ++apply plugin: 'com.android.library' + apply plugin: 'kotlin-android' + ++if (isNewArchitectureEnabled()) { ++ apply plugin: 'com.facebook.react' ++} ++ + def _ext = rootProject.ext + + def _reactNativeVersion = _ext.has('reactNative') ? _ext.reactNative : '+' +@@ -40,11 +47,19 @@ android { + debug.java.srcDirs += 'src/debug/kotlin' + test.java.srcDirs += 'src/test/kotlin' + androidTest.java.srcDirs += 'src/androidTest/kotlin' ++ ++ if (isNewArchitectureEnabled()) { ++ main.java.srcDirs += ["${project.buildDir}/generated/source/codegen/java"] ++ main.java.srcDirs += ["src/fabric/java"] ++ } else { ++ main.java.srcDirs += ['src/paper/java'] ++ } + } + + defaultConfig { + minSdkVersion _minSdkVersion + targetSdkVersion _targetSdkVersion ++ buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() + versionCode 1 + versionName "1.0" + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" +@@ -61,7 +76,7 @@ android { + + dependencies { + compileOnly "com.facebook.react:react-native:${_reactNativeVersion}" +- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${_kotlinVersion}" ++ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${_kotlinVersion}" + testImplementation "junit:junit:${_junitVersion}" + testImplementation "org.mockito.kotlin:mockito-kotlin:${_mockitoVersion}" + testImplementation "org.mockito:mockito-inline:${_mockitoVersion}" +diff --git a/node_modules/@shopify/flash-list/android/src/fabric/java/com/shopify/reactnative/flash_list/ReactContextExtensions.kt b/node_modules/@shopify/flash-list/android/src/fabric/java/com/shopify/reactnative/flash_list/ReactContextExtensions.kt +new file mode 100644 +index 0000000..6e850fe +--- /dev/null ++++ b/node_modules/@shopify/flash-list/android/src/fabric/java/com/shopify/reactnative/flash_list/ReactContextExtensions.kt +@@ -0,0 +1,12 @@ ++package com.shopify.reactnative.flash_list ++ ++import com.facebook.react.bridge.ReactContext ++import com.facebook.react.fabric.FabricUIManager ++import com.facebook.react.uimanager.UIManagerHelper ++import com.facebook.react.uimanager.common.UIManagerType ++import com.facebook.react.bridge.WritableMap ++ ++fun ReactContext.dispatchEvent(nativeTag: Int, eventName: String, event: WritableMap) { ++ val fabricUIManager = UIManagerHelper.getUIManager(this, UIManagerType.FABRIC) as FabricUIManager ++ fabricUIManager.receiveEvent(nativeTag, eventName, event) ++} +diff --git a/node_modules/@shopify/flash-list/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutView.kt b/node_modules/@shopify/flash-list/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutView.kt +index 4571798..c6c3cce 100644 +--- a/node_modules/@shopify/flash-list/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutView.kt ++++ b/node_modules/@shopify/flash-list/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutView.kt +@@ -2,8 +2,6 @@ package com.shopify.reactnative.flash_list + + import android.content.Context + import android.graphics.Canvas +-import android.util.DisplayMetrics +-import android.util.Log + import android.view.View + import android.view.ViewGroup + import android.widget.HorizontalScrollView +@@ -11,7 +9,6 @@ import android.widget.ScrollView + import com.facebook.react.bridge.Arguments + import com.facebook.react.bridge.ReactContext + import com.facebook.react.bridge.WritableMap +-import com.facebook.react.uimanager.events.RCTEventEmitter + import com.facebook.react.views.view.ReactViewGroup + + +@@ -142,9 +139,8 @@ class AutoLayoutView(context: Context) : ReactViewGroup(context) { + val event: WritableMap = Arguments.createMap() + event.putDouble("offsetStart", alShadow.blankOffsetAtStart / pixelDensity) + event.putDouble("offsetEnd", alShadow.blankOffsetAtEnd / pixelDensity) ++ + val reactContext = context as ReactContext +- reactContext +- .getJSModule(RCTEventEmitter::class.java) +- .receiveEvent(id, "onBlankAreaEvent", event) ++ reactContext.dispatchEvent(id, "onBlankAreaEvent", event) + } + } +diff --git a/node_modules/@shopify/flash-list/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutViewManager.kt b/node_modules/@shopify/flash-list/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutViewManager.kt +index b646f09..7bda0ea 100644 +--- a/node_modules/@shopify/flash-list/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutViewManager.kt ++++ b/node_modules/@shopify/flash-list/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutViewManager.kt +@@ -3,15 +3,22 @@ package com.shopify.reactnative.flash_list + import com.facebook.react.module.annotations.ReactModule + import com.facebook.react.uimanager.ThemedReactContext + import com.facebook.react.uimanager.annotations.ReactProp +-import com.facebook.react.views.view.ReactViewGroup +-import com.facebook.react.views.view.ReactViewManager ++import com.facebook.react.uimanager.ViewGroupManager ++import com.facebook.react.uimanager.ViewManagerDelegate ++import com.facebook.react.viewmanagers.AutoLayoutViewManagerDelegate ++import com.facebook.react.viewmanagers.AutoLayoutViewManagerInterface + import com.facebook.react.common.MapBuilder + import kotlin.math.roundToInt + + /** ViewManager for AutoLayoutView - Container for all RecyclerListView children. Automatically removes all gaps and overlaps for GridLayouts with flexible spans. + * Note: This cannot work for masonry layouts i.e, pinterest like layout */ + @ReactModule(name = AutoLayoutViewManager.REACT_CLASS) +-class AutoLayoutViewManager: ReactViewManager() { ++class AutoLayoutViewManager: ViewGroupManager(), AutoLayoutViewManagerInterface { ++ private val mDelegate: ViewManagerDelegate ++ ++ init { ++ mDelegate = AutoLayoutViewManagerDelegate(this) ++ } + + companion object { + const val REACT_CLASS = "AutoLayoutView" +@@ -21,45 +28,42 @@ class AutoLayoutViewManager: ReactViewManager() { + return REACT_CLASS + } + +- override fun createViewInstance(context: ThemedReactContext): ReactViewGroup { ++ override fun createViewInstance(context: ThemedReactContext): AutoLayoutView { + return AutoLayoutView(context).also { it.pixelDensity = context.resources.displayMetrics.density.toDouble() } + } + +- override fun getExportedCustomDirectEventTypeConstants(): MutableMap { +- return MapBuilder.builder().put( +- "onBlankAreaEvent", +- MapBuilder.of( +- "registrationName", "onBlankAreaEvent") +- ).build(); +- } ++ override fun getExportedCustomDirectEventTypeConstants() = mutableMapOf( ++ "onBlankAreaEvent" to mutableMapOf("registrationName" to "onBlankAreaEvent"), ++ "topOnBlankAreaEvent" to mutableMapOf("registrationName" to "onBlankAreaEvent"), ++ ) + + @ReactProp(name = "horizontal") +- fun setHorizontal(view: AutoLayoutView, isHorizontal: Boolean) { ++ override fun setHorizontal(view: AutoLayoutView, isHorizontal: Boolean) { + view.alShadow.horizontal = isHorizontal + } + + @ReactProp(name = "disableAutoLayout") +- fun setDisableAutoLayout(view: AutoLayoutView, disableAutoLayout: Boolean) { ++ override fun setDisableAutoLayout(view: AutoLayoutView, disableAutoLayout: Boolean) { + view.disableAutoLayout = disableAutoLayout + } + + @ReactProp(name = "scrollOffset") +- fun setScrollOffset(view: AutoLayoutView, scrollOffset: Double) { ++ override fun setScrollOffset(view: AutoLayoutView, scrollOffset: Double) { + view.alShadow.scrollOffset = convertToPixelLayout(scrollOffset, view.pixelDensity) + } + + @ReactProp(name = "windowSize") +- fun setWindowSize(view: AutoLayoutView, windowSize: Double) { ++ override fun setWindowSize(view: AutoLayoutView, windowSize: Double) { + view.alShadow.windowSize = convertToPixelLayout(windowSize, view.pixelDensity) + } + + @ReactProp(name = "renderAheadOffset") +- fun setRenderAheadOffset(view: AutoLayoutView, renderOffset: Double) { ++ override fun setRenderAheadOffset(view: AutoLayoutView, renderOffset: Double) { + view.alShadow.renderOffset = convertToPixelLayout(renderOffset, view.pixelDensity) + } + + @ReactProp(name = "enableInstrumentation") +- fun setEnableInstrumentation(view: AutoLayoutView, enableInstrumentation: Boolean) { ++ override fun setEnableInstrumentation(view: AutoLayoutView, enableInstrumentation: Boolean) { + view.enableInstrumentation = enableInstrumentation + } + +diff --git a/node_modules/@shopify/flash-list/android/src/main/kotlin/com/shopify/reactnative/flash_list/CellContainerManager.kt b/node_modules/@shopify/flash-list/android/src/main/kotlin/com/shopify/reactnative/flash_list/CellContainerManager.kt +index 1434caa..590ba1d 100644 +--- a/node_modules/@shopify/flash-list/android/src/main/kotlin/com/shopify/reactnative/flash_list/CellContainerManager.kt ++++ b/node_modules/@shopify/flash-list/android/src/main/kotlin/com/shopify/reactnative/flash_list/CellContainerManager.kt +@@ -2,12 +2,20 @@ package com.shopify.reactnative.flash_list + + import com.facebook.react.module.annotations.ReactModule + import com.facebook.react.uimanager.ThemedReactContext ++import com.facebook.react.uimanager.ViewGroupManager ++import com.facebook.react.uimanager.ViewManagerDelegate + import com.facebook.react.uimanager.annotations.ReactProp +-import com.facebook.react.views.view.ReactViewGroup +-import com.facebook.react.views.view.ReactViewManager ++import com.facebook.react.viewmanagers.CellContainerManagerDelegate ++import com.facebook.react.viewmanagers.CellContainerManagerInterface + + @ReactModule(name = AutoLayoutViewManager.REACT_CLASS) +-class CellContainerManager: ReactViewManager() { ++class CellContainerManager: ViewGroupManager(), CellContainerManagerInterface { ++ private val mDelegate: ViewManagerDelegate ++ ++ init { ++ mDelegate = CellContainerManagerDelegate(this); ++ } ++ + companion object { + const val REACT_CLASS = "CellContainer" + } +@@ -16,12 +24,12 @@ class CellContainerManager: ReactViewManager() { + return REACT_CLASS + } + +- override fun createViewInstance(context: ThemedReactContext): ReactViewGroup { ++ override fun createViewInstance(context: ThemedReactContext): CellContainerImpl { + return CellContainerImpl(context) + } + + @ReactProp(name = "index") +- fun setIndex(view: CellContainerImpl, index: Int) { ++ override fun setIndex(view: CellContainerImpl, index: Int) { + view.index = index + } + } +diff --git a/node_modules/@shopify/flash-list/android/src/paper/java/com/facebook/react/viewmanagers/AutoLayoutViewManagerDelegate.java b/node_modules/@shopify/flash-list/android/src/paper/java/com/facebook/react/viewmanagers/AutoLayoutViewManagerDelegate.java +new file mode 100644 +index 0000000..4c90807 +--- /dev/null ++++ b/node_modules/@shopify/flash-list/android/src/paper/java/com/facebook/react/viewmanagers/AutoLayoutViewManagerDelegate.java +@@ -0,0 +1,46 @@ ++/** ++* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). ++* ++* Do not edit this file as changes may cause incorrect behavior and will be lost ++* once the code is regenerated. ++* ++* @generated by codegen project: GeneratePropsJavaDelegate.js ++*/ ++ ++package com.facebook.react.viewmanagers; ++ ++import android.view.View; ++import androidx.annotation.Nullable; ++import com.facebook.react.uimanager.BaseViewManagerDelegate; ++import com.facebook.react.uimanager.BaseViewManagerInterface; ++ ++public class AutoLayoutViewManagerDelegate & AutoLayoutViewManagerInterface> extends BaseViewManagerDelegate { ++ public AutoLayoutViewManagerDelegate(U viewManager) { ++ super(viewManager); ++ } ++ @Override ++ public void setProperty(T view, String propName, @Nullable Object value) { ++ switch (propName) { ++ case "horizontal": ++ mViewManager.setHorizontal(view, value == null ? false : (boolean) value); ++ break; ++ case "scrollOffset": ++ mViewManager.setScrollOffset(view, value == null ? 0f : ((Double) value).doubleValue()); ++ break; ++ case "windowSize": ++ mViewManager.setWindowSize(view, value == null ? 0f : ((Double) value).doubleValue()); ++ break; ++ case "renderAheadOffset": ++ mViewManager.setRenderAheadOffset(view, value == null ? 0f : ((Double) value).doubleValue()); ++ break; ++ case "enableInstrumentation": ++ mViewManager.setEnableInstrumentation(view, value == null ? false : (boolean) value); ++ break; ++ case "disableAutoLayout": ++ mViewManager.setDisableAutoLayout(view, value == null ? false : (boolean) value); ++ break; ++ default: ++ super.setProperty(view, propName, value); ++ } ++ } ++} +diff --git a/node_modules/@shopify/flash-list/android/src/paper/java/com/facebook/react/viewmanagers/AutoLayoutViewManagerInterface.java b/node_modules/@shopify/flash-list/android/src/paper/java/com/facebook/react/viewmanagers/AutoLayoutViewManagerInterface.java +new file mode 100644 +index 0000000..8ad2622 +--- /dev/null ++++ b/node_modules/@shopify/flash-list/android/src/paper/java/com/facebook/react/viewmanagers/AutoLayoutViewManagerInterface.java +@@ -0,0 +1,21 @@ ++/** ++* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). ++* ++* Do not edit this file as changes may cause incorrect behavior and will be lost ++* once the code is regenerated. ++* ++* @generated by codegen project: GeneratePropsJavaInterface.js ++*/ ++ ++package com.facebook.react.viewmanagers; ++ ++import android.view.View; ++ ++public interface AutoLayoutViewManagerInterface { ++ void setHorizontal(T view, boolean value); ++ void setScrollOffset(T view, double value); ++ void setWindowSize(T view, double value); ++ void setRenderAheadOffset(T view, double value); ++ void setEnableInstrumentation(T view, boolean value); ++ void setDisableAutoLayout(T view, boolean value); ++} +diff --git a/node_modules/@shopify/flash-list/android/src/paper/java/com/facebook/react/viewmanagers/CellContainerManagerDelegate.java b/node_modules/@shopify/flash-list/android/src/paper/java/com/facebook/react/viewmanagers/CellContainerManagerDelegate.java +new file mode 100644 +index 0000000..2b64af7 +--- /dev/null ++++ b/node_modules/@shopify/flash-list/android/src/paper/java/com/facebook/react/viewmanagers/CellContainerManagerDelegate.java +@@ -0,0 +1,31 @@ ++/** ++* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). ++* ++* Do not edit this file as changes may cause incorrect behavior and will be lost ++* once the code is regenerated. ++* ++* @generated by codegen project: GeneratePropsJavaDelegate.js ++*/ ++ ++package com.facebook.react.viewmanagers; ++ ++import android.view.View; ++import androidx.annotation.Nullable; ++import com.facebook.react.uimanager.BaseViewManagerDelegate; ++import com.facebook.react.uimanager.BaseViewManagerInterface; ++ ++public class CellContainerManagerDelegate & CellContainerManagerInterface> extends BaseViewManagerDelegate { ++ public CellContainerManagerDelegate(U viewManager) { ++ super(viewManager); ++ } ++ @Override ++ public void setProperty(T view, String propName, @Nullable Object value) { ++ switch (propName) { ++ case "index": ++ mViewManager.setIndex(view, value == null ? 0 : ((Double) value).intValue()); ++ break; ++ default: ++ super.setProperty(view, propName, value); ++ } ++ } ++} +diff --git a/node_modules/@shopify/flash-list/android/src/paper/java/com/facebook/react/viewmanagers/CellContainerManagerInterface.java b/node_modules/@shopify/flash-list/android/src/paper/java/com/facebook/react/viewmanagers/CellContainerManagerInterface.java +new file mode 100644 +index 0000000..b37ddbd +--- /dev/null ++++ b/node_modules/@shopify/flash-list/android/src/paper/java/com/facebook/react/viewmanagers/CellContainerManagerInterface.java +@@ -0,0 +1,16 @@ ++/** ++* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). ++* ++* Do not edit this file as changes may cause incorrect behavior and will be lost ++* once the code is regenerated. ++* ++* @generated by codegen project: GeneratePropsJavaInterface.js ++*/ ++ ++package com.facebook.react.viewmanagers; ++ ++import android.view.View; ++ ++public interface CellContainerManagerInterface { ++ void setIndex(T view, int value); ++} +diff --git a/node_modules/@shopify/flash-list/android/src/paper/java/com/shopify/reactnative/flash_list/ReactContextExtensions.kt b/node_modules/@shopify/flash-list/android/src/paper/java/com/shopify/reactnative/flash_list/ReactContextExtensions.kt +new file mode 100644 +index 0000000..b867c18 +--- /dev/null ++++ b/node_modules/@shopify/flash-list/android/src/paper/java/com/shopify/reactnative/flash_list/ReactContextExtensions.kt +@@ -0,0 +1,10 @@ ++package com.shopify.reactnative.flash_list ++ ++import com.facebook.react.bridge.ReactContext ++import com.facebook.react.uimanager.events.RCTEventEmitter ++import com.facebook.react.bridge.WritableMap ++ ++fun ReactContext.dispatchEvent(nativeTag: Int, eventName: String, event: WritableMap) { ++ this.getJSModule(RCTEventEmitter::class.java) ++ .receiveEvent(nativeTag, eventName, event) ++} +diff --git a/node_modules/@shopify/flash-list/dist/FlashList.d.ts b/node_modules/@shopify/flash-list/dist/FlashList.d.ts +index ed81d7d..1e24103 100644 +--- a/node_modules/@shopify/flash-list/dist/FlashList.d.ts ++++ b/node_modules/@shopify/flash-list/dist/FlashList.d.ts +@@ -103,6 +103,7 @@ declare class FlashList extends React.PureComponent, FlashL + offset: number; + }): void; + getScrollableNode(): number | null; ++ getNativeScrollRef(): number | null; + /** + * Allows access to internal recyclerlistview. This is useful for enabling access to its public APIs. + * Warning: We may swap recyclerlistview for something else in the future. Use with caution. +diff --git a/node_modules/@shopify/flash-list/dist/FlashList.d.ts.map b/node_modules/@shopify/flash-list/dist/FlashList.d.ts.map +index 97c8cc6..a915a05 100644 +--- a/node_modules/@shopify/flash-list/dist/FlashList.d.ts.map ++++ b/node_modules/@shopify/flash-list/dist/FlashList.d.ts.map +@@ -1 +1 @@ +-{"version":3,"file":"FlashList.d.ts","sourceRoot":"","sources":["../src/FlashList.tsx"],"names":[],"mappings":"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"} +\ No newline at end of file ++{"version":3,"file":"FlashList.d.ts","sourceRoot":"","sources":["../src/FlashList.tsx"],"names":[],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@shopify/flash-list/dist/FlashList.js b/node_modules/@shopify/flash-list/dist/FlashList.js +index 1a5d026..37852b8 100644 +--- a/node_modules/@shopify/flash-list/dist/FlashList.js ++++ b/node_modules/@shopify/flash-list/dist/FlashList.js +@@ -478,6 +478,12 @@ var FlashList = /** @class */ (function (_super) { + var _a, _b; + return ((_b = (_a = this.rlvRef) === null || _a === void 0 ? void 0 : _a.getScrollableNode) === null || _b === void 0 ? void 0 : _b.call(_a)) || null; + }; ++ FlashList.prototype.getNativeScrollRef = function () { ++ var _a, _b; ++ // eslint-disable-next-line @typescript-eslint/ban-ts-comment ++ // @ts-ignore ++ return ((_b = (_a = this.rlvRef) === null || _a === void 0 ? void 0 : _a.getNativeScrollRef) === null || _b === void 0 ? void 0 : _b.call(_a)) || null; ++ }; + Object.defineProperty(FlashList.prototype, "recyclerlistview_unsafe", { + /** + * Allows access to internal recyclerlistview. This is useful for enabling access to its public APIs. +diff --git a/node_modules/@shopify/flash-list/dist/FlashList.js.map b/node_modules/@shopify/flash-list/dist/FlashList.js.map +index 375f7fc..8fc9c3f 100644 +--- a/node_modules/@shopify/flash-list/dist/FlashList.js.map ++++ b/node_modules/@shopify/flash-list/dist/FlashList.js.map +@@ -1 +1 @@ +-{"version":3,"file":"FlashList.js","sourceRoot":"","sources":["../src/FlashList.tsx"],"names":[],"mappings":"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"} +\ No newline at end of file ++{"version":3,"file":"FlashList.js","sourceRoot":"","sources":["../src/FlashList.tsx"],"names":[],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@shopify/flash-list/dist/fabric/AutoLayoutNativeComponent.d.ts b/node_modules/@shopify/flash-list/dist/fabric/AutoLayoutNativeComponent.d.ts +new file mode 100644 +index 0000000..661dc81 +--- /dev/null ++++ b/node_modules/@shopify/flash-list/dist/fabric/AutoLayoutNativeComponent.d.ts +@@ -0,0 +1,18 @@ ++import type { ViewProps } from "react-native"; ++import type { Int32, Double, DirectEventHandler } from "react-native/Libraries/Types/CodegenTypes"; ++declare type BlankAreaEvent = Readonly<{ ++ offsetStart: Int32; ++ offsetEnd: Int32; ++}>; ++interface NativeProps extends ViewProps { ++ horizontal?: boolean; ++ scrollOffset?: Double; ++ windowSize?: Double; ++ renderAheadOffset?: Double; ++ enableInstrumentation?: boolean; ++ disableAutoLayout?: boolean; ++ onBlankAreaEvent?: DirectEventHandler; ++} ++declare const _default: import("react-native/Libraries/Utilities/codegenNativeComponent").NativeComponentType; ++export default _default; ++//# sourceMappingURL=AutoLayoutNativeComponent.d.ts.map +\ No newline at end of file +diff --git a/node_modules/@shopify/flash-list/dist/fabric/AutoLayoutNativeComponent.d.ts.map b/node_modules/@shopify/flash-list/dist/fabric/AutoLayoutNativeComponent.d.ts.map +new file mode 100644 +index 0000000..25297b9 +--- /dev/null ++++ b/node_modules/@shopify/flash-list/dist/fabric/AutoLayoutNativeComponent.d.ts.map +@@ -0,0 +1 @@ ++{"version":3,"file":"AutoLayoutNativeComponent.d.ts","sourceRoot":"","sources":["../../src/fabric/AutoLayoutNativeComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EACV,KAAK,EACL,MAAM,EACN,kBAAkB,EACnB,MAAM,2CAA2C,CAAC;AAEnD,aAAK,cAAc,GAAG,QAAQ,CAAC;IAC7B,WAAW,EAAE,KAAK,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;CAClB,CAAC,CAAC;AAEH,UAAU,WAAY,SAAQ,SAAS;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC;CACvD;;AAED,wBAAqE"} +\ No newline at end of file +diff --git a/node_modules/@shopify/flash-list/dist/fabric/AutoLayoutNativeComponent.js b/node_modules/@shopify/flash-list/dist/fabric/AutoLayoutNativeComponent.js +new file mode 100644 +index 0000000..c69ba24 +--- /dev/null ++++ b/node_modules/@shopify/flash-list/dist/fabric/AutoLayoutNativeComponent.js +@@ -0,0 +1,6 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++var tslib_1 = require("tslib"); ++var codegenNativeComponent_1 = tslib_1.__importDefault(require("react-native/Libraries/Utilities/codegenNativeComponent")); ++exports.default = (0, codegenNativeComponent_1.default)("AutoLayoutView"); ++//# sourceMappingURL=AutoLayoutNativeComponent.js.map +\ No newline at end of file +diff --git a/node_modules/@shopify/flash-list/dist/fabric/AutoLayoutNativeComponent.js.map b/node_modules/@shopify/flash-list/dist/fabric/AutoLayoutNativeComponent.js.map +new file mode 100644 +index 0000000..890db63 +--- /dev/null ++++ b/node_modules/@shopify/flash-list/dist/fabric/AutoLayoutNativeComponent.js.map +@@ -0,0 +1 @@ ++{"version":3,"file":"AutoLayoutNativeComponent.js","sourceRoot":"","sources":["../../src/fabric/AutoLayoutNativeComponent.ts"],"names":[],"mappings":";;;AAAA,2HAA6F;AAuB7F,kBAAe,IAAA,gCAAsB,EAAc,gBAAgB,CAAC,CAAC"} +\ No newline at end of file +diff --git a/node_modules/@shopify/flash-list/dist/fabric/CellContainerNativeComponent.d.ts b/node_modules/@shopify/flash-list/dist/fabric/CellContainerNativeComponent.d.ts +new file mode 100644 +index 0000000..bb8f63b +--- /dev/null ++++ b/node_modules/@shopify/flash-list/dist/fabric/CellContainerNativeComponent.d.ts +@@ -0,0 +1,8 @@ ++import type { Int32 } from "react-native/Libraries/Types/CodegenTypes"; ++import type { ViewProps } from "react-native"; ++interface NativeProps extends ViewProps { ++ index?: Int32; ++} ++declare const _default: import("react-native/Libraries/Utilities/codegenNativeComponent").NativeComponentType; ++export default _default; ++//# sourceMappingURL=CellContainerNativeComponent.d.ts.map +\ No newline at end of file +diff --git a/node_modules/@shopify/flash-list/dist/fabric/CellContainerNativeComponent.d.ts.map b/node_modules/@shopify/flash-list/dist/fabric/CellContainerNativeComponent.d.ts.map +new file mode 100644 +index 0000000..993a2c3 +--- /dev/null ++++ b/node_modules/@shopify/flash-list/dist/fabric/CellContainerNativeComponent.d.ts.map +@@ -0,0 +1 @@ ++{"version":3,"file":"CellContainerNativeComponent.d.ts","sourceRoot":"","sources":["../../src/fabric/CellContainerNativeComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,UAAU,WAAY,SAAQ,SAAS;IACrC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;;AAED,wBAAoE"} +\ No newline at end of file +diff --git a/node_modules/@shopify/flash-list/dist/fabric/CellContainerNativeComponent.js b/node_modules/@shopify/flash-list/dist/fabric/CellContainerNativeComponent.js +new file mode 100644 +index 0000000..b21acb7 +--- /dev/null ++++ b/node_modules/@shopify/flash-list/dist/fabric/CellContainerNativeComponent.js +@@ -0,0 +1,6 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++var tslib_1 = require("tslib"); ++var codegenNativeComponent_1 = tslib_1.__importDefault(require("react-native/Libraries/Utilities/codegenNativeComponent")); ++exports.default = (0, codegenNativeComponent_1.default)("CellContainer"); ++//# sourceMappingURL=CellContainerNativeComponent.js.map +\ No newline at end of file +diff --git a/node_modules/@shopify/flash-list/dist/fabric/CellContainerNativeComponent.js.map b/node_modules/@shopify/flash-list/dist/fabric/CellContainerNativeComponent.js.map +new file mode 100644 +index 0000000..d7c2469 +--- /dev/null ++++ b/node_modules/@shopify/flash-list/dist/fabric/CellContainerNativeComponent.js.map +@@ -0,0 +1 @@ ++{"version":3,"file":"CellContainerNativeComponent.js","sourceRoot":"","sources":["../../src/fabric/CellContainerNativeComponent.ts"],"names":[],"mappings":";;;AAAA,2HAA6F;AAQ7F,kBAAe,IAAA,gCAAsB,EAAc,eAAe,CAAC,CAAC"} +\ No newline at end of file +diff --git a/node_modules/@shopify/flash-list/dist/tsconfig.tsbuildinfo b/node_modules/@shopify/flash-list/dist/tsconfig.tsbuildinfo +deleted file mode 100644 +index 023b94a..0000000 +--- a/node_modules/@shopify/flash-list/dist/tsconfig.tsbuildinfo ++++ /dev/null +@@ -1 +0,0 @@ +-{"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/tslib/tslib.d.ts","../node_modules/@types/react-native/modules/BatchedBridge.d.ts","../node_modules/@types/react-native/modules/Codegen.d.ts","../node_modules/@types/react-native/modules/Devtools.d.ts","../node_modules/@types/react-native/modules/globals.d.ts","../node_modules/@types/react-native/modules/LaunchScreen.d.ts","../node_modules/@types/react/global.d.ts","../node_modules/csstype/index.d.ts","../node_modules/@types/prop-types/index.d.ts","../node_modules/@types/scheduler/tracing.d.ts","../node_modules/@types/react/index.d.ts","../node_modules/@types/react-native/private/Utilities.d.ts","../node_modules/@types/react-native/public/Insets.d.ts","../node_modules/@types/react-native/Libraries/ReactNative/RendererProxy.d.ts","../node_modules/@types/react-native/public/ReactNativeTypes.d.ts","../node_modules/@types/react-native/Libraries/Types/CoreEventTypes.d.ts","../node_modules/@types/react-native/public/ReactNativeRenderer.d.ts","../node_modules/@types/react-native/Libraries/Components/Touchable/Touchable.d.ts","../node_modules/@types/react-native/Libraries/Components/View/ViewAccessibility.d.ts","../node_modules/@types/react-native/Libraries/Components/View/ViewPropTypes.d.ts","../node_modules/@types/react-native/Libraries/Components/RefreshControl/RefreshControl.d.ts","../node_modules/@types/react-native/Libraries/Components/ScrollView/ScrollView.d.ts","../node_modules/@types/react-native/Libraries/Components/View/View.d.ts","../node_modules/@types/react-native/Libraries/Image/ImageResizeMode.d.ts","../node_modules/@types/react-native/Libraries/Image/ImageSource.d.ts","../node_modules/@types/react-native/Libraries/Image/Image.d.ts","../node_modules/@react-native/virtualized-lists/Lists/VirtualizedList.d.ts","../node_modules/@react-native/virtualized-lists/index.d.ts","../node_modules/@types/react-native/Libraries/Lists/FlatList.d.ts","../node_modules/@types/react-native/Libraries/Lists/SectionList.d.ts","../node_modules/@types/react-native/Libraries/Text/Text.d.ts","../node_modules/@types/react-native/Libraries/Animated/Animated.d.ts","../node_modules/@types/react-native/Libraries/StyleSheet/StyleSheetTypes.d.ts","../node_modules/@types/react-native/Libraries/StyleSheet/StyleSheet.d.ts","../node_modules/@types/react-native/Libraries/StyleSheet/processColor.d.ts","../node_modules/@types/react-native/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts","../node_modules/@types/react-native/Libraries/Alert/Alert.d.ts","../node_modules/@types/react-native/Libraries/Animated/Easing.d.ts","../node_modules/@types/react-native/Libraries/Animated/useAnimatedValue.d.ts","../node_modules/@types/react-native/Libraries/vendor/emitter/EventEmitter.d.ts","../node_modules/@types/react-native/Libraries/EventEmitter/RCTDeviceEventEmitter.d.ts","../node_modules/@types/react-native/Libraries/EventEmitter/RCTNativeAppEventEmitter.d.ts","../node_modules/@types/react-native/Libraries/AppState/AppState.d.ts","../node_modules/@types/react-native/Libraries/BatchedBridge/NativeModules.d.ts","../node_modules/@types/react-native/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts","../node_modules/@types/react-native/Libraries/Components/ActivityIndicator/ActivityIndicator.d.ts","../node_modules/@types/react-native/Libraries/Components/Clipboard/Clipboard.d.ts","../node_modules/@types/react-native/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.d.ts","../node_modules/@types/react-native/Libraries/EventEmitter/NativeEventEmitter.d.ts","../node_modules/@types/react-native/Libraries/Components/Keyboard/Keyboard.d.ts","../node_modules/@types/react-native/private/TimerMixin.d.ts","../node_modules/@types/react-native/Libraries/Components/Keyboard/KeyboardAvoidingView.d.ts","../node_modules/@types/react-native/Libraries/Components/Pressable/Pressable.d.ts","../node_modules/@types/react-native/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.d.ts","../node_modules/@types/react-native/Libraries/Components/SafeAreaView/SafeAreaView.d.ts","../node_modules/@types/react-native/Libraries/Components/StatusBar/StatusBar.d.ts","../node_modules/@types/react-native/Libraries/Components/Switch/Switch.d.ts","../node_modules/@types/react-native/Libraries/Components/TextInput/InputAccessoryView.d.ts","../node_modules/@types/react-native/Libraries/Components/TextInput/TextInput.d.ts","../node_modules/@types/react-native/Libraries/Components/ToastAndroid/ToastAndroid.d.ts","../node_modules/@types/react-native/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts","../node_modules/@types/react-native/Libraries/Components/Touchable/TouchableHighlight.d.ts","../node_modules/@types/react-native/Libraries/Components/Touchable/TouchableOpacity.d.ts","../node_modules/@types/react-native/Libraries/Components/Touchable/TouchableNativeFeedback.d.ts","../node_modules/@types/react-native/Libraries/Components/Button.d.ts","../node_modules/@types/react-native/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts","../node_modules/@types/react-native/Libraries/Interaction/InteractionManager.d.ts","../node_modules/@types/react-native/Libraries/Interaction/PanResponder.d.ts","../node_modules/@types/react-native/Libraries/LayoutAnimation/LayoutAnimation.d.ts","../node_modules/@types/react-native/Libraries/Linking/Linking.d.ts","../node_modules/@types/react-native/Libraries/LogBox/LogBox.d.ts","../node_modules/@types/react-native/Libraries/Modal/Modal.d.ts","../node_modules/@types/react-native/Libraries/Performance/Systrace.d.ts","../node_modules/@types/react-native/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts","../node_modules/@types/react-native/Libraries/PushNotificationIOS/PushNotificationIOS.d.ts","../node_modules/@types/react-native/Libraries/Utilities/IPerformanceLogger.d.ts","../node_modules/@types/react-native/Libraries/ReactNative/AppRegistry.d.ts","../node_modules/@types/react-native/Libraries/ReactNative/I18nManager.d.ts","../node_modules/@types/react-native/Libraries/ReactNative/RootTag.d.ts","../node_modules/@types/react-native/Libraries/ReactNative/UIManager.d.ts","../node_modules/@types/react-native/Libraries/ReactNative/requireNativeComponent.d.ts","../node_modules/@types/react-native/Libraries/Settings/Settings.d.ts","../node_modules/@types/react-native/Libraries/Share/Share.d.ts","../node_modules/@types/react-native/Libraries/StyleSheet/PlatformColorValueTypesIOS.d.ts","../node_modules/@types/react-native/Libraries/StyleSheet/PlatformColorValueTypes.d.ts","../node_modules/@types/react-native/Libraries/TurboModule/RCTExport.d.ts","../node_modules/@types/react-native/Libraries/TurboModule/TurboModuleRegistry.d.ts","../node_modules/@types/react-native/Libraries/Utilities/Appearance.d.ts","../node_modules/@types/react-native/Libraries/Utilities/BackHandler.d.ts","../node_modules/@types/react-native/Libraries/Utilities/DevSettings.d.ts","../node_modules/@types/react-native/Libraries/Utilities/Dimensions.d.ts","../node_modules/@types/react-native/Libraries/Utilities/PixelRatio.d.ts","../node_modules/@types/react-native/Libraries/Utilities/Platform.d.ts","../node_modules/@types/react-native/Libraries/Vibration/Vibration.d.ts","../node_modules/@types/react-native/Libraries/YellowBox/YellowBoxDeprecated.d.ts","../node_modules/@types/react-native/Libraries/vendor/core/ErrorUtils.d.ts","../node_modules/@types/react-native/public/DeprecatedPropertiesAlias.d.ts","../node_modules/@types/react-native/index.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/dependencies/ContextProvider.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/dependencies/DataProvider.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/layoutmanager/LayoutManager.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/dependencies/LayoutProvider.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/dependencies/GridLayoutProvider.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/scrollcomponent/BaseScrollView.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/ViewabilityTracker.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/VirtualRenderer.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/ItemAnimator.d.ts","../node_modules/recyclerlistview/dist/reactnative/utils/ComponentCompat.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/RecyclerListView.d.ts","../node_modules/recyclerlistview/dist/reactnative/utils/AutoScroll.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/layoutmanager/GridLayoutManager.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/ProgressiveListView.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/devutils/debughandlers/resize/ResizeDebugHandler.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/devutils/debughandlers/DebugHandlers.d.ts","../node_modules/recyclerlistview/dist/reactnative/index.d.ts","../node_modules/recyclerlistview/dist/reactnative/core/StickyContainer.d.ts","../node_modules/recyclerlistview/sticky/index.d.ts","../src/native/auto-layout/AutoLayoutViewNativeComponentProps.ts","../src/native/auto-layout/AutoLayoutViewNativeComponent.ts","../src/native/auto-layout/AutoLayoutView.tsx","../src/native/cell-container/CellContainer.tsx","../src/PureComponentWrapper.tsx","../src/viewability/ViewToken.ts","../src/FlashListProps.ts","../src/utils/AverageWindow.ts","../src/utils/ContentContainerUtils.ts","../src/GridLayoutProviderWithProps.ts","../src/errors/CustomError.ts","../src/errors/ExceptionList.ts","../src/errors/Warnings.ts","../src/viewability/ViewabilityHelper.ts","../src/viewability/ViewabilityManager.ts","../node_modules/recyclerlistview/dist/reactnative/platform/reactnative/itemanimators/defaultjsanimator/DefaultJSItemAnimator.d.ts","../src/native/config/PlatformHelper.ts","../src/FlashList.tsx","../src/AnimatedFlashList.ts","../src/MasonryFlashList.tsx","../src/benchmark/AutoScrollHelper.ts","../src/benchmark/roundToDecimalPlaces.ts","../src/benchmark/JSFPSMonitor.ts","../src/benchmark/useBlankAreaTracker.ts","../src/benchmark/useBenchmark.ts","../src/benchmark/useDataMultiplier.ts","../src/benchmark/useFlatListBenchmark.ts","../src/index.ts","../src/__tests__/AverageWindow.test.ts","../src/__tests__/ContentContainerUtils.test.ts","../node_modules/@quilted/react-testing/build/typescript/types.d.ts","../node_modules/@quilted/react-testing/build/typescript/matchers/index.d.ts","../node_modules/@quilted/react-testing/build/typescript/environment.d.ts","../node_modules/@quilted/react-testing/build/typescript/implementations/test-renderer.d.ts","../node_modules/@quilted/react-testing/build/typescript/index.d.ts","../src/__tests__/helpers/mountFlashList.tsx","../src/__tests__/FlashList.test.tsx","../src/__tests__/GridLayoutProviderWithProps.test.ts","../src/__tests__/helpers/mountMasonryFlashList.tsx","../src/__tests__/MasonryFlashList.test.ts","../src/native/config/PlatformHelper.web.ts","../src/__tests__/PlatformHelper.web.test.ts","../src/__tests__/ViewabilityHelper.test.ts","../src/__tests__/useBlankAreaTracker.test.tsx","../src/native/auto-layout/AutoLayoutViewNativeComponent.android.ts","../src/native/auto-layout/AutoLayoutViewNativeComponent.ios.ts","../src/native/cell-container/CellContainer.android.ts","../src/native/cell-container/CellContainer.ios.ts","../src/native/cell-container/CellContainer.web.tsx","../src/native/config/PlatformHelper.android.ts","../src/native/config/PlatformHelper.ios.ts","../node_modules/@babel/types/lib/index.d.ts","../node_modules/@types/babel__generator/index.d.ts","../node_modules/@babel/parser/typings/babel-parser.d.ts","../node_modules/@types/babel__template/index.d.ts","../node_modules/@types/babel__traverse/index.d.ts","../node_modules/@types/babel__core/index.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@types/graceful-fs/index.d.ts","../node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/@types/istanbul-lib-report/index.d.ts","../node_modules/@types/istanbul-reports/index.d.ts","../node_modules/chalk/index.d.ts","../node_modules/@sinclair/typebox/typebox.d.ts","../node_modules/@jest/schemas/build/index.d.ts","../node_modules/pretty-format/build/index.d.ts","../node_modules/jest-diff/build/index.d.ts","../node_modules/jest-matcher-utils/build/index.d.ts","../node_modules/@types/jest/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/json5/index.d.ts","../node_modules/@types/parse-json/index.d.ts","../node_modules/@types/prettier/index.d.ts","../node_modules/@types/react-test-renderer/index.d.ts","../node_modules/@types/scheduler/index.d.ts","../node_modules/@types/stack-utils/index.d.ts","../node_modules/@types/websocket/index.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@types/yargs/index.d.ts"],"fileInfos":[{"version":"f5c28122bee592cfaf5c72ed7bcc47f453b79778ffa6e301f45d21a0970719d4","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9",{"version":"3f149f903dd20dfeb7c80e228b659f0e436532de772469980dbd00702cc05cc1","affectsGlobalScope":true},{"version":"1272277fe7daa738e555eb6cc45ded42cc2d0f76c07294142283145d49e96186","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"181f1784c6c10b751631b24ce60c7f78b20665db4550b335be179217bacc0d5f","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"cd483c056da900716879771893a3c9772b66c3c88f8943b4205aec738a94b1d0","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"c37f8a49593a0030eecb51bbfa270e709bec9d79a6cc3bb851ef348d4e6b26f8","affectsGlobalScope":true},"14a84fbe4ec531dcbaf5d2594fd95df107258e60ae6c6a076404f13c3f66f28e",{"version":"1c0e04c54479b57b49fec4e93556974b3d071b65d0b750897e07b3b7d2145fc5","affectsGlobalScope":true},"bc1852215dc1488e6747ca43ae0605041de22ab9a6eeef39542d29837919c414","ae6da60c852e7bacc4a49ff14a42dc1a3fdbb44e11bd9b4acb1bf3d58866ee71",{"version":"0dab023e564abb43c817779fff766e125017e606db344f9633fdba330c970532","affectsGlobalScope":true},"4cbd76eafece5844dc0a32807e68047aecbdd8d863edba651f34c050624f18df",{"version":"ecf78e637f710f340ec08d5d92b3f31b134a46a4fcf2e758690d8c46ce62cba6","affectsGlobalScope":true},"ea0aa24a32c073b8639aa1f3130ba0add0f0f2f76b314d9ba988a5cb91d7e3c4","f7b46d22a307739c145e5fddf537818038fdfffd580d79ed717f4d4d37249380","f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5",{"version":"29b8a3a533884705024eab54e56465614ad167f5dd87fdc2567d8e451f747224","affectsGlobalScope":true},"4f2490e3f420ea6345cade9aee5eada76888848e053726956aaf2af8705477ea","b3ac03d0c853c0ac076a10cfef4dc21d810f54dac5899ade2b1c628c35263533","d17a689ac1bd689f37d6f0d3d9a21afac349e60633844044f7a7b7b9d6f7fd83","019650941b03d4978f62d21ae874788a665c02b54e3268ef2029b02d3b4f7561","ae591c8a4d5c7f7fa44b6965016391457d9c1fd763475f68340599a2a2987a24","fbdef0c642b82cc1713b965f07b4da8005bbbb2c026039bfdc15ca2d20769e38","c2c004e7f1a150541d06bc4a408b96e45ac1f08e0b1b35dfd07fc0f678205f95","1f2081eb2cbeb0828f9baa1dd12cf6d207f8104ae0b085ab9975d11adc7f7e6f","cda9069fc4c312ff484c1373455e4297a02d38ae3bd7d0959aad772a2809623c","c028d20108bcaa3b1fdf3514956a8a90ccf680f18672fa3c92ce5acf81d7ab23","1054f6e8774a75aaf17e7cfea4899344f69590b2db1e06da21048ed1e063c693","9533301b8f75664e1b40a8484a4fd9c77efc04aef526409c2447aab7d12ddc63","b78b5b3fdb4e30976c4263c66c0ad38fb81edcc8075a4160a39d99c6dedd35be","032b51d656feaece529823992f5a39fe9e24d44dfa21b3a149982f7787fc7bdf","5bbfdfb694b019cb2a2022fba361a7a857efc1fc2b77a892c92ebc1349b7e984","46bc25e3501d321a70d0878e82a1d47b16ab77bdf017c8fecc76343f50806a0d","42bacb33cddecbcfe3e043ee1117ba848801749e44f947626765b3e0aec74b1c","49dba0d7a37268e6ae2026e84ad4362eac7e776d816756abf649be7fa177dcd5","5f2b5ab209daae571eb9acc1fd2067ccc94e2a13644579a245875bc4f02b562f","f072acf9547f89b814b9fdb3e72f4ebb1649191591cec99db43d35383906f87f","42450dba65ba1307f27c914a8e45e0b602c6f8f78773c052e42b0b87562f081e","f5870d0ca7b0dfb7e2b9ba9abad3a2e2bffe5c711b53dab2e6e76ca2df58302b","aeb20169389e9f508b1a4eb2a30371b64d64bb7c8543120bc39a3c6b78adfcc9","2a3d3acbab8567057a943f9f56113c0144f5fc561623749fbd6bb5c2b33bf738","9cf21fdcd1beb5142a514887133fa59057e06275bb3070713f3b6d51e830ffa0","0ad4f0b67db47064b404df89c50f99552ce12d6c4bb6154255be61eb6beed094","f8a464b9999126fe1095968c266c0d9c6174612cf256379a1ed1993a87bccdc6","49f981ca657ac160b5de5919ee5602d48bc8f8aac0805107c2ce4fd41dc9a2a1","56e4e08d95a3a7886266a2b4f66b67065c340480d9f1beb73ed7578aa83c639a","eb4360d3818dcd879ee965ae2f4b3fdfdc4149db921b6be338cb7dc7c2bd6710","1c1275f325f13af001aa5873418cb497a26b4b8271f9ad20a45e33f61ea3f9d9","b33e8426136c4f9b349b02c940d23310d350179f790899733aa097ed76457061","05aab001669a230a88820be09a54031c45d9af2488b27d53d4a9c8880ce73e8f","d93a066d4b8b33335dfff910fb25abb8979f8814f8ba45ea902a1360907da1f6","41e97e42d182b4d5f0733ebaad69294faaa507d95e595f317168b8f2325da9ca","debc734fc99b6e1684ed565946bad008913c769d4d2e400d8722c0c23d079c06","5a9f7e087aacb01fa0cdbc36b703a60367239f62beed2507a507199e4c417549","c7c23798fbf564983ed69c1ced3371970d986aaed4801a6e0fb41862550dc034","921f5bce372610ae8948ade7d82decbd2cf56d263de578976189585edd0abac0","ac11f8b13beef593e2f097450a7e214b23dca0d428babd570a2f39582f10e9ab","2499beb5d3e2b4c606977bcc2e08b6ef77b2ecda70e78e0622f5af3bed95c9ba","a11057410396907b84051cbdb8b0cd7f7049d72b58d2b6ac1c14ac2608191a52","bb630c26d487cc45ed107f4f2d3c2a95434716f6367f059de734c40d288c31eb","67cbce0ccdfa96b25de478a93cc493266c152e256c3c96b3d16d1f811e3d881f","19905c928bc4c016d05d915625bb08568447266c4661232faf89f7ddc4417ccc","26204eb4c326e8c975f1b789cbf345c6820205bded6d72e57246a83918d3bc84","618f25b2d41a99216e71817a3bc578991eee86c858c3f0f62a9e70707f4d279d","4cd2947878536ec078e4115b7d53cdcd4dcecd3a8288760caa79098db4f8f61f","2129e984399e94c82b77a32b975f3371ca5ee96341ab9f123474f1a5a1a9921f","798120aaa4952d68cd4b43d6625524c62a135c2f5a3eb705caee98de2355230d","6047365397173788c34bd71fea2bf07a9036d981212efd059b33e52d2c405e97","d7e25d7c03ccf8b10972c2a3a57e29a8d9024e6dbc4ac223baf633a6e8c7145c","6c2e2dead2d80007ee44c429b925d0a7b86f8f3d4c237b2197f7db9f39545dc6","38fbc8f9610fbf4bf619854b26e28c4fbbab16dc1944c4317a4af9bf1ac08d8e","1bd0470a72e6869c330e6e978f15ef32ba2c245249aca097b410448152e8a06b","dd05d7970a92b789f7df3b2252574b2e60f1b9a3758e2839e167b498b8f77159","7092be1889127b2f319efd5d9bdcc0b5cf6fe0740e47247ed039446045518898","0a3d5dbf7c2091017e697ebf9af0a727571f5d99cb4c19e6856212a745c6c355","d05f9c767924db6fb89f6075acb64c042cebdb12779bbd1aaca12c850b772d49","d032678e20ff0f4b8ef6f1e4823b6ae37931b776e8381676dc9141999909b3d7","3e4ab0e8e96e968ac84a2484104892c881ded1757acd81b5e969b6229851f54c","d43a36641f5812794a3b4a941e3dfb5fa070f9fff64cfd6daf5291cb962c8b05","32468df81188116040636844517fbe4f67fc37af4fe565c7592353df8e11d2f3","c12b5f9bf412c891cad443ef00a378ad2d3f1301f140943414308665a7d90af8","cf1b65c20036885ed99ce1c18aa0a0ed66f42acd6d415e99b48a8fa4105c23ed","173aec8be1be982c8244df6f94880d77a9b766c8c1ec3eb0af662c8dc6da7f2e","08188020373062e07955835a996fda1aff97a89e57d469edc6b9210bd9c8926f","cad5c2c0085a3e3b74f58aa199944b25ed8d24f93f51c99ebe2463e4f1694785","3e2d93a797c41ab081fbcd80e959b7c30d5d1c358f091c22a6ebe416ef7c5e19","c440df5735a3305e7db118bf821efb597c8318910861f735372846db9f7b506b","d6d8de719a75e5d2ed9dd9d6a99296d1337259e1c96166579db50797edd72ede","32b4c732e183bf5d123f88d526ac21b71a681089c18d2d761be342df31179d94","212d16020e7dce1b5509f3b9813de73612de57c6a3d74536714eb88787b96dc3","1a63d5212341783aa49cf78d667bf2a6cd03208ea09620b2fc3e647ae07f4e0d","84ea58841272970e6e3247cba4dbb326cf22764c2f4bbcb03f1c634315bbbcb5","86f9fbecdd848d02c90f861cc9839d8f3449c518a77e77ea65362f6a4126c63b","ecdaf317a4a1e7e3540e2f1b6aae38acd78dd99d564b52f98eea7358ac74416d","c30430960f1a0552b3cdaf1ef8164fdd4f289c782a8912df5180d57bc9ddfc03","a348081c01502c9f87d39d9e4b5dd58e1111b34c62686d6e569c595a0417bb35","eff69aee13c76502a16b756cde9c451fb4b5c4234052f3b3bee9dbfe92e1b1d5","9943f44400939f4ff008a882ff71162f70ba0c2f735c9743fd4645ef5c925fc4","b7836eba6c5173a1683aee8aa1771ff339e795cb9c21411590edb910274febe4","6fe447aa7e6fabc4f6c536f2997e3b1116b7f73dbe5bf3fc8d958bad434e4a84","15d3908d453d14be4dae760122ed5d74ad789a19f1fec2edd4034e57217436e9","ef00bc701f382da70870ab7721ed8f6552a38e332e60370b93cf340b6470845c","18891a02fa046e57b43a543dddc7212086fcb04ae6c8e8f28f8605dd3ccf57ed",{"version":"5980a888624dce1b0937a0d21c623f97056501bb61a8da29cbe07f1a0be2c9a8","affectsGlobalScope":true},"590a41ccab332c66a6aa62746612b03ceb2e92cc1da58c140e90fb7ff6e8c851","dc1d2996f23fe7f0da0b2c843e05c0ac170a36b51da11e58de089d344de93c3b","78ff01b50e7e9761f239527ec70b96171bccc28a08d909243e193db03b6f6983","ed18472ee2247563a26d754dd4c8bd66383013df13ce7c2927b03cab1a27b7e8","28ac9ac1fa163e5f2321fafa49b9931908c0076216ed3c82646d79abdf79775e","07dd4bed8ddab685f82a2125bf3aa41b42e36f28c16a5aec7357b727649076fb","fc15a2216f29b825747c0c3a54d6989518dd0f4aa0b580520e5526b4a47bec8f","c656d5baf3d4a8f358fc083db04b0fda8cb8503a613a9ba42327ecbd7909773c","397c2c81eaeae1388f7459699d7606feecfc304b212eb9113407c1315746a578","c2d923e9adc26a3efe5186f3a4a72413d24c80f03b306c68c30fa146690fb101","d34782833b7d5f72486a5fb926d3d96198706ed76aeaf1d435c748ebcf9169fc","b093e56054755189dd891ea832dec40d729d110a0a3f432fff5ea5ab1078cdde","98affe620e6230a3888b445c32376e4edbf6b1b376a71f2bf9c07bee11fcdd65","1e05491bef32ff48393d605d557152735899da3d9b111ba3588a1800f2927f4a","1ff7813974b1b9a0524c1e5a99aa52a05e79fc7df7749ada75ded8c53fe1b7e0","cd8c517f54d4ff3475755b290d741c8799df3265ce73d454d8fafe423f8ff749","bf431147b104ae92d61de6b43e9f25d27e8d3eaeaffd612e0c0d3bb8e2423926","f0f21604ae8f880c0ab529f00303806fdeadc943e32a25ca063fc8fea0fa063c","8dc4f45212fba9381e1674e8bd934a588730efbb8a6681b661cad8cd09b081c5",{"version":"52bf774bd30177ebb3e450c808d8d46f67896848a942e6203ae78b65b33d0106","signature":"688c437017a53e69ff66aac2036a0d7f6263082f676a408c9998cbd87ea2ec73"},{"version":"8b6ee36fd764378c62dca37041c5a12fd5a77b9e853c78908b7ed1c90dc149e4","signature":"03846acca031c757d910dbc017d846c87574faf90bde82316fb9b8537896d5ee"},{"version":"0d089d33f31b56697d142aa7395738c0323cf761b4c79fd6bf65a54ab1ddf02f","signature":"027c87e1cb049497d4f185bc9b922ce91cad59832da8faf3411e6b298b9deb78"},{"version":"ec0982b9e7d6c1b6c80e2829c5909eefb9ecee687e60621e0bb937e8ad5d1d43","signature":"8478b617a5be940f1b4b4d19d2fc6149c21ac69c4a7e00c8a7db2c2c21aa2274"},{"version":"84c5fc9d0d22f4566791b88d5fc2c24f56508b50c9ce894ac549ebaa158b1fca","signature":"677ea66c6fa02f1cebf82df19f416a8302c7a7d10e2de265b162760fcd865eef"},{"version":"8455135ea42310a73404fa2513e212d170af1191584061f583ec1e0f6b75dd91","signature":"83e4298f0b6834e955ee6a76569d3e5b3192065d47f1daf4535bb9edb16e88cb"},{"version":"73529962207605bdc5285d5e745919b8d57b776daa0f22a14b75cd8a92d63af9","signature":"422fcd2a7fd87f05efdfaa6eab382ca607d5d54e1f175ba2efccd4aacd5433ef"},{"version":"ebe927d8a9739c9d32ef4df28c1c36cf82daa9abba7cdf3f79e320c5e99e99d8","signature":"2421f9c6b1ecedd50818719090a77e9d2748c2339c33f3d4817beebf7a39d211"},{"version":"165c56632fea46c85e2a62f1b4eae600b846ea0deacd3c137fde9bacb845c30e","signature":"79bf9e3846b43e706d181c00f3c1c50ae8fc60e587c97a16e521adc150317624"},{"version":"866e1d2cf16a41851b056a2cc0cdc5f0f00df0435376cc2c723a8c609f61fbd0","signature":"5f5bbca60f0bfed6ff714163c4e962a5e260e59db754c89ee2063403accd03e3"},{"version":"ecfa1b63e3829b310ac968b2cc1cc7016ba76ffb8532439aebecbcbc57173b99","signature":"2f1dda63ade2bd085704674523b56ede942bc8c2c37fe8ed9b9b0fdfd69b1262"},{"version":"51d2f746d7e599a5549f5a946565934b4556bb9155be1eed2c474e25f1474872","signature":"c15585fe8935ed5cfedec39b7d41ec49990973f40faaba4b3e14278861643d79"},{"version":"b1d1378906c54a2f4d230ad69d212beedd2552afe3f7ad171b7eacb4cecc26d7","signature":"f9e60e8f79a7f606f19e02e2d39a24995719767dbe587f564f970bb24e3ca29d"},{"version":"f5a156e5b3783ea0399ac0326b7ab31a00e8874c5fa9b5e26fac217da8b5adfd","signature":"cfa7179e0306fc04d93f062c96e7ae8bad58d0cc4a7aa0dd4494ff9d262b101c"},{"version":"3c9fefca9303bcfd5712de11a3cbda20b3d6e85f29019bc75cab24690fb0f90d","signature":"306683152ff5a6038cf05b03ddff85a15b1bc8e18ef268aad26b02fd8e0e8b9d"},"a11c3e55d22d6379fe0949793e2638a6b43aa6e9def4f7452c3e352a296ef8da",{"version":"2770956c9437d7d66650084891c559ff6bb94200b7e2820940fd5d5dd0efa489","signature":"2faaf4f254008bf5be0e145be10dba35dccfac7116e9083f9d697a476a8e7076"},{"version":"ceee917fd557b841b93f7e13103dfdad79d38fe9962408f538f27db03dc9368d","signature":"15003ff6ed10d259dca775c7e5f7a64b272a9c370b6085db2d42a2d4a1d81579"},{"version":"a1691ae6d70af82f3e26d9e2e021dc5063021bd9c335bfdb40dc97d3574d1b3f","signature":"cd1c566b611a70ff987a79d0465da67649a8ed7e7668feddfcdf6dceb01c09a8"},{"version":"a105417dd540f1a400f0665c877e5d7e48e2efe08f01c2e5c7272256e644faa5","signature":"b3a6ee392811d6cddb38378ebaa373d4a39aa7dc4ecac73497c6b33627e6430b"},{"version":"581b44cf6122e3ad267d6bda2428c214fef3d38b6d7249df9fa6bc240a880a78","signature":"0ca09d92d6469d906a3d1c7192a6294c7f65b75f4f7eb8072bbd1b68c7f021e1"},{"version":"2e6426c1a1ff8561aa5f01d9398426bf06e55307f688464939de3196f0d4c143","signature":"5357bd09c9816a9765e617f86a9b49f85133d0bc0f9c5e29e834f2f8e6d52acb"},{"version":"508279c48de5627ae6c30a0aee01f4391bf32450335d7f09d5dd82acbc4d13c5","signature":"11d546a505f70f9c5f8092916027d8045c280a817b709fcaf2c4e63fa026c89c"},{"version":"557f2e0a4e5ac8a59b7c3068b2b30162fb963d72d50152482ab8c414e81caf37","signature":"008eaae28119118f1c589a1e29ea7fd17277f2280d2d3bfddeacd71fd1671bb5"},{"version":"f45c172ca54fb28d64b2dd04e495f17038034e20f37bd286a9f3eeb286cf1388","signature":"75a8761564c8fc5581b062dd339ea698921baf60e52eae055c8177dfa89eba90"},{"version":"ea696a0517ad69afea472e47eb1f904aba1667f54d4557eb98b8c766469d56a2","signature":"7e125d9abc19f62d1480f6c04a45d7bb2c89153316245ae8b8e5a0234b078c4e"},{"version":"902937c505f88d8b5b32829b4c14243eb740013fd0e2f58e6485324bbfe197a6","signature":"dc7de7650e5a64fc010387db18e84d48fe8f562dbd9caac01e54f83681ac976b"},{"version":"842accda78bb1b6f494f264aae307b84d933486d607e91f6e1d3a4d2e4851783","signature":"430d9683c8e5aaab71f0e3b271c4240cd5120a91191f953722985499af51d7e6"},{"version":"45b1a895868587c78a2ddff937967669b4e1968ea72c01e1c2b6dd5993f53b36","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"99cab9373415bac71e9d2c84279782c0a361b59551d0ca8dfaee8d4c08ed3247","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"ba1fed463e8a21ffddb67a53df3f0d818b351991723736e167d065e2de1c7183",{"version":"22e311fec88bcc49b2b1fb3c9a7c082cd84b3388c9bcc7b9ef08253f6fa74e26","affectsGlobalScope":true},"c186097fd9b86681981cdeba08c0b6bbfcd8b562ab490c25656d85fef8f10c79","0b0c483e991e81c3f26e5f2da53ff26a15994c98c8b89cda1e4156dfc2428111","3340eb7b30bdee5f0349107d4068fd6f2f4712e11a2ba68e203b2f2489350317",{"version":"2000d60bd5195730ffff0d4ce9389003917928502c455ed2a9e296d3bf1a4b42","signature":"56335d3c9b867cc8654c05e633c508dd8de0038157f9958eb8794b7c123bb90e"},{"version":"dfceb5b9355a4a9002a7c291b1c3315511977c73cb23d9c123a72567783a18c0","signature":"b1802850887a3ea11a06df1fc1c65c6579332eefba1e63b3967a73dc937a2574"},{"version":"384fc0e3fa5966f524c96f1782b9d7a005346ba1621c43d0d1d819bf39077fbc","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7fde517b3f03bb21ec3a46ba5f85c6797f8abf27deacb862183126e2f072788e","signature":"8b310edcfec83da25bc4f3adb20a7583bc5dae56d7d06c5b1431b76d390c1b72"},{"version":"894d93831d2afcd26f7362347e4960dd6d53f4153dad08813f3670e1327e387c","signature":"b1802850887a3ea11a06df1fc1c65c6579332eefba1e63b3967a73dc937a2574"},{"version":"8f9eac2c3ae305c25d4ffeff800b9811c8d3ec6a11b142fe96d08a2bc40f6440","signature":"08d6a2d1b004bbcac4249cd5baf6e9c662adc6139939c266b42e0422ef0c68b3"},{"version":"ac8980bdd810c30c444b59cca584c9b61d5ab274fa9474d778970537f3090240","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1c024431c672cf9c6dcdb4d30c5b625435d81a5423b9d45e8de0082e969af8a8","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"eee1b57475023853cd09dd79b8d0d6639b6b82c3baee5863c2f2022b710f4102","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"377ba49d29102653a4b0c72b3870f9c599575df7db3a3fae7a21be5327ff84e2","signature":"c47f5db4df0a5031ed84bc6ee192c412b9e2d4d5e94681af77ccdcc25c851839"},{"version":"377ba49d29102653a4b0c72b3870f9c599575df7db3a3fae7a21be5327ff84e2","signature":"c47f5db4df0a5031ed84bc6ee192c412b9e2d4d5e94681af77ccdcc25c851839"},{"version":"39833acf7547216b2f31b2279dcfec3ed1359dec8adc9d1cb87c695ebf9bff94","signature":"7292d4dc9dac6d815dc30245a4a4a4959845d3a2b84ba0166857e4b23f2d033f"},{"version":"39833acf7547216b2f31b2279dcfec3ed1359dec8adc9d1cb87c695ebf9bff94","signature":"7292d4dc9dac6d815dc30245a4a4a4959845d3a2b84ba0166857e4b23f2d033f"},{"version":"529dd364d169ab3dbbb177ccdc4987c4a6f69187f553f3d36460ab65879ad998","signature":"3919e9d5911da2254732c31942e2cdc0057056ebfc2a16d34041c76a9b58d447"},{"version":"ebea587ca6477b9db29baf75d359924c55ab490fecdc38d7c0f16e589f0d27f9","signature":"0688c25f38e78e052338305d23046c7841074b3da5709a8f9e598ed705b9932b"},{"version":"de411013305dbe5c7a1ac13d2ea16dc36e52e6efd255b4e912fe53862058c649","signature":"2faaf4f254008bf5be0e145be10dba35dccfac7116e9083f9d697a476a8e7076"},"e432b56911b58550616fc4d54c1606f65fe98c74875b81d74601f5f965767c60","cc957354aa3c94c9961ebf46282cfde1e81d107fc5785a61f62c67f1dd3ac2eb","a46a2e69d12afe63876ec1e58d70e5dbee6d3e74132f4468f570c3d69f809f1c","93de1c6dab503f053efe8d304cb522bb3a89feab8c98f307a674a4fae04773e9","3b043cf9a81854a72963fdb57d1884fc4da1cf5be69b5e0a4c5b751e58cb6d88","dd5647a9ccccb2b074dca8a02b00948ac293091ebe73fdf2e6e98f718819f669","0cba3a5d7b81356222594442753cf90dd2892e5ccfe1d262aaca6896ba6c1380","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"c2ab70bbc7a24c42a790890739dd8a0ba9d2e15038b40dff8163a97a5d148c00","affectsGlobalScope":true},"422dbb183fdced59425ca072c8bd09efaa77ce4e2ab928ec0d8a1ce062d2a45a",{"version":"712ba0d43b44d144dfd01593f61af6e2e21cfae83e834d297643e7973e55ed61","affectsGlobalScope":true},"1dab5ab6bcf11de47ab9db295df8c4f1d92ffa750e8f095e88c71ce4c3299628","f71f46ccd5a90566f0a37b25b23bc4684381ab2180bdf6733f4e6624474e1894",{"version":"54e65985a3ee3cec182e6a555e20974ea936fc8b8d1738c14e8ed8a42bd921d4","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","98a3ebfa494b46265634a73459050befba5da8fdc6ca0ef9b7269421780f4ff3","34e5de87d983bc6aefef8b17658556e3157003e8d9555d3cb098c6bef0b5fbc8","cc0b61316c4f37393f1f9595e93b673f4184e9d07f4c127165a490ec4a928668","f27371653aded82b2b160f7a7033fb4a5b1534b6f6081ef7be1468f0f15327d3","c762cd6754b13a461c54b59d0ae0ab7aeef3c292c6cf889873f786ee4d8e75c9","f4ea7d5df644785bd9fbf419930cbaec118f0d8b4160037d2339b8e23c059e79",{"version":"bfea28e6162ed21a0aeed181b623dcf250aa79abf49e24a6b7e012655af36d81","affectsGlobalScope":true},"7a5459efa09ea82088234e6533a203d528c594b01787fb90fba148885a36e8b6","ae97e20f2e10dbeec193d6a2f9cd9a367a1e293e7d6b33b68bacea166afd7792","10d4796a130577d57003a77b95d8723530bbec84718e364aa2129fa8ffba0378","ad41bb744149e92adb06eb953da195115620a3f2ad48e7d3ae04d10762dae197","bf73c576885408d4a176f44a9035d798827cc5020d58284cb18d7573430d9022","7ae078ca42a670445ae0c6a97c029cb83d143d62abd1730efb33f68f0b2c0e82",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"5d0a9ea09d990b5788f867f1c79d4878f86f7384cb7dab38eecbf22f9efd063d","12eea70b5e11e924bb0543aea5eadc16ced318aa26001b453b0d561c2fd0bd1e","08777cd9318d294646b121838574e1dd7acbb22c21a03df84e1f2c87b1ad47f2","08a90bcdc717df3d50a2ce178d966a8c353fd23e5c392fd3594a6e39d9bb6304",{"version":"4cd4cff679c9b3d9239fd7bf70293ca4594583767526916af8e5d5a47d0219c7","affectsGlobalScope":true},"2a12d2da5ac4c4979401a3f6eaafa874747a37c365e4bc18aa2b171ae134d21b","002b837927b53f3714308ecd96f72ee8a053b8aeb28213d8ec6de23ed1608b66","1dc9c847473bb47279e398b22c740c83ea37a5c88bf66629666e3cf4c5b9f99c","a9e4a5a24bf2c44de4c98274975a1a705a0abbaad04df3557c2d3cd8b1727949","00fa7ce8bc8acc560dc341bbfdf37840a8c59e6a67c9bfa3fa5f36254df35db2","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff",{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true},"44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","5f0ed51db151c2cdc4fa3bb0f44ce6066912ad001b607a34e65a96c52eb76248",{"version":"3345c276cab0e76dda86c0fb79104ff915a4580ba0f3e440870e183b1baec476","affectsGlobalScope":true},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","e383ff72aabf294913f8c346f5da1445ae6ad525836d28efd52cbadc01a361a6","f52fbf64c7e480271a9096763c4882d356b05cab05bf56a64e68a95313cd2ce2","59bdb65f28d7ce52ccfc906e9aaf422f8b8534b2d21c32a27d7819be5ad81df7",{"version":"3a2da34079a2567161c1359316a32e712404b56566c45332ac9dcee015ecce9f","affectsGlobalScope":true},"28a2e7383fd898c386ffdcacedf0ec0845e5d1a86b5a43f25b86bc315f556b79","3aff9c8c36192e46a84afe7b926136d520487155154ab9ba982a8b544ea8fc95","a880cf8d85af2e4189c709b0fea613741649c0e40fffb4360ec70762563d5de0","85bbf436a15bbeda4db888be3062d47f99c66fd05d7c50f0f6473a9151b6a070","9f9c49c95ecd25e0cb2587751925976cf64fd184714cb11e213749c80cf0f927","f0c75c08a71f9212c93a719a25fb0320d53f2e50ca89a812640e08f8ad8c408c",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"9cafe917bf667f1027b2bb62e2de454ecd2119c80873ad76fc41d941089753b8","3ebae8c00411116a66fca65b08228ea0cf0b72724701f9b854442100aab55aba","8b06ac3faeacb8484d84ddb44571d8f410697f98d7bfa86c0fda60373a9f5215","7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee","f5638f7c2f12a9a1a57b5c41b3c1ea7db3876c003bab68e6a57afd6bcc169af0","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","7980bf9d2972585cdf76b5a72105f7817be0723ccb2256090f6335f45b462abe","301d7466eb591139c7d456958f732153b3400f3243f68d3321956b43a64769e9","22f13de9e2fe5f0f4724797abd3d34a1cdd6e47ef81fc4933fea3b8bf4ad524b","e3ba509d3dce019b3190ceb2f3fc88e2610ab717122dabd91a9efaa37804040d","cda0cb09b995489b7f4c57f168cd31b83dcbaa7aad49612734fb3c9c73f6e4f2",{"version":"2abad7477cf6761b55c18bea4c21b5a5dcf319748c13696df3736b35f8ac149e","affectsGlobalScope":true},"d38e588a10943bbab1d4ce03d94759bf065ff802a9a72fc57aa75a72f1725b71","96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b","6209c901f30cc321f4b86800d11fad3d67e73a3308f19946b1bc642af0280298","60aaac5fb1858fbd4c4eb40e01706eb227eed9eca5c665564bd146971280dbd3","74b0245c42990ed8a849df955db3f4362c81b13f799ebc981b7bec2d5b414a57","b0d10e46cfe3f6c476b69af02eaa38e4ccc7430221ce3109ae84bb9fb8282298","4266ccd2cf1d6a281efd9c7ddf9efd7daecf76575364148bd233e18919cac3ed","70e9a18da08294f75bf23e46c7d69e67634c0765d355887b9b41f0d959e1426e","105b9a2234dcb06ae922f2cd8297201136d416503ff7d16c72bfc8791e9895c1"],"options":{"composite":true,"declaration":true,"declarationMap":true,"downlevelIteration":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"jsx":2,"noEmitOnError":false,"noImplicitAny":true,"noUnusedLocals":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strictNullChecks":true,"target":1,"tsBuildInfoFile":"./tsconfig.tsbuildinfo"},"fileIdsList":[[211,260],[260],[260,273],[53,190,260],[192,194,260],[190,192,193,260],[53,260],[53,140,260],[69,260],[211,212,213,214,215,260],[211,213,260],[233,260,267],[260,269],[260,270],[260,275,277],[217,260],[220,260],[221,226,260],[222,232,233,240,249,259,260],[222,223,232,240,260],[224,260],[225,226,233,241,260],[226,249,256,260],[227,229,232,240,260],[228,260],[229,230,260],[231,232,260],[232,260],[232,233,234,249,259,260],[232,233,234,249,260],[235,240,249,259,260],[232,233,235,236,240,249,256,259,260],[235,237,249,256,259,260],[217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266],[232,238,260],[239,259,260],[229,232,240,249,260],[241,260],[242,260],[220,243,260],[244,258,260,264],[245,260],[246,260],[232,247,260],[247,248,260,262],[232,249,250,251,260],[249,251,260],[249,250,260],[252,260],[253,260],[232,254,255,260],[254,255,260],[226,240,249,256,260],[257,260],[240,258,260],[221,235,246,259,260],[226,260],[249,260,261],[260,262],[260,263],[221,226,232,234,243,249,259,260,262,264],[249,260,265],[76,77,260],[53,58,64,65,68,71,72,73,76,260],[74,260],[84,260],[53,57,82,260],[53,54,57,58,62,75,76,260],[53,76,105,106,260],[53,54,57,58,62,76,260],[82,91,260],[53,54,62,75,76,93,260],[53,55,58,61,62,65,75,76,260],[53,54,57,62,76,260],[53,54,57,62,260],[53,54,55,58,60,62,63,75,76,260],[53,76,260],[53,75,76,260],[53,54,57,58,61,62,75,76,82,93,260],[53,55,58,260],[53,54,57,60,75,76,93,103,260],[53,54,60,76,103,105,260],[53,54,57,60,62,93,103,260],[53,54,55,58,60,61,75,76,93,260],[58,260],[53,55,58,59,60,61,75,76,260],[82,260],[83,260],[53,54,55,57,58,61,66,67,75,76,260],[58,59,260],[53,64,65,70,75,76,260],[53,56,64,70,75,76,260],[53,58,62,260],[53,118,260],[53,57,260],[57,260],[76,260],[75,260],[66,74,76,260],[53,54,57,58,61,75,76,260],[128,260],[53,56,57,260],[91,260],[44,45,46,47,48,55,56,57,58,59,60,61,62,63,64,65,66,67,68,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,260],[140,260],[46,260],[49,50,51,52,260],[232,235,237,240,259,260,267],[260,287],[260,275],[260,272,276],[260,274],[151,260],[53,141,142,143,144,146,147,148,149,150,157,260],[53,140,147,150,151,260],[143,144,260],[142,143,144,147,260],[143,260],[155,260],[157,260],[144,260],[53,144,260],[141,142,143,144,145,146,147,149,150,151,152,153,154,156,260],[149,260],[158,260],[43,140,166,177,260],[43,53,140,157,159,162,163,164,166,168,169,170,171,172,174,176,260],[43,53,140,162,165,260],[43,157,166,167,168,260],[43,53,140,165,166,168,170,171,177,260],[43,53,260],[43,167,260],[43,168,260],[43,53,140,157,162,163,166,172,191,195,260],[43,140,157,177,195,260],[43,53,140,157,177,179,191,198,260],[43,200,260],[43,157,170,171,173,260],[43,53,140,166,177,191,194,260],[43,53,140,166,179,191,194,260],[43,53,177,183,194,195,260],[43,260],[43,181,260],[43,53,177,180,181,182,183,260],[43,53,157,162,177,260],[43,53,140,180,182,184,260],[43,162,163,165,166,177,178,179,180,182,183,184,185,186,260],[43,53,140,160,161,260],[43,140,160,260],[43,140,260],[43,53,140,260],[43,157,260],[43,157,175,260],[43,53,140,157,175,260],[43,140,157,166,260],[43,140,157,170,171,260],[43,140,165,173,177,260],[53,140,166],[53,157,166,169],[53,140,162,165],[157,166],[53,140,166,177],[53],[191],[53,166,177,191,194],[53,166,179,191,194],[53,177,182,183,187],[53,162,177],[140,184],[162,163,165,166,177,178,179,180,182,183,184,185,186],[53,140],[140,160],[140],[157],[53,157],[140,157,166],[140,157],[177]],"referencedMap":[[213,1],[211,2],[274,3],[192,4],[193,5],[194,6],[191,4],[190,7],[69,8],[70,9],[273,2],[216,10],[212,1],[214,11],[215,1],[268,12],[269,2],[270,13],[271,14],[278,15],[279,2],[280,2],[217,16],[218,16],[220,17],[221,18],[222,19],[223,20],[224,21],[225,22],[226,23],[227,24],[228,25],[229,26],[230,26],[231,27],[232,28],[233,29],[234,30],[219,2],[266,2],[235,31],[236,32],[237,33],[267,34],[238,35],[239,36],[240,37],[241,38],[242,39],[243,40],[244,41],[245,42],[246,43],[247,44],[248,45],[249,46],[251,47],[250,48],[252,49],[253,50],[254,51],[255,52],[256,53],[257,54],[258,55],[259,56],[260,57],[261,58],[262,59],[263,60],[264,61],[265,62],[281,2],[282,2],[51,2],[78,63],[79,2],[74,64],[80,2],[81,65],[85,66],[86,2],[87,67],[88,68],[107,69],[89,2],[90,70],[92,71],[94,72],[95,73],[96,74],[63,74],[97,75],[64,76],[98,77],[99,68],[100,78],[101,79],[102,2],[60,80],[104,81],[106,82],[105,83],[103,84],[65,75],[61,85],[62,86],[108,2],[91,87],[83,87],[84,88],[68,89],[66,2],[67,2],[109,87],[110,90],[111,2],[112,71],[71,91],[72,92],[113,2],[114,93],[115,2],[116,2],[117,2],[119,94],[120,2],[56,7],[121,7],[122,95],[123,96],[124,2],[125,97],[127,97],[126,97],[76,98],[75,99],[77,97],[73,100],[128,2],[129,101],[58,102],[130,66],[131,66],[132,103],[133,87],[118,2],[134,2],[135,2],[136,2],[137,7],[138,2],[82,2],[140,104],[44,2],[45,105],[46,106],[48,2],[47,2],[93,2],[54,2],[139,105],[55,2],[59,85],[57,7],[283,7],[49,2],[53,107],[284,2],[52,2],[285,2],[286,108],[287,2],[288,109],[272,2],[50,2],[276,110],[277,111],[275,112],[149,2],[154,113],[151,114],[158,115],[147,116],[148,117],[141,2],[142,2],[145,116],[144,118],[156,119],[155,120],[153,116],[143,121],[146,122],[157,123],[175,124],[152,2],[150,7],[159,125],[43,2],[8,2],[9,2],[11,2],[10,2],[2,2],[12,2],[13,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[3,2],[4,2],[23,2],[20,2],[21,2],[22,2],[24,2],[25,2],[26,2],[5,2],[27,2],[28,2],[29,2],[30,2],[6,2],[31,2],[32,2],[33,2],[34,2],[7,2],[35,2],[40,2],[41,2],[36,2],[37,2],[38,2],[39,2],[1,2],[42,2],[178,126],[177,127],[166,128],[169,129],[179,130],[164,131],[188,132],[189,133],[196,134],[197,135],[199,136],[201,137],[202,138],[195,139],[198,140],[203,141],[180,142],[182,143],[181,142],[184,144],[183,145],[185,142],[186,146],[170,142],[171,142],[172,142],[187,147],[162,148],[204,149],[205,149],[161,149],[160,131],[206,150],[207,150],[163,151],[208,131],[209,152],[210,152],[176,153],[200,154],[167,142],[168,155],[165,142],[173,156],[174,157]],"exportedModulesMap":[[213,1],[211,2],[274,3],[192,4],[193,5],[194,6],[191,4],[190,7],[69,8],[70,9],[273,2],[216,10],[212,1],[214,11],[215,1],[268,12],[269,2],[270,13],[271,14],[278,15],[279,2],[280,2],[217,16],[218,16],[220,17],[221,18],[222,19],[223,20],[224,21],[225,22],[226,23],[227,24],[228,25],[229,26],[230,26],[231,27],[232,28],[233,29],[234,30],[219,2],[266,2],[235,31],[236,32],[237,33],[267,34],[238,35],[239,36],[240,37],[241,38],[242,39],[243,40],[244,41],[245,42],[246,43],[247,44],[248,45],[249,46],[251,47],[250,48],[252,49],[253,50],[254,51],[255,52],[256,53],[257,54],[258,55],[259,56],[260,57],[261,58],[262,59],[263,60],[264,61],[265,62],[281,2],[282,2],[51,2],[78,63],[79,2],[74,64],[80,2],[81,65],[85,66],[86,2],[87,67],[88,68],[107,69],[89,2],[90,70],[92,71],[94,72],[95,73],[96,74],[63,74],[97,75],[64,76],[98,77],[99,68],[100,78],[101,79],[102,2],[60,80],[104,81],[106,82],[105,83],[103,84],[65,75],[61,85],[62,86],[108,2],[91,87],[83,87],[84,88],[68,89],[66,2],[67,2],[109,87],[110,90],[111,2],[112,71],[71,91],[72,92],[113,2],[114,93],[115,2],[116,2],[117,2],[119,94],[120,2],[56,7],[121,7],[122,95],[123,96],[124,2],[125,97],[127,97],[126,97],[76,98],[75,99],[77,97],[73,100],[128,2],[129,101],[58,102],[130,66],[131,66],[132,103],[133,87],[118,2],[134,2],[135,2],[136,2],[137,7],[138,2],[82,2],[140,104],[44,2],[45,105],[46,106],[48,2],[47,2],[93,2],[54,2],[139,105],[55,2],[59,85],[57,7],[283,7],[49,2],[53,107],[284,2],[52,2],[285,2],[286,108],[287,2],[288,109],[272,2],[50,2],[276,110],[277,111],[275,112],[149,2],[154,113],[151,114],[158,115],[147,116],[148,117],[141,2],[142,2],[145,116],[144,118],[156,119],[155,120],[153,116],[143,121],[146,122],[157,123],[175,124],[152,2],[150,7],[159,125],[43,2],[8,2],[9,2],[11,2],[10,2],[2,2],[12,2],[13,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[3,2],[4,2],[23,2],[20,2],[21,2],[22,2],[24,2],[25,2],[26,2],[5,2],[27,2],[28,2],[29,2],[30,2],[6,2],[31,2],[32,2],[33,2],[34,2],[7,2],[35,2],[40,2],[41,2],[36,2],[37,2],[38,2],[39,2],[1,2],[42,2],[178,158],[177,159],[166,160],[169,161],[179,162],[164,163],[196,164],[199,164],[195,165],[198,166],[184,167],[183,168],[186,169],[187,170],[162,171],[204,172],[205,172],[161,172],[160,163],[206,173],[207,173],[163,171],[208,163],[209,174],[210,174],[176,174],[200,175],[168,176],[173,177],[174,178]],"semanticDiagnosticsPerFile":[213,211,274,192,193,194,191,190,69,70,273,216,212,214,215,268,269,270,271,278,279,280,217,218,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,219,266,235,236,237,267,238,239,240,241,242,243,244,245,246,247,248,249,251,250,252,253,254,255,256,257,258,259,260,261,262,263,264,265,281,282,51,78,79,74,80,81,85,86,87,88,107,89,90,92,94,95,96,63,97,64,98,99,100,101,102,60,104,106,105,103,65,61,62,108,91,83,84,68,66,67,109,110,111,112,71,72,113,114,115,116,117,119,120,56,121,122,123,124,125,127,126,76,75,77,73,128,129,58,130,131,132,133,118,134,135,136,137,138,82,140,44,45,46,48,47,93,54,139,55,59,57,283,49,53,284,52,285,286,287,288,272,50,276,277,275,149,154,151,158,147,148,141,142,145,144,156,155,153,143,146,157,175,152,150,159,43,8,9,11,10,2,12,13,14,15,16,17,18,19,3,4,23,20,21,22,24,25,26,5,27,28,29,30,6,31,32,33,34,7,35,40,41,36,37,38,39,1,42,178,177,166,169,179,164,188,189,196,197,199,201,202,195,198,203,180,182,181,184,183,185,186,170,171,172,187,162,204,205,161,160,206,207,163,208,209,210,176,200,167,168,165,173,174]},"version":"4.7.4"} +\ No newline at end of file +diff --git a/node_modules/@shopify/flash-list/ios/Sources/AutoLayoutView.swift b/node_modules/@shopify/flash-list/ios/Sources/AutoLayoutView.swift +index f18e92c..af1903c 100644 +--- a/node_modules/@shopify/flash-list/ios/Sources/AutoLayoutView.swift ++++ b/node_modules/@shopify/flash-list/ios/Sources/AutoLayoutView.swift +@@ -4,31 +4,35 @@ import UIKit + + /// Container for all RecyclerListView children. This will automatically remove all gaps and overlaps for GridLayouts with flexible spans. + /// Note: This cannot work for masonry layouts i.e, pinterest like layout +-@objc class AutoLayoutView: UIView { ++@objc public class AutoLayoutView: UIView { ++ #if RCT_NEW_ARCH_ENABLED ++ @objc public var onBlankAreaEventHandler: ((CGFloat, CGFloat) -> Void)? ++ #endif ++ + @objc(onBlankAreaEvent) + var onBlankAreaEvent: RCTDirectEventBlock? + +- @objc func setHorizontal(_ horizontal: Bool) { ++ @objc public func setHorizontal(_ horizontal: Bool) { + self.horizontal = horizontal + } + +- @objc func setScrollOffset(_ scrollOffset: Int) { ++ @objc public func setScrollOffset(_ scrollOffset: Int) { + self.scrollOffset = CGFloat(scrollOffset) + } + +- @objc func setWindowSize(_ windowSize: Int) { ++ @objc public func setWindowSize(_ windowSize: Int) { + self.windowSize = CGFloat(windowSize) + } + +- @objc func setRenderAheadOffset(_ renderAheadOffset: Int) { ++ @objc public func setRenderAheadOffset(_ renderAheadOffset: Int) { + self.renderAheadOffset = CGFloat(renderAheadOffset) + } + +- @objc func setEnableInstrumentation(_ enableInstrumentation: Bool) { ++ @objc public func setEnableInstrumentation(_ enableInstrumentation: Bool) { + self.enableInstrumentation = enableInstrumentation + } + +- @objc func setDisableAutoLayout(_ disableAutoLayout: Bool) { ++ @objc public func setDisableAutoLayout(_ disableAutoLayout: Bool) { + self.disableAutoLayout = disableAutoLayout + } + +@@ -46,7 +50,15 @@ import UIKit + /// Tracks where first pixel is drawn in the visible window + private var lastMinBound: CGFloat = 0 + +- override func layoutSubviews() { ++ private var viewsToLayout: [UIView] { ++ #if RCT_NEW_ARCH_ENABLED ++ return superview?.subviews ?? [] ++ #else ++ return subviews ++ #endif ++ } ++ ++ override public func layoutSubviews() { + fixLayout() + super.layoutSubviews() + +@@ -69,12 +81,16 @@ import UIKit + distanceFromWindowEnd: distanceFromWindowEnd + ) + ++ #if RCT_NEW_ARCH_ENABLED ++ onBlankAreaEventHandler?(blankOffsetStart, blankOffsetEnd) ++ #else + onBlankAreaEvent?( + [ + "offsetStart": blankOffsetStart, + "offsetEnd": blankOffsetEnd, + ] + ) ++ #endif + } + + func getScrollView() -> UIScrollView? { +@@ -85,15 +101,21 @@ import UIKit + /// Performance: Sort is needed. Given relatively low number of views in RecyclerListView render tree this should be a non issue. + private func fixLayout() { + guard +- subviews.count > 1, ++ viewsToLayout.count > 1, + // Fixing layout during animation can interfere with it. + layer.animationKeys()?.isEmpty ?? true, + !disableAutoLayout + else { return } +- let cellContainers = subviews +- .compactMap { subview -> CellContainer? in +- if let cellContainer = subview as? CellContainer { ++ let cellContainers = viewsToLayout ++ .compactMap { subview -> CellContainerComponentView? in ++ if let cellContainer = subview as? CellContainerComponentView { + return cellContainer ++ } else if subview is AutoLayoutView { ++ // On Fabric, due to view flattening children of AutoLayoutView are moved one level up, so they appear ++ // as children of AutoLayoutViewComponentView in view hierarchy. viewsToLayout property takes it under ++ // consideration, returning children of AutoLayoutViewComponentView when on Fabric. Because of that ++ // AutoLayoutView may be on the list, in which case we want to ignore it. ++ return nil + } else { + assertionFailure("CellRendererComponent outer view should always be CellContainer. Learn more here: https://shopify.github.io/flash-list/docs/usage#cellrenderercomponent.") + return nil +@@ -106,7 +128,7 @@ import UIKit + + /// Checks for overlaps or gaps between adjacent items and then applies a correction. + /// Performance: RecyclerListView renders very small number of views and this is not going to trigger multiple layouts on the iOS side. +- private func clearGaps(for cellContainers: [CellContainer]) { ++ private func clearGaps(for cellContainers: [CellContainerComponentView]) { + var maxBound: CGFloat = 0 + var minBound: CGFloat = CGFloat(Int.max) + var maxBoundNextCell: CGFloat = 0 +@@ -192,7 +214,7 @@ import UIKit + lastMinBound = minBound + } + +- private func updateLastMaxBoundOverall(currentCell: CellContainer, nextCell: CellContainer) { ++ private func updateLastMaxBoundOverall(currentCell: CellContainerComponentView, nextCell: CellContainerComponentView) { + lastMaxBoundOverall = max(lastMaxBoundOverall, horizontal ? currentCell.frame.maxX : currentCell.frame.maxY, horizontal ? nextCell.frame.maxX : nextCell.frame.maxY) + } + +@@ -217,7 +239,7 @@ import UIKit + + /// It's important to avoid correcting views outside the render window. An item that isn't being recycled might still remain in the view tree. If views outside get considered then gaps between unused items will cause algorithm to fail. + func isWithinBounds( +- _ cellContainer: CellContainer, ++ _ cellContainer: CellContainerComponentView, + scrollOffset: CGFloat, + renderAheadOffset: CGFloat, + windowSize: CGFloat, +@@ -260,10 +282,10 @@ import UIKit + } + + private func footerDiff() -> CGFloat { +- if subviews.count == 0 { ++ if viewsToLayout.count == 0 { + lastMaxBoundOverall = 0 +- } else if subviews.count == 1 { +- let firstChild = subviews[0] ++ } else if viewsToLayout.count == 1 { ++ let firstChild = viewsToLayout[0] + lastMaxBoundOverall = horizontal ? firstChild.frame.maxX : firstChild.frame.maxY + } + let autoLayoutEnd = horizontal ? frame.width : frame.height +@@ -271,6 +293,13 @@ import UIKit + } + + private func footer() -> UIView? { +- return superview?.subviews.first(where:{($0 as? CellContainer)?.index == -1}) ++ // On Fabric, AutoLayoutView is wrapped with AutoLayoutViewComponentView, so we need to go up one more level ++ #if RCT_NEW_ARCH_ENABLED ++ let parentSubviews = superview?.superview?.subviews ++ #else ++ let parentSubviews = superview?.subviews ++ #endif ++ ++ return parentSubviews?.first(where:{($0 as? CellContainerComponentView)?.index == -1}) + } + } +diff --git a/node_modules/@shopify/flash-list/ios/Sources/AutoLayoutViewComponentView.h b/node_modules/@shopify/flash-list/ios/Sources/AutoLayoutViewComponentView.h +new file mode 100644 +index 0000000..1ae0b66 +--- /dev/null ++++ b/node_modules/@shopify/flash-list/ios/Sources/AutoLayoutViewComponentView.h +@@ -0,0 +1,16 @@ ++#ifndef AutoLayoutViewComponentView_h ++#define AutoLayoutViewComponentView_h ++ ++#ifdef RCT_NEW_ARCH_ENABLED ++ ++#import ++#import ++ ++@interface AutoLayoutViewComponentView : RCTViewComponentView ++ ++@end ++ ++ ++#endif /* RCT_NEW_ARCH_ENABLED */ ++ ++#endif /* AutoLayoutViewComponentView_h */ +diff --git a/node_modules/@shopify/flash-list/ios/Sources/AutoLayoutViewComponentView.mm b/node_modules/@shopify/flash-list/ios/Sources/AutoLayoutViewComponentView.mm +new file mode 100644 +index 0000000..2d4295c +--- /dev/null ++++ b/node_modules/@shopify/flash-list/ios/Sources/AutoLayoutViewComponentView.mm +@@ -0,0 +1,80 @@ ++#ifdef RCT_NEW_ARCH_ENABLED ++#import "AutoLayoutViewComponentView.h" ++#import ++#import ++ ++#import ++#import ++#import ++#import ++ ++#import "RCTFabricComponentsPlugins.h" ++#import ++ ++using namespace facebook::react; ++ ++@interface AutoLayoutViewComponentView () ++@end ++ ++@implementation AutoLayoutViewComponentView ++{ ++ AutoLayoutView *_autoLayoutView; ++} ++ ++- (instancetype)initWithFrame:(CGRect)frame ++{ ++ if (self = [super initWithFrame:frame]) { ++ static const auto defaultProps = std::make_shared(); ++ _props = defaultProps; ++ _autoLayoutView = [[AutoLayoutView alloc] initWithFrame:self.bounds]; ++ ++ // Due to view flattening, AutoLayoutView's children get moved to its parent (AutoLayoutViewComponentView) and ++ // AutoLayoutView is positioned above them consuming all events. Turning off userInteraction prevents that. ++ _autoLayoutView.userInteractionEnabled = false; ++ ++ self.contentView = _autoLayoutView; ++ ++ __weak AutoLayoutViewComponentView* weakSelf = self; ++ _autoLayoutView.onBlankAreaEventHandler = ^(CGFloat start, CGFloat end) { ++ AutoLayoutViewComponentView *strongSelf = weakSelf; ++ if (strongSelf != nullptr && strongSelf->_eventEmitter != nullptr) { ++ std::dynamic_pointer_cast(strongSelf->_eventEmitter) ++ ->onBlankAreaEvent(facebook::react::AutoLayoutViewEventEmitter::OnBlankAreaEvent{ ++ .offsetStart = (int) floor(start), ++ .offsetEnd = (int) floor(end), ++ }); ++ } ++ }; ++ } ++ ++ return self; ++} ++ ++#pragma mark - RCTComponentViewProtocol ++ +++ (ComponentDescriptorProvider)componentDescriptorProvider ++{ ++ return concreteComponentDescriptorProvider(); ++} ++ ++- (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared &)oldProps ++{ ++ const auto &newProps = *std::static_pointer_cast(props); ++ ++ [_autoLayoutView setHorizontal:newProps.horizontal]; ++ [_autoLayoutView setScrollOffset:newProps.scrollOffset]; ++ [_autoLayoutView setWindowSize:newProps.windowSize]; ++ [_autoLayoutView setRenderAheadOffset:newProps.renderAheadOffset]; ++ [_autoLayoutView setEnableInstrumentation:newProps.enableInstrumentation]; ++ [_autoLayoutView setDisableAutoLayout:newProps.disableAutoLayout]; ++ ++ [super updateProps:props oldProps:oldProps]; ++} ++@end ++ ++Class AutoLayoutViewCls(void) ++{ ++ return AutoLayoutViewComponentView.class; ++} ++ ++#endif /* RCT_NEW_ARCH_ENABLED */ +diff --git a/node_modules/@shopify/flash-list/ios/Sources/AutoLayoutViewManager.m b/node_modules/@shopify/flash-list/ios/Sources/AutoLayoutViewManager.mm +similarity index 100% +rename from node_modules/@shopify/flash-list/ios/Sources/AutoLayoutViewManager.m +rename to node_modules/@shopify/flash-list/ios/Sources/AutoLayoutViewManager.mm +diff --git a/node_modules/@shopify/flash-list/ios/Sources/CellContainer.swift b/node_modules/@shopify/flash-list/ios/Sources/CellContainer.swift +deleted file mode 100644 +index 7f09ce7..0000000 +--- a/node_modules/@shopify/flash-list/ios/Sources/CellContainer.swift ++++ /dev/null +@@ -1,9 +0,0 @@ +-import Foundation +- +-@objc class CellContainer: UIView { +- var index: Int = -1 +- +- @objc func setIndex(_ index: Int) { +- self.index = index +- } +-} +diff --git a/node_modules/@shopify/flash-list/ios/Sources/CellContainerComponentView.h b/node_modules/@shopify/flash-list/ios/Sources/CellContainerComponentView.h +new file mode 100644 +index 0000000..ca1cbfe +--- /dev/null ++++ b/node_modules/@shopify/flash-list/ios/Sources/CellContainerComponentView.h +@@ -0,0 +1,18 @@ ++#ifndef CellContainer_h ++#define CellContainer_h ++ ++#import ++ ++#ifdef RCT_NEW_ARCH_ENABLED ++#import ++ ++@interface CellContainerComponentView : RCTViewComponentView ++#else ++@interface CellContainerComponentView : UIView ++#endif ++ ++@property int64_t index; ++ ++@end ++ ++#endif /* CellContainer_h */ +diff --git a/node_modules/@shopify/flash-list/ios/Sources/CellContainerComponentView.mm b/node_modules/@shopify/flash-list/ios/Sources/CellContainerComponentView.mm +new file mode 100644 +index 0000000..3a1c57e +--- /dev/null ++++ b/node_modules/@shopify/flash-list/ios/Sources/CellContainerComponentView.mm +@@ -0,0 +1,57 @@ ++#import "CellContainerComponentView.h" ++ ++#ifdef RCT_NEW_ARCH_ENABLED ++#import ++ ++#import ++#import ++#import ++#import ++ ++#import "RCTFabricComponentsPlugins.h" ++#import ++ ++using namespace facebook::react; ++ ++@interface CellContainerComponentView () ++@end ++ ++@implementation CellContainerComponentView ++ ++- (instancetype)initWithFrame:(CGRect)frame ++{ ++ if (self = [super initWithFrame:frame]) { ++ static const auto defaultProps = std::make_shared(); ++ _props = defaultProps; ++ ++ self.userInteractionEnabled = true; ++ } ++ ++ return self; ++} ++ ++#pragma mark - RCTComponentViewProtocol ++ +++ (ComponentDescriptorProvider)componentDescriptorProvider ++{ ++ return concreteComponentDescriptorProvider(); ++} ++ ++- (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared &)oldProps ++{ ++ const auto &newProps = *std::static_pointer_cast(props); ++ ++ self.index = newProps.index; ++ ++ [super updateProps:props oldProps:oldProps]; ++} ++@end ++ ++Class CellContainerCls(void) ++{ ++ return CellContainerComponentView.class; ++} ++#else ++@implementation CellContainerComponentView ++@end ++#endif /* RCT_NEW_ARCH_ENABLED */ +diff --git a/node_modules/@shopify/flash-list/ios/Sources/CellContainerManager.m b/node_modules/@shopify/flash-list/ios/Sources/CellContainerManager.mm +similarity index 100% +rename from node_modules/@shopify/flash-list/ios/Sources/CellContainerManager.m +rename to node_modules/@shopify/flash-list/ios/Sources/CellContainerManager.mm +diff --git a/node_modules/@shopify/flash-list/ios/Sources/CellContainerManager.swift b/node_modules/@shopify/flash-list/ios/Sources/CellContainerManager.swift +index a36fccd..dbe6c14 100644 +--- a/node_modules/@shopify/flash-list/ios/Sources/CellContainerManager.swift ++++ b/node_modules/@shopify/flash-list/ios/Sources/CellContainerManager.swift +@@ -3,7 +3,7 @@ import Foundation + @objc(CellContainerManager) + class CellContainerManager: RCTViewManager { + override func view() -> UIView! { +- return CellContainer() ++ return CellContainerComponentView() + } + + override static func requiresMainQueueSetup() -> Bool { +diff --git a/node_modules/@shopify/flash-list/ios/Sources/FlatListPro-Bridging-Header.h b/node_modules/@shopify/flash-list/ios/Sources/FlatListPro-Bridging-Header.h +index e3e23d5..7ed83ce 100644 +--- a/node_modules/@shopify/flash-list/ios/Sources/FlatListPro-Bridging-Header.h ++++ b/node_modules/@shopify/flash-list/ios/Sources/FlatListPro-Bridging-Header.h +@@ -4,5 +4,8 @@ + #import + #import + #import ++#import ++ ++#import "CellContainerComponentView.h" + + #endif /* FlatListPro_Bridging_Header_h */ +diff --git a/node_modules/@shopify/flash-list/package.json b/node_modules/@shopify/flash-list/package.json +index b90c287..ccca16d 100644 +--- a/node_modules/@shopify/flash-list/package.json ++++ b/node_modules/@shopify/flash-list/package.json +@@ -25,6 +25,7 @@ + "author": "shopify", + "license": "MIT", + "homepage": "https://shopify.github.io/flash-list/", ++ "react-native": "src/index.ts", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { +@@ -64,7 +65,7 @@ + "@react-native-community/eslint-config": "^3.0.3", + "@shopify/eslint-plugin": "^41.3.1", + "@types/jest": "^28.1.3", +- "@types/react-native": "0.72.2", ++ "@types/react-native": "^0.72.2", + "babel-jest": "^28.1.1", + "enhanced-resolve": "^5.9.3", + "eslint": "8.18.0", +@@ -74,7 +75,7 @@ + "prettier": "^2.7.1", + "react": "17.0.2", + "react-native": "0.68.5", +- "typescript": "^4.7.4" ++ "typescript": "4.8.4" + }, + "files": [ + "android", +@@ -87,5 +88,10 @@ + "dependencies": { + "recyclerlistview": "4.2.0", + "tslib": "2.4.0" ++ }, ++ "codegenConfig": { ++ "name": "rnflashlist", ++ "type": "components", ++ "jsSrcsDir": "./src/fabric" + } + } +diff --git a/node_modules/@shopify/flash-list/src/FlashList.tsx b/node_modules/@shopify/flash-list/src/FlashList.tsx +index 64748fe..87dea16 100644 +--- a/node_modules/@shopify/flash-list/src/FlashList.tsx ++++ b/node_modules/@shopify/flash-list/src/FlashList.tsx +@@ -827,6 +827,12 @@ class FlashList extends React.PureComponent< + return this.rlvRef?.getScrollableNode?.() || null; + } + ++ public getNativeScrollRef(): number | null { ++ // eslint-disable-next-line @typescript-eslint/ban-ts-comment ++ // @ts-ignore ++ return this.rlvRef?.getNativeScrollRef?.() || null; ++ } ++ + /** + * Allows access to internal recyclerlistview. This is useful for enabling access to its public APIs. + * Warning: We may swap recyclerlistview for something else in the future. Use with caution. +diff --git a/node_modules/@shopify/flash-list/src/fabric/AutoLayoutNativeComponent.ts b/node_modules/@shopify/flash-list/src/fabric/AutoLayoutNativeComponent.ts +new file mode 100644 +index 0000000..93750de +--- /dev/null ++++ b/node_modules/@shopify/flash-list/src/fabric/AutoLayoutNativeComponent.ts +@@ -0,0 +1,24 @@ ++import codegenNativeComponent from "react-native/Libraries/Utilities/codegenNativeComponent"; ++import type { ViewProps } from "react-native"; ++import type { ++ Int32, ++ Double, ++ DirectEventHandler, ++} from "react-native/Libraries/Types/CodegenTypes"; ++ ++type BlankAreaEvent = Readonly<{ ++ offsetStart: Int32; ++ offsetEnd: Int32; ++}>; ++ ++interface NativeProps extends ViewProps { ++ horizontal?: boolean; ++ scrollOffset?: Double; ++ windowSize?: Double; ++ renderAheadOffset?: Double; ++ enableInstrumentation?: boolean; ++ disableAutoLayout?: boolean; ++ onBlankAreaEvent?: DirectEventHandler; ++} ++ ++export default codegenNativeComponent("AutoLayoutView"); +diff --git a/node_modules/@shopify/flash-list/src/fabric/CellContainerNativeComponent.ts b/node_modules/@shopify/flash-list/src/fabric/CellContainerNativeComponent.ts +new file mode 100644 +index 0000000..dd284ac +--- /dev/null ++++ b/node_modules/@shopify/flash-list/src/fabric/CellContainerNativeComponent.ts +@@ -0,0 +1,9 @@ ++import codegenNativeComponent from "react-native/Libraries/Utilities/codegenNativeComponent"; ++import type { Int32 } from "react-native/Libraries/Types/CodegenTypes"; ++import type { ViewProps } from "react-native"; ++ ++interface NativeProps extends ViewProps { ++ index?: Int32; ++} ++ ++export default codegenNativeComponent("CellContainer"); diff --git a/patches/@ua+react-native-airship+15.3.1.patch b/patches/@ua+react-native-airship+15.3.1.patch new file mode 100644 index 000000000000..1ab11c1f7444 --- /dev/null +++ b/patches/@ua+react-native-airship+15.3.1.patch @@ -0,0 +1,24 @@ +diff --git a/node_modules/@ua/react-native-airship/react-native-airship.podspec b/node_modules/@ua/react-native-airship/react-native-airship.podspec +index 5e0ce2d..4456f61 100644 +--- a/node_modules/@ua/react-native-airship/react-native-airship.podspec ++++ b/node_modules/@ua/react-native-airship/react-native-airship.podspec +@@ -20,18 +20,7 @@ Pod::Spec.new do |s| + + # Don't install the dependencies when we run `pod install` in the old architecture. + if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then +- s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1" +- s.pod_target_xcconfig = { +- "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"", +- "OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1", +- "CLANG_CXX_LANGUAGE_STANDARD" => "c++17" +- } +- s.dependency "React-Codegen" +- s.dependency "React-RCTFabric" +- s.dependency "RCT-Folly" +- s.dependency "RCTRequired" +- s.dependency "RCTTypeSafety" +- s.dependency "ReactCommon/turbomodule/core" ++ install_modules_dependencies(s) + end + + diff --git a/patches/expo-modules-core+1.11.8.patch b/patches/expo-modules-core+1.11.8+001+initial.patch similarity index 100% rename from patches/expo-modules-core+1.11.8.patch rename to patches/expo-modules-core+1.11.8+001+initial.patch diff --git a/patches/expo-modules-core+1.11.8+002+disableViewRecycling.patch b/patches/expo-modules-core+1.11.8+002+disableViewRecycling.patch new file mode 100644 index 000000000000..4546e6cd6244 --- /dev/null +++ b/patches/expo-modules-core+1.11.8+002+disableViewRecycling.patch @@ -0,0 +1,16 @@ +diff --git a/node_modules/expo-modules-core/ios/Fabric/ExpoFabricViewObjC.mm b/node_modules/expo-modules-core/ios/Fabric/ExpoFabricViewObjC.mm +index 96bba7d..6e0b439 100644 +--- a/node_modules/expo-modules-core/ios/Fabric/ExpoFabricViewObjC.mm ++++ b/node_modules/expo-modules-core/ios/Fabric/ExpoFabricViewObjC.mm +@@ -155,6 +155,11 @@ - (void)updateProps:(const facebook::react::Props::Shared &)props oldProps:(cons + [self viewDidUpdateProps]; + } + +++ (BOOL)shouldBeRecycled ++{ ++ return NO; ++} ++ + - (void)updateEventEmitter:(const react::EventEmitter::Shared &)eventEmitter + { + [super updateEventEmitter:eventEmitter]; diff --git a/patches/lottie-react-native+6.5.1.patch b/patches/lottie-react-native+6.5.1.patch new file mode 100644 index 000000000000..ada142440749 --- /dev/null +++ b/patches/lottie-react-native+6.5.1.patch @@ -0,0 +1,16 @@ +diff --git a/node_modules/lottie-react-native/ios/Fabric/LottieAnimationViewComponentView.mm b/node_modules/lottie-react-native/ios/Fabric/LottieAnimationViewComponentView.mm +index a4be628..d8f304e 100644 +--- a/node_modules/lottie-react-native/ios/Fabric/LottieAnimationViewComponentView.mm ++++ b/node_modules/lottie-react-native/ios/Fabric/LottieAnimationViewComponentView.mm +@@ -40,6 +40,11 @@ - (instancetype) initWithFrame:(CGRect)frame + + #pragma mark - RCTComponentViewProtocol + +++ (BOOL)shouldBeRecycled ++{ ++ return NO; ++} ++ + + (ComponentDescriptorProvider)componentDescriptorProvider + { + return concreteComponentDescriptorProvider(); diff --git a/patches/react-native+0.73.2+001+initial.patch b/patches/react-native+0.73.4+001+initial.patch similarity index 100% rename from patches/react-native+0.73.2+001+initial.patch rename to patches/react-native+0.73.4+001+initial.patch diff --git a/patches/react-native+0.73.4+002+SuspenseFix.patch b/patches/react-native+0.73.4+002+SuspenseFix.patch new file mode 100644 index 000000000000..75fc57929a00 --- /dev/null +++ b/patches/react-native+0.73.4+002+SuspenseFix.patch @@ -0,0 +1,74 @@ +diff --git a/node_modules/react-native/Libraries/Renderer/implementations/ReactFabric-dev.js b/node_modules/react-native/Libraries/Renderer/implementations/ReactFabric-dev.js +index 1c5266e..d072621 100644 +--- a/node_modules/react-native/Libraries/Renderer/implementations/ReactFabric-dev.js ++++ b/node_modules/react-native/Libraries/Renderer/implementations/ReactFabric-dev.js +@@ -20554,20 +20554,20 @@ function finishConcurrentRender(root, exitStatus, lanes) { + + var _msUntilTimeout = jnd(timeElapsedMs) - timeElapsedMs; // Don't bother with a very short suspense time. + +- if (_msUntilTimeout > 10) { +- // Instead of committing the fallback immediately, wait for more data +- // to arrive. +- root.timeoutHandle = scheduleTimeout( +- commitRoot.bind( +- null, +- root, +- workInProgressRootRecoverableErrors, +- workInProgressTransitions +- ), +- _msUntilTimeout +- ); +- break; +- } ++ // if (_msUntilTimeout > 10) { ++ // // Instead of committing the fallback immediately, wait for more data ++ // // to arrive. ++ // root.timeoutHandle = scheduleTimeout( ++ // commitRoot.bind( ++ // null, ++ // root, ++ // workInProgressRootRecoverableErrors, ++ // workInProgressTransitions ++ // ), ++ // _msUntilTimeout ++ // ); ++ // break; ++ // } + } // Commit the placeholder. + + commitRoot( +diff --git a/node_modules/react-native/Libraries/Renderer/implementations/ReactFabric-prod.js b/node_modules/react-native/Libraries/Renderer/implementations/ReactFabric-prod.js +index b85648d..8adba02 100644 +--- a/node_modules/react-native/Libraries/Renderer/implementations/ReactFabric-prod.js ++++ b/node_modules/react-native/Libraries/Renderer/implementations/ReactFabric-prod.js +@@ -6702,18 +6702,18 @@ function performConcurrentWorkOnRoot(root, didTimeout) { + : 4320 > lanes + ? 4320 + : 1960 * ceil(lanes / 1960)) - lanes; +- if (10 < lanes) { +- root.timeoutHandle = scheduleTimeout( +- commitRoot.bind( +- null, +- root, +- workInProgressRootRecoverableErrors, +- workInProgressTransitions +- ), +- lanes +- ); +- break; +- } ++ // if (10 < lanes) { ++ // root.timeoutHandle = scheduleTimeout( ++ // commitRoot.bind( ++ // null, ++ // root, ++ // workInProgressRootRecoverableErrors, ++ // workInProgressTransitions ++ // ), ++ // lanes ++ // ); ++ // break; ++ // } + commitRoot( + root, + workInProgressRootRecoverableErrors, diff --git a/patches/react-native+0.73.4+003+iOSFontResolution.patch b/patches/react-native+0.73.4+003+iOSFontResolution.patch new file mode 100644 index 000000000000..99abb9481d20 --- /dev/null +++ b/patches/react-native+0.73.4+003+iOSFontResolution.patch @@ -0,0 +1,57 @@ +diff --git a/node_modules/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.mm b/node_modules/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.mm +index 4f8d5aa..18171a6 100644 +--- a/node_modules/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.mm ++++ b/node_modules/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.mm +@@ -35,9 +35,6 @@ static RCTFontProperties RCTResolveFontProperties( + { + fontProperties.family = fontProperties.family.length ? fontProperties.family : baseFontProperties.family; + fontProperties.size = !isnan(fontProperties.size) ? fontProperties.size : baseFontProperties.size; +- fontProperties.weight = !isnan(fontProperties.weight) ? fontProperties.weight : baseFontProperties.weight; +- fontProperties.style = +- fontProperties.style != RCTFontStyleUndefined ? fontProperties.style : baseFontProperties.style; + fontProperties.variant = + fontProperties.variant != RCTFontVariantUndefined ? fontProperties.variant : baseFontProperties.variant; + return fontProperties; +@@ -116,9 +113,14 @@ static RCTFontStyle RCTGetFontStyle(UIFont *font) + if ([fontProperties.family isEqualToString:defaultFontProperties.family]) { + // Handle system font as special case. This ensures that we preserve + // the specific metrics of the standard system font as closely as possible. ++ fontProperties.weight = !isnan(fontProperties.weight) ? fontProperties.weight : defaultFontProperties.weight; ++ fontProperties.style = ++ fontProperties.style != RCTFontStyleUndefined ? fontProperties.style : defaultFontProperties.style; + font = RCTDefaultFontWithFontProperties(fontProperties); + } else { + NSArray *fontNames = [UIFont fontNamesForFamilyName:fontProperties.family]; ++ UIFontWeight fontWeight = fontProperties.weight; ++ RCTFontStyle fontStyle = fontProperties.style; + + if (fontNames.count == 0) { + // Gracefully handle being given a font name rather than font family, for +@@ -129,18 +131,24 @@ static RCTFontStyle RCTGetFontStyle(UIFont *font) + // Failback to system font. + font = [UIFont systemFontOfSize:effectiveFontSize weight:fontProperties.weight]; + } +- } else { ++ ++ fontNames = [UIFont fontNamesForFamilyName:font.familyName]; ++ fontWeight = isnan(fontWeight) ? RCTGetFontWeight(font) : fontWeight; ++ fontStyle = fontStyle == RCTFontStyleUndefined ? RCTGetFontStyle(font) : fontStyle; ++ } ++ ++ if (fontNames.count != 0) { + // Get the closest font that matches the given weight for the fontFamily + CGFloat closestWeight = INFINITY; + for (NSString *name in fontNames) { + UIFont *fontMatch = [UIFont fontWithName:name size:effectiveFontSize]; + +- if (RCTGetFontStyle(fontMatch) != fontProperties.style) { ++ if (RCTGetFontStyle(fontMatch) != fontStyle) { + continue; + } + + CGFloat testWeight = RCTGetFontWeight(fontMatch); +- if (ABS(testWeight - fontProperties.weight) < ABS(closestWeight - fontProperties.weight)) { ++ if (ABS(testWeight - fontWeight) < ABS(closestWeight - fontWeight)) { + font = fontMatch; + closestWeight = testWeight; + } diff --git a/patches/react-native+0.73.4+004+AndroidModalSize.patch b/patches/react-native+0.73.4+004+AndroidModalSize.patch new file mode 100644 index 000000000000..d7adf15f790d --- /dev/null +++ b/patches/react-native+0.73.4+004+AndroidModalSize.patch @@ -0,0 +1,142 @@ +diff --git a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ModalHostHelper.java b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ModalHostHelper.java +deleted file mode 100644 +index 3a226c0..0000000 +--- a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ModalHostHelper.java ++++ /dev/null +@@ -1,63 +0,0 @@ +-/* +- * Copyright (c) Meta Platforms, Inc. and affiliates. +- * +- * This source code is licensed under the MIT license found in the +- * LICENSE file in the root directory of this source tree. +- */ +- +-package com.facebook.react.views.modal; +- +-import android.content.Context; +-import android.content.res.Resources; +-import android.content.res.TypedArray; +-import android.graphics.Point; +-import android.view.Display; +-import android.view.WindowManager; +-import com.facebook.infer.annotation.Assertions; +- +-/** Helper class for Modals. */ +-/*package*/ class ModalHostHelper { +- +- private static final Point MIN_POINT = new Point(); +- private static final Point MAX_POINT = new Point(); +- private static final Point SIZE_POINT = new Point(); +- +- /** +- * To get the size of the screen, we use information from the WindowManager and default Display. +- * We don't use DisplayMetricsHolder, or Display#getSize() because they return values that include +- * the status bar. We only want the values of what will actually be shown on screen. We use +- * Display#getSize() to determine if the screen is in portrait or landscape. We don't use +- * getRotation because the 'natural' rotation will be portrait on phones and landscape on tablets. +- * This should only be called on the native modules/shadow nodes thread. +- */ +- public static Point getModalHostSize(Context context) { +- WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); +- Display display = Assertions.assertNotNull(wm).getDefaultDisplay(); +- // getCurrentSizeRange will return the min and max width and height that the window can be +- display.getCurrentSizeRange(MIN_POINT, MAX_POINT); +- // getSize will return the dimensions of the screen in its current orientation +- display.getSize(SIZE_POINT); +- +- int[] attrs = {android.R.attr.windowFullscreen}; +- Resources.Theme theme = context.getTheme(); +- TypedArray ta = theme.obtainStyledAttributes(attrs); +- boolean windowFullscreen = ta.getBoolean(0, false); +- +- // We need to add the status bar height to the height if we have a fullscreen window, +- // because Display.getCurrentSizeRange doesn't include it. +- Resources resources = context.getResources(); +- int statusBarId = resources.getIdentifier("status_bar_height", "dimen", "android"); +- int statusBarHeight = 0; +- if (windowFullscreen && statusBarId > 0) { +- statusBarHeight = (int) resources.getDimension(statusBarId); +- } +- +- if (SIZE_POINT.x < SIZE_POINT.y) { +- // If we are vertical the width value comes from min width and height comes from max height +- return new Point(MIN_POINT.x, MAX_POINT.y + statusBarHeight); +- } else { +- // If we are horizontal the width value comes from max width and height comes from min height +- return new Point(MAX_POINT.x, MIN_POINT.y + statusBarHeight); +- } +- } +-} +diff --git a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ModalHostShadowNode.java b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ModalHostShadowNode.java +deleted file mode 100644 +index 7288fe0..0000000 +--- a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ModalHostShadowNode.java ++++ /dev/null +@@ -1,37 +0,0 @@ +-/* +- * Copyright (c) Meta Platforms, Inc. and affiliates. +- * +- * This source code is licensed under the MIT license found in the +- * LICENSE file in the root directory of this source tree. +- */ +- +-package com.facebook.react.views.modal; +- +-import android.graphics.Point; +-import com.facebook.react.uimanager.LayoutShadowNode; +-import com.facebook.react.uimanager.ReactShadowNodeImpl; +- +-/** +- * We implement the Modal by using an Android Dialog. That will fill the entire window of the +- * application. To get layout to work properly, we need to layout all the elements within the +- * Modal's inner content view as if they can fill the entire window. To do that, we need to +- * explicitly set the styleWidth and styleHeight on the LayoutShadowNode of the child of this node +- * to be the window size. This will then cause the children of the Modal to layout as if they can +- * fill the window. +- */ +-class ModalHostShadowNode extends LayoutShadowNode { +- +- public ModalHostShadowNode() {} +- +- /** +- * We need to set the styleWidth and styleHeight of the one child (represented by the +- * within the in Modal.js. This needs to fill the entire window. +- */ +- @Override +- public void addChildAt(ReactShadowNodeImpl child, int i) { +- super.addChildAt(child, i); +- Point modalSize = ModalHostHelper.getModalHostSize(getThemedContext()); +- child.setStyleWidth(modalSize.x); +- child.setStyleHeight(modalSize.y); +- } +-} +diff --git a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java +index 74c6b8e..0d447e5 100644 +--- a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java ++++ b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java +@@ -50,16 +50,6 @@ public class ReactModalHostManager extends ViewGroupManager + return new ReactModalHostView(reactContext); + } + +- @Override +- public LayoutShadowNode createShadowNodeInstance() { +- return new ModalHostShadowNode(); +- } +- +- @Override +- public Class getShadowNodeClass() { +- return ModalHostShadowNode.class; +- } +- + @Override + public void onDropViewInstance(ReactModalHostView view) { + super.onDropViewInstance(view); +@@ -168,8 +158,6 @@ public class ReactModalHostManager extends ViewGroupManager + public Object updateState( + ReactModalHostView view, ReactStylesDiffMap props, StateWrapper stateWrapper) { + view.setStateWrapper(stateWrapper); +- Point modalSize = ModalHostHelper.getModalHostSize(view.getContext()); +- view.updateState(modalSize.x, modalSize.y); + return null; + } + diff --git a/patches/react-native+0.73.4+005+TextInputs.patch b/patches/react-native+0.73.4+005+TextInputs.patch new file mode 100644 index 000000000000..a7ba5ae3b9dd --- /dev/null +++ b/patches/react-native+0.73.4+005+TextInputs.patch @@ -0,0 +1,61 @@ +diff --git a/node_modules/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm b/node_modules/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +index e7b69bf..9f691c9 100644 +--- a/node_modules/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm ++++ b/node_modules/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +@@ -115,6 +115,10 @@ - (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared & + [self _setMultiline:newTextInputProps.traits.multiline]; + } + ++ if (newTextInputProps.traits.showSoftInputOnFocus != oldTextInputProps.traits.showSoftInputOnFocus) { ++ [self _setShowSoftInputOnFocus:newTextInputProps.traits.showSoftInputOnFocus]; ++ } ++ + if (newTextInputProps.traits.autocapitalizationType != oldTextInputProps.traits.autocapitalizationType) { + _backedTextInputView.autocapitalizationType = + RCTUITextAutocapitalizationTypeFromAutocapitalizationType(newTextInputProps.traits.autocapitalizationType); +@@ -618,6 +622,25 @@ - (void)_setMultiline:(BOOL)multiline + RCTCopyBackedTextInput(_backedTextInputView, backedTextInputView); + _backedTextInputView = backedTextInputView; + [self addSubview:_backedTextInputView]; ++ ++ auto const ¤tTextInputProps = *std::static_pointer_cast(_props); ++ [self _setShowSoftInputOnFocus:currentTextInputProps.traits.showSoftInputOnFocus]; ++} ++ ++- (void)_setShowSoftInputOnFocus:(BOOL)showSoftInputOnFocus ++{ ++ if (showSoftInputOnFocus) { ++ // Resets to default keyboard. ++ _backedTextInputView.inputView = nil; ++ ++ // Without the call to reloadInputViews, the keyboard will not change until the textInput field (the first // responder) loses and regains focus. ++ if (_backedTextInputView.isFirstResponder) { ++ [_backedTextInputView reloadInputViews]; ++ } ++ } else { ++ // Hides keyboard, but keeps blinking cursor. ++ _backedTextInputView.inputView = [UIView new]; ++ } + } + + - (BOOL)_textOf:(NSAttributedString *)newText equals:(NSAttributedString *)oldText +diff --git a/node_modules/react-native/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputShadowNode.cpp b/node_modules/react-native/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputShadowNode.cpp +index 0c9cc69..fee423f 100644 +--- a/node_modules/react-native/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputShadowNode.cpp ++++ b/node_modules/react-native/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputShadowNode.cpp +@@ -159,15 +159,6 @@ void AndroidTextInputShadowNode::updateStateIfNeeded() { + Size AndroidTextInputShadowNode::measureContent( + const LayoutContext& /*layoutContext*/, + const LayoutConstraints& layoutConstraints) const { +- if (getStateData().cachedAttributedStringId != 0) { +- return textLayoutManager_ +- ->measureCachedSpannableById( +- getStateData().cachedAttributedStringId, +- getConcreteProps().paragraphAttributes, +- layoutConstraints) +- .size; +- } +- + // Layout is called right after measure. + // Measure is marked as `const`, and `layout` is not; so State can be updated + // during layout, but not during `measure`. If State is out-of-date in layout, diff --git a/patches/react-native+0.73.4+006+Codegen.patch b/patches/react-native+0.73.4+006+Codegen.patch new file mode 100644 index 000000000000..076faa497825 --- /dev/null +++ b/patches/react-native+0.73.4+006+Codegen.patch @@ -0,0 +1,21 @@ +diff --git a/node_modules/react-native/scripts/cocoapods/new_architecture.rb b/node_modules/react-native/scripts/cocoapods/new_architecture.rb +index ba75b01..e5eaee8 100644 +--- a/node_modules/react-native/scripts/cocoapods/new_architecture.rb ++++ b/node_modules/react-native/scripts/cocoapods/new_architecture.rb +@@ -103,6 +103,7 @@ class NewArchitectureHelper + compiler_flags = hash["compiler_flags"] ? hash["compiler_flags"] : "" + current_config = hash["pod_target_xcconfig"] != nil ? hash["pod_target_xcconfig"] : {} + current_headers = current_config["HEADER_SEARCH_PATHS"] != nil ? current_config["HEADER_SEARCH_PATHS"] : "" ++ current_cpp_flags = current_config["OTHER_CPLUSPLUSFLAGS"] != nil ? current_config["OTHER_CPLUSPLUSFLAGS"] : "" + + header_search_paths = ["\"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/Headers/Private/Yoga\""] + if ENV['USE_FRAMEWORKS'] +@@ -135,7 +136,7 @@ class NewArchitectureHelper + spec.dependency "glog" + + if new_arch_enabled +- current_config["OTHER_CPLUSPLUSFLAGS"] = @@new_arch_cpp_flags ++ current_config["OTHER_CPLUSPLUSFLAGS"] = current_cpp_flags.empty? ? @@new_arch_cpp_flags : "#{current_cpp_flags} #{@@new_arch_cpp_flags}" + spec.dependency "React-RCTFabric" # This is for Fabric Component + spec.dependency "React-Codegen" + diff --git a/patches/react-native+0.73.4+007+disableTextInputRecycling.patch b/patches/react-native+0.73.4+007+disableTextInputRecycling.patch new file mode 100644 index 000000000000..683bc91c43ca --- /dev/null +++ b/patches/react-native+0.73.4+007+disableTextInputRecycling.patch @@ -0,0 +1,16 @@ +diff --git a/node_modules/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm b/node_modules/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +index 9f691c9..7ce04da 100644 +--- a/node_modules/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm ++++ b/node_modules/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +@@ -100,6 +100,11 @@ - (NSObject *)accessibilityElement + + #pragma mark - RCTComponentViewProtocol + +++ (BOOL)shouldBeRecycled ++{ ++ return NO; ++} ++ + + (ComponentDescriptorProvider)componentDescriptorProvider + { + return concreteComponentDescriptorProvider(); diff --git a/patches/react-native+0.73.4+008+checkForHashMap.patch b/patches/react-native+0.73.4+008+checkForHashMap.patch new file mode 100644 index 000000000000..e0a73c6325f1 --- /dev/null +++ b/patches/react-native+0.73.4+008+checkForHashMap.patch @@ -0,0 +1,16 @@ +diff --git a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java +index 6d07704..88dd74e 100644 +--- a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java ++++ b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java +@@ -204,6 +204,11 @@ import java.util.Set; + } + } + } ++ // When providing one event in Kotlin, it will create a SingletonMap by default ++ // which will throw on trying to add new element to it ++ if (!(events instanceof HashMap)) { ++ events = new HashMap(events); ++ } + for (String oldKey : keysToNormalize) { + Object value = events.get(oldKey); + String baseKey = ""; diff --git a/patches/react-native+0.73.4+009+properEventDispatchOrder.patch b/patches/react-native+0.73.4+009+properEventDispatchOrder.patch new file mode 100644 index 000000000000..894aa416bc71 --- /dev/null +++ b/patches/react-native+0.73.4+009+properEventDispatchOrder.patch @@ -0,0 +1,16 @@ +diff --git a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/FabricEventDispatcher.java b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/FabricEventDispatcher.java +index 4c3387b..284720f 100644 +--- a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/FabricEventDispatcher.java ++++ b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/FabricEventDispatcher.java +@@ -38,10 +38,10 @@ public class FabricEventDispatcher implements EventDispatcher, LifecycleEventLis + + @Override + public void dispatchEvent(Event event) { +- event.dispatchModern(mReactEventEmitter); + for (EventDispatcherListener listener : mListeners) { + listener.onEventDispatch(event); + } ++ event.dispatchModern(mReactEventEmitter); + + event.dispose(); + maybePostFrameCallbackFromNonUI(); diff --git a/patches/react-native+0.73.4+010+resetAutoresizingOnView.patch b/patches/react-native+0.73.4+010+resetAutoresizingOnView.patch new file mode 100644 index 000000000000..871d06d91980 --- /dev/null +++ b/patches/react-native+0.73.4+010+resetAutoresizingOnView.patch @@ -0,0 +1,13 @@ +diff --git a/node_modules/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/node_modules/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +index d06b0aa..9fe35a8 100644 +--- a/node_modules/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm ++++ b/node_modules/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +@@ -445,6 +445,8 @@ - (void)prepareForRecycle + self.layer.opacity = (float)props.opacity; + } + ++ self.autoresizingMask = UIViewAutoresizingNone; ++ + _propKeysManagedByAnimated_DO_NOT_USE_THIS_IS_BROKEN = nil; + _eventEmitter.reset(); + _isJSResponder = NO; diff --git a/patches/react-native+0.73.4+011+optionalViewRecycling.patch b/patches/react-native+0.73.4+011+optionalViewRecycling.patch new file mode 100644 index 000000000000..14a20de2ae1c --- /dev/null +++ b/patches/react-native+0.73.4+011+optionalViewRecycling.patch @@ -0,0 +1,62 @@ +diff --git a/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewClassDescriptor.h b/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewClassDescriptor.h +index b03a464..a2788a9 100644 +--- a/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewClassDescriptor.h ++++ b/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewClassDescriptor.h +@@ -27,6 +27,11 @@ class RCTComponentViewClassDescriptor final { + */ + bool observesMountingTransactionWillMount{false}; + bool observesMountingTransactionDidMount{false}; ++ ++ /* ++ * Whether the component can be recycled or not ++ */ ++ bool shouldBeRecycled{true}; + }; + + NS_ASSUME_NONNULL_END +diff --git a/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewDescriptor.h b/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewDescriptor.h +index 3ca65d1..fd1c4b9 100644 +--- a/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewDescriptor.h ++++ b/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewDescriptor.h +@@ -29,6 +29,7 @@ class RCTComponentViewDescriptor final { + */ + bool observesMountingTransactionWillMount{false}; + bool observesMountingTransactionDidMount{false}; ++ bool shouldBeRecycled{true}; + }; + + inline bool operator==(const RCTComponentViewDescriptor &lhs, const RCTComponentViewDescriptor &rhs) +diff --git a/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewFactory.mm b/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewFactory.mm +index 0b15d71..9bf4f2d 100644 +--- a/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewFactory.mm ++++ b/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewFactory.mm +@@ -95,6 +95,8 @@ - (RCTComponentViewClassDescriptor)_componentViewClassDescriptorFromClass:(Class + (bool)class_respondsToSelector(viewClass, @selector(mountingTransactionWillMount:withSurfaceTelemetry:)), + .observesMountingTransactionDidMount = + (bool)class_respondsToSelector(viewClass, @selector(mountingTransactionDidMount:withSurfaceTelemetry:)), ++ .shouldBeRecycled = ++ [viewClass respondsToSelector:@selector(shouldBeRecycled)] ? (bool)[viewClass performSelector:@selector(shouldBeRecycled)] : true, + }; + #pragma clang diagnostic pop + } +@@ -210,6 +212,7 @@ - (RCTComponentViewDescriptor)createComponentViewWithComponentHandle:(facebook:: + .view = [viewClass new], + .observesMountingTransactionWillMount = componentViewClassDescriptor.observesMountingTransactionWillMount, + .observesMountingTransactionDidMount = componentViewClassDescriptor.observesMountingTransactionDidMount, ++ .shouldBeRecycled = componentViewClassDescriptor.shouldBeRecycled, + }; + } + +diff --git a/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewRegistry.mm b/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewRegistry.mm +index e78e8ae..74ebc31 100644 +--- a/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewRegistry.mm ++++ b/node_modules/react-native/React/Fabric/Mounting/RCTComponentViewRegistry.mm +@@ -107,7 +107,7 @@ - (void)_enqueueComponentViewWithComponentHandle:(ComponentHandle)componentHandl + RCTAssertMainQueue(); + auto &recycledViews = _recyclePool[componentHandle]; + +- if (recycledViews.size() > RCTComponentViewRegistryRecyclePoolMaxSize) { ++ if (recycledViews.size() > RCTComponentViewRegistryRecyclePoolMaxSize || !componentViewDescriptor.shouldBeRecycled) { + return; + } + diff --git a/patches/react-native+0.73.4+012+disableNonTranslucentStatusBar.patch b/patches/react-native+0.73.4+012+disableNonTranslucentStatusBar.patch new file mode 100644 index 000000000000..fedfe544f353 --- /dev/null +++ b/patches/react-native+0.73.4+012+disableNonTranslucentStatusBar.patch @@ -0,0 +1,14 @@ +diff --git a/node_modules/react-native/Libraries/Components/StatusBar/StatusBar.js b/node_modules/react-native/Libraries/Components/StatusBar/StatusBar.js +index 2ac3d1f..5a400bf 100644 +--- a/node_modules/react-native/Libraries/Components/StatusBar/StatusBar.js ++++ b/node_modules/react-native/Libraries/Components/StatusBar/StatusBar.js +@@ -479,8 +479,7 @@ class StatusBar extends React.Component { + } + // Activities are not translucent by default, so always set if true. + if ( +- !oldProps || +- oldProps.translucent !== mergedProps.translucent || ++ (oldProps && oldProps.translucent !== mergedProps.translucent) || + mergedProps.translucent + ) { + NativeStatusBarManagerAndroid.setTranslucent(mergedProps.translucent); diff --git a/patches/react-native+0.73.4+013+exposePrefabs.patch b/patches/react-native+0.73.4+013+exposePrefabs.patch new file mode 100644 index 000000000000..001a2dec9894 --- /dev/null +++ b/patches/react-native+0.73.4+013+exposePrefabs.patch @@ -0,0 +1,95 @@ +diff --git a/node_modules/react-native/ReactAndroid/build.gradle b/node_modules/react-native/ReactAndroid/build.gradle +index 78c57eb..ec147fd 100644 +--- a/node_modules/react-native/ReactAndroid/build.gradle ++++ b/node_modules/react-native/ReactAndroid/build.gradle +@@ -125,6 +125,19 @@ final def preparePrefab = tasks.register("preparePrefab", PreparePrefabHeadersTa + "rrc_root", + new Pair("../ReactCommon/react/renderer/components/root/", "react/renderer/components/root/") + ), ++ new PrefabPreprocessingEntry( ++ "rrc_text", ++ [ ++ new Pair("../ReactCommon/react/renderer/components/text/", "react/renderer/components/text/"), ++ new Pair("../ReactCommon/react/renderer/attributedstring", "react/renderer/attributedstring"), ++ ] ++ ), ++ new PrefabPreprocessingEntry( ++ "rrc_textinput", ++ [ ++ new Pair("../ReactCommon/react/renderer/components/textinput/androidtextinput", ""), ++ ] ++ ), + new PrefabPreprocessingEntry( + "rrc_view", + [ +@@ -132,6 +145,13 @@ final def preparePrefab = tasks.register("preparePrefab", PreparePrefabHeadersTa + new Pair("../ReactCommon/react/renderer/components/view/platform/android/", ""), + ] + ), ++ new PrefabPreprocessingEntry( ++ "react_render_textlayoutmanager", ++ [ ++ new Pair("../ReactCommon/react/renderer/textlayoutmanager/", "react/renderer/textlayoutmanager/"), ++ new Pair("../ReactCommon/react/renderer/textlayoutmanager/platform/android/", ""), ++ ] ++ ), + new PrefabPreprocessingEntry( + "rrc_legacyviewmanagerinterop", + new Pair("../ReactCommon/react/renderer/components/legacyviewmanagerinterop/", "react/renderer/components/legacyviewmanagerinterop/") +@@ -559,6 +579,9 @@ android { + "glog", + "fabricjni", + "react_render_mapbuffer", ++ "react_render_textlayoutmanager", ++ "rrc_textinput", ++ "rrc_text", + "yoga", + "folly_runtime", + "react_nativemodule_core", +@@ -683,6 +706,15 @@ android { + rrc_root { + headers(new File(prefabHeadersDir, "rrc_root").absolutePath) + } ++ rrc_text { ++ headers(new File(prefabHeadersDir, "rrc_text").absolutePath) ++ } ++ rrc_textinput { ++ headers(new File(prefabHeadersDir, "rrc_textinput").absolutePath) ++ } ++ react_render_textlayoutmanager { ++ headers(new File(prefabHeadersDir, "react_render_textlayoutmanager").absolutePath) ++ } + rrc_view { + headers(new File(prefabHeadersDir, "rrc_view").absolutePath) + } +diff --git a/node_modules/react-native/ReactAndroid/cmake-utils/ReactNative-application.cmake b/node_modules/react-native/ReactAndroid/cmake-utils/ReactNative-application.cmake +index d49fa9e..3607c69 100644 +--- a/node_modules/react-native/ReactAndroid/cmake-utils/ReactNative-application.cmake ++++ b/node_modules/react-native/ReactAndroid/cmake-utils/ReactNative-application.cmake +@@ -78,11 +78,14 @@ add_library(jsi ALIAS ReactAndroid::jsi) + add_library(glog ALIAS ReactAndroid::glog) + add_library(fabricjni ALIAS ReactAndroid::fabricjni) + add_library(react_render_mapbuffer ALIAS ReactAndroid::react_render_mapbuffer) ++add_library(react_render_textlayoutmanager ALIAS ReactAndroid::react_render_textlayoutmanager) + add_library(yoga ALIAS ReactAndroid::yoga) + add_library(folly_runtime ALIAS ReactAndroid::folly_runtime) + add_library(react_nativemodule_core ALIAS ReactAndroid::react_nativemodule_core) + add_library(react_render_imagemanager ALIAS ReactAndroid::react_render_imagemanager) + add_library(rrc_image ALIAS ReactAndroid::rrc_image) ++add_library(rrc_text ALIAS ReactAndroid::rrc_text) ++add_library(rrc_textinput ALIAS ReactAndroid::rrc_textinput) + add_library(rrc_legacyviewmanagerinterop ALIAS ReactAndroid::rrc_legacyviewmanagerinterop) + + find_package(fbjni REQUIRED CONFIG) +@@ -105,8 +108,11 @@ target_link_libraries(${CMAKE_PROJECT_NAME} + react_render_graphics # prefab ready + react_render_imagemanager # prefab ready + react_render_mapbuffer # prefab ready ++ react_render_textlayoutmanager # prefab ready + rrc_image # prefab ready + rrc_view # prefab ready ++ rrc_text # prefab ready ++ rrc_textinput # prefab ready + rrc_legacyviewmanagerinterop # prefab ready + runtimeexecutor # prefab ready + turbomodulejsijni # prefab ready diff --git a/patches/react-native-config+1.4.6.patch b/patches/react-native-config+1.4.6.patch deleted file mode 100644 index 880c723ddc37..000000000000 --- a/patches/react-native-config+1.4.6.patch +++ /dev/null @@ -1,44 +0,0 @@ -diff --git a/node_modules/react-native-config/android/dotenv.gradle b/node_modules/react-native-config/android/dotenv.gradle -index 2225375..48f94ca 100644 ---- a/node_modules/react-native-config/android/dotenv.gradle -+++ b/node_modules/react-native-config/android/dotenv.gradle -@@ -41,7 +41,8 @@ def loadDotEnv(flavor = getCurrentFlavor()) { - def env = [:] - println("Reading env from: $envFile") - -- File f = new File("$project.rootDir/../$envFile"); -+ def reactNativeProjectRoot = project.hasProperty('reactNativeProject') ? project.reactNativeProject : ".." -+ File f = new File("$project.rootDir/$reactNativeProjectRoot/$envFile"); - if (!f.exists()) { - f = new File("$envFile"); - } -diff --git a/node_modules/react-native-config/react-native-config.podspec b/node_modules/react-native-config/react-native-config.podspec -index 54985dd..c394ec7 100644 ---- a/node_modules/react-native-config/react-native-config.podspec -+++ b/node_modules/react-native-config/react-native-config.podspec -@@ -3,6 +3,7 @@ - require 'json' - - package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) -+REACT_NATIVE_DIR = ENV["REACT_NATIVE_DIR"] || ".." - - Pod::Spec.new do |s| - s.name = 'react-native-config' -@@ -21,7 +22,7 @@ Pod::Spec.new do |s| - name: 'Config codegen', - script: %( - set -ex --HOST_PATH="$SRCROOT/../.." -+HOST_PATH="$SRCROOT/../#{REACT_NATIVE_DIR}" - "${PODS_TARGET_SRCROOT}/ios/ReactNativeConfig/BuildDotenvConfig.rb" "$HOST_PATH" "${PODS_TARGET_SRCROOT}/ios/ReactNativeConfig" - ), - execution_position: :before_compile, -@@ -43,7 +44,7 @@ HOST_PATH="$SRCROOT/../.." - name: 'Config codegen', - script: %( - set -ex -- HOST_PATH="$SRCROOT/../.." -+ HOST_PATH="$SRCROOT/../#{REACT_NATIVE_DIR}" - "${PODS_TARGET_SRCROOT}/ios/ReactNativeConfig/BuildDotenvConfig.rb" "$HOST_PATH" "${PODS_TARGET_SRCROOT}/ios/ReactNativeConfig" - ), - execution_position: :before_compile, diff --git a/patches/react-native-config+1.5.0.patch b/patches/react-native-config+1.5.0.patch new file mode 100644 index 000000000000..4b5a597de4dd --- /dev/null +++ b/patches/react-native-config+1.5.0.patch @@ -0,0 +1,518 @@ +diff --git a/node_modules/react-native-config/README.md b/node_modules/react-native-config/README.md +index 8424402..ca29e39 100644 +--- a/node_modules/react-native-config/README.md ++++ b/node_modules/react-native-config/README.md +@@ -78,13 +78,13 @@ if cocoapods are used in the project then pod has to be installed as well: + **MainApplication.java** + + ```diff +- + import com.lugg.ReactNativeConfig.ReactNativeConfigPackage; ++ + import com.lugg.RNCConfig.RNCConfigPackage; + + @Override + protected List getPackages() { + return Arrays.asList( + new MainReactPackage() +- + new ReactNativeConfigPackage() ++ + new RNCConfigPackage() + ); + } + ``` +diff --git a/node_modules/react-native-config/android/build.gradle b/node_modules/react-native-config/android/build.gradle +index c8f7fd4..86b3e1a 100644 +--- a/node_modules/react-native-config/android/build.gradle ++++ b/node_modules/react-native-config/android/build.gradle +@@ -15,6 +15,55 @@ def safeExtGet(prop, fallback) { + rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback + } + ++def resolveReactNativeDirectory() { ++ def reactNativeLocation = safeExtGet("REACT_NATIVE_NODE_MODULES_DIR", null) ++ if (reactNativeLocation != null) { ++ return file(reactNativeLocation) ++ } ++ ++ // monorepo workaround ++ // react-native can be hoisted or in project's own node_modules ++ def reactNativeFromProjectNodeModules = file("${rootProject.projectDir}/../node_modules/react-native") ++ if (reactNativeFromProjectNodeModules.exists()) { ++ return reactNativeFromProjectNodeModules ++ } ++ ++ def reactNativeFromNodeModulesWithRNCConfig = file("${projectDir}/../../react-native") ++ if (reactNativeFromNodeModulesWithRNCConfig.exists()) { ++ return reactNativeFromNodeModulesWithRNCConfig ++ } ++ ++ throw new Exception( ++ "[react-native-config] Unable to resolve react-native location in " + ++ "node_modules. You should add project extension property (in app/build.gradle) " + ++ "`REACT_NATIVE_NODE_MODULES_DIR` with path to react-native." ++ ) ++} ++ ++def getReactNativeMinorVersion() { ++ def REACT_NATIVE_DIR = resolveReactNativeDirectory() ++ ++ def reactProperties = new Properties() ++ file("$REACT_NATIVE_DIR/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) } ++ ++ def REACT_NATIVE_VERSION = reactProperties.getProperty("VERSION_NAME") ++ def REACT_NATIVE_MINOR_VERSION = REACT_NATIVE_VERSION.startsWith("0.0.0-") ? 1000 : REACT_NATIVE_VERSION.split("\\.")[1].toInteger() ++ ++ return REACT_NATIVE_MINOR_VERSION ++} ++ ++def isNewArchitectureEnabled() { ++ // To opt-in for the New Architecture, you can either: ++ // - Set `newArchEnabled` to true inside the `gradle.properties` file ++ // - Invoke gradle with `-newArchEnabled=true` ++ // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true` ++ return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" ++} ++ ++if (isNewArchitectureEnabled()) { ++ apply plugin: "com.facebook.react" ++} ++ + android { + compileSdkVersion rootProject.ext.compileSdkVersion + +@@ -23,10 +72,23 @@ android { + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0" ++ ++ buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() + } + lintOptions { + abortOnError false + } ++ ++ sourceSets.main { ++ java { ++ if (!isNewArchitectureEnabled()) { ++ srcDirs += 'src/paper/java' ++ } else { ++ // This should be done by the RN gradle plugin, for some reason it sometimes doesn't work ++ srcDirs += 'build/generated/source/codegen/java' ++ } ++ } ++ } + } + + repositories { +@@ -34,5 +96,9 @@ repositories { + } + + dependencies { +- implementation "com.facebook.react:react-native:${safeExtGet("reactNative", "+")}" // from node_modules ++ if (isNewArchitectureEnabled() && getReactNativeMinorVersion() < 71) { ++ implementation project(":ReactAndroid") ++ } else { ++ implementation 'com.facebook.react:react-native:+' ++ } + } +diff --git a/node_modules/react-native-config/android/src/main/java/com/lugg/RNCConfig/RNCConfigModule.java b/node_modules/react-native-config/android/src/main/java/com/lugg/RNCConfig/RNCConfigModule.java +index 0b52515..bef2834 100644 +--- a/node_modules/react-native-config/android/src/main/java/com/lugg/RNCConfig/RNCConfigModule.java ++++ b/node_modules/react-native-config/android/src/main/java/com/lugg/RNCConfig/RNCConfigModule.java +@@ -13,20 +13,32 @@ import java.lang.reflect.Field; + import java.util.Map; + import java.util.HashMap; + +-public class RNCConfigModule extends ReactContextBaseJavaModule { ++public class RNCConfigModule extends NativeConfigModuleSpec { ++ public static final String NAME = "RNCConfigModule"; ++ + public RNCConfigModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { +- return "RNCConfigModule"; ++ return NAME; + } + + @Override +- public Map getConstants() { ++ public Map getTypedExportedConstants() { + final Map constants = new HashMap<>(); + ++ // Codegen ensures that the constants defined in the module spec and in the native module implementation ++ // are consistent, which is tad problematic in this case, as the constants are dependant on the `.env` ++ // file. The simple workaround is to define a `constants` object that will contain actual constants. ++ // This way the types between JS and Native side remain consistent, while functionality stays the same. ++ // TL;DR: ++ // instead of exporting { constant1: "value1", constant2: "value2" } ++ // we export { constants: { constant1: "value1", constant2: "value2" } } ++ // because of type safety on the new arch ++ final Map realConstants = new HashMap<>(); ++ + try { + Context context = getReactApplicationContext(); + int resId = context.getResources().getIdentifier("build_config_package", "string", context.getPackageName()); +@@ -40,7 +52,7 @@ public class RNCConfigModule extends ReactContextBaseJavaModule { + Field[] fields = clazz.getDeclaredFields(); + for(Field f: fields) { + try { +- constants.put(f.getName(), f.get(null)); ++ realConstants.put(f.getName(), f.get(null)); + } + catch (IllegalAccessException e) { + Log.d("ReactNative", "ReactConfig: Could not access BuildConfig field " + f.getName()); +@@ -51,6 +63,8 @@ public class RNCConfigModule extends ReactContextBaseJavaModule { + Log.d("ReactNative", "ReactConfig: Could not find BuildConfig class"); + } + ++ constants.put("constants", realConstants); ++ + return constants; + } + } +diff --git a/node_modules/react-native-config/android/src/main/java/com/lugg/RNCConfig/RNCConfigPackage.java b/node_modules/react-native-config/android/src/main/java/com/lugg/RNCConfig/RNCConfigPackage.java +index 9251c09..2edd797 100644 +--- a/node_modules/react-native-config/android/src/main/java/com/lugg/RNCConfig/RNCConfigPackage.java ++++ b/node_modules/react-native-config/android/src/main/java/com/lugg/RNCConfig/RNCConfigPackage.java +@@ -1,29 +1,42 @@ + package com.lugg.RNCConfig; + +-import com.facebook.react.ReactPackage; +-import com.facebook.react.bridge.JavaScriptModule; ++import com.facebook.react.TurboReactPackage; + import com.facebook.react.bridge.NativeModule; + import com.facebook.react.bridge.ReactApplicationContext; +-import com.facebook.react.uimanager.ViewManager; ++import com.facebook.react.module.model.ReactModuleInfo; ++import com.facebook.react.module.model.ReactModuleInfoProvider; + +-import java.util.Arrays; +-import java.util.Collections; +-import java.util.List; ++import java.util.HashMap; ++import java.util.Map; + +-public class RNCConfigPackage implements ReactPackage { +- @Override +- public List createNativeModules(ReactApplicationContext reactContext) { +- return Arrays.asList( +- new RNCConfigModule(reactContext) +- ); +- } ++public class RNCConfigPackage extends TurboReactPackage { + +- public List> createJSModules() { +- return Collections.emptyList(); ++ @Override ++ public NativeModule getModule(String name, ReactApplicationContext reactContext) { ++ if (name.equals(RNCConfigModule.NAME)) { ++ return new RNCConfigModule(reactContext); ++ } else { ++ return null; ++ } + } + + @Override +- public List createViewManagers(ReactApplicationContext reactContext) { +- return Collections.emptyList(); ++ public ReactModuleInfoProvider getReactModuleInfoProvider() { ++ return () -> { ++ final Map moduleInfos = new HashMap<>(); ++ boolean isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; ++ moduleInfos.put( ++ RNCConfigModule.NAME, ++ new ReactModuleInfo( ++ RNCConfigModule.NAME, ++ RNCConfigModule.NAME, ++ false, // canOverrideExistingModule ++ false, // needsEagerInit ++ true, // hasConstants ++ false, // isCxxModule ++ isTurboModule // isTurboModule ++ )); ++ return moduleInfos; ++ }; + } + } +diff --git a/node_modules/react-native-config/android/src/paper/java/com/lugg/RNCConfig/NativeConfigModuleSpec.java b/node_modules/react-native-config/android/src/paper/java/com/lugg/RNCConfig/NativeConfigModuleSpec.java +new file mode 100644 +index 0000000..7a65504 +--- /dev/null ++++ b/node_modules/react-native-config/android/src/paper/java/com/lugg/RNCConfig/NativeConfigModuleSpec.java +@@ -0,0 +1,58 @@ ++ ++/** ++ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). ++ * ++ * Do not edit this file as changes may cause incorrect behavior and will be lost ++ * once the code is regenerated. ++ * ++ * @generated by codegen project: GenerateModuleJavaSpec.js ++ * ++ * @nolint ++ */ ++ ++package com.lugg.RNCConfig; ++ ++import com.facebook.proguard.annotations.DoNotStrip; ++import com.facebook.react.bridge.ReactApplicationContext; ++import com.facebook.react.bridge.ReactContextBaseJavaModule; ++import com.facebook.react.bridge.ReactMethod; ++import com.facebook.react.bridge.ReactModuleWithSpec; ++import com.facebook.react.common.build.ReactBuildConfig; ++import com.facebook.react.turbomodule.core.interfaces.TurboModule; ++import java.util.Arrays; ++import java.util.HashSet; ++import java.util.Map; ++import java.util.Set; ++import javax.annotation.Nullable; ++ ++public abstract class NativeConfigModuleSpec extends ReactContextBaseJavaModule implements ReactModuleWithSpec, TurboModule { ++ public NativeConfigModuleSpec(ReactApplicationContext reactContext) { ++ super(reactContext); ++ } ++ ++ protected abstract Map getTypedExportedConstants(); ++ ++ @Override ++ @DoNotStrip ++ public final @Nullable Map getConstants() { ++ Map constants = getTypedExportedConstants(); ++ if (ReactBuildConfig.DEBUG || ReactBuildConfig.IS_INTERNAL_BUILD) { ++ Set obligatoryFlowConstants = new HashSet<>(Arrays.asList( ++ "constants" ++ )); ++ Set optionalFlowConstants = new HashSet<>(); ++ Set undeclaredConstants = new HashSet<>(constants.keySet()); ++ undeclaredConstants.removeAll(obligatoryFlowConstants); ++ undeclaredConstants.removeAll(optionalFlowConstants); ++ if (!undeclaredConstants.isEmpty()) { ++ throw new IllegalStateException(String.format("Native Module Flow doesn't declare constants: %s", undeclaredConstants)); ++ } ++ undeclaredConstants = obligatoryFlowConstants; ++ undeclaredConstants.removeAll(constants.keySet()); ++ if (!undeclaredConstants.isEmpty()) { ++ throw new IllegalStateException(String.format("Native Module doesn't fill in constants: %s", undeclaredConstants)); ++ } ++ } ++ return constants; ++ } ++} +diff --git a/node_modules/react-native-config/codegen/NativeConfigModule.js b/node_modules/react-native-config/codegen/NativeConfigModule.js +new file mode 100644 +index 0000000..8cc9ac8 +--- /dev/null ++++ b/node_modules/react-native-config/codegen/NativeConfigModule.js +@@ -0,0 +1,11 @@ ++// @flow ++import type { TurboModule } from 'react-native/Libraries/TurboModule/RCTExport'; ++import { TurboModuleRegistry } from 'react-native'; ++ ++export interface Spec extends TurboModule { ++ +getConstants: () => {| ++ constants: Object, ++ |}; ++} ++ ++export default (TurboModuleRegistry.get('RNCConfigModule'): ?Spec); +diff --git a/node_modules/react-native-config/index.js b/node_modules/react-native-config/index.js +index 70866c4..a8f3624 100644 +--- a/node_modules/react-native-config/index.js ++++ b/node_modules/react-native-config/index.js +@@ -1,9 +1,10 @@ + 'use strict'; + +-// Bridge to: +-// Android: buildConfigField vars set in build.gradle, and exported via ReactConfig +-// iOS: config vars set in xcconfig and exposed via RNCConfig.m +-import { NativeModules } from 'react-native'; ++import { NativeModules, Platform } from 'react-native'; ++ ++// new arch is not supported on Windows yet ++export const Config = Platform.OS === 'windows' ++ ? NativeModules.RNCConfigModule ++ : require('./codegen/NativeConfigModule').default.getConstants().constants; + +-export const Config = NativeModules.RNCConfigModule || {} + export default Config; +diff --git a/node_modules/react-native-config/ios/ReactNativeConfig/GeneratedDotEnv.m b/node_modules/react-native-config/ios/ReactNativeConfig/GeneratedDotEnv.m +index 04a2f3d..59df625 100644 +--- a/node_modules/react-native-config/ios/ReactNativeConfig/GeneratedDotEnv.m ++++ b/node_modules/react-native-config/ios/ReactNativeConfig/GeneratedDotEnv.m +@@ -1 +1 @@ +- #define DOT_ENV @{ }; ++ #define DOT_ENV @{ @"ENV":@"dev",@"API_URL":@"http://localhost" }; +diff --git a/node_modules/react-native-config/ios/ReactNativeConfig/RNCConfigModule.h b/node_modules/react-native-config/ios/ReactNativeConfig/RNCConfigModule.h +index 755d103..5341aca 100644 +--- a/node_modules/react-native-config/ios/ReactNativeConfig/RNCConfigModule.h ++++ b/node_modules/react-native-config/ios/ReactNativeConfig/RNCConfigModule.h +@@ -1,3 +1,9 @@ ++#ifdef RCT_NEW_ARCH_ENABLED ++#import "RNCConfigSpec.h" ++ ++@interface RNCConfigModule : NSObject ++#else ++ + #if __has_include() + #import + #elif __has_include("React/RCTBridgeModule.h") +@@ -7,6 +13,7 @@ + #endif + + @interface RNCConfigModule : NSObject ++#endif // RCT_NEW_ARCH_ENABLED + + + (NSDictionary *)env; + + (NSString *)envFor: (NSString *)key; +diff --git a/node_modules/react-native-config/ios/ReactNativeConfig/RNCConfigModule.m b/node_modules/react-native-config/ios/ReactNativeConfig/RNCConfigModule.m +deleted file mode 100644 +index 5365d4c..0000000 +--- a/node_modules/react-native-config/ios/ReactNativeConfig/RNCConfigModule.m ++++ /dev/null +@@ -1,25 +0,0 @@ +-#import "RNCConfig.h" +-#import "RNCConfigModule.h" +- +-@implementation RNCConfigModule +- +-RCT_EXPORT_MODULE() +- +-+ (BOOL)requiresMainQueueSetup +-{ +- return YES; +-} +- +-+ (NSDictionary *)env { +- return RNCConfig.env; +-} +- +-+ (NSString *)envFor: (NSString *)key { +- return [RNCConfig envFor:key]; +-} +- +-- (NSDictionary *)constantsToExport { +- return RNCConfig.env; +-} +- +-@end +diff --git a/node_modules/react-native-config/ios/ReactNativeConfig/RNCConfigModule.mm b/node_modules/react-native-config/ios/ReactNativeConfig/RNCConfigModule.mm +new file mode 100644 +index 0000000..1cacb65 +--- /dev/null ++++ b/node_modules/react-native-config/ios/ReactNativeConfig/RNCConfigModule.mm +@@ -0,0 +1,37 @@ ++#import "RNCConfig.h" ++#import "RNCConfigModule.h" ++ ++@implementation RNCConfigModule ++ ++RCT_EXPORT_MODULE() ++ +++ (BOOL)requiresMainQueueSetup ++{ ++ return YES; ++} ++ +++ (NSDictionary *)env { ++ return RNCConfig.env; ++} ++ +++ (NSString *)envFor: (NSString *)key { ++ return [RNCConfig envFor:key]; ++} ++ ++- (NSDictionary *)constantsToExport { ++ return @{ @"constants": RNCConfig.env }; ++} ++ ++- (NSDictionary *)getConstants { ++ return self.constantsToExport; ++} ++ ++#ifdef RCT_NEW_ARCH_ENABLED ++- (std::shared_ptr)getTurboModule: ++ (const facebook::react::ObjCTurboModule::InitParams &)params ++{ ++ return std::make_shared(params); ++} ++#endif ++ ++@end +diff --git a/node_modules/react-native-config/package.json b/node_modules/react-native-config/package.json +index b4d1fba..0a018a7 100644 +--- a/node_modules/react-native-config/package.json ++++ b/node_modules/react-native-config/package.json +@@ -26,6 +26,7 @@ + "android/", + "ios/", + "windows/", ++ "codegen/", + "index.js", + "index.d.ts", + "react-native-config.podspec", +@@ -38,11 +39,21 @@ + "semantic-release": "^17.0.4" + }, + "peerDependencies": { ++ "react": "*", ++ "react-native": "*", + "react-native-windows": ">=0.61" + }, + "peerDependenciesMeta": { + "react-native-windows": { + "optional": true + } ++ }, ++ "codegenConfig": { ++ "name": "RNCConfigSpec", ++ "type": "modules", ++ "jsSrcsDir": "./codegen", ++ "android": { ++ "javaPackageName": "com.lugg.RNCConfig" ++ } + } + } +diff --git a/node_modules/react-native-config/react-native-config.podspec b/node_modules/react-native-config/react-native-config.podspec +index 35313d4..56bce4a 100644 +--- a/node_modules/react-native-config/react-native-config.podspec ++++ b/node_modules/react-native-config/react-native-config.podspec +@@ -4,6 +4,8 @@ require 'json' + + package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) + ++fabric_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1' ++ + Pod::Spec.new do |s| + s.name = 'react-native-config' + s.version = package['version'] +@@ -33,8 +35,27 @@ HOST_PATH="$SRCROOT/../.." + s.default_subspec = 'App' + + s.subspec 'App' do |app| +- app.source_files = 'ios/**/*.{h,m}' +- app.dependency 'React-Core' ++ app.source_files = 'ios/**/*.{h,m,mm}' ++ ++ if fabric_enabled ++ folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' ++ ++ app.pod_target_xcconfig = { ++ 'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/boost" "$(PODS_ROOT)/boost-for-react-native" "$(PODS_ROOT)/RCT-Folly"', ++ 'CLANG_CXX_LANGUAGE_STANDARD' => 'c++17', ++ } ++ app.compiler_flags = folly_compiler_flags + ' -DRCT_NEW_ARCH_ENABLED' ++ ++ app.dependency "React" ++ app.dependency "React-RCTFabric" # This is for fabric component ++ app.dependency "React-Codegen" ++ app.dependency "RCT-Folly" ++ app.dependency "RCTRequired" ++ app.dependency "RCTTypeSafety" ++ app.dependency "ReactCommon/turbomodule/core" ++ else ++ app.dependency 'React-Core' ++ end + end + + # Use this subspec for iOS extensions that cannot use React dependency diff --git a/patches/react-native-device-info+10.3.1+001+initial.patch b/patches/react-native-device-info+10.3.1+001+initial.patch new file mode 100644 index 000000000000..819bb3b87e5a --- /dev/null +++ b/patches/react-native-device-info+10.3.1+001+initial.patch @@ -0,0 +1,4 @@ +diff --git a/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.m b/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.mm +similarity index 100% +rename from node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.m +rename to node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.mm diff --git a/patches/react-native-device-info+10.3.1+002+turbomodule.patch b/patches/react-native-device-info+10.3.1+002+turbomodule.patch new file mode 100644 index 000000000000..90b2f7d675f8 --- /dev/null +++ b/patches/react-native-device-info+10.3.1+002+turbomodule.patch @@ -0,0 +1,3500 @@ +diff --git a/node_modules/react-native-device-info/README.md b/node_modules/react-native-device-info/README.md +index 43f5292..962ed46 100644 +--- a/node_modules/react-native-device-info/README.md ++++ b/node_modules/react-native-device-info/README.md +@@ -194,6 +194,7 @@ The example app in this repository shows an example usage of every single API, c + | [isHeadphonesConnected()](#isHeadphonesConnected) | `Promise` | ✅ | ✅ | ❌ | ❌ | + | [isPinOrFingerprintSet()](#ispinorfingerprintset) | `Promise` | ✅ | ✅ | ✅ | ❌ | + | [isTablet()](#istablet) | `boolean` | ✅ | ✅ | ✅ | ❌ | ++| [isDisplayZoomed()](#isdisplayzoomed) | `boolean` | ✅ | ❌ | ❌ | ❌ | + | [isTabletMode()](#istabletmode) | `Promise` | ❌ | ❌ | ✅ | ❌ | + | [supported32BitAbis()](#supported32BitAbis) | `Promise` | ❌ | ✅ | ❌ | ❌ | + | [supported64BitAbis()](#supported64BitAbis) | `Promise` | ❌ | ✅ | ❌ | ❌ | +@@ -1211,6 +1212,19 @@ let isTablet = DeviceInfo.isTablet(); + + --- + ++### isDisplayZoomed() ++ ++Tells if the user changed Display Zoom to Zoomed ++ ++#### Examples ++ ++```js ++let isDisplayZoomed = DeviceInfo.isDisplayZoomed(); ++// true ++``` ++ ++--- ++ + ### isTabletMode() + + Tells if the device is in tablet mode. +diff --git a/node_modules/react-native-device-info/RNDeviceInfo.podspec b/node_modules/react-native-device-info/RNDeviceInfo.podspec +index d07bbad..c7a80fd 100644 +--- a/node_modules/react-native-device-info/RNDeviceInfo.podspec ++++ b/node_modules/react-native-device-info/RNDeviceInfo.podspec +@@ -2,6 +2,8 @@ require 'json' + + package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) + ++fabric_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1' ++ + Pod::Spec.new do |s| + s.name = "RNDeviceInfo" + s.version = package['version'] +@@ -15,7 +17,13 @@ Pod::Spec.new do |s| + s.tvos.deployment_target = '10.0' + + s.source = { :git => "https://github.com/react-native-device-info/react-native-device-info.git", :tag => "v#{s.version}" } +- s.source_files = "ios/**/*.{h,m}" ++ s.source_files = "ios/**/*.{h,m,mm}" ++ ++ if fabric_enabled ++ install_modules_dependencies(s) ++ else ++ s.platforms = { :ios => "9.0", :tvos => "9.0" } + +- s.dependency 'React-Core' ++ s.dependency "React-Core" ++ end + end +diff --git a/node_modules/react-native-device-info/android/build.gradle b/node_modules/react-native-device-info/android/build.gradle +index de22598..9bfea4b 100644 +--- a/node_modules/react-native-device-info/android/build.gradle ++++ b/node_modules/react-native-device-info/android/build.gradle +@@ -21,7 +21,58 @@ def safeExtGet(prop, fallback) { + rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback + } + ++ ++def resolveReactNativeDirectory() { ++ // monorepo workaround ++ // react-native can be hoisted or in project's own node_modules ++ def reactNativeFromProjectNodeModules = file("${rootProject.projectDir}/../node_modules/react-native") ++ if (reactNativeFromProjectNodeModules.exists()) { ++ return reactNativeFromProjectNodeModules ++ } ++ ++ def reactNativeFromNodeModulesWithLibrary = file("${projectDir}/../../react-native") ++ if (reactNativeFromNodeModulesWithLibrary.exists()) { ++ return reactNativeFromNodeModulesWithLibrary ++ } ++ ++ throw new Exception( ++ "[react-native-clipboard] Unable to resolve react-native location in " + ++ "node_modules. You should add project extension property (in app/build.gradle) " + ++ "`REACT_NATIVE_NODE_MODULES_DIR` with path to react-native." ++ ) ++} ++ ++def REACT_NATIVE_DIR = resolveReactNativeDirectory() ++ ++def reactProperties = new Properties() ++file("$REACT_NATIVE_DIR/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) } ++ ++def REACT_NATIVE_VERSION = reactProperties.getProperty("VERSION_NAME") ++def REACT_NATIVE_MINOR_VERSION = REACT_NATIVE_VERSION.startsWith("0.0.0-") ? 1000 : REACT_NATIVE_VERSION.split("\\.")[1].toInteger() ++ ++def isNewArchitectureEnabled() { ++ // To opt-in for the New Architecture, you can either: ++ // - Set `newArchEnabled` to true inside the `gradle.properties` file ++ // - Invoke gradle with `-newArchEnabled=true` ++ // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true` ++ return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" ++} ++ ++if (isNewArchitectureEnabled()) { ++ apply plugin: "com.facebook.react" ++} ++ + android { ++ ++ // Used to override the NDK path/version on internal CI or by allowing ++ // users to customize the NDK path/version from their root project (e.g. for M1 support) ++ if (rootProject.hasProperty("ndkPath")) { ++ ndkPath rootProject.ext.ndkPath ++ } ++ if (rootProject.hasProperty("ndkVersion")) { ++ ndkVersion rootProject.ext.ndkVersion ++ } ++ + compileSdkVersion safeExtGet('compileSdkVersion', 30) + + defaultConfig { +@@ -37,6 +88,14 @@ android { + testOptions { + unitTests.returnDefaultValues = true + } ++ ++ sourceSets.main { ++ java { ++ if (!isNewArchitectureEnabled()) { ++ srcDirs += 'src/paper/java' ++ } ++ } ++ } + } + + repositories { +@@ -49,7 +108,12 @@ repositories { + } + + dependencies { +- implementation "com.facebook.react:react-native:${safeExtGet('reactNativeVersion', '+')}" ++ if (isNewArchitectureEnabled() && REACT_NATIVE_MINOR_VERSION < 71) { ++ implementation project(":ReactAndroid") ++ } else { ++ //noinspection GradleDynamicVersion ++ implementation 'com.facebook.react:react-native:+' ++ } + implementation "com.android.installreferrer:installreferrer:${safeExtGet('installReferrerVersion', '1.1.2')}" + def firebaseBomVersion = safeExtGet("firebaseBomVersion", null) + def firebaseIidVersion = safeExtGet('firebaseIidVersion', null) +diff --git a/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/RNDeviceInfo.java b/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/RNDeviceInfo.java +deleted file mode 100644 +index e9a08db..0000000 +--- a/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/RNDeviceInfo.java ++++ /dev/null +@@ -1,39 +0,0 @@ +-package com.learnium.RNDeviceInfo; +- +-import com.facebook.react.ReactPackage; +-import com.facebook.react.bridge.JavaScriptModule; +-import com.facebook.react.bridge.NativeModule; +-import com.facebook.react.bridge.ReactApplicationContext; +-import com.facebook.react.uimanager.ViewManager; +- +-import java.util.ArrayList; +-import java.util.Collections; +-import java.util.List; +- +-import javax.annotation.Nonnull; +- +-@SuppressWarnings("unused") +-public class RNDeviceInfo implements ReactPackage { +- +- @Override +- @Nonnull +- public List createNativeModules(@Nonnull ReactApplicationContext reactContext) { +- List modules = new ArrayList<>(); +- +- modules.add(new RNDeviceModule(reactContext)); +- +- return modules; +- } +- +- // Deprecated RN 0.47 +- public List> createJSModules() { +- return Collections.emptyList(); +- } +- +- @Override +- @Nonnull +- public List createViewManagers(@Nonnull ReactApplicationContext reactContext) { +- return Collections.emptyList(); +- } +- +-} +diff --git a/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/RNDeviceInfoPackage.java b/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/RNDeviceInfoPackage.java +new file mode 100644 +index 0000000..e91e5a2 +--- /dev/null ++++ b/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/RNDeviceInfoPackage.java +@@ -0,0 +1,95 @@ ++package com.learnium.RNDeviceInfo; ++ ++import com.facebook.react.TurboReactPackage; ++import com.facebook.react.bridge.NativeModule; ++import com.facebook.react.bridge.ReactApplicationContext; ++import com.facebook.react.module.annotations.ReactModule; ++import com.facebook.react.module.annotations.ReactModuleList; ++import com.facebook.react.module.model.ReactModuleInfo; ++import com.facebook.react.module.model.ReactModuleInfoProvider; ++import com.facebook.react.turbomodule.core.interfaces.TurboModule; ++import com.facebook.react.uimanager.ViewManager; ++ ++import java.util.ArrayList; ++import java.util.Collections; ++import java.util.HashMap; ++import java.util.List; ++import java.util.Map; ++ ++import javax.annotation.Nonnull; ++ ++@ReactModuleList( ++ nativeModules = { ++ RNDeviceModule.class, ++ }) ++public class RNDeviceInfoPackage extends TurboReactPackage { ++ @Override ++ @Nonnull ++ public List createNativeModules(@Nonnull ReactApplicationContext reactContext) { ++ List modules = new ArrayList<>(); ++ ++ modules.add(new RNDeviceModule(reactContext)); ++ ++ return modules; ++ } ++ ++ @Override ++ public NativeModule getModule(String name, @Nonnull ReactApplicationContext reactContext) { ++ switch (name) { ++ case RNDeviceModule.NAME: ++ return new RNDeviceModule(reactContext); ++ default: ++ return null; ++ } ++ } ++ ++ @Override ++ public ReactModuleInfoProvider getReactModuleInfoProvider() { ++ try { ++ Class reactModuleInfoProviderClass = ++ Class.forName("com.learnium.RNDeviceInfo.RNDeviceInfoPackage$$ReactModuleInfoProvider"); ++ return (ReactModuleInfoProvider) reactModuleInfoProviderClass.newInstance(); ++ } catch (ClassNotFoundException e) { ++ // ReactModuleSpecProcessor does not run at build-time. Create this ReactModuleInfoProvider by ++ // hand. ++ return new ReactModuleInfoProvider() { ++ @Override ++ public Map getReactModuleInfos() { ++ final Map reactModuleInfoMap = new HashMap<>(); ++ ++ Class[] moduleList = ++ new Class[] { ++ RNDeviceModule.class, ++ }; ++ ++ for (Class moduleClass : moduleList) { ++ ReactModule reactModule = moduleClass.getAnnotation(ReactModule.class); ++ ++ reactModuleInfoMap.put( ++ reactModule.name(), ++ new ReactModuleInfo( ++ reactModule.name(), ++ moduleClass.getName(), ++ reactModule.canOverrideExistingModule(), ++ reactModule.needsEagerInit(), ++ reactModule.hasConstants(), ++ reactModule.isCxxModule(), ++ TurboModule.class.isAssignableFrom(moduleClass))); ++ } ++ ++ return reactModuleInfoMap; ++ } ++ }; ++ } catch (InstantiationException | IllegalAccessException e) { ++ throw new RuntimeException( ++ "No ReactModuleInfoProvider for com.learnium.RNDeviceInfo.RNDeviceInfoPackage$$ReactModuleInfoProvider", e); ++ } ++ } ++ ++ @Override ++ @Nonnull ++ public List createViewManagers(@Nonnull ReactApplicationContext reactContext) { ++ return Collections.emptyList(); ++ } ++ ++} +diff --git a/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/RNDeviceModule.java b/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/RNDeviceModule.java +index b01e9d2..9ac1628 100644 +--- a/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/RNDeviceModule.java ++++ b/node_modules/react-native-device-info/android/src/main/java/com/learnium/RNDeviceInfo/RNDeviceModule.java +@@ -20,8 +20,6 @@ import android.os.Environment; + import android.os.PowerManager; + import android.os.StatFs; + import android.os.BatteryManager; +-import android.os.Debug; +-import android.os.Process; + import android.provider.Settings; + import android.webkit.WebSettings; + import android.telephony.TelephonyManager; +@@ -35,7 +33,6 @@ import androidx.annotation.Nullable; + import com.facebook.react.bridge.Arguments; + import com.facebook.react.bridge.ReactApplicationContext; + import com.facebook.react.bridge.ReactContext; +-import com.facebook.react.bridge.ReactContextBaseJavaModule; + import com.facebook.react.bridge.ReactMethod; + import com.facebook.react.bridge.Promise; + import com.facebook.react.bridge.WritableArray; +@@ -66,7 +63,7 @@ import static android.os.BatteryManager.BATTERY_STATUS_FULL; + import static android.provider.Settings.Secure.getString; + + @ReactModule(name = RNDeviceModule.NAME) +-public class RNDeviceModule extends ReactContextBaseJavaModule { ++public class RNDeviceModule extends NativeDeviceInfoModuleSpec { + public static final String NAME = "RNDeviceInfo"; + private final DeviceTypeResolver deviceTypeResolver; + private final DeviceIdResolver deviceIdResolver; +@@ -177,39 +174,13 @@ public class RNDeviceModule extends ReactContextBaseJavaModule { + return null; + } + +- @Override +- public Map getConstants() { +- String appVersion, buildNumber, appName; +- +- try { +- appVersion = getPackageInfo().versionName; +- buildNumber = Integer.toString(getPackageInfo().versionCode); +- appName = getReactApplicationContext().getApplicationInfo().loadLabel(getReactApplicationContext().getPackageManager()).toString(); +- } catch (Exception e) { +- appVersion = "unknown"; +- buildNumber = "unknown"; +- appName = "unknown"; +- } +- +- final Map constants = new HashMap<>(); +- +- constants.put("deviceId", Build.BOARD); +- constants.put("bundleId", getReactApplicationContext().getPackageName()); +- constants.put("systemName", "Android"); +- constants.put("systemVersion", Build.VERSION.RELEASE); +- constants.put("appVersion", appVersion); +- constants.put("buildNumber", buildNumber); +- constants.put("isTablet", deviceTypeResolver.isTablet()); +- constants.put("appName", appName); +- constants.put("brand", Build.BRAND); +- constants.put("model", Build.MODEL); +- constants.put("deviceType", deviceTypeResolver.getDeviceType().getValue()); +- +- return constants; ++ @ReactMethod ++ public void addListener(String eventName) { ++ // Keep: Required for RN built in Event Emitter Calls. + } + + @ReactMethod +- public void addListener(String eventName) { ++ public void removeListeners(double count) { + // Keep: Required for RN built in Event Emitter Calls. + } + +@@ -252,7 +223,7 @@ public class RNDeviceModule extends ReactContextBaseJavaModule { + } + + @ReactMethod(isBlockingSynchronousMethod = true) +- public float getFontScaleSync() { return getReactApplicationContext().getResources().getConfiguration().fontScale; } ++ public double getFontScaleSync() { return getReactApplicationContext().getResources().getConfiguration().fontScale; } + @ReactMethod + public void getFontScale(Promise p) { p.resolve(getFontScaleSync()); } + +@@ -265,6 +236,68 @@ public class RNDeviceModule extends ReactContextBaseJavaModule { + System.err.println("Unable to determine keyguard status. KeyguardManager was null"); + return false; + } ++ ++ @Override ++ public void isMouseConnected(Promise promise) { ++ promise.reject("DeviceInfo:isMouseConnected", "isMouseConnected is not supported on Android"); ++ } ++ ++ @Override ++ public boolean isMouseConnectedSync() { ++ return false; ++ } ++ ++ @Override ++ public void isKeyboardConnected(Promise promise) { ++ promise.reject("DeviceInfo:isKeyboardConnected", "isKeyboardConnected is not supported on Android"); ++ } ++ ++ @Override ++ public boolean isKeyboardConnectedSync() { ++ return false; ++ } ++ ++ @Override ++ public void isTabletMode(Promise promise) { ++promise.reject("DeviceInfo:isTabletMode", "isTabletMode is not supported on Android"); ++ } ++ ++ @Override ++ public void syncUniqueId(Promise promise) { ++promise.reject("DeviceInfo:syncUniqueId", "syncUniqueId is not supported on Android"); ++ } ++ ++ @Override ++ protected Map getTypedExportedConstants() { ++ String appVersion, buildNumber, appName; ++ ++ try { ++ appVersion = getPackageInfo().versionName; ++ buildNumber = Integer.toString(getPackageInfo().versionCode); ++ appName = getReactApplicationContext().getApplicationInfo().loadLabel(getReactApplicationContext().getPackageManager()).toString(); ++ } catch (Exception e) { ++ appVersion = "unknown"; ++ buildNumber = "unknown"; ++ appName = "unknown"; ++ } ++ ++ final Map constants = new HashMap<>(); ++ ++ constants.put("deviceId", Build.BOARD); ++ constants.put("bundleId", getReactApplicationContext().getPackageName()); ++ constants.put("systemName", "Android"); ++ constants.put("systemVersion", Build.VERSION.RELEASE); ++ constants.put("appVersion", appVersion); ++ constants.put("buildNumber", buildNumber); ++ constants.put("isTablet", deviceTypeResolver.isTablet()); ++ constants.put("appName", appName); ++ constants.put("brand", Build.BRAND); ++ constants.put("model", Build.MODEL); ++ constants.put("deviceType", deviceTypeResolver.getDeviceType().getValue()); ++ ++ return constants; ++ } ++ + @ReactMethod + public void isPinOrFingerprintSet(Promise p) { p.resolve(isPinOrFingerprintSetSync()); } + +@@ -737,6 +770,12 @@ public class RNDeviceModule extends ReactContextBaseJavaModule { + + @ReactMethod(isBlockingSynchronousMethod = true) + public String getDeviceSync() { return Build.DEVICE; } ++ ++ @Override ++ public void getDeviceToken(Promise promise) { ++ promise.reject("DeviceInfo:getDeviceToken", "getDeviceToken is not supported on Android"); ++ } ++ + @ReactMethod + public void getDevice(Promise p) { p.resolve(getDeviceSync()); } + +@@ -746,7 +785,7 @@ public class RNDeviceModule extends ReactContextBaseJavaModule { + public void getBuildId(Promise p) { p.resolve(getBuildIdSync()); } + + @ReactMethod(isBlockingSynchronousMethod = true) +- public int getApiLevelSync() { return Build.VERSION.SDK_INT; } ++ public double getApiLevelSync() { return Build.VERSION.SDK_INT; } + @ReactMethod + public void getApiLevel(Promise p) { p.resolve(getApiLevelSync()); } + +@@ -858,11 +897,11 @@ public class RNDeviceModule extends ReactContextBaseJavaModule { + public void getBaseOs(Promise p) { p.resolve(getBaseOsSync()); } + + @ReactMethod(isBlockingSynchronousMethod = true) +- public String getPreviewSdkIntSync() { ++ public double getPreviewSdkIntSync() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { +- return Integer.toString(Build.VERSION.PREVIEW_SDK_INT); ++ return Build.VERSION.PREVIEW_SDK_INT; + } +- return "unknown"; ++ return -1; + } + @ReactMethod + public void getPreviewSdkInt(Promise p) { p.resolve(getPreviewSdkIntSync()); } +@@ -889,6 +928,17 @@ public class RNDeviceModule extends ReactContextBaseJavaModule { + return System.getProperty("http.agent"); + } + } ++ ++ @Override ++ public void getBrightness(Promise promise) { ++ promise.reject("DeviceInfo:getBrightness", "getBrightness is not supported on Android"); ++ } ++ ++ @Override ++ public double getBrightnessSync() { ++ return 0; ++ } ++ + @ReactMethod + public void getUserAgent(Promise p) { p.resolve(getUserAgentSync()); } + +diff --git a/node_modules/react-native-device-info/android/src/paper/java/com/learnium/RNDeviceInfo/NativeDeviceInfoModuleSpec.java b/node_modules/react-native-device-info/android/src/paper/java/com/learnium/RNDeviceInfo/NativeDeviceInfoModuleSpec.java +new file mode 100644 +index 0000000..5aad02a +--- /dev/null ++++ b/node_modules/react-native-device-info/android/src/paper/java/com/learnium/RNDeviceInfo/NativeDeviceInfoModuleSpec.java +@@ -0,0 +1,565 @@ ++ ++/** ++ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). ++ * ++ * Do not edit this file as changes may cause incorrect behavior and will be lost ++ * once the code is regenerated. ++ * ++ * @generated by codegen project: GenerateModuleJavaSpec.js ++ * ++ * @nolint ++ */ ++ ++package com.learnium.RNDeviceInfo; ++ ++import com.facebook.proguard.annotations.DoNotStrip; ++import com.facebook.react.bridge.Promise; ++import com.facebook.react.bridge.ReactApplicationContext; ++import com.facebook.react.bridge.ReactContextBaseJavaModule; ++import com.facebook.react.bridge.ReactMethod; ++import com.facebook.react.bridge.ReactModuleWithSpec; ++import com.facebook.react.bridge.WritableArray; ++import com.facebook.react.bridge.WritableMap; ++import com.facebook.react.common.build.ReactBuildConfig; ++import com.facebook.react.turbomodule.core.interfaces.TurboModule; ++import java.util.Arrays; ++import java.util.HashSet; ++import java.util.Map; ++import java.util.Set; ++import javax.annotation.Nullable; ++ ++public abstract class NativeDeviceInfoModuleSpec extends ReactContextBaseJavaModule implements ReactModuleWithSpec, TurboModule { ++ public NativeDeviceInfoModuleSpec(ReactApplicationContext reactContext) { ++ super(reactContext); ++ } ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getPowerState(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract WritableMap getPowerStateSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getSupported32BitAbis(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract WritableArray getSupported32BitAbisSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getSupported64BitAbis(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract WritableArray getSupported64BitAbisSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getSupportedAbis(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract WritableArray getSupportedAbisSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getSystemManufacturer(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getSystemManufacturerSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getAndroidId(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getAndroidIdSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getApiLevel(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract double getApiLevelSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getAvailableLocationProviders(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract WritableMap getAvailableLocationProvidersSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getBaseOs(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getBaseOsSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getBatteryLevel(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract double getBatteryLevelSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getBootloader(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getBootloaderSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getBuildId(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getBuildIdSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getCarrier(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getCarrierSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getCodename(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getCodenameSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getDevice(Promise promise); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getDeviceName(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getDeviceNameSync(); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getDeviceSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getDeviceToken(Promise promise); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getDisplay(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getDisplaySync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getFingerprint(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getFingerprintSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getFirstInstallTime(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract double getFirstInstallTimeSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getFontScale(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract double getFontScaleSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getFreeDiskStorage(Promise promise); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getFreeDiskStorageOld(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract double getFreeDiskStorageSync(); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract double getFreeDiskStorageOldSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getHardware(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getHardwareSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getHost(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getHostSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getIncremental(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getIncrementalSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getInstallerPackageName(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getInstallerPackageNameSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getInstallReferrer(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getInstallReferrerSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getInstanceId(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getInstanceIdSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getIpAddress(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getIpAddressSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getLastUpdateTime(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract double getLastUpdateTimeSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getMacAddress(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getMacAddressSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getMaxMemory(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract double getMaxMemorySync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getPhoneNumber(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getPhoneNumberSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getPreviewSdkInt(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract double getPreviewSdkIntSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getProduct(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getProductSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getSecurityPatch(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getSecurityPatchSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getSerialNumber(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getSerialNumberSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getSystemAvailableFeatures(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract WritableArray getSystemAvailableFeaturesSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getTags(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getTagsSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getTotalDiskCapacity(Promise promise); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getTotalDiskCapacityOld(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract double getTotalDiskCapacitySync(); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract double getTotalDiskCapacityOldSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getTotalMemory(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract double getTotalMemorySync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getType(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getTypeSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getUniqueId(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getUniqueIdSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getUsedMemory(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract double getUsedMemorySync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getUserAgent(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract String getUserAgentSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void getBrightness(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract double getBrightnessSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void hasGms(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract boolean hasGmsSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void hasHms(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract boolean hasHmsSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void hasSystemFeature(String feature, Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract boolean hasSystemFeatureSync(String feature); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void isAirplaneMode(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract boolean isAirplaneModeSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void isBatteryCharging(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract boolean isBatteryChargingSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void isCameraPresent(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract boolean isCameraPresentSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void isEmulator(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract boolean isEmulatorSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void isHeadphonesConnected(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract boolean isHeadphonesConnectedSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void isLocationEnabled(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract boolean isLocationEnabledSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void isPinOrFingerprintSet(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract boolean isPinOrFingerprintSetSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void isMouseConnected(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract boolean isMouseConnectedSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void isKeyboardConnected(Promise promise); ++ ++ @ReactMethod(isBlockingSynchronousMethod = true) ++ @DoNotStrip ++ public abstract boolean isKeyboardConnectedSync(); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void isTabletMode(Promise promise); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void syncUniqueId(Promise promise); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void addListener(String eventName); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void removeListeners(double count); ++ ++ protected abstract Map getTypedExportedConstants(); ++ ++ @Override ++ @DoNotStrip ++ public final @Nullable Map getConstants() { ++ Map constants = getTypedExportedConstants(); ++ if (ReactBuildConfig.DEBUG || ReactBuildConfig.IS_INTERNAL_BUILD) { ++ Set obligatoryFlowConstants = new HashSet<>(Arrays.asList( ++ "appName", ++ "appVersion", ++ "brand", ++ "buildNumber", ++ "bundleId", ++ "deviceId", ++ "deviceType", ++ "isTablet", ++ "model", ++ "systemName", ++ "systemVersion" ++ )); ++ Set optionalFlowConstants = new HashSet<>(Arrays.asList( ++ "isDisplayZoomed" ++ )); ++ Set undeclaredConstants = new HashSet<>(constants.keySet()); ++ undeclaredConstants.removeAll(obligatoryFlowConstants); ++ undeclaredConstants.removeAll(optionalFlowConstants); ++ if (!undeclaredConstants.isEmpty()) { ++ throw new IllegalStateException(String.format("Native Module Flow doesn't declare constants: %s", undeclaredConstants)); ++ } ++ undeclaredConstants = obligatoryFlowConstants; ++ undeclaredConstants.removeAll(constants.keySet()); ++ if (!undeclaredConstants.isEmpty()) { ++ throw new IllegalStateException(String.format("Native Module doesn't fill in constants: %s", undeclaredConstants)); ++ } ++ } ++ return constants; ++ } ++} +diff --git a/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.h b/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.h +index f77b052..01def34 100644 +--- a/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.h ++++ b/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.h +@@ -9,11 +9,20 @@ + #import + #import + #import ++#ifdef RCT_NEW_ARCH_ENABLED ++#import ++#else + #import ++#endif + #import + #import + +-@interface RNDeviceInfo : RCTEventEmitter ++@interface RNDeviceInfo : RCTEventEmitter ++#ifdef RCT_NEW_ARCH_ENABLED ++ ++#else ++ ++#endif + + @property (nonatomic) float lowBatteryThreshold; + +diff --git a/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.mm b/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.mm +index 67dbd7a..552a5e7 100644 +--- a/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.mm ++++ b/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfo.mm +@@ -14,8 +14,9 @@ + #import + #import "RNDeviceInfo.h" + #import "DeviceUID.h" +-#import ++//#import + #import "EnvironmentUtil.h" ++#import "RNDeviceInfoHelper.h" + + #if !(TARGET_OS_TV) + #import +@@ -32,11 +33,6 @@ typedef NS_ENUM(NSInteger, DeviceType) { + + #define DeviceTypeValues [NSArray arrayWithObjects: @"Handset", @"Tablet", @"Tv", @"Desktop", @"unknown", nil] + +-#if !(TARGET_OS_TV) +-@import CoreTelephony; +-@import Darwin.sys.sysctl; +-#endif +- + @implementation RNDeviceInfo + { + bool hasListeners; +@@ -67,6 +63,7 @@ - (NSDictionary *)constantsToExport { + @"brand": @"Apple", + @"model": [self getModel], + @"deviceType": [self getDeviceTypeName], ++ @"isDisplayZoomed": @([self isDisplayZoomed]), + }; + } + +@@ -132,7 +129,7 @@ - (DeviceType) getDeviceType + } + + - (NSDictionary *) getStorageDictionary { +- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); ++ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + return [[NSFileManager defaultManager] attributesOfFileSystemForPath:[paths lastObject] error: nil]; + } + +@@ -155,10 +152,14 @@ - (NSString *) getDeviceName { + return self.getDeviceName; + } + +-RCT_EXPORT_METHOD(getDeviceName:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getDeviceName:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(self.getDeviceName); + } + ++- (BOOL) isDisplayZoomed { ++ return [UIScreen mainScreen].scale != [UIScreen mainScreen].nativeScale; ++} ++ + - (NSString *) getAppName { + NSString *displayName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]; + NSString *bundleName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]; +@@ -324,42 +325,22 @@ - (NSString *) getModel { + } + + - (NSString *) getCarrier { +-#if (TARGET_OS_TV || TARGET_OS_MACCATALYST) +- return @"unknown"; +-#else +- CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init]; +- CTCarrier *carrier = [netinfo subscriberCellularProvider]; +- if (carrier.carrierName != nil) { +- return carrier.carrierName; +- } +- return @"unknown"; +-#endif ++ return [RNDeviceInfoHelper getCarrier]; + } + + RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getCarrierSync) { + return self.getCarrier; + } + +-RCT_EXPORT_METHOD(getCarrier:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getCarrier:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(self.getCarrier); + } + + - (NSString *) getBuildId { +-#if TARGET_OS_TV +- return @"unknown"; +-#else +- size_t bufferSize = 64; +- NSMutableData *buffer = [[NSMutableData alloc] initWithLength:bufferSize]; +- int status = sysctlbyname("kern.osversion", buffer.mutableBytes, &bufferSize, NULL, 0); +- if (status != 0) { +- return @"unknown"; +- } +- NSString* buildId = [[NSString alloc] initWithCString:buffer.mutableBytes encoding:NSUTF8StringEncoding]; +- return buildId; +-#endif ++ return [RNDeviceInfoHelper getBuildId]; + } + +-RCT_EXPORT_METHOD(getBuildId:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getBuildId:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(self.getBuildId); + } + +@@ -375,11 +356,11 @@ - (NSString *) uniqueId { + return self.uniqueId; + } + +-RCT_EXPORT_METHOD(getUniqueId:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getUniqueId:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(self.uniqueId); + } + +-RCT_EXPORT_METHOD(syncUniqueId:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(syncUniqueId:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve([DeviceUID syncUid]); + } + +@@ -407,7 +388,7 @@ - (BOOL) isEmulator { + return @(self.isEmulator); + } + +-RCT_EXPORT_METHOD(isEmulator:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(isEmulator:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(@(self.isEmulator)); + } + +@@ -419,28 +400,29 @@ - (BOOL) isTablet { + } + } + +-RCT_EXPORT_METHOD(getDeviceToken:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getDeviceToken:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + if (@available(iOS 11.0, *)) { + if (TARGET_IPHONE_SIMULATOR) { + reject(@"NOT AVAILABLE", @"Device check is only available for physical devices", nil); + return; + } + +- DCDevice *device = DCDevice.currentDevice; +- +- if ([device isSupported]) { +- [DCDevice.currentDevice generateTokenWithCompletionHandler:^(NSData * _Nullable token, NSError * _Nullable error) { +- if (error) { +- reject(@"ERROR GENERATING TOKEN", error.localizedDescription, error); +- return; +- } +- +- resolve([token base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]); +- }]; +- } else { +- reject(@"NOT SUPPORTED", @"Device check is not supported by this device", nil); +- return; +- } ++ reject(@"NOT SUPPORTED", @"Device check is not supported by this device", nil); ++// DCDevice *device = DCDevice.currentDevice; ++// ++// if ([device isSupported]) { ++// [DCDevice.currentDevice generateTokenWithCompletionHandler:^(NSData * _Nullable token, NSError * _Nullable error) { ++// if (error) { ++// reject(@"ERROR GENERATING TOKEN", error.localizedDescription, error); ++// return; ++// } ++// ++// resolve([token base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]); ++// }]; ++// } else { ++// reject(@"NOT SUPPORTED", @"Device check is not supported by this device", nil); ++// return; ++// } + } else { + reject(@"NOT AVAILABLE", @"Device check is only available for iOS > 11", nil); + return; +@@ -484,7 +466,7 @@ - (float) getFontScale { + return @(self.getFontScale); + } + +-RCT_EXPORT_METHOD(getFontScale:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getFontScale:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(@(self.getFontScale)); + } + +@@ -496,7 +478,7 @@ - (double) getTotalMemory { + return @(self.getTotalMemory); + } + +-RCT_EXPORT_METHOD(getTotalMemory:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getTotalMemory:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(@(self.getTotalMemory)); + } + +@@ -515,7 +497,7 @@ - (double) getTotalDiskCapacity { + return @(self.getTotalDiskCapacity); + } + +-RCT_EXPORT_METHOD(getTotalDiskCapacity:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getTotalDiskCapacity:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(@(self.getTotalDiskCapacity)); + } + +@@ -534,7 +516,7 @@ - (double) getFreeDiskStorage { + return @(self.getFreeDiskStorage); + } + +-RCT_EXPORT_METHOD(getFreeDiskStorage:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getFreeDiskStorage:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(@(self.getFreeDiskStorage)); + } + +@@ -553,7 +535,7 @@ - (NSArray *) getSupportedAbis { + return self.getSupportedAbis; + } + +-RCT_EXPORT_METHOD(getSupportedAbis:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getSupportedAbis:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(self.getSupportedAbis); + } + +@@ -602,7 +584,7 @@ - (NSString *) getIpAddress { + return self.getIpAddress; + } + +-RCT_EXPORT_METHOD(getIpAddress:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getIpAddress:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(self.getIpAddress); + } + +@@ -619,7 +601,7 @@ - (BOOL) isPinOrFingerprintSet { + return @(self.isPinOrFingerprintSet); + } + +-RCT_EXPORT_METHOD(isPinOrFingerprintSet:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(isPinOrFingerprintSet:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(@(self.isPinOrFingerprintSet)); + } + +@@ -688,7 +670,7 @@ - (NSDictionary *) powerState { + return self.powerState; + } + +-RCT_EXPORT_METHOD(getPowerState:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getPowerState:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(self.powerState); + } + +@@ -704,7 +686,7 @@ - (float) getBatteryLevel { + return @(self.getBatteryLevel); + } + +-RCT_EXPORT_METHOD(getBatteryLevel:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getBatteryLevel:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(@(self.getBatteryLevel)); + } + +@@ -716,7 +698,7 @@ - (BOOL) isBatteryCharging { + return @(self.isBatteryCharging); + } + +-RCT_EXPORT_METHOD(isBatteryCharging:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(isBatteryCharging:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(@(self.isBatteryCharging)); + } + +@@ -728,7 +710,7 @@ - (BOOL) isLocationEnabled { + return @(self.isLocationEnabled); + } + +-RCT_EXPORT_METHOD(isLocationEnabled:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(isLocationEnabled:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(@(self.isLocationEnabled)); + } + +@@ -752,7 +734,7 @@ - (BOOL) isHeadphonesConnected { + return @(self.isHeadphonesConnected); + } + +-RCT_EXPORT_METHOD(isHeadphonesConnected:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(isHeadphonesConnected:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(@(self.isHeadphonesConnected)); + } + +@@ -770,7 +752,7 @@ - (unsigned long) getUsedMemory { + return (unsigned long)info.resident_size; + } + +-RCT_EXPORT_METHOD(getUsedMemory:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getUsedMemory:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + unsigned long usedMemory = self.getUsedMemory; + if (usedMemory == -1) { + reject(@"fetch_error", @"task_info failed", nil); +@@ -783,7 +765,7 @@ - (unsigned long) getUsedMemory { + return @(self.getUsedMemory); + } + +-RCT_EXPORT_METHOD(getUserAgent:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getUserAgent:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + #if TARGET_OS_TV + reject(@"not_available_error", @"not available on tvOS", nil); + #else +@@ -827,7 +809,7 @@ - (NSDictionary *) getAvailableLocationProviders { + return self.getAvailableLocationProviders; + } + +-RCT_EXPORT_METHOD(getAvailableLocationProviders:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getAvailableLocationProviders:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(self.getAvailableLocationProviders); + } + +@@ -837,7 +819,7 @@ - (NSDictionary *) getAvailableLocationProviders { + return [EnvironmentValues objectAtIndex:[EnvironmentUtil currentAppEnvironment]]; + } + +-RCT_EXPORT_METHOD(getInstallerPackageName:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getInstallerPackageName:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve([EnvironmentValues objectAtIndex:[EnvironmentUtil currentAppEnvironment]]); + } + +@@ -853,7 +835,7 @@ - (NSNumber *) getBrightness { + return self.getBrightness; + } + +-RCT_EXPORT_METHOD(getBrightness:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getBrightness:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(self.getBrightness); + } + +@@ -861,10 +843,415 @@ - (NSNumber *) getBrightness { + return @(self.getFirstInstallTime); + } + +-RCT_EXPORT_METHOD(getFirstInstallTime:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { ++RCT_EXPORT_METHOD(getFirstInstallTime:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + resolve(@(self.getFirstInstallTime)); + } + ++- (void)getAndroidId:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getAndroidId", @"getAndroidId is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getAndroidIdSync { ++ RCTLogError(@"DeviceInfo:getAndroidIdSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getApiLevel:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getApiLevel", @"getApiLevel is not supported on iOS", nil); ++} ++ ++ ++- (NSNumber *)getApiLevelSync { ++ RCTLogError(@"DeviceInfo:getApiLevelSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getBaseOs:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getBaseOs", @"getBaseOs is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getBaseOsSync { ++ RCTLogError(@"DeviceInfo:getBaseOsSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getBootloader:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getBootloader", @"getBootloader is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getBootloaderSync { ++ RCTLogError(@"DeviceInfo:getBootloaderSync is not supported on iOS"); ++ return nil; ++} ++ ++- (void)getCodename:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getCodename", @"getCodename is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getCodenameSync { ++ RCTLogError(@"DeviceInfo:getCodenameSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (NSDictionary *)getConstants { ++ return [self constantsToExport]; ++} ++ ++ ++- (void)getDevice:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getDevice", @"getDevice is not supported on iOS", nil); ++} ++ ++- (NSString *)getDeviceSync { ++ RCTLogError(@"DeviceInfo:getDeviceSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getDisplay:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getDisplay", @"getDisplay is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getDisplaySync { ++ RCTLogError(@"DeviceInfo:getDisplaySync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getFingerprint:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getFingerprint", @"getFingerprint is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getFingerprintSync { ++ RCTLogError(@"DeviceInfo:getFingerprintSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getFreeDiskStorageOld:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getFreeDiskStorageOld", @"getFreeDiskStorageOld is not supported on iOS", nil); ++} ++ ++ ++- (NSNumber *)getFreeDiskStorageOldSync { ++ RCTLogError(@"DeviceInfo:getFreeDiskStorageOldSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getHardware:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getHardware", @"getHardware is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getHardwareSync { ++ RCTLogError(@"DeviceInfo:getHardwareSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getHost:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getHost", @"getHost is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getHostSync { ++ RCTLogError(@"DeviceInfo:getHostSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getIncremental:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getIncremental", @"getIncremental is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getIncrementalSync { ++ RCTLogError(@"DeviceInfo:getIncrementalSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getInstallReferrer:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getInstallReferrer", @"getInstallReferrer is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getInstallReferrerSync { ++ RCTLogError(@"DeviceInfo:getInstallReferrerSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getInstanceId:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getInstanceId", @"getInstanceId is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getInstanceIdSync { ++ RCTLogError(@"DeviceInfo:getInstanceIdSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getLastUpdateTime:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getLastUpdateTime", @"getLastUpdateTime is not supported on iOS", nil); ++} ++ ++ ++- (NSNumber *)getLastUpdateTimeSync { ++ RCTLogError(@"DeviceInfo:getLastUpdateTimeSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getMacAddress:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getMacAddress", @"getMacAddress is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getMacAddressSync { ++ RCTLogError(@"DeviceInfo:getMacAddressSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getMaxMemory:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getMaxMemory", @"getMaxMemory is not supported on iOS", nil); ++} ++ ++ ++- (NSNumber *)getMaxMemorySync { ++ RCTLogError(@"DeviceInfo:getMaxMemorySync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getPhoneNumber:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getPhoneNumber", @"getPhoneNumber is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getPhoneNumberSync { ++ RCTLogError(@"DeviceInfo:getPhoneNumberSync is not supported on iOS"); ++ return nil; ++} ++ ++- (void)getPreviewSdkInt:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getPreviewSdkInt", @"getPreviewSdkInt is not supported on iOS", nil); ++} ++ ++ ++- (NSNumber *)getPreviewSdkIntSync { ++ RCTLogError(@"DeviceInfo:getPreviewSdkIntSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getProduct:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getProduct", @"getProduct is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getProductSync { ++ RCTLogError(@"DeviceInfo:getProductSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getSecurityPatch:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getSecurityPatch", @"getSecurityPatch is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getSecurityPatchSync { ++ RCTLogError(@"DeviceInfo:getSecurityPatchSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getSerialNumber:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getSerialNumber", @"getSerialNumber is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getSerialNumberSync { ++ RCTLogError(@"DeviceInfo:getSerialNumberSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getSupported32BitAbis:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getSupported32BitAbis", @"getSupported32BitAbis is not supported on iOS", nil); ++} ++ ++ ++- (NSArray *)getSupported32BitAbisSync { ++ RCTLogError(@"DeviceInfo:getSupported32BitAbisSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getSupported64BitAbis:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getSupported64BitAbis", @"getSupported64BitAbis is not supported on iOS", nil); ++} ++ ++ ++- (NSArray *)getSupported64BitAbisSync { ++ RCTLogError(@"DeviceInfo:getSupported64BitAbisSync is not supported on iOS"); ++ return nil; ++} ++ ++- (void)getSystemAvailableFeatures:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getSystemAvailableFeatures", @"getSystemAvailableFeatures is not supported on iOS", nil); ++} ++ ++ ++- (NSArray *)getSystemAvailableFeaturesSync { ++ RCTLogError(@"DeviceInfo:getSystemAvailableFeaturesSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getSystemManufacturer:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getSystemManufacturer", @"getSystemManufacturer is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getSystemManufacturerSync { ++ RCTLogError(@"DeviceInfo:getSystemManufacturerSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getTags:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getTags", @"getTags is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getTagsSync { ++ RCTLogError(@"DeviceInfo:getTagsSync is not supported on iOS"); ++ return nil; ++} ++ ++- (void)getTotalDiskCapacityOld:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getTotalDiskCapacityOld", @"getTotalDiskCapacityOld is not supported on iOS", nil); ++} ++ ++ ++- (NSNumber *)getTotalDiskCapacityOldSync { ++ RCTLogError(@"DeviceInfo:getTotalDiskCapacityOldSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)getType:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:getType", @"getType is not supported on iOS", nil); ++} ++ ++ ++- (NSString *)getTypeSync { ++ RCTLogError(@"DeviceInfo:getTypeSync is not supported on iOS"); ++ return nil; ++} ++ ++- (NSString *)getUserAgentSync { ++ RCTLogError(@"DeviceInfo:getUserAgentSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)hasGms:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:hasGms", @"hasGms is not supported on iOS", nil); ++} ++ ++ ++- (NSNumber *)hasGmsSync { ++ RCTLogError(@"DeviceInfo:hasGmsSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)hasHms:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:hasHms", @"hasHms is not supported on iOS", nil); ++} ++ ++ ++- (NSNumber *)hasHmsSync { ++ RCTLogError(@"DeviceInfo:hasHmsSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)hasSystemFeature:(NSString *)feature resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:hasSystemFeature", @"hasSystemFeature is not supported on iOS", nil); ++} ++ ++ ++- (NSNumber *)hasSystemFeatureSync:(NSString *)feature { ++ RCTLogError(@"DeviceInfo:hasSystemFeatureSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)isAirplaneMode:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:isAirplaneMode", @"isAirplaneMode is not supported on iOS", nil); ++} ++ ++ ++- (NSNumber *)isAirplaneModeSync { ++ RCTLogError(@"DeviceInfo:isAirplaneModeSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)isCameraPresent:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:isCameraPresent", @"isCameraPresent is not supported on iOS", nil); ++} ++ ++ ++- (NSNumber *)isCameraPresentSync { ++ RCTLogError(@"DeviceInfo:isCameraPresentSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)isKeyboardConnected:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:isKeyboardConnected", @"isKeyboardConnected is not supported on iOS", nil); ++} ++ ++ ++- (NSNumber *)isKeyboardConnectedSync { ++ RCTLogError(@"DeviceInfo:isKeyboardConnectedSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)isMouseConnected:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:isMouseConnected", @"isMouseConnected is not supported on iOS", nil); ++} ++ ++ ++- (NSNumber *)isMouseConnectedSync { ++ RCTLogError(@"DeviceInfo:isMouseConnectedSync is not supported on iOS"); ++ return nil; ++} ++ ++ ++- (void)isTabletMode:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { ++ reject(@"DeviceInfo:isTabletMode", @"isTabletMode is not supported on iOS", nil); ++} ++ + - (long long) getFirstInstallTime { + NSURL* urlToDocumentsFolder = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; + NSError *error; +@@ -879,4 +1266,12 @@ - (void)dealloc + [[NSNotificationCenter defaultCenter] removeObserver:self]; + } + ++#ifdef RCT_NEW_ARCH_ENABLED ++- (std::shared_ptr)getTurboModule: ++ (const facebook::react::ObjCTurboModule::InitParams &)params ++{ ++ return std::make_shared(params); ++} ++#endif ++ + @end +diff --git a/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfoHelper.h b/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfoHelper.h +new file mode 100644 +index 0000000..71e7a26 +--- /dev/null ++++ b/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfoHelper.h +@@ -0,0 +1,6 @@ ++#import ++ ++@interface RNDeviceInfoHelper : NSObject +++ (NSString *)getCarrier; +++ (NSString *)getBuildId; ++@end +diff --git a/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfoHelper.m b/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfoHelper.m +new file mode 100644 +index 0000000..398bc04 +--- /dev/null ++++ b/node_modules/react-native-device-info/ios/RNDeviceInfo/RNDeviceInfoHelper.m +@@ -0,0 +1,38 @@ ++#import "RNDeviceInfoHelper.h" ++ ++#if !(TARGET_OS_TV) ++@import CoreTelephony; ++@import Darwin.sys.sysctl; ++#endif ++ ++@implementation RNDeviceInfoHelper ++ +++ (NSString *)getCarrier { ++#if (TARGET_OS_TV || TARGET_OS_MACCATALYST) ++ return @"unknown"; ++#else ++ CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init]; ++ CTCarrier *carrier = [netinfo subscriberCellularProvider]; ++ if (carrier.carrierName != nil) { ++ return carrier.carrierName; ++ } ++ return @"unknown"; ++#endif ++} ++ +++ (NSString *)getBuildId { ++#if TARGET_OS_TV ++ return @"unknown"; ++#else ++ size_t bufferSize = 64; ++ NSMutableData *buffer = [[NSMutableData alloc] initWithLength:bufferSize]; ++ int status = sysctlbyname("kern.osversion", buffer.mutableBytes, &bufferSize, NULL, 0); ++ if (status != 0) { ++ return @"unknown"; ++ } ++ NSString* buildId = [[NSString alloc] initWithCString:(const char *)buffer.mutableBytes encoding:NSUTF8StringEncoding]; ++ return buildId; ++#endif ++} ++ ++@end +diff --git a/node_modules/react-native-device-info/lib/commonjs/fabric/NativeDeviceInfoModule.js b/node_modules/react-native-device-info/lib/commonjs/fabric/NativeDeviceInfoModule.js +new file mode 100644 +index 0000000..f5d7b6c +--- /dev/null ++++ b/node_modules/react-native-device-info/lib/commonjs/fabric/NativeDeviceInfoModule.js +@@ -0,0 +1,13 @@ ++"use strict"; ++ ++Object.defineProperty(exports, "__esModule", { ++ value: true ++}); ++exports.default = void 0; ++ ++var _reactNative = require("react-native"); ++ ++var _default = _reactNative.TurboModuleRegistry.get('RNDeviceInfo'); ++ ++exports.default = _default; ++//# sourceMappingURL=NativeDeviceInfoModule.js.map +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/commonjs/fabric/NativeDeviceInfoModule.js.map b/node_modules/react-native-device-info/lib/commonjs/fabric/NativeDeviceInfoModule.js.map +new file mode 100644 +index 0000000..e0d9c9d +--- /dev/null ++++ b/node_modules/react-native-device-info/lib/commonjs/fabric/NativeDeviceInfoModule.js.map +@@ -0,0 +1 @@ ++{"version":3,"sources":["NativeDeviceInfoModule.ts"],"names":["TurboModuleRegistry","getEnforcing"],"mappings":";;;;;;;AAAA;;eAuJeA,iCAAoBC,YAApB,CAAuC,cAAvC,C","sourcesContent":["import { TurboModuleRegistry, TurboModule } from 'react-native';\n\nexport interface Spec extends TurboModule {\n getPowerState: () => Promise<{\n batteryLevel: number;\n batteryState: string;\n lowPowerMode: boolean;\n }>;\n getPowerStateSync: () => {\n batteryLevel: number;\n batteryState: string;\n lowPowerMode: boolean;\n }; // should be PowerState\n getSupported32BitAbis: () => Promise;\n getSupported32BitAbisSync: () => string[];\n getSupported64BitAbis: () => Promise;\n getSupported64BitAbisSync: () => string[];\n getSupportedAbis: () => Promise;\n getSupportedAbisSync: () => string[];\n getSystemManufacturer: () => Promise;\n getSystemManufacturerSync: () => string;\n getAndroidId: () => Promise;\n getAndroidIdSync: () => string;\n getApiLevel: () => Promise;\n getApiLevelSync: () => number;\n getAvailableLocationProviders: () => Promise;\n getAvailableLocationProvidersSync: () => Object; // should be LocationProviderInfo\n getBaseOs: () => Promise;\n getBaseOsSync: () => string;\n getBatteryLevel: () => Promise;\n getBatteryLevelSync: () => number;\n getBootloader: () => Promise;\n getBootloaderSync: () => string;\n getBuildId: () => Promise;\n getBuildIdSync: () => string;\n getCarrier: () => Promise;\n getCarrierSync: () => string;\n getCodename: () => Promise;\n getCodenameSync: () => string;\n getDevice: () => Promise;\n getDeviceName: () => Promise;\n getDeviceNameSync: () => string;\n getDeviceSync: () => string;\n getDeviceToken: () => Promise;\n getDisplay: () => Promise;\n getDisplaySync: () => string;\n getFingerprint: () => Promise;\n getFingerprintSync: () => string;\n getFirstInstallTime: () => Promise;\n getFirstInstallTimeSync: () => number;\n getFontScale: () => Promise;\n getFontScaleSync: () => number;\n getFreeDiskStorage: () => Promise;\n getFreeDiskStorageOld: () => Promise;\n getFreeDiskStorageSync: () => number;\n getFreeDiskStorageOldSync: () => number;\n getHardware: () => Promise;\n getHardwareSync: () => string;\n getHost: () => Promise;\n getHostSync: () => string;\n getIncremental: () => Promise;\n getIncrementalSync: () => string;\n getInstallerPackageName: () => Promise;\n getInstallerPackageNameSync: () => string;\n getInstallReferrer: () => Promise;\n getInstallReferrerSync: () => string;\n getInstanceId: () => Promise;\n getInstanceIdSync: () => string;\n getIpAddress: () => Promise;\n getIpAddressSync: () => string;\n getLastUpdateTime: () => Promise;\n getLastUpdateTimeSync: () => number;\n getMacAddress: () => Promise;\n getMacAddressSync: () => string;\n getMaxMemory: () => Promise;\n getMaxMemorySync: () => number;\n getPhoneNumber: () => Promise;\n getPhoneNumberSync: () => string;\n getPreviewSdkInt: () => Promise;\n getPreviewSdkIntSync: () => number;\n getProduct: () => Promise;\n getProductSync: () => string;\n getSecurityPatch: () => Promise;\n getSecurityPatchSync: () => string;\n getSerialNumber: () => Promise;\n getSerialNumberSync: () => string;\n getSystemAvailableFeatures: () => Promise;\n getSystemAvailableFeaturesSync: () => string[];\n getTags: () => Promise;\n getTagsSync: () => string;\n getTotalDiskCapacity: () => Promise;\n getTotalDiskCapacityOld: () => Promise;\n getTotalDiskCapacitySync: () => number;\n getTotalDiskCapacityOldSync: () => number;\n getTotalMemory: () => Promise;\n getTotalMemorySync: () => number;\n getType: () => Promise;\n getTypeSync: () => string;\n getUniqueId: () => Promise;\n getUniqueIdSync: () => string;\n getUsedMemory: () => Promise;\n getUsedMemorySync: () => number;\n getUserAgent: () => Promise;\n getUserAgentSync: () => string;\n getBrightness: () => Promise;\n getBrightnessSync: () => number;\n hasGms: () => Promise;\n hasGmsSync: () => boolean;\n hasHms: () => Promise;\n hasHmsSync: () => boolean;\n hasSystemFeature: (feature: string) => Promise;\n hasSystemFeatureSync: (feature: string) => boolean;\n isAirplaneMode: () => Promise;\n isAirplaneModeSync: () => boolean;\n isBatteryCharging: () => Promise;\n isBatteryChargingSync: () => boolean;\n isCameraPresent: () => Promise;\n isCameraPresentSync: () => boolean;\n isEmulator: () => Promise;\n isEmulatorSync: () => boolean;\n isHeadphonesConnected: () => Promise;\n isHeadphonesConnectedSync: () => boolean;\n isLocationEnabled: () => Promise;\n isLocationEnabledSync: () => boolean;\n isPinOrFingerprintSet: () => Promise;\n isPinOrFingerprintSetSync: () => boolean;\n isMouseConnected: () => Promise;\n isMouseConnectedSync: () => boolean;\n isKeyboardConnected: () => Promise;\n isKeyboardConnectedSync: () => boolean;\n isTabletMode: () => Promise;\n syncUniqueId: () => Promise;\n\n addListener(eventName: string): void;\n removeListeners(count: number): void;\n getConstants(): {\n appName: string;\n appVersion: string;\n brand: string;\n buildNumber: string;\n bundleId: string;\n deviceId: string;\n deviceType: string;\n isTablet: boolean;\n isDisplayZoomed?: boolean;\n model: string;\n systemName: string;\n systemVersion: string;\n };\n}\n\nexport default TurboModuleRegistry.getEnforcing('RNDeviceInfo');\n"]} +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/commonjs/index.js b/node_modules/react-native-device-info/lib/commonjs/index.js +index b305e00..46d3643 100644 +--- a/node_modules/react-native-device-info/lib/commonjs/index.js ++++ b/node_modules/react-native-device-info/lib/commonjs/index.js +@@ -3,34 +3,43 @@ + Object.defineProperty(exports, "__esModule", { + value: true + }); +-exports.syncUniqueId = syncUniqueId; ++exports.getDeviceSync = exports.getDeviceNameSync = exports.getDeviceName = exports.getDeviceId = exports.getDevice = exports.getCodenameSync = exports.getCodename = exports.getCarrierSync = exports.getCarrier = exports.getBundleId = exports.getBuildNumber = exports.getBuildIdSync = exports.getBuildId = exports.getBrightnessSync = exports.getBrightness = exports.getBrand = exports.getBootloaderSync = exports.getBootloader = exports.getBatteryLevelSync = exports.getBatteryLevel = exports.getBaseOsSync = exports.getBaseOs = exports.getAvailableLocationProvidersSync = exports.getAvailableLocationProviders = exports.getApplicationName = exports.getApiLevelSync = exports.getApiLevel = exports.getAndroidIdSync = exports.getAndroidId = exports.default = void 0; ++exports.getDeviceToken = getDeviceToken; ++exports.getFreeDiskStorage = exports.getFontScaleSync = exports.getFontScale = exports.getFirstInstallTimeSync = exports.getFirstInstallTime = exports.getFingerprintSync = exports.getFingerprint = exports.getDisplaySync = exports.getDisplay = exports.getDeviceTypeSync = exports.getDeviceType = void 0; ++exports.getFreeDiskStorageOld = getFreeDiskStorageOld; ++exports.getFreeDiskStorageOldSync = getFreeDiskStorageOldSync; ++exports.getLastUpdateTimeSync = exports.getLastUpdateTime = exports.getIpAddressSync = exports.getIpAddress = exports.getInstanceIdSync = exports.getInstanceId = exports.getInstallerPackageNameSync = exports.getInstallerPackageName = exports.getInstallReferrerSync = exports.getInstallReferrer = exports.getIncrementalSync = exports.getIncremental = exports.getHostSync = exports.getHost = exports.getHardwareSync = exports.getHardware = exports.getFreeDiskStorageSync = void 0; + exports.getMacAddress = getMacAddress; + exports.getMacAddressSync = getMacAddressSync; ++exports.getProductSync = exports.getProduct = exports.getPreviewSdkIntSync = exports.getPreviewSdkInt = exports.getPowerStateSync = exports.getPowerState = exports.getPhoneNumberSync = exports.getPhoneNumber = exports.getModel = exports.getMaxMemorySync = exports.getMaxMemory = exports.getManufacturerSync = exports.getManufacturer = void 0; + exports.getReadableVersion = getReadableVersion; +-exports.hasNotch = hasNotch; +-exports.hasDynamicIsland = hasDynamicIsland; ++exports.getTotalDiskCapacity = exports.getTagsSync = exports.getTags = exports.getSystemVersion = exports.getSystemName = exports.getSystemAvailableFeaturesSync = exports.getSystemAvailableFeatures = exports.getSerialNumberSync = exports.getSerialNumber = exports.getSecurityPatchSync = exports.getSecurityPatch = void 0; + exports.getTotalDiskCapacityOld = getTotalDiskCapacityOld; + exports.getTotalDiskCapacityOldSync = getTotalDiskCapacityOldSync; +-exports.getFreeDiskStorageOld = getFreeDiskStorageOld; +-exports.getFreeDiskStorageOldSync = getFreeDiskStorageOldSync; +-exports.isLandscape = isLandscape; +-exports.isLandscapeSync = isLandscapeSync; ++exports.getUserAgent = exports.getUsedMemorySync = exports.getUsedMemory = exports.getUniqueIdSync = exports.getUniqueId = exports.getTypeSync = exports.getType = exports.getTotalMemorySync = exports.getTotalMemory = exports.getTotalDiskCapacitySync = void 0; ++exports.getVersion = exports.getUserAgentSync = exports.getUserAgent = exports.getUsedMemorySync = exports.getUsedMemory = exports.getUniqueIdSync = exports.getUniqueId = exports.getTypeSync = exports.getType = exports.getTotalMemorySync = exports.getTotalMemory = exports.getTotalDiskCapacitySync = void 0; ++exports.hasDynamicIsland = hasDynamicIsland; ++exports.hasHmsSync = exports.hasHms = exports.hasGmsSync = exports.hasGms = void 0; ++exports.hasNotch = hasNotch; + exports.hasSystemFeature = hasSystemFeature; + exports.hasSystemFeatureSync = hasSystemFeatureSync; ++exports.isKeyboardConnectedSync = exports.isKeyboardConnected = exports.isHeadphonesConnectedSync = exports.isHeadphonesConnected = exports.isEmulatorSync = exports.isEmulator = exports.isDisplayZoomed = exports.isCameraPresentSync = exports.isCameraPresent = exports.isBatteryChargingSync = exports.isBatteryCharging = exports.isAirplaneModeSync = exports.isAirplaneMode = void 0; ++exports.isLandscape = isLandscape; ++exports.isLandscapeSync = isLandscapeSync; ++exports.isLocationEnabledSync = exports.isLocationEnabled = void 0; + exports.isLowBatteryLevel = isLowBatteryLevel; +-exports.getDeviceToken = getDeviceToken; ++exports.supportedAbisSync = exports.supportedAbis = exports.supported64BitAbisSync = exports.supported64BitAbis = exports.supported32BitAbisSync = exports.supported32BitAbis = exports.isTabletMode = exports.isTablet = exports.isPinOrFingerprintSetSync = exports.isPinOrFingerprintSet = exports.isMouseConnectedSync = exports.isMouseConnected = void 0; ++exports.syncUniqueId = syncUniqueId; + exports.useBatteryLevel = useBatteryLevel; + exports.useBatteryLevelIsLow = useBatteryLevelIsLow; +-exports.usePowerState = usePowerState; +-exports.useIsHeadphonesConnected = useIsHeadphonesConnected; +-exports.useFirstInstallTime = useFirstInstallTime; ++exports.useBrightness = useBrightness; + exports.useDeviceName = useDeviceName; ++exports.useFirstInstallTime = useFirstInstallTime; + exports.useHasSystemFeature = useHasSystemFeature; + exports.useIsEmulator = useIsEmulator; ++exports.useIsHeadphonesConnected = useIsHeadphonesConnected; + exports.useManufacturer = useManufacturer; +-exports.useBrightness = useBrightness; +-exports.isAirplaneModeSync = exports.isAirplaneMode = exports.isBatteryChargingSync = exports.isBatteryCharging = exports.getPowerStateSync = exports.getPowerState = exports.getBatteryLevelSync = exports.getBatteryLevel = exports.getFreeDiskStorageSync = exports.getFreeDiskStorage = exports.getTotalDiskCapacitySync = exports.getTotalDiskCapacity = exports.getMaxMemorySync = exports.getMaxMemory = exports.getTotalMemorySync = exports.getTotalMemory = exports.getCarrierSync = exports.getCarrier = exports.getPhoneNumberSync = exports.getPhoneNumber = exports.getLastUpdateTimeSync = exports.getLastUpdateTime = exports.getInstallReferrerSync = exports.getInstallReferrer = exports.getFirstInstallTimeSync = exports.getFirstInstallTime = exports.hasHmsSync = exports.hasHms = exports.hasGmsSync = exports.hasGms = exports.isPinOrFingerprintSetSync = exports.isPinOrFingerprintSet = exports.isTablet = exports.isEmulatorSync = exports.isEmulator = exports.getIncrementalSync = exports.getIncremental = exports.getCodenameSync = exports.getCodename = exports.getSecurityPatchSync = exports.getSecurityPatch = exports.getPreviewSdkIntSync = exports.getPreviewSdkInt = exports.getBaseOsSync = exports.getBaseOs = exports.getTypeSync = exports.getType = exports.getTagsSync = exports.getTags = exports.getProductSync = exports.getProduct = exports.getHostSync = exports.getHost = exports.getHardwareSync = exports.getHardware = exports.getFingerprintSync = exports.getFingerprint = exports.getDisplaySync = exports.getDisplay = exports.getDeviceSync = exports.getDevice = exports.getBootloaderSync = exports.getBootloader = exports.getFontScaleSync = exports.getFontScale = exports.getUserAgentSync = exports.getUserAgent = exports.getUsedMemorySync = exports.getUsedMemory = exports.getDeviceNameSync = exports.getDeviceName = exports.getVersion = exports.getBuildNumber = exports.getApplicationName = exports.getInstallerPackageNameSync = exports.getInstallerPackageName = exports.getBundleId = exports.getApiLevelSync = exports.getApiLevel = exports.getBuildIdSync = exports.getBuildId = exports.getSystemVersion = exports.getSystemName = exports.getBrand = exports.getModel = exports.getManufacturerSync = exports.getManufacturer = exports.getDeviceId = exports.isCameraPresentSync = exports.isCameraPresent = exports.getIpAddressSync = exports.getIpAddress = exports.getAndroidIdSync = exports.getAndroidId = exports.getSerialNumberSync = exports.getSerialNumber = exports.getInstanceIdSync = exports.getInstanceId = exports.getUniqueIdSync = exports.getUniqueId = void 0; +-exports.default = exports.getBrightnessSync = exports.getBrightness = exports.getAvailableLocationProvidersSync = exports.getAvailableLocationProviders = exports.isTabletMode = exports.isKeyboardConnectedSync = exports.isKeyboardConnected = exports.isMouseConnectedSync = exports.isMouseConnected = exports.isHeadphonesConnectedSync = exports.isHeadphonesConnected = exports.isLocationEnabledSync = exports.isLocationEnabled = exports.getSystemAvailableFeaturesSync = exports.getSystemAvailableFeatures = exports.supported64BitAbisSync = exports.supported64BitAbis = exports.supported32BitAbisSync = exports.supported32BitAbis = exports.supportedAbisSync = exports.supportedAbis = exports.getDeviceTypeSync = exports.getDeviceType = void 0; ++exports.usePowerState = usePowerState; + + var _react = require("react"); + +@@ -48,6 +57,16 @@ var _supportedPlatformInfo = require("./internal/supported-platform-info"); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + ++let constants; ++ ++function getConstants() { ++ if (constants === undefined) { ++ constants = _nativeInterface.default.getConstants(); ++ } ++ ++ return constants; ++} ++ + const [getUniqueId, getUniqueIdSync] = (0, _supportedPlatformInfo.getSupportedPlatformInfoFunctions)({ + memoKey: 'uniqueId', + supportedPlatforms: ['android', 'ios', 'windows'], +@@ -136,7 +155,7 @@ function getMacAddressSync() { + const getDeviceId = () => (0, _supportedPlatformInfo.getSupportedPlatformInfoSync)({ + defaultValue: 'unknown', + memoKey: 'deviceId', +- getter: () => _nativeInterface.default.deviceId, ++ getter: () => getConstants().deviceId, + supportedPlatforms: ['android', 'ios', 'windows'] + }); + +@@ -155,7 +174,7 @@ const getModel = () => (0, _supportedPlatformInfo.getSupportedPlatformInfoSync)( + memoKey: 'model', + defaultValue: 'unknown', + supportedPlatforms: ['ios', 'android', 'windows'], +- getter: () => _nativeInterface.default.model ++ getter: () => getConstants().model + }); + + exports.getModel = getModel; +@@ -164,7 +183,7 @@ const getBrand = () => (0, _supportedPlatformInfo.getSupportedPlatformInfoSync)( + memoKey: 'brand', + supportedPlatforms: ['android', 'ios', 'windows'], + defaultValue: 'unknown', +- getter: () => _nativeInterface.default.brand ++ getter: () => getConstants().brand + }); + + exports.getBrand = getBrand; +@@ -174,7 +193,7 @@ const getSystemName = () => (0, _supportedPlatformInfo.getSupportedPlatformInfoS + supportedPlatforms: ['ios', 'android', 'windows'], + memoKey: 'systemName', + getter: () => _reactNative.Platform.select({ +- ios: _nativeInterface.default.systemName, ++ ios: getConstants().systemName, + android: 'Android', + windows: 'Windows', + default: 'unknown' +@@ -185,7 +204,7 @@ exports.getSystemName = getSystemName; + + const getSystemVersion = () => (0, _supportedPlatformInfo.getSupportedPlatformInfoSync)({ + defaultValue: 'unknown', +- getter: () => _nativeInterface.default.systemVersion, ++ getter: () => getConstants().systemVersion, + supportedPlatforms: ['android', 'ios', 'windows'], + memoKey: 'systemVersion' + }); +@@ -214,7 +233,7 @@ const getBundleId = () => (0, _supportedPlatformInfo.getSupportedPlatformInfoSyn + memoKey: 'bundleId', + supportedPlatforms: ['android', 'ios', 'windows'], + defaultValue: 'unknown', +- getter: () => _nativeInterface.default.bundleId ++ getter: () => getConstants().bundleId + }); + + exports.getBundleId = getBundleId; +@@ -231,7 +250,7 @@ exports.getInstallerPackageName = getInstallerPackageName; + const getApplicationName = () => (0, _supportedPlatformInfo.getSupportedPlatformInfoSync)({ + memoKey: 'appName', + defaultValue: 'unknown', +- getter: () => _nativeInterface.default.appName, ++ getter: () => getConstants().appName, + supportedPlatforms: ['android', 'ios', 'windows'] + }); + +@@ -240,7 +259,7 @@ exports.getApplicationName = getApplicationName; + const getBuildNumber = () => (0, _supportedPlatformInfo.getSupportedPlatformInfoSync)({ + memoKey: 'buildNumber', + supportedPlatforms: ['android', 'ios', 'windows'], +- getter: () => _nativeInterface.default.buildNumber, ++ getter: () => getConstants().buildNumber, + defaultValue: 'unknown' + }); + +@@ -250,7 +269,7 @@ const getVersion = () => (0, _supportedPlatformInfo.getSupportedPlatformInfoSync + memoKey: 'version', + defaultValue: 'unknown', + supportedPlatforms: ['android', 'ios', 'windows'], +- getter: () => _nativeInterface.default.appVersion ++ getter: () => getConstants().appVersion + }); + + exports.getVersion = getVersion; +@@ -441,10 +460,19 @@ const isTablet = () => (0, _supportedPlatformInfo.getSupportedPlatformInfoSync)( + defaultValue: false, + supportedPlatforms: ['android', 'ios', 'windows'], + memoKey: 'tablet', +- getter: () => _nativeInterface.default.isTablet ++ getter: () => getConstants().isTablet + }); + + exports.isTablet = isTablet; ++ ++const isDisplayZoomed = () => (0, _supportedPlatformInfo.getSupportedPlatformInfoSync)({ ++ defaultValue: false, ++ supportedPlatforms: ['ios'], ++ memoKey: 'zoomed', ++ getter: () => getConstants().isDisplayZoomed ++}); ++ ++exports.isDisplayZoomed = isDisplayZoomed; + const [isPinOrFingerprintSet, isPinOrFingerprintSetSync] = (0, _supportedPlatformInfo.getSupportedPlatformInfoFunctions)({ + supportedPlatforms: ['android', 'ios', 'windows'], + getter: () => _nativeInterface.default.isPinOrFingerprintSet(), +@@ -457,6 +485,8 @@ let notch; + + function hasNotch() { + if (notch === undefined) { ++ console.log(_nativeInterface.default); ++ + let _brand = getBrand(); + + let _model = getModel(); +@@ -676,7 +706,7 @@ const getDeviceType = () => { + memoKey: 'deviceType', + supportedPlatforms: ['android', 'ios', 'windows'], + defaultValue: 'unknown', +- getter: () => _nativeInterface.default.deviceType ++ getter: () => getConstants().deviceType + }); + }; + +@@ -687,7 +717,7 @@ const getDeviceTypeSync = () => { + memoKey: 'deviceType', + supportedPlatforms: ['android', 'ios', 'windows'], + defaultValue: 'unknown', +- getter: () => _nativeInterface.default.deviceType ++ getter: () => getConstants().deviceType + }); + }; + +@@ -817,7 +847,7 @@ async function getDeviceToken() { + return 'unknown'; + } + +-const deviceInfoEmitter = new _reactNative.NativeEventEmitter(_reactNative.NativeModules.RNDeviceInfo); ++const deviceInfoEmitter = new _reactNative.NativeEventEmitter(_nativeInterface.default); + + function useBatteryLevel() { + const [batteryLevel, setBatteryLevel] = (0, _react.useState)(null); +@@ -1052,6 +1082,7 @@ const DeviceInfo = { + isKeyboardConnectedSync, + isTabletMode, + isTablet, ++ isDisplayZoomed, + supported32BitAbis, + supported32BitAbisSync, + supported64BitAbis, +diff --git a/node_modules/react-native-device-info/lib/commonjs/index.js.flow b/node_modules/react-native-device-info/lib/commonjs/index.js.flow +index 02fbb10..fdb85b0 100644 +--- a/node_modules/react-native-device-info/lib/commonjs/index.js.flow ++++ b/node_modules/react-native-device-info/lib/commonjs/index.js.flow +@@ -153,6 +153,7 @@ declare module.exports: { + isKeyboardConnectedSync: () => boolean, + isTabletMode: () => Promise, + isTablet: () => boolean, ++ isDisplayZoomed: () => boolean, + supported32BitAbis: () => Promise, + supported32BitAbisSync: () => string[], + supported64BitAbis: () => Promise, +diff --git a/node_modules/react-native-device-info/lib/commonjs/index.js.map b/node_modules/react-native-device-info/lib/commonjs/index.js.map +index dc07090..0d79f29 100644 +--- a/node_modules/react-native-device-info/lib/commonjs/index.js.map ++++ b/node_modules/react-native-device-info/lib/commonjs/index.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["index.ts"],"names":["getUniqueId","getUniqueIdSync","memoKey","supportedPlatforms","getter","RNDeviceInfo","syncGetter","defaultValue","uniqueId","syncUniqueId","Platform","OS","getInstanceId","getInstanceIdSync","getSerialNumber","getSerialNumberSync","getAndroidId","getAndroidIdSync","getIpAddress","getIpAddressSync","isCameraPresent","isCameraPresentSync","getMacAddress","getMacAddressSync","getDeviceId","deviceId","getManufacturer","getManufacturerSync","Promise","resolve","getSystemManufacturer","getSystemManufacturerSync","getModel","model","getBrand","brand","getSystemName","select","ios","systemName","android","windows","default","getSystemVersion","systemVersion","getBuildId","getBuildIdSync","getApiLevel","getApiLevelSync","getBundleId","bundleId","getInstallerPackageName","getInstallerPackageNameSync","getApplicationName","appName","getBuildNumber","buildNumber","getVersion","appVersion","getReadableVersion","getDeviceName","getDeviceNameSync","getUsedMemory","getUsedMemorySync","getUserAgent","getUserAgentSync","getFontScale","getFontScaleSync","getBootloader","getBootloaderSync","getDevice","getDeviceSync","getDisplay","getDisplaySync","getFingerprint","getFingerprintSync","getHardware","getHardwareSync","getHost","getHostSync","getProduct","getProductSync","getTags","getTagsSync","getType","getTypeSync","getBaseOs","getBaseOsSync","getPreviewSdkInt","getPreviewSdkIntSync","getSecurityPatch","getSecurityPatchSync","getCodename","getCodenameSync","getIncremental","getIncrementalSync","isEmulator","isEmulatorSync","isTablet","isPinOrFingerprintSet","isPinOrFingerprintSetSync","notch","hasNotch","undefined","_brand","_model","devicesWithNotch","findIndex","item","toLowerCase","dynamicIsland","hasDynamicIsland","devicesWithDynamicIsland","hasGms","hasGmsSync","hasHms","hasHmsSync","getFirstInstallTime","getFirstInstallTimeSync","getInstallReferrer","getInstallReferrerSync","getLastUpdateTime","getLastUpdateTimeSync","getPhoneNumber","getPhoneNumberSync","getCarrier","getCarrierSync","getTotalMemory","getTotalMemorySync","getMaxMemory","getMaxMemorySync","getTotalDiskCapacity","getTotalDiskCapacitySync","getTotalDiskCapacityOld","getTotalDiskCapacityOldSync","getFreeDiskStorage","getFreeDiskStorageSync","getFreeDiskStorageOld","getFreeDiskStorageOldSync","getBatteryLevel","getBatteryLevelSync","getPowerState","getPowerStateSync","isBatteryCharging","isBatteryChargingSync","isLandscape","isLandscapeSync","height","width","Dimensions","get","isAirplaneMode","isAirplaneModeSync","getDeviceType","deviceType","getDeviceTypeSync","supportedAbis","supportedAbisSync","getSupportedAbis","getSupportedAbisSync","supported32BitAbis","supported32BitAbisSync","getSupported32BitAbis","getSupported32BitAbisSync","supported64BitAbis","supported64BitAbisSync","getSupported64BitAbis","getSupported64BitAbisSync","hasSystemFeature","feature","hasSystemFeatureSync","isLowBatteryLevel","level","getSystemAvailableFeatures","getSystemAvailableFeaturesSync","isLocationEnabled","isLocationEnabledSync","isHeadphonesConnected","isHeadphonesConnectedSync","isMouseConnected","isMouseConnectedSync","isKeyboardConnected","isKeyboardConnectedSync","isTabletMode","getAvailableLocationProviders","getAvailableLocationProvidersSync","getBrightness","getBrightnessSync","getDeviceToken","deviceInfoEmitter","NativeEventEmitter","NativeModules","useBatteryLevel","batteryLevel","setBatteryLevel","setInitialValue","initialValue","onChange","subscription","addListener","remove","useBatteryLevelIsLow","batteryLevelIsLow","setBatteryLevelIsLow","usePowerState","powerState","setPowerState","state","useIsHeadphonesConnected","useFirstInstallTime","useDeviceName","useHasSystemFeature","asyncGetter","useIsEmulator","useManufacturer","useBrightness","brightness","setBrightness","value","DeviceInfo"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { Dimensions, NativeEventEmitter, NativeModules, Platform } from 'react-native';\nimport { useOnEvent, useOnMount } from './internal/asyncHookWrappers';\nimport devicesWithDynamicIsland from \"./internal/devicesWithDynamicIsland\";\nimport devicesWithNotch from './internal/devicesWithNotch';\nimport RNDeviceInfo from './internal/nativeInterface';\nimport {\n getSupportedPlatformInfoAsync,\n getSupportedPlatformInfoFunctions,\n getSupportedPlatformInfoSync,\n} from './internal/supported-platform-info';\nimport { DeviceInfoModule } from './internal/privateTypes';\nimport type {\n AsyncHookResult,\n DeviceType,\n LocationProviderInfo,\n PowerState,\n} from './internal/types';\n\nexport const [getUniqueId, getUniqueIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'uniqueId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getUniqueId(),\n syncGetter: () => RNDeviceInfo.getUniqueIdSync(),\n defaultValue: 'unknown',\n});\n\nlet uniqueId: string;\nexport async function syncUniqueId() {\n if (Platform.OS === 'ios') {\n uniqueId = await RNDeviceInfo.syncUniqueId();\n } else {\n uniqueId = await getUniqueId();\n }\n return uniqueId;\n}\n\nexport const [getInstanceId, getInstanceIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'instanceId',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getInstanceId(),\n syncGetter: () => RNDeviceInfo.getInstanceIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getSerialNumber, getSerialNumberSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'serialNumber',\n supportedPlatforms: ['android', 'windows'],\n getter: () => RNDeviceInfo.getSerialNumber(),\n syncGetter: () => RNDeviceInfo.getSerialNumberSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getAndroidId, getAndroidIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'androidId',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getAndroidId(),\n syncGetter: () => RNDeviceInfo.getAndroidIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getIpAddress, getIpAddressSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getIpAddress(),\n syncGetter: () => RNDeviceInfo.getIpAddressSync(),\n defaultValue: 'unknown',\n});\n\nexport const [isCameraPresent, isCameraPresentSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.isCameraPresent(),\n syncGetter: () => RNDeviceInfo.isCameraPresentSync(),\n defaultValue: false,\n});\n\nexport async function getMacAddress() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getMacAddress();\n } else if (Platform.OS === 'ios') {\n return '02:00:00:00:00:00';\n }\n return 'unknown';\n}\n\nexport function getMacAddressSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getMacAddressSync();\n } else if (Platform.OS === 'ios') {\n return '02:00:00:00:00:00';\n }\n return 'unknown';\n}\n\nexport const getDeviceId = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n memoKey: 'deviceId',\n getter: () => RNDeviceInfo.deviceId,\n supportedPlatforms: ['android', 'ios', 'windows'],\n });\n\nexport const [getManufacturer, getManufacturerSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'manufacturer',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () =>\n Platform.OS == 'ios' ? Promise.resolve('Apple') : RNDeviceInfo.getSystemManufacturer(),\n syncGetter: () => (Platform.OS == 'ios' ? 'Apple' : RNDeviceInfo.getSystemManufacturerSync()),\n defaultValue: 'unknown',\n});\n\nexport const getModel = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'model',\n defaultValue: 'unknown',\n supportedPlatforms: ['ios', 'android', 'windows'],\n getter: () => RNDeviceInfo.model,\n });\n\nexport const getBrand = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'brand',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.brand,\n });\n\nexport const getSystemName = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n supportedPlatforms: ['ios', 'android', 'windows'],\n memoKey: 'systemName',\n getter: () =>\n Platform.select({\n ios: RNDeviceInfo.systemName,\n android: 'Android',\n windows: 'Windows',\n default: 'unknown',\n }),\n });\n\nexport const getSystemVersion = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.systemVersion,\n supportedPlatforms: ['android', 'ios', 'windows'],\n memoKey: 'systemVersion',\n });\n\nexport const [getBuildId, getBuildIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'buildId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getBuildId(),\n syncGetter: () => RNDeviceInfo.getBuildIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getApiLevel, getApiLevelSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'apiLevel',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getApiLevel(),\n syncGetter: () => RNDeviceInfo.getApiLevelSync(),\n defaultValue: -1,\n});\n\nexport const getBundleId = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'bundleId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.bundleId,\n });\n\nexport const [\n getInstallerPackageName,\n getInstallerPackageNameSync,\n] = getSupportedPlatformInfoFunctions({\n memoKey: 'installerPackageName',\n supportedPlatforms: ['android', 'windows', 'ios'],\n getter: () => RNDeviceInfo.getInstallerPackageName(),\n syncGetter: () => RNDeviceInfo.getInstallerPackageNameSync(),\n defaultValue: 'unknown',\n});\n\nexport const getApplicationName = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'appName',\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.appName,\n supportedPlatforms: ['android', 'ios', 'windows'],\n });\n\nexport const getBuildNumber = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'buildNumber',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.buildNumber,\n defaultValue: 'unknown',\n });\n\nexport const getVersion = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'version',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.appVersion,\n });\n\nexport function getReadableVersion() {\n return getVersion() + '.' + getBuildNumber();\n}\n\nexport const [getDeviceName, getDeviceNameSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getDeviceName(),\n syncGetter: () => RNDeviceInfo.getDeviceNameSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getUsedMemory, getUsedMemorySync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getUsedMemory(),\n syncGetter: () => RNDeviceInfo.getUsedMemorySync(),\n defaultValue: -1,\n});\n\nexport const getUserAgent = () =>\n getSupportedPlatformInfoAsync({\n memoKey: 'userAgent',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'ios', 'web'],\n getter: () => RNDeviceInfo.getUserAgent(),\n });\n\nexport const getUserAgentSync = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'userAgentSync',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'web'],\n getter: () => RNDeviceInfo.getUserAgentSync(),\n });\n\nexport const [getFontScale, getFontScaleSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getFontScale(),\n syncGetter: () => RNDeviceInfo.getFontScaleSync(),\n defaultValue: -1,\n});\n\nexport const [getBootloader, getBootloaderSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'bootloader',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getBootloader(),\n syncGetter: () => RNDeviceInfo.getBootloaderSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getDevice, getDeviceSync] = getSupportedPlatformInfoFunctions({\n getter: () => RNDeviceInfo.getDevice(),\n syncGetter: () => RNDeviceInfo.getDeviceSync(),\n defaultValue: 'unknown',\n memoKey: 'device',\n supportedPlatforms: ['android'],\n});\n\nexport const [getDisplay, getDisplaySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'display',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getDisplay(),\n syncGetter: () => RNDeviceInfo.getDisplaySync(),\n defaultValue: 'unknown',\n});\n\nexport const [getFingerprint, getFingerprintSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'fingerprint',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getFingerprint(),\n syncGetter: () => RNDeviceInfo.getFingerprintSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getHardware, getHardwareSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'hardware',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getHardware(),\n syncGetter: () => RNDeviceInfo.getHardwareSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getHost, getHostSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'host',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getHost(),\n syncGetter: () => RNDeviceInfo.getHostSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getProduct, getProductSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'product',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getProduct(),\n syncGetter: () => RNDeviceInfo.getProductSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getTags, getTagsSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'tags',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getTags(),\n syncGetter: () => RNDeviceInfo.getTagsSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getType, getTypeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'type',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getType(),\n syncGetter: () => RNDeviceInfo.getTypeSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getBaseOs, getBaseOsSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'baseOs',\n supportedPlatforms: ['android', 'web', 'windows'],\n getter: () => RNDeviceInfo.getBaseOs(),\n syncGetter: () => RNDeviceInfo.getBaseOsSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getPreviewSdkInt, getPreviewSdkIntSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'previewSdkInt',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getPreviewSdkInt(),\n syncGetter: () => RNDeviceInfo.getPreviewSdkIntSync(),\n defaultValue: -1,\n});\n\nexport const [getSecurityPatch, getSecurityPatchSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'securityPatch',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSecurityPatch(),\n syncGetter: () => RNDeviceInfo.getSecurityPatchSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getCodename, getCodenameSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'codeName',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getCodename(),\n syncGetter: () => RNDeviceInfo.getCodenameSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getIncremental, getIncrementalSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'incremental',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getIncremental(),\n syncGetter: () => RNDeviceInfo.getIncrementalSync(),\n defaultValue: 'unknown',\n});\n\nexport const [isEmulator, isEmulatorSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'emulator',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.isEmulator(),\n syncGetter: () => RNDeviceInfo.isEmulatorSync(),\n defaultValue: false,\n});\n\nexport const isTablet = () =>\n getSupportedPlatformInfoSync({\n defaultValue: false,\n supportedPlatforms: ['android', 'ios', 'windows'],\n memoKey: 'tablet',\n getter: () => RNDeviceInfo.isTablet,\n });\n\nexport const [isPinOrFingerprintSet, isPinOrFingerprintSetSync] = getSupportedPlatformInfoFunctions(\n {\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.isPinOrFingerprintSet(),\n syncGetter: () => RNDeviceInfo.isPinOrFingerprintSetSync(),\n defaultValue: false,\n }\n);\n\nlet notch: boolean;\nexport function hasNotch() {\n if (notch === undefined) {\n let _brand = getBrand();\n let _model = getModel();\n notch =\n devicesWithNotch.findIndex(\n (item) =>\n item.brand.toLowerCase() === _brand.toLowerCase() &&\n item.model.toLowerCase() === _model.toLowerCase()\n ) !== -1;\n }\n return notch;\n}\n\nlet dynamicIsland: boolean;\nexport function hasDynamicIsland() {\n if (dynamicIsland === undefined) {\n let _brand = getBrand();\n let _model = getModel();\n dynamicIsland =\n devicesWithDynamicIsland.findIndex(\n (item) =>\n item.brand.toLowerCase() === _brand.toLowerCase() &&\n item.model.toLowerCase() === _model.toLowerCase()\n ) !== -1;\n }\n return dynamicIsland;\n}\n\nexport const [hasGms, hasGmsSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.hasGms(),\n syncGetter: () => RNDeviceInfo.hasGmsSync(),\n defaultValue: false,\n});\n\nexport const [hasHms, hasHmsSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.hasHms(),\n syncGetter: () => RNDeviceInfo.hasHmsSync(),\n defaultValue: false,\n});\n\nexport const [getFirstInstallTime, getFirstInstallTimeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'firstInstallTime',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getFirstInstallTime(),\n syncGetter: () => RNDeviceInfo.getFirstInstallTimeSync(),\n defaultValue: -1,\n});\n\nexport const [getInstallReferrer, getInstallReferrerSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'installReferrer',\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getInstallReferrer(),\n syncGetter: () => RNDeviceInfo.getInstallReferrerSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getLastUpdateTime, getLastUpdateTimeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'lastUpdateTime',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getLastUpdateTime(),\n syncGetter: () => RNDeviceInfo.getLastUpdateTimeSync(),\n defaultValue: -1,\n});\n\nexport const [getPhoneNumber, getPhoneNumberSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getPhoneNumber(),\n syncGetter: () => RNDeviceInfo.getPhoneNumberSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getCarrier, getCarrierSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.getCarrier(),\n syncGetter: () => RNDeviceInfo.getCarrierSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getTotalMemory, getTotalMemorySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'totalMemory',\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getTotalMemory(),\n syncGetter: () => RNDeviceInfo.getTotalMemorySync(),\n defaultValue: -1,\n});\n\nexport const [getMaxMemory, getMaxMemorySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'maxMemory',\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getMaxMemory(),\n syncGetter: () => RNDeviceInfo.getMaxMemorySync(),\n defaultValue: -1,\n});\n\nexport const [getTotalDiskCapacity, getTotalDiskCapacitySync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getTotalDiskCapacity(),\n syncGetter: () => RNDeviceInfo.getTotalDiskCapacitySync(),\n defaultValue: -1,\n});\n\nexport async function getTotalDiskCapacityOld() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getTotalDiskCapacityOld();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getTotalDiskCapacity();\n }\n\n return -1;\n}\n\nexport function getTotalDiskCapacityOldSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getTotalDiskCapacityOldSync();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getTotalDiskCapacitySync();\n }\n\n return -1;\n}\n\nexport const [getFreeDiskStorage, getFreeDiskStorageSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getFreeDiskStorage(),\n syncGetter: () => RNDeviceInfo.getFreeDiskStorageSync(),\n defaultValue: -1,\n});\n\nexport async function getFreeDiskStorageOld() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getFreeDiskStorageOld();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getFreeDiskStorage();\n }\n\n return -1;\n}\n\nexport function getFreeDiskStorageOldSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getFreeDiskStorageOldSync();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getFreeDiskStorageSync();\n }\n\n return -1;\n}\n\nexport const [getBatteryLevel, getBatteryLevelSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getBatteryLevel(),\n syncGetter: () => RNDeviceInfo.getBatteryLevelSync(),\n defaultValue: -1,\n});\n\nexport const [getPowerState, getPowerStateSync] = getSupportedPlatformInfoFunctions<\n Partial\n>({\n supportedPlatforms: ['ios', 'android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getPowerState(),\n syncGetter: () => RNDeviceInfo.getPowerStateSync(),\n defaultValue: {},\n});\n\nexport const [isBatteryCharging, isBatteryChargingSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.isBatteryCharging(),\n syncGetter: () => RNDeviceInfo.isBatteryChargingSync(),\n defaultValue: false,\n});\n\nexport async function isLandscape() {\n return Promise.resolve(isLandscapeSync());\n}\n\nexport function isLandscapeSync() {\n const { height, width } = Dimensions.get('window');\n return width >= height;\n}\n\nexport const [isAirplaneMode, isAirplaneModeSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'web'],\n getter: () => RNDeviceInfo.isAirplaneMode(),\n syncGetter: () => RNDeviceInfo.isAirplaneModeSync(),\n defaultValue: false,\n});\n\nexport const getDeviceType = () => {\n return getSupportedPlatformInfoSync({\n memoKey: 'deviceType',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.deviceType,\n });\n};\n\nexport const getDeviceTypeSync = () => {\n return getSupportedPlatformInfoSync({\n memoKey: 'deviceType',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.deviceType,\n });\n};\n\nexport const [supportedAbis, supportedAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supportedAbis',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getSupportedAbis(),\n syncGetter: () => RNDeviceInfo.getSupportedAbisSync(),\n defaultValue: [] as string[],\n});\n\nexport const [supported32BitAbis, supported32BitAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supported32BitAbis',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSupported32BitAbis(),\n syncGetter: () => RNDeviceInfo.getSupported32BitAbisSync(),\n defaultValue: [] as string[],\n});\n\nexport const [supported64BitAbis, supported64BitAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supported64BitAbis',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSupported64BitAbis(),\n syncGetter: () => RNDeviceInfo.getSupported64BitAbisSync(),\n defaultValue: [],\n});\n\nexport async function hasSystemFeature(feature: string) {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.hasSystemFeature(feature);\n }\n return false;\n}\n\nexport function hasSystemFeatureSync(feature: string) {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.hasSystemFeatureSync(feature);\n }\n return false;\n}\n\nexport function isLowBatteryLevel(level: number): boolean {\n if (Platform.OS === 'android') {\n return level < 0.15;\n }\n return level < 0.2;\n}\n\nexport const [\n getSystemAvailableFeatures,\n getSystemAvailableFeaturesSync,\n] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSystemAvailableFeatures(),\n syncGetter: () => RNDeviceInfo.getSystemAvailableFeaturesSync(),\n defaultValue: [] as string[],\n});\n\nexport const [isLocationEnabled, isLocationEnabledSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'web'],\n getter: () => RNDeviceInfo.isLocationEnabled(),\n syncGetter: () => RNDeviceInfo.isLocationEnabledSync(),\n defaultValue: false,\n});\n\nexport const [isHeadphonesConnected, isHeadphonesConnectedSync] = getSupportedPlatformInfoFunctions(\n {\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.isHeadphonesConnected(),\n syncGetter: () => RNDeviceInfo.isHeadphonesConnectedSync(),\n defaultValue: false,\n }\n);\n\nexport const [isMouseConnected, isMouseConnectedSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isMouseConnected(),\n syncGetter: () => RNDeviceInfo.isMouseConnectedSync(),\n defaultValue: false,\n});\n\nexport const [isKeyboardConnected, isKeyboardConnectedSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isKeyboardConnected(),\n syncGetter: () => RNDeviceInfo.isKeyboardConnectedSync(),\n defaultValue: false,\n});\n\nexport const isTabletMode = () =>\n getSupportedPlatformInfoAsync({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isTabletMode(),\n defaultValue: false,\n });\n\nexport const [\n getAvailableLocationProviders,\n getAvailableLocationProvidersSync,\n] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.getAvailableLocationProviders(),\n syncGetter: () => RNDeviceInfo.getAvailableLocationProvidersSync(),\n defaultValue: {},\n});\n\nexport const [getBrightness, getBrightnessSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['ios'],\n getter: () => RNDeviceInfo.getBrightness(),\n syncGetter: () => RNDeviceInfo.getBrightnessSync(),\n defaultValue: -1,\n});\n\nexport async function getDeviceToken() {\n if (Platform.OS === 'ios') {\n return RNDeviceInfo.getDeviceToken();\n }\n return 'unknown';\n}\n\nconst deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);\nexport function useBatteryLevel(): number | null {\n const [batteryLevel, setBatteryLevel] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBatteryLevel();\n setBatteryLevel(initialValue);\n };\n\n const onChange = (level: number) => {\n setBatteryLevel(level);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_batteryLevelDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return batteryLevel;\n}\n\nexport function useBatteryLevelIsLow(): number | null {\n const [batteryLevelIsLow, setBatteryLevelIsLow] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBatteryLevel();\n isLowBatteryLevel(initialValue) && setBatteryLevelIsLow(initialValue);\n };\n\n setInitialValue();\n\n const onChange = (level: number) => {\n setBatteryLevelIsLow(level);\n };\n\n const subscription = deviceInfoEmitter.addListener('RNDeviceInfo_batteryLevelIsLow', onChange);\n\n return () => subscription.remove();\n }, []);\n\n return batteryLevelIsLow;\n}\n\nexport function usePowerState(): Partial {\n const [powerState, setPowerState] = useState>({});\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: Partial = await getPowerState();\n setPowerState(initialValue);\n };\n\n const onChange = (state: PowerState) => {\n setPowerState(state);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_powerStateDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return powerState;\n}\n\nexport function useIsHeadphonesConnected(): AsyncHookResult {\n return useOnEvent('RNDeviceInfo_headphoneConnectionDidChange', isHeadphonesConnected, false);\n}\n\nexport function useFirstInstallTime(): AsyncHookResult {\n return useOnMount(getFirstInstallTime, -1);\n}\n\nexport function useDeviceName(): AsyncHookResult {\n return useOnMount(getDeviceName, 'unknown');\n}\n\nexport function useHasSystemFeature(feature: string): AsyncHookResult {\n const asyncGetter = useCallback(() => hasSystemFeature(feature), [feature]);\n return useOnMount(asyncGetter, false);\n}\n\nexport function useIsEmulator(): AsyncHookResult {\n return useOnMount(isEmulator, false);\n}\n\nexport function useManufacturer(): AsyncHookResult {\n return useOnMount(getManufacturer, 'unknown');\n}\n\nexport function useBrightness(): number | null {\n const [brightness, setBrightness] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBrightness();\n setBrightness(initialValue);\n };\n\n const onChange = (value: number) => {\n setBrightness(value);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_brightnessDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return brightness;\n}\n\nexport type { AsyncHookResult, DeviceType, LocationProviderInfo, PowerState };\n\nconst DeviceInfo: DeviceInfoModule = {\n getAndroidId,\n getAndroidIdSync,\n getApiLevel,\n getApiLevelSync,\n getApplicationName,\n getAvailableLocationProviders,\n getAvailableLocationProvidersSync,\n getBaseOs,\n getBaseOsSync,\n getBatteryLevel,\n getBatteryLevelSync,\n getBootloader,\n getBootloaderSync,\n getBrand,\n getBuildId,\n getBuildIdSync,\n getBuildNumber,\n getBundleId,\n getCarrier,\n getCarrierSync,\n getCodename,\n getCodenameSync,\n getDevice,\n getDeviceId,\n getDeviceName,\n getDeviceNameSync,\n getDeviceSync,\n getDeviceToken,\n getDeviceType,\n getDisplay,\n getDisplaySync,\n getFingerprint,\n getFingerprintSync,\n getFirstInstallTime,\n getFirstInstallTimeSync,\n getFontScale,\n getFontScaleSync,\n getFreeDiskStorage,\n getFreeDiskStorageOld,\n getFreeDiskStorageSync,\n getFreeDiskStorageOldSync,\n getHardware,\n getHardwareSync,\n getHost,\n getHostSync,\n getIncremental,\n getIncrementalSync,\n getInstallerPackageName,\n getInstallerPackageNameSync,\n getInstallReferrer,\n getInstallReferrerSync,\n getInstanceId,\n getInstanceIdSync,\n getIpAddress,\n getIpAddressSync,\n getLastUpdateTime,\n getLastUpdateTimeSync,\n getMacAddress,\n getMacAddressSync,\n getManufacturer,\n getManufacturerSync,\n getMaxMemory,\n getMaxMemorySync,\n getModel,\n getPhoneNumber,\n getPhoneNumberSync,\n getPowerState,\n getPowerStateSync,\n getPreviewSdkInt,\n getPreviewSdkIntSync,\n getProduct,\n getProductSync,\n getReadableVersion,\n getSecurityPatch,\n getSecurityPatchSync,\n getSerialNumber,\n getSerialNumberSync,\n getSystemAvailableFeatures,\n getSystemAvailableFeaturesSync,\n getSystemName,\n getSystemVersion,\n getTags,\n getTagsSync,\n getTotalDiskCapacity,\n getTotalDiskCapacityOld,\n getTotalDiskCapacitySync,\n getTotalDiskCapacityOldSync,\n getTotalMemory,\n getTotalMemorySync,\n getType,\n getTypeSync,\n getUniqueId,\n getUniqueIdSync,\n getUsedMemory,\n getUsedMemorySync,\n getUserAgent,\n getUserAgentSync,\n getVersion,\n getBrightness,\n getBrightnessSync,\n hasGms,\n hasGmsSync,\n hasHms,\n hasHmsSync,\n hasNotch,\n hasDynamicIsland,\n hasSystemFeature,\n hasSystemFeatureSync,\n isAirplaneMode,\n isAirplaneModeSync,\n isBatteryCharging,\n isBatteryChargingSync,\n isCameraPresent,\n isCameraPresentSync,\n isEmulator,\n isEmulatorSync,\n isHeadphonesConnected,\n isHeadphonesConnectedSync,\n isLandscape,\n isLandscapeSync,\n isLocationEnabled,\n isLocationEnabledSync,\n isPinOrFingerprintSet,\n isPinOrFingerprintSetSync,\n isMouseConnected,\n isMouseConnectedSync,\n isKeyboardConnected,\n isKeyboardConnectedSync,\n isTabletMode,\n isTablet,\n supported32BitAbis,\n supported32BitAbisSync,\n supported64BitAbis,\n supported64BitAbisSync,\n supportedAbis,\n supportedAbisSync,\n syncUniqueId,\n useBatteryLevel,\n useBatteryLevelIsLow,\n useDeviceName,\n useFirstInstallTime,\n useHasSystemFeature,\n useIsEmulator,\n usePowerState,\n useManufacturer,\n useIsHeadphonesConnected,\n useBrightness,\n};\n\nexport default DeviceInfo;\n"]} +\ No newline at end of file ++{"version":3,"sources":["index.ts"],"names":["constants","getConstants","undefined","RNDeviceInfo","getUniqueId","getUniqueIdSync","memoKey","supportedPlatforms","getter","syncGetter","defaultValue","uniqueId","syncUniqueId","Platform","OS","getInstanceId","getInstanceIdSync","getSerialNumber","getSerialNumberSync","getAndroidId","getAndroidIdSync","getIpAddress","getIpAddressSync","isCameraPresent","isCameraPresentSync","getMacAddress","getMacAddressSync","getDeviceId","deviceId","getManufacturer","getManufacturerSync","Promise","resolve","getSystemManufacturer","getSystemManufacturerSync","getModel","model","getBrand","brand","getSystemName","select","ios","systemName","android","windows","default","getSystemVersion","systemVersion","getBuildId","getBuildIdSync","getApiLevel","getApiLevelSync","getBundleId","bundleId","getInstallerPackageName","getInstallerPackageNameSync","getApplicationName","appName","getBuildNumber","buildNumber","getVersion","appVersion","getReadableVersion","getDeviceName","getDeviceNameSync","getUsedMemory","getUsedMemorySync","getUserAgent","getUserAgentSync","getFontScale","getFontScaleSync","getBootloader","getBootloaderSync","getDevice","getDeviceSync","getDisplay","getDisplaySync","getFingerprint","getFingerprintSync","getHardware","getHardwareSync","getHost","getHostSync","getProduct","getProductSync","getTags","getTagsSync","getType","getTypeSync","getBaseOs","getBaseOsSync","getPreviewSdkInt","getPreviewSdkIntSync","getSecurityPatch","getSecurityPatchSync","getCodename","getCodenameSync","getIncremental","getIncrementalSync","isEmulator","isEmulatorSync","isTablet","isDisplayZoomed","isPinOrFingerprintSet","isPinOrFingerprintSetSync","notch","hasNotch","console","log","_brand","_model","devicesWithNotch","findIndex","item","toLowerCase","dynamicIsland","hasDynamicIsland","devicesWithDynamicIsland","hasGms","hasGmsSync","hasHms","hasHmsSync","getFirstInstallTime","getFirstInstallTimeSync","getInstallReferrer","getInstallReferrerSync","getLastUpdateTime","getLastUpdateTimeSync","getPhoneNumber","getPhoneNumberSync","getCarrier","getCarrierSync","getTotalMemory","getTotalMemorySync","getMaxMemory","getMaxMemorySync","getTotalDiskCapacity","getTotalDiskCapacitySync","getTotalDiskCapacityOld","getTotalDiskCapacityOldSync","getFreeDiskStorage","getFreeDiskStorageSync","getFreeDiskStorageOld","getFreeDiskStorageOldSync","getBatteryLevel","getBatteryLevelSync","getPowerState","getPowerStateSync","isBatteryCharging","isBatteryChargingSync","isLandscape","isLandscapeSync","height","width","Dimensions","get","isAirplaneMode","isAirplaneModeSync","getDeviceType","deviceType","getDeviceTypeSync","supportedAbis","supportedAbisSync","getSupportedAbis","getSupportedAbisSync","supported32BitAbis","supported32BitAbisSync","getSupported32BitAbis","getSupported32BitAbisSync","supported64BitAbis","supported64BitAbisSync","getSupported64BitAbis","getSupported64BitAbisSync","hasSystemFeature","feature","hasSystemFeatureSync","isLowBatteryLevel","level","getSystemAvailableFeatures","getSystemAvailableFeaturesSync","isLocationEnabled","isLocationEnabledSync","isHeadphonesConnected","isHeadphonesConnectedSync","isMouseConnected","isMouseConnectedSync","isKeyboardConnected","isKeyboardConnectedSync","isTabletMode","getAvailableLocationProviders","getAvailableLocationProvidersSync","getBrightness","getBrightnessSync","getDeviceToken","deviceInfoEmitter","NativeEventEmitter","useBatteryLevel","batteryLevel","setBatteryLevel","setInitialValue","initialValue","onChange","subscription","addListener","remove","useBatteryLevelIsLow","batteryLevelIsLow","setBatteryLevelIsLow","usePowerState","powerState","setPowerState","state","useIsHeadphonesConnected","useFirstInstallTime","useDeviceName","useHasSystemFeature","asyncGetter","useIsEmulator","useManufacturer","useBrightness","brightness","setBrightness","value","DeviceInfo"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { Dimensions, NativeEventEmitter, Platform } from 'react-native';\nimport { useOnEvent, useOnMount } from './internal/asyncHookWrappers';\nimport devicesWithDynamicIsland from './internal/devicesWithDynamicIsland';\nimport devicesWithNotch from './internal/devicesWithNotch';\nimport RNDeviceInfo from './internal/nativeInterface';\nimport {\n getSupportedPlatformInfoAsync,\n getSupportedPlatformInfoFunctions,\n getSupportedPlatformInfoSync,\n} from './internal/supported-platform-info';\nimport { DeviceInfoModule, NativeConstants } from './internal/privateTypes';\nimport type {\n AsyncHookResult,\n DeviceType,\n LocationProviderInfo,\n PowerState,\n} from './internal/types';\n\nlet constants: NativeConstants;\n\nfunction getConstants() {\n if (constants === undefined) {\n constants = RNDeviceInfo.getConstants() as NativeConstants;\n }\n return constants;\n}\n\nexport const [getUniqueId, getUniqueIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'uniqueId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getUniqueId(),\n syncGetter: () => RNDeviceInfo.getUniqueIdSync(),\n defaultValue: 'unknown',\n});\n\nlet uniqueId: string;\nexport async function syncUniqueId() {\n if (Platform.OS === 'ios') {\n uniqueId = await RNDeviceInfo.syncUniqueId();\n } else {\n uniqueId = await getUniqueId();\n }\n return uniqueId;\n}\n\nexport const [getInstanceId, getInstanceIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'instanceId',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getInstanceId(),\n syncGetter: () => RNDeviceInfo.getInstanceIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getSerialNumber, getSerialNumberSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'serialNumber',\n supportedPlatforms: ['android', 'windows'],\n getter: () => RNDeviceInfo.getSerialNumber(),\n syncGetter: () => RNDeviceInfo.getSerialNumberSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getAndroidId, getAndroidIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'androidId',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getAndroidId(),\n syncGetter: () => RNDeviceInfo.getAndroidIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getIpAddress, getIpAddressSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getIpAddress(),\n syncGetter: () => RNDeviceInfo.getIpAddressSync(),\n defaultValue: 'unknown',\n});\n\nexport const [isCameraPresent, isCameraPresentSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.isCameraPresent(),\n syncGetter: () => RNDeviceInfo.isCameraPresentSync(),\n defaultValue: false,\n});\n\nexport async function getMacAddress() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getMacAddress();\n } else if (Platform.OS === 'ios') {\n return '02:00:00:00:00:00';\n }\n return 'unknown';\n}\n\nexport function getMacAddressSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getMacAddressSync();\n } else if (Platform.OS === 'ios') {\n return '02:00:00:00:00:00';\n }\n return 'unknown';\n}\n\nexport const getDeviceId = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n memoKey: 'deviceId',\n getter: () => getConstants().deviceId,\n supportedPlatforms: ['android', 'ios', 'windows'],\n });\n\nexport const [getManufacturer, getManufacturerSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'manufacturer',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () =>\n Platform.OS == 'ios' ? Promise.resolve('Apple') : RNDeviceInfo.getSystemManufacturer(),\n syncGetter: () => (Platform.OS == 'ios' ? 'Apple' : RNDeviceInfo.getSystemManufacturerSync()),\n defaultValue: 'unknown',\n});\n\nexport const getModel = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'model',\n defaultValue: 'unknown',\n supportedPlatforms: ['ios', 'android', 'windows'],\n getter: () => getConstants().model,\n });\n\nexport const getBrand = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'brand',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => getConstants().brand,\n });\n\nexport const getSystemName = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n supportedPlatforms: ['ios', 'android', 'windows'],\n memoKey: 'systemName',\n getter: () =>\n Platform.select({\n ios: getConstants().systemName,\n android: 'Android',\n windows: 'Windows',\n default: 'unknown',\n }),\n });\n\nexport const getSystemVersion = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n getter: () => getConstants().systemVersion,\n supportedPlatforms: ['android', 'ios', 'windows'],\n memoKey: 'systemVersion',\n });\n\nexport const [getBuildId, getBuildIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'buildId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getBuildId(),\n syncGetter: () => RNDeviceInfo.getBuildIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getApiLevel, getApiLevelSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'apiLevel',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getApiLevel(),\n syncGetter: () => RNDeviceInfo.getApiLevelSync(),\n defaultValue: -1,\n});\n\nexport const getBundleId = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'bundleId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => getConstants().bundleId,\n });\n\nexport const [\n getInstallerPackageName,\n getInstallerPackageNameSync,\n] = getSupportedPlatformInfoFunctions({\n memoKey: 'installerPackageName',\n supportedPlatforms: ['android', 'windows', 'ios'],\n getter: () => RNDeviceInfo.getInstallerPackageName(),\n syncGetter: () => RNDeviceInfo.getInstallerPackageNameSync(),\n defaultValue: 'unknown',\n});\n\nexport const getApplicationName = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'appName',\n defaultValue: 'unknown',\n getter: () => getConstants().appName,\n supportedPlatforms: ['android', 'ios', 'windows'],\n });\n\nexport const getBuildNumber = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'buildNumber',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => getConstants().buildNumber,\n defaultValue: 'unknown',\n });\n\nexport const getVersion = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'version',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => getConstants().appVersion,\n });\n\nexport function getReadableVersion() {\n return getVersion() + '.' + getBuildNumber();\n}\n\nexport const [getDeviceName, getDeviceNameSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getDeviceName(),\n syncGetter: () => RNDeviceInfo.getDeviceNameSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getUsedMemory, getUsedMemorySync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getUsedMemory(),\n syncGetter: () => RNDeviceInfo.getUsedMemorySync(),\n defaultValue: -1,\n});\n\nexport const getUserAgent = () =>\n getSupportedPlatformInfoAsync({\n memoKey: 'userAgent',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'ios', 'web'],\n getter: () => RNDeviceInfo.getUserAgent(),\n });\n\nexport const getUserAgentSync = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'userAgentSync',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'web'],\n getter: () => RNDeviceInfo.getUserAgentSync(),\n });\n\nexport const [getFontScale, getFontScaleSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getFontScale(),\n syncGetter: () => RNDeviceInfo.getFontScaleSync(),\n defaultValue: -1,\n});\n\nexport const [getBootloader, getBootloaderSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'bootloader',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getBootloader(),\n syncGetter: () => RNDeviceInfo.getBootloaderSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getDevice, getDeviceSync] = getSupportedPlatformInfoFunctions({\n getter: () => RNDeviceInfo.getDevice(),\n syncGetter: () => RNDeviceInfo.getDeviceSync(),\n defaultValue: 'unknown',\n memoKey: 'device',\n supportedPlatforms: ['android'],\n});\n\nexport const [getDisplay, getDisplaySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'display',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getDisplay(),\n syncGetter: () => RNDeviceInfo.getDisplaySync(),\n defaultValue: 'unknown',\n});\n\nexport const [getFingerprint, getFingerprintSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'fingerprint',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getFingerprint(),\n syncGetter: () => RNDeviceInfo.getFingerprintSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getHardware, getHardwareSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'hardware',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getHardware(),\n syncGetter: () => RNDeviceInfo.getHardwareSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getHost, getHostSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'host',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getHost(),\n syncGetter: () => RNDeviceInfo.getHostSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getProduct, getProductSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'product',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getProduct(),\n syncGetter: () => RNDeviceInfo.getProductSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getTags, getTagsSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'tags',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getTags(),\n syncGetter: () => RNDeviceInfo.getTagsSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getType, getTypeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'type',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getType(),\n syncGetter: () => RNDeviceInfo.getTypeSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getBaseOs, getBaseOsSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'baseOs',\n supportedPlatforms: ['android', 'web', 'windows'],\n getter: () => RNDeviceInfo.getBaseOs(),\n syncGetter: () => RNDeviceInfo.getBaseOsSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getPreviewSdkInt, getPreviewSdkIntSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'previewSdkInt',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getPreviewSdkInt(),\n syncGetter: () => RNDeviceInfo.getPreviewSdkIntSync(),\n defaultValue: -1,\n});\n\nexport const [getSecurityPatch, getSecurityPatchSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'securityPatch',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSecurityPatch(),\n syncGetter: () => RNDeviceInfo.getSecurityPatchSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getCodename, getCodenameSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'codeName',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getCodename(),\n syncGetter: () => RNDeviceInfo.getCodenameSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getIncremental, getIncrementalSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'incremental',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getIncremental(),\n syncGetter: () => RNDeviceInfo.getIncrementalSync(),\n defaultValue: 'unknown',\n});\n\nexport const [isEmulator, isEmulatorSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'emulator',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.isEmulator(),\n syncGetter: () => RNDeviceInfo.isEmulatorSync(),\n defaultValue: false,\n});\n\nexport const isTablet = () =>\n getSupportedPlatformInfoSync({\n defaultValue: false,\n supportedPlatforms: ['android', 'ios', 'windows'],\n memoKey: 'tablet',\n getter: () => getConstants().isTablet,\n });\n\nexport const isDisplayZoomed = () =>\n getSupportedPlatformInfoSync({\n defaultValue: false,\n supportedPlatforms: ['ios'],\n memoKey: 'zoomed',\n getter: () => getConstants().isDisplayZoomed,\n });\n\nexport const [isPinOrFingerprintSet, isPinOrFingerprintSetSync] = getSupportedPlatformInfoFunctions(\n {\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.isPinOrFingerprintSet(),\n syncGetter: () => RNDeviceInfo.isPinOrFingerprintSetSync(),\n defaultValue: false,\n }\n);\n\nlet notch: boolean;\nexport function hasNotch() {\n if (notch === undefined) {\n console.log(RNDeviceInfo);\n let _brand = getBrand();\n let _model = getModel();\n notch =\n devicesWithNotch.findIndex(\n (item) =>\n item.brand.toLowerCase() === _brand.toLowerCase() &&\n item.model.toLowerCase() === _model.toLowerCase()\n ) !== -1;\n }\n return notch;\n}\n\nlet dynamicIsland: boolean;\nexport function hasDynamicIsland() {\n if (dynamicIsland === undefined) {\n let _brand = getBrand();\n let _model = getModel();\n dynamicIsland =\n devicesWithDynamicIsland.findIndex(\n (item) =>\n item.brand.toLowerCase() === _brand.toLowerCase() &&\n item.model.toLowerCase() === _model.toLowerCase()\n ) !== -1;\n }\n return dynamicIsland;\n}\n\nexport const [hasGms, hasGmsSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.hasGms(),\n syncGetter: () => RNDeviceInfo.hasGmsSync(),\n defaultValue: false,\n});\n\nexport const [hasHms, hasHmsSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.hasHms(),\n syncGetter: () => RNDeviceInfo.hasHmsSync(),\n defaultValue: false,\n});\n\nexport const [getFirstInstallTime, getFirstInstallTimeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'firstInstallTime',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getFirstInstallTime(),\n syncGetter: () => RNDeviceInfo.getFirstInstallTimeSync(),\n defaultValue: -1,\n});\n\nexport const [getInstallReferrer, getInstallReferrerSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'installReferrer',\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getInstallReferrer(),\n syncGetter: () => RNDeviceInfo.getInstallReferrerSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getLastUpdateTime, getLastUpdateTimeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'lastUpdateTime',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getLastUpdateTime(),\n syncGetter: () => RNDeviceInfo.getLastUpdateTimeSync(),\n defaultValue: -1,\n});\n\nexport const [getPhoneNumber, getPhoneNumberSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getPhoneNumber(),\n syncGetter: () => RNDeviceInfo.getPhoneNumberSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getCarrier, getCarrierSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.getCarrier(),\n syncGetter: () => RNDeviceInfo.getCarrierSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getTotalMemory, getTotalMemorySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'totalMemory',\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getTotalMemory(),\n syncGetter: () => RNDeviceInfo.getTotalMemorySync(),\n defaultValue: -1,\n});\n\nexport const [getMaxMemory, getMaxMemorySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'maxMemory',\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getMaxMemory(),\n syncGetter: () => RNDeviceInfo.getMaxMemorySync(),\n defaultValue: -1,\n});\n\nexport const [getTotalDiskCapacity, getTotalDiskCapacitySync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getTotalDiskCapacity(),\n syncGetter: () => RNDeviceInfo.getTotalDiskCapacitySync(),\n defaultValue: -1,\n});\n\nexport async function getTotalDiskCapacityOld() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getTotalDiskCapacityOld();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getTotalDiskCapacity();\n }\n\n return -1;\n}\n\nexport function getTotalDiskCapacityOldSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getTotalDiskCapacityOldSync();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getTotalDiskCapacitySync();\n }\n\n return -1;\n}\n\nexport const [getFreeDiskStorage, getFreeDiskStorageSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getFreeDiskStorage(),\n syncGetter: () => RNDeviceInfo.getFreeDiskStorageSync(),\n defaultValue: -1,\n});\n\nexport async function getFreeDiskStorageOld() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getFreeDiskStorageOld();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getFreeDiskStorage();\n }\n\n return -1;\n}\n\nexport function getFreeDiskStorageOldSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getFreeDiskStorageOldSync();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getFreeDiskStorageSync();\n }\n\n return -1;\n}\n\nexport const [getBatteryLevel, getBatteryLevelSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getBatteryLevel(),\n syncGetter: () => RNDeviceInfo.getBatteryLevelSync(),\n defaultValue: -1,\n});\n\nexport const [getPowerState, getPowerStateSync] = getSupportedPlatformInfoFunctions<\n Partial\n>({\n supportedPlatforms: ['ios', 'android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getPowerState() as Promise>,\n syncGetter: () => RNDeviceInfo.getPowerStateSync() as Partial,\n defaultValue: {},\n});\n\nexport const [isBatteryCharging, isBatteryChargingSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.isBatteryCharging(),\n syncGetter: () => RNDeviceInfo.isBatteryChargingSync(),\n defaultValue: false,\n});\n\nexport async function isLandscape() {\n return Promise.resolve(isLandscapeSync());\n}\n\nexport function isLandscapeSync() {\n const { height, width } = Dimensions.get('window');\n return width >= height;\n}\n\nexport const [isAirplaneMode, isAirplaneModeSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'web'],\n getter: () => RNDeviceInfo.isAirplaneMode(),\n syncGetter: () => RNDeviceInfo.isAirplaneModeSync(),\n defaultValue: false,\n});\n\nexport const getDeviceType = () => {\n return getSupportedPlatformInfoSync({\n memoKey: 'deviceType',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => getConstants().deviceType,\n });\n};\n\nexport const getDeviceTypeSync = () => {\n return getSupportedPlatformInfoSync({\n memoKey: 'deviceType',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => getConstants().deviceType,\n });\n};\n\nexport const [supportedAbis, supportedAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supportedAbis',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getSupportedAbis(),\n syncGetter: () => RNDeviceInfo.getSupportedAbisSync(),\n defaultValue: [] as string[],\n});\n\nexport const [supported32BitAbis, supported32BitAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supported32BitAbis',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSupported32BitAbis(),\n syncGetter: () => RNDeviceInfo.getSupported32BitAbisSync(),\n defaultValue: [] as string[],\n});\n\nexport const [supported64BitAbis, supported64BitAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supported64BitAbis',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSupported64BitAbis(),\n syncGetter: () => RNDeviceInfo.getSupported64BitAbisSync(),\n defaultValue: [],\n});\n\nexport async function hasSystemFeature(feature: string) {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.hasSystemFeature(feature);\n }\n return false;\n}\n\nexport function hasSystemFeatureSync(feature: string) {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.hasSystemFeatureSync(feature);\n }\n return false;\n}\n\nexport function isLowBatteryLevel(level: number): boolean {\n if (Platform.OS === 'android') {\n return level < 0.15;\n }\n return level < 0.2;\n}\n\nexport const [\n getSystemAvailableFeatures,\n getSystemAvailableFeaturesSync,\n] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSystemAvailableFeatures(),\n syncGetter: () => RNDeviceInfo.getSystemAvailableFeaturesSync(),\n defaultValue: [] as string[],\n});\n\nexport const [isLocationEnabled, isLocationEnabledSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'web'],\n getter: () => RNDeviceInfo.isLocationEnabled(),\n syncGetter: () => RNDeviceInfo.isLocationEnabledSync(),\n defaultValue: false,\n});\n\nexport const [isHeadphonesConnected, isHeadphonesConnectedSync] = getSupportedPlatformInfoFunctions(\n {\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.isHeadphonesConnected(),\n syncGetter: () => RNDeviceInfo.isHeadphonesConnectedSync(),\n defaultValue: false,\n }\n);\n\nexport const [isMouseConnected, isMouseConnectedSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isMouseConnected(),\n syncGetter: () => RNDeviceInfo.isMouseConnectedSync(),\n defaultValue: false,\n});\n\nexport const [isKeyboardConnected, isKeyboardConnectedSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isKeyboardConnected(),\n syncGetter: () => RNDeviceInfo.isKeyboardConnectedSync(),\n defaultValue: false,\n});\n\nexport const isTabletMode = () =>\n getSupportedPlatformInfoAsync({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isTabletMode(),\n defaultValue: false,\n });\n\nexport const [\n getAvailableLocationProviders,\n getAvailableLocationProvidersSync,\n] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.getAvailableLocationProviders() as Promise,\n syncGetter: () => RNDeviceInfo.getAvailableLocationProvidersSync() as LocationProviderInfo,\n defaultValue: {},\n});\n\nexport const [getBrightness, getBrightnessSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['ios'],\n getter: () => RNDeviceInfo.getBrightness(),\n syncGetter: () => RNDeviceInfo.getBrightnessSync(),\n defaultValue: -1,\n});\n\nexport async function getDeviceToken() {\n if (Platform.OS === 'ios') {\n return RNDeviceInfo.getDeviceToken();\n }\n return 'unknown';\n}\n\nconst deviceInfoEmitter = new NativeEventEmitter(RNDeviceInfo);\nexport function useBatteryLevel(): number | null {\n const [batteryLevel, setBatteryLevel] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBatteryLevel();\n setBatteryLevel(initialValue);\n };\n\n const onChange = (level: number) => {\n setBatteryLevel(level);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_batteryLevelDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return batteryLevel;\n}\n\nexport function useBatteryLevelIsLow(): number | null {\n const [batteryLevelIsLow, setBatteryLevelIsLow] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBatteryLevel();\n isLowBatteryLevel(initialValue) && setBatteryLevelIsLow(initialValue);\n };\n\n setInitialValue();\n\n const onChange = (level: number) => {\n setBatteryLevelIsLow(level);\n };\n\n const subscription = deviceInfoEmitter.addListener('RNDeviceInfo_batteryLevelIsLow', onChange);\n\n return () => subscription.remove();\n }, []);\n\n return batteryLevelIsLow;\n}\n\nexport function usePowerState(): Partial {\n const [powerState, setPowerState] = useState>({});\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: Partial = await getPowerState();\n setPowerState(initialValue);\n };\n\n const onChange = (state: PowerState) => {\n setPowerState(state);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_powerStateDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return powerState;\n}\n\nexport function useIsHeadphonesConnected(): AsyncHookResult {\n return useOnEvent('RNDeviceInfo_headphoneConnectionDidChange', isHeadphonesConnected, false);\n}\n\nexport function useFirstInstallTime(): AsyncHookResult {\n return useOnMount(getFirstInstallTime, -1);\n}\n\nexport function useDeviceName(): AsyncHookResult {\n return useOnMount(getDeviceName, 'unknown');\n}\n\nexport function useHasSystemFeature(feature: string): AsyncHookResult {\n const asyncGetter = useCallback(() => hasSystemFeature(feature), [feature]);\n return useOnMount(asyncGetter, false);\n}\n\nexport function useIsEmulator(): AsyncHookResult {\n return useOnMount(isEmulator, false);\n}\n\nexport function useManufacturer(): AsyncHookResult {\n return useOnMount(getManufacturer, 'unknown');\n}\n\nexport function useBrightness(): number | null {\n const [brightness, setBrightness] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBrightness();\n setBrightness(initialValue);\n };\n\n const onChange = (value: number) => {\n setBrightness(value);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_brightnessDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return brightness;\n}\n\nexport type { AsyncHookResult, DeviceType, LocationProviderInfo, PowerState };\n\nconst DeviceInfo: DeviceInfoModule = {\n getAndroidId,\n getAndroidIdSync,\n getApiLevel,\n getApiLevelSync,\n getApplicationName,\n getAvailableLocationProviders,\n getAvailableLocationProvidersSync,\n getBaseOs,\n getBaseOsSync,\n getBatteryLevel,\n getBatteryLevelSync,\n getBootloader,\n getBootloaderSync,\n getBrand,\n getBuildId,\n getBuildIdSync,\n getBuildNumber,\n getBundleId,\n getCarrier,\n getCarrierSync,\n getCodename,\n getCodenameSync,\n getDevice,\n getDeviceId,\n getDeviceName,\n getDeviceNameSync,\n getDeviceSync,\n getDeviceToken,\n getDeviceType,\n getDisplay,\n getDisplaySync,\n getFingerprint,\n getFingerprintSync,\n getFirstInstallTime,\n getFirstInstallTimeSync,\n getFontScale,\n getFontScaleSync,\n getFreeDiskStorage,\n getFreeDiskStorageOld,\n getFreeDiskStorageSync,\n getFreeDiskStorageOldSync,\n getHardware,\n getHardwareSync,\n getHost,\n getHostSync,\n getIncremental,\n getIncrementalSync,\n getInstallerPackageName,\n getInstallerPackageNameSync,\n getInstallReferrer,\n getInstallReferrerSync,\n getInstanceId,\n getInstanceIdSync,\n getIpAddress,\n getIpAddressSync,\n getLastUpdateTime,\n getLastUpdateTimeSync,\n getMacAddress,\n getMacAddressSync,\n getManufacturer,\n getManufacturerSync,\n getMaxMemory,\n getMaxMemorySync,\n getModel,\n getPhoneNumber,\n getPhoneNumberSync,\n getPowerState,\n getPowerStateSync,\n getPreviewSdkInt,\n getPreviewSdkIntSync,\n getProduct,\n getProductSync,\n getReadableVersion,\n getSecurityPatch,\n getSecurityPatchSync,\n getSerialNumber,\n getSerialNumberSync,\n getSystemAvailableFeatures,\n getSystemAvailableFeaturesSync,\n getSystemName,\n getSystemVersion,\n getTags,\n getTagsSync,\n getTotalDiskCapacity,\n getTotalDiskCapacityOld,\n getTotalDiskCapacitySync,\n getTotalDiskCapacityOldSync,\n getTotalMemory,\n getTotalMemorySync,\n getType,\n getTypeSync,\n getUniqueId,\n getUniqueIdSync,\n getUsedMemory,\n getUsedMemorySync,\n getUserAgent,\n getUserAgentSync,\n getVersion,\n getBrightness,\n getBrightnessSync,\n hasGms,\n hasGmsSync,\n hasHms,\n hasHmsSync,\n hasNotch,\n hasDynamicIsland,\n hasSystemFeature,\n hasSystemFeatureSync,\n isAirplaneMode,\n isAirplaneModeSync,\n isBatteryCharging,\n isBatteryChargingSync,\n isCameraPresent,\n isCameraPresentSync,\n isEmulator,\n isEmulatorSync,\n isHeadphonesConnected,\n isHeadphonesConnectedSync,\n isLandscape,\n isLandscapeSync,\n isLocationEnabled,\n isLocationEnabledSync,\n isPinOrFingerprintSet,\n isPinOrFingerprintSetSync,\n isMouseConnected,\n isMouseConnectedSync,\n isKeyboardConnected,\n isKeyboardConnectedSync,\n isTabletMode,\n isTablet,\n isDisplayZoomed,\n supported32BitAbis,\n supported32BitAbisSync,\n supported64BitAbis,\n supported64BitAbisSync,\n supportedAbis,\n supportedAbisSync,\n syncUniqueId,\n useBatteryLevel,\n useBatteryLevelIsLow,\n useDeviceName,\n useFirstInstallTime,\n useHasSystemFeature,\n useIsEmulator,\n usePowerState,\n useManufacturer,\n useIsHeadphonesConnected,\n useBrightness,\n};\n\nexport default DeviceInfo;\n"]} +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/commonjs/internal/asyncHookWrappers.js b/node_modules/react-native-device-info/lib/commonjs/internal/asyncHookWrappers.js +index 2998179..c792b00 100644 +--- a/node_modules/react-native-device-info/lib/commonjs/internal/asyncHookWrappers.js ++++ b/node_modules/react-native-device-info/lib/commonjs/internal/asyncHookWrappers.js +@@ -3,14 +3,18 @@ + Object.defineProperty(exports, "__esModule", { + value: true + }); +-exports.useOnMount = useOnMount; +-exports.useOnEvent = useOnEvent; + exports.deviceInfoEmitter = void 0; ++exports.useOnEvent = useOnEvent; ++exports.useOnMount = useOnMount; + + var _react = require("react"); + + var _reactNative = require("react-native"); + ++var _nativeInterface = _interopRequireDefault(require("./nativeInterface")); ++ ++function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } ++ + /** + * simple hook wrapper for async functions for 'on-mount / componentDidMount' that only need to fired once + * @param asyncGetter async function that 'gets' something +@@ -36,7 +40,7 @@ function useOnMount(asyncGetter, initialResult) { + return response; + } + +-const deviceInfoEmitter = new _reactNative.NativeEventEmitter(_reactNative.NativeModules.RNDeviceInfo); ++const deviceInfoEmitter = new _reactNative.NativeEventEmitter(_nativeInterface.default); + /** + * simple hook wrapper for handling events + * @param eventName +diff --git a/node_modules/react-native-device-info/lib/commonjs/internal/asyncHookWrappers.js.map b/node_modules/react-native-device-info/lib/commonjs/internal/asyncHookWrappers.js.map +index 1dfb0e4..733e774 100644 +--- a/node_modules/react-native-device-info/lib/commonjs/internal/asyncHookWrappers.js.map ++++ b/node_modules/react-native-device-info/lib/commonjs/internal/asyncHookWrappers.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["asyncHookWrappers.ts"],"names":["useOnMount","asyncGetter","initialResult","response","setResponse","loading","result","getAsync","deviceInfoEmitter","NativeEventEmitter","NativeModules","RNDeviceInfo","useOnEvent","eventName","initialValueAsyncGetter","defaultValue","setResult","subscription","addListener","remove"],"mappings":";;;;;;;;;AAAA;;AACA;;AAGA;AACA;AACA;AACA;AACA;AACO,SAASA,UAAT,CAAuBC,WAAvB,EAAsDC,aAAtD,EAA4F;AACjG,QAAM,CAACC,QAAD,EAAWC,WAAX,IAA0B,qBAA6B;AAC3DC,IAAAA,OAAO,EAAE,IADkD;AAE3DC,IAAAA,MAAM,EAAEJ;AAFmD,GAA7B,CAAhC;AAKA,wBAAU,MAAM;AACd;AACA,UAAMK,QAAQ,GAAG,YAAY;AAC3B,YAAMD,MAAM,GAAG,MAAML,WAAW,EAAhC;AACAG,MAAAA,WAAW,CAAC;AAAEC,QAAAA,OAAO,EAAE,KAAX;AAAkBC,QAAAA;AAAlB,OAAD,CAAX;AACD,KAHD;;AAKAC,IAAAA,QAAQ;AACT,GARD,EAQG,CAACN,WAAD,CARH;AAUA,SAAOE,QAAP;AACD;;AAEM,MAAMK,iBAAiB,GAAG,IAAIC,+BAAJ,CAAuBC,2BAAcC,YAArC,CAA1B;AAEP;AACA;AACA;AACA;AACA;AACA;;;;AACO,SAASC,UAAT,CACLC,SADK,EAELC,uBAFK,EAGLC,YAHK,EAIe;AACpB,QAAM;AAAEV,IAAAA,OAAF;AAAWC,IAAAA,MAAM,EAAEJ;AAAnB,MAAqCF,UAAU,CAACc,uBAAD,EAA0BC,YAA1B,CAArD;AACA,QAAM,CAACT,MAAD,EAASU,SAAT,IAAsB,qBAAYD,YAAZ,CAA5B,CAFoB,CAIpB;;AACA,wBAAU,MAAM;AACdC,IAAAA,SAAS,CAACd,aAAD,CAAT;AACD,GAFD,EAEG,CAACA,aAAD,CAFH,EALoB,CASpB;AACA;;AACA,wBAAU,MAAM;AACd,UAAMe,YAAY,GAAGT,iBAAiB,CAACU,WAAlB,CAA8BL,SAA9B,EAAyCG,SAAzC,CAArB;AACA,WAAO,MAAMC,YAAY,CAACE,MAAb,EAAb;AACD,GAHD,EAGG,CAACN,SAAD,CAHH,EAXoB,CAgBpB;;AACA,SAAO;AAAER,IAAAA,OAAF;AAAWC,IAAAA;AAAX,GAAP;AACD","sourcesContent":["import { useState, useEffect } from 'react';\nimport { NativeEventEmitter, NativeModules } from 'react-native';\nimport type { AsyncHookResult } from './types';\n\n/**\n * simple hook wrapper for async functions for 'on-mount / componentDidMount' that only need to fired once\n * @param asyncGetter async function that 'gets' something\n * @param initialResult -1 | false | 'unknown'\n */\nexport function useOnMount(asyncGetter: () => Promise, initialResult: T): AsyncHookResult {\n const [response, setResponse] = useState>({\n loading: true,\n result: initialResult,\n });\n\n useEffect(() => {\n // async function cuz react complains if useEffect's effect param is an async function\n const getAsync = async () => {\n const result = await asyncGetter();\n setResponse({ loading: false, result });\n };\n\n getAsync();\n }, [asyncGetter]);\n\n return response;\n}\n\nexport const deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);\n\n/**\n * simple hook wrapper for handling events\n * @param eventName\n * @param initialValueAsyncGetter\n * @param defaultValue\n */\nexport function useOnEvent(\n eventName: string,\n initialValueAsyncGetter: () => Promise,\n defaultValue: T\n): AsyncHookResult {\n const { loading, result: initialResult } = useOnMount(initialValueAsyncGetter, defaultValue);\n const [result, setResult] = useState(defaultValue);\n\n // sets the result to what the intial value is on mount\n useEffect(() => {\n setResult(initialResult);\n }, [initialResult]);\n\n // - set up the event listener to set the result\n // - set up the clean up function to remove subscription on unmount\n useEffect(() => {\n const subscription = deviceInfoEmitter.addListener(eventName, setResult);\n return () => subscription.remove();\n }, [eventName]);\n\n // loading will only be true while getting the inital value. After that, it will always be false, but a new result may occur\n return { loading, result };\n}\n"]} +\ No newline at end of file ++{"version":3,"sources":["asyncHookWrappers.ts"],"names":["useOnMount","asyncGetter","initialResult","response","setResponse","loading","result","getAsync","deviceInfoEmitter","NativeEventEmitter","RNDeviceInfo","useOnEvent","eventName","initialValueAsyncGetter","defaultValue","setResult","subscription","addListener","remove"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;;;AAGA;AACA;AACA;AACA;AACA;AACO,SAASA,UAAT,CAAuBC,WAAvB,EAAsDC,aAAtD,EAA4F;AACjG,QAAM,CAACC,QAAD,EAAWC,WAAX,IAA0B,qBAA6B;AAC3DC,IAAAA,OAAO,EAAE,IADkD;AAE3DC,IAAAA,MAAM,EAAEJ;AAFmD,GAA7B,CAAhC;AAKA,wBAAU,MAAM;AACd;AACA,UAAMK,QAAQ,GAAG,YAAY;AAC3B,YAAMD,MAAM,GAAG,MAAML,WAAW,EAAhC;AACAG,MAAAA,WAAW,CAAC;AAAEC,QAAAA,OAAO,EAAE,KAAX;AAAkBC,QAAAA;AAAlB,OAAD,CAAX;AACD,KAHD;;AAKAC,IAAAA,QAAQ;AACT,GARD,EAQG,CAACN,WAAD,CARH;AAUA,SAAOE,QAAP;AACD;;AAEM,MAAMK,iBAAiB,GAAG,IAAIC,+BAAJ,CAAuBC,wBAAvB,CAA1B;AAEP;AACA;AACA;AACA;AACA;AACA;;;;AACO,SAASC,UAAT,CACLC,SADK,EAELC,uBAFK,EAGLC,YAHK,EAIe;AACpB,QAAM;AAAET,IAAAA,OAAF;AAAWC,IAAAA,MAAM,EAAEJ;AAAnB,MAAqCF,UAAU,CAACa,uBAAD,EAA0BC,YAA1B,CAArD;AACA,QAAM,CAACR,MAAD,EAASS,SAAT,IAAsB,qBAAYD,YAAZ,CAA5B,CAFoB,CAIpB;;AACA,wBAAU,MAAM;AACdC,IAAAA,SAAS,CAACb,aAAD,CAAT;AACD,GAFD,EAEG,CAACA,aAAD,CAFH,EALoB,CASpB;AACA;;AACA,wBAAU,MAAM;AACd,UAAMc,YAAY,GAAGR,iBAAiB,CAACS,WAAlB,CAA8BL,SAA9B,EAAyCG,SAAzC,CAArB;AACA,WAAO,MAAMC,YAAY,CAACE,MAAb,EAAb;AACD,GAHD,EAGG,CAACN,SAAD,CAHH,EAXoB,CAgBpB;;AACA,SAAO;AAAEP,IAAAA,OAAF;AAAWC,IAAAA;AAAX,GAAP;AACD","sourcesContent":["import { useState, useEffect } from 'react';\nimport { NativeEventEmitter } from 'react-native';\nimport RNDeviceInfo from './nativeInterface';\nimport type { AsyncHookResult } from './types';\n\n/**\n * simple hook wrapper for async functions for 'on-mount / componentDidMount' that only need to fired once\n * @param asyncGetter async function that 'gets' something\n * @param initialResult -1 | false | 'unknown'\n */\nexport function useOnMount(asyncGetter: () => Promise, initialResult: T): AsyncHookResult {\n const [response, setResponse] = useState>({\n loading: true,\n result: initialResult,\n });\n\n useEffect(() => {\n // async function cuz react complains if useEffect's effect param is an async function\n const getAsync = async () => {\n const result = await asyncGetter();\n setResponse({ loading: false, result });\n };\n\n getAsync();\n }, [asyncGetter]);\n\n return response;\n}\n\nexport const deviceInfoEmitter = new NativeEventEmitter(RNDeviceInfo);\n\n/**\n * simple hook wrapper for handling events\n * @param eventName\n * @param initialValueAsyncGetter\n * @param defaultValue\n */\nexport function useOnEvent(\n eventName: string,\n initialValueAsyncGetter: () => Promise,\n defaultValue: T\n): AsyncHookResult {\n const { loading, result: initialResult } = useOnMount(initialValueAsyncGetter, defaultValue);\n const [result, setResult] = useState(defaultValue);\n\n // sets the result to what the intial value is on mount\n useEffect(() => {\n setResult(initialResult);\n }, [initialResult]);\n\n // - set up the event listener to set the result\n // - set up the clean up function to remove subscription on unmount\n useEffect(() => {\n const subscription = deviceInfoEmitter.addListener(eventName, setResult);\n return () => subscription.remove();\n }, [eventName]);\n\n // loading will only be true while getting the inital value. After that, it will always be false, but a new result may occur\n return { loading, result };\n}\n"]} +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/commonjs/internal/nativeInterface.js b/node_modules/react-native-device-info/lib/commonjs/internal/nativeInterface.js +index f00bade..155dc1c 100644 +--- a/node_modules/react-native-device-info/lib/commonjs/internal/nativeInterface.js ++++ b/node_modules/react-native-device-info/lib/commonjs/internal/nativeInterface.js +@@ -7,11 +7,7 @@ exports.default = void 0; + + var _reactNative = require("react-native"); + +-let RNDeviceInfo = _reactNative.NativeModules.RNDeviceInfo; // @ts-ignore +- +-if (_reactNative.Platform.OS === 'web' || _reactNative.Platform.OS === 'dom') { +- RNDeviceInfo = require('../web'); +-} ++let RNDeviceInfo = require('../web'); + + if (!RNDeviceInfo) { + // Produce an error if we don't have the native module +diff --git a/node_modules/react-native-device-info/lib/commonjs/internal/nativeInterface.js.map b/node_modules/react-native-device-info/lib/commonjs/internal/nativeInterface.js.map +index ef378b6..d6ccc7f 100644 +--- a/node_modules/react-native-device-info/lib/commonjs/internal/nativeInterface.js.map ++++ b/node_modules/react-native-device-info/lib/commonjs/internal/nativeInterface.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["nativeInterface.ts"],"names":["RNDeviceInfo","NativeModules","Platform","OS","require","Error"],"mappings":";;;;;;;AAAA;;AAGA,IAAIA,YAAgD,GAAGC,2BAAcD,YAArE,C,CAEA;;AACA,IAAIE,sBAASC,EAAT,KAAgB,KAAhB,IAAyBD,sBAASC,EAAT,KAAgB,KAA7C,EAAoD;AAClDH,EAAAA,YAAY,GAAGI,OAAO,CAAC,QAAD,CAAtB;AACD;;AAED,IAAI,CAACJ,YAAL,EAAmB;AACjB;AACA,MACEE,sBAASC,EAAT,KAAgB,SAAhB,IACAD,sBAASC,EAAT,KAAgB,KADhB,IAEAD,sBAASC,EAAT,KAAgB,KAFhB,IAGA;AACAD,wBAASC,EAAT,KAAgB,KALlB,EAME;AACA,UAAM,IAAIE,KAAJ,CAAW;AACrB;AACA;AACA;AACA,sJAJU,CAAN;AAKD;AACF;;eAEcL,Y","sourcesContent":["import { Platform, NativeModules } from 'react-native';\nimport { DeviceInfoNativeModule } from './privateTypes';\n\nlet RNDeviceInfo: DeviceInfoNativeModule | undefined = NativeModules.RNDeviceInfo;\n\n// @ts-ignore\nif (Platform.OS === 'web' || Platform.OS === 'dom') {\n RNDeviceInfo = require('../web');\n}\n\nif (!RNDeviceInfo) {\n // Produce an error if we don't have the native module\n if (\n Platform.OS === 'android' ||\n Platform.OS === 'ios' ||\n Platform.OS === 'web' ||\n // @ts-ignore\n Platform.OS === 'dom'\n ) {\n throw new Error(`react-native-device-info: NativeModule.RNDeviceInfo is null. To fix this issue try these steps:\n • For react-native <= 0.59: Run \\`react-native link react-native-device-info\\` in the project root.\n • Rebuild and re-run the app.\n • If you are using CocoaPods on iOS, run \\`pod install\\` in the \\`ios\\` directory and then rebuild and re-run the app. You may also need to re-open Xcode to get the new pods.\n If none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-device-info/react-native-device-info`);\n }\n}\n\nexport default RNDeviceInfo as DeviceInfoNativeModule;\n"]} +\ No newline at end of file ++{"version":3,"sources":["nativeInterface.ts"],"names":["RNDeviceInfo","RNDeviceInfoModule","Platform","OS","require","Error"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEA,IAAIA,YAAY,GAAGC,+BAAnB,C,CAEA;;AACA,IAAIC,sBAASC,EAAT,KAAgB,KAAhB,IAAyBD,sBAASC,EAAT,KAAgB,KAA7C,EAAoD;AAClDH,EAAAA,YAAY,GAAGI,OAAO,CAAC,QAAD,CAAtB;AACD;;AAED,IAAI,CAACJ,YAAL,EAAmB;AACjB;AACA,MACEE,sBAASC,EAAT,KAAgB,SAAhB,IACAD,sBAASC,EAAT,KAAgB,KADhB,IAEAD,sBAASC,EAAT,KAAgB,KAFhB,IAGA;AACAD,wBAASC,EAAT,KAAgB,KALlB,EAME;AACA,UAAM,IAAIE,KAAJ,CAAW;AACrB;AACA;AACA;AACA,sJAJU,CAAN;AAKD;AACF;;eAEcL,Y","sourcesContent":["import { Platform } from 'react-native';\nimport RNDeviceInfoModule from '../fabric/NativeDeviceInfoModule';\n\nlet RNDeviceInfo = RNDeviceInfoModule;\n\n// @ts-ignore\nif (Platform.OS === 'web' || Platform.OS === 'dom') {\n RNDeviceInfo = require('../web');\n}\n\nif (!RNDeviceInfo) {\n // Produce an error if we don't have the native module\n if (\n Platform.OS === 'android' ||\n Platform.OS === 'ios' ||\n Platform.OS === 'web' ||\n // @ts-ignore\n Platform.OS === 'dom'\n ) {\n throw new Error(`react-native-device-info: NativeModule.RNDeviceInfo is null. To fix this issue try these steps:\n • For react-native <= 0.59: Run \\`react-native link react-native-device-info\\` in the project root.\n • Rebuild and re-run the app.\n • If you are using CocoaPods on iOS, run \\`pod install\\` in the \\`ios\\` directory and then rebuild and re-run the app. You may also need to re-open Xcode to get the new pods.\n If none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-device-info/react-native-device-info`);\n }\n}\n\nexport default RNDeviceInfo;\n"]} +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/commonjs/internal/nativeInterface.native.js b/node_modules/react-native-device-info/lib/commonjs/internal/nativeInterface.native.js +new file mode 100644 +index 0000000..6e8494e +--- /dev/null ++++ b/node_modules/react-native-device-info/lib/commonjs/internal/nativeInterface.native.js +@@ -0,0 +1,18 @@ ++"use strict"; ++ ++Object.defineProperty(exports, "__esModule", { ++ value: true ++}); ++exports.default = void 0; ++ ++var _reactNative = require("react-native"); ++ ++var _NativeDeviceInfoModule = _interopRequireDefault(require("../fabric/NativeDeviceInfoModule")); ++ ++function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } ++ ++let RNDeviceInfo = _NativeDeviceInfoModule.default; // @ts-ignore ++ ++var _default = RNDeviceInfo; ++exports.default = _default; ++//# sourceMappingURL=nativeInterface.js.map +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/commonjs/internal/supported-platform-info.js b/node_modules/react-native-device-info/lib/commonjs/internal/supported-platform-info.js +index 3053d7f..bb43c78 100644 +--- a/node_modules/react-native-device-info/lib/commonjs/internal/supported-platform-info.js ++++ b/node_modules/react-native-device-info/lib/commonjs/internal/supported-platform-info.js +@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.clearMemo = clearMemo; +-exports.getSupportedPlatformInfoSync = getSupportedPlatformInfoSync; + exports.getSupportedPlatformInfoAsync = getSupportedPlatformInfoAsync; + exports.getSupportedPlatformInfoFunctions = getSupportedPlatformInfoFunctions; ++exports.getSupportedPlatformInfoSync = getSupportedPlatformInfoSync; + + var _reactNative = require("react-native"); + +@@ -37,12 +37,14 @@ function getSupportedFunction(supportedPlatforms, getter, defaultGetter) { + */ + + +-function getSupportedPlatformInfoSync({ +- getter, +- supportedPlatforms, +- defaultValue, +- memoKey +-}) { ++function getSupportedPlatformInfoSync(_ref) { ++ let { ++ getter, ++ supportedPlatforms, ++ defaultValue, ++ memoKey ++ } = _ref; ++ + if (memoKey && memo[memoKey] != undefined) { + return memo[memoKey]; + } else { +@@ -61,12 +63,14 @@ function getSupportedPlatformInfoSync({ + */ + + +-async function getSupportedPlatformInfoAsync({ +- getter, +- supportedPlatforms, +- defaultValue, +- memoKey +-}) { ++async function getSupportedPlatformInfoAsync(_ref2) { ++ let { ++ getter, ++ supportedPlatforms, ++ defaultValue, ++ memoKey ++ } = _ref2; ++ + if (memoKey && memo[memoKey] != undefined) { + return memo[memoKey]; + } else { +@@ -85,10 +89,11 @@ async function getSupportedPlatformInfoAsync({ + */ + + +-function getSupportedPlatformInfoFunctions({ +- syncGetter, +- ...asyncParams +-}) { ++function getSupportedPlatformInfoFunctions(_ref3) { ++ let { ++ syncGetter, ++ ...asyncParams ++ } = _ref3; + return [() => getSupportedPlatformInfoAsync(asyncParams), () => getSupportedPlatformInfoSync({ ...asyncParams, + getter: syncGetter + })]; +diff --git a/node_modules/react-native-device-info/lib/commonjs/internal/supported-platform-info.js.map b/node_modules/react-native-device-info/lib/commonjs/internal/supported-platform-info.js.map +index 4b5bf6e..079791a 100644 +--- a/node_modules/react-native-device-info/lib/commonjs/internal/supported-platform-info.js.map ++++ b/node_modules/react-native-device-info/lib/commonjs/internal/supported-platform-info.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["supported-platform-info.ts"],"names":["memo","clearMemo","getSupportedFunction","supportedPlatforms","getter","defaultGetter","supportedMap","filter","key","Platform","OS","forEach","select","default","getSupportedPlatformInfoSync","defaultValue","memoKey","undefined","output","getSupportedPlatformInfoAsync","Promise","resolve","getSupportedPlatformInfoFunctions","syncGetter","asyncParams"],"mappings":";;;;;;;;;;AAAA;;AAWA;AACA,IAAIA,IAAc,GAAG,EAArB;;AAEO,SAASC,SAAT,GAAqB;AAC1BD,EAAAA,IAAI,GAAG,EAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASE,oBAAT,CACEC,kBADF,EAEEC,MAFF,EAGEC,aAHF,EAIa;AACX,MAAIC,YAAiB,GAAG,EAAxB;AACAH,EAAAA,kBAAkB,CACfI,MADH,CACWC,GAAD,IAASC,sBAASC,EAAT,IAAeF,GADlC,EAEGG,OAFH,CAEYH,GAAD,IAAUF,YAAY,CAACE,GAAD,CAAZ,GAAoBJ,MAFzC;AAGA,SAAOK,sBAASG,MAAT,CAAgB,EACrB,GAAGN,YADkB;AAErBO,IAAAA,OAAO,EAAER;AAFY,GAAhB,CAAP;AAID;AAED;AACA;AACA;AACA;;;AACO,SAASS,4BAAT,CAAyC;AAC9CV,EAAAA,MAD8C;AAE9CD,EAAAA,kBAF8C;AAG9CY,EAAAA,YAH8C;AAI9CC,EAAAA;AAJ8C,CAAzC,EAKsC;AAC3C,MAAIA,OAAO,IAAIhB,IAAI,CAACgB,OAAD,CAAJ,IAAiBC,SAAhC,EAA2C;AACzC,WAAOjB,IAAI,CAACgB,OAAD,CAAX;AACD,GAFD,MAEO;AACL,UAAME,MAAM,GAAGhB,oBAAoB,CAACC,kBAAD,EAAqBC,MAArB,EAA6B,MAAMW,YAAnC,CAApB,EAAf;;AACA,QAAIC,OAAJ,EAAa;AACXhB,MAAAA,IAAI,CAACgB,OAAD,CAAJ,GAAgBE,MAAhB;AACD;;AACD,WAAOA,MAAP;AACD;AACF;AAED;AACA;AACA;AACA;;;AACO,eAAeC,6BAAf,CAAgD;AACrDf,EAAAA,MADqD;AAErDD,EAAAA,kBAFqD;AAGrDY,EAAAA,YAHqD;AAIrDC,EAAAA;AAJqD,CAAhD,EAKgD;AACrD,MAAIA,OAAO,IAAIhB,IAAI,CAACgB,OAAD,CAAJ,IAAiBC,SAAhC,EAA2C;AACzC,WAAOjB,IAAI,CAACgB,OAAD,CAAX;AACD,GAFD,MAEO;AACL,UAAME,MAAM,GAAG,MAAMhB,oBAAoB,CAACC,kBAAD,EAAqBC,MAArB,EAA6B,MACpEgB,OAAO,CAACC,OAAR,CAAgBN,YAAhB,CADuC,CAApB,EAArB;;AAGA,QAAIC,OAAJ,EAAa;AACXhB,MAAAA,IAAI,CAACgB,OAAD,CAAJ,GAAgBE,MAAhB;AACD;;AAED,WAAOA,MAAP;AACD;AACF;AAED;AACA;AACA;AACA;;;AACO,SAASI,iCAAT,CAA8C;AACnDC,EAAAA,UADmD;AAEnD,KAAGC;AAFgD,CAA9C,EAGyE;AAC9E,SAAO,CACL,MAAML,6BAA6B,CAACK,WAAD,CAD9B,EAEL,MAAMV,4BAA4B,CAAC,EAAE,GAAGU,WAAL;AAAkBpB,IAAAA,MAAM,EAAEmB;AAA1B,GAAD,CAF7B,CAAP;AAID","sourcesContent":["import { Platform } from 'react-native';\n\nimport {\n PlatformArray,\n Getter,\n GetSupportedPlatformInfoAsyncParams,\n GetSupportedPlatformInfoSyncParams,\n GetSupportedPlatformInfoFunctionsParams,\n} from './privateTypes';\n\ntype MemoType = { [key: string]: any };\n// centralized memo object\nlet memo: MemoType = {};\n\nexport function clearMemo() {\n memo = {};\n}\n\n/**\n * function returns the proper getter based current platform X supported platforms\n * @param supportedPlatforms array of supported platforms (OS)\n * @param getter desired function used to get info\n * @param defaultGetter getter that returns a default value if desired getter is not supported by current platform\n */\nfunction getSupportedFunction(\n supportedPlatforms: PlatformArray,\n getter: Getter,\n defaultGetter: Getter\n): Getter {\n let supportedMap: any = {};\n supportedPlatforms\n .filter((key) => Platform.OS == key)\n .forEach((key) => (supportedMap[key] = getter));\n return Platform.select({\n ...supportedMap,\n default: defaultGetter,\n });\n}\n\n/**\n * function used to get desired info synchronously — with optional memoization\n * @param param0\n */\nexport function getSupportedPlatformInfoSync({\n getter,\n supportedPlatforms,\n defaultValue,\n memoKey,\n}: GetSupportedPlatformInfoSyncParams): T {\n if (memoKey && memo[memoKey] != undefined) {\n return memo[memoKey];\n } else {\n const output = getSupportedFunction(supportedPlatforms, getter, () => defaultValue)();\n if (memoKey) {\n memo[memoKey] = output;\n }\n return output;\n }\n}\n\n/**\n * function used to get desired info asynchronously — with optional memoization\n * @param param0\n */\nexport async function getSupportedPlatformInfoAsync({\n getter,\n supportedPlatforms,\n defaultValue,\n memoKey,\n}: GetSupportedPlatformInfoAsyncParams): Promise {\n if (memoKey && memo[memoKey] != undefined) {\n return memo[memoKey];\n } else {\n const output = await getSupportedFunction(supportedPlatforms, getter, () =>\n Promise.resolve(defaultValue)\n )();\n if (memoKey) {\n memo[memoKey] = output;\n }\n\n return output;\n }\n}\n\n/**\n * function that returns array of getter functions [async, sync]\n * @param param0\n */\nexport function getSupportedPlatformInfoFunctions({\n syncGetter,\n ...asyncParams\n}: GetSupportedPlatformInfoFunctionsParams): [Getter>, Getter] {\n return [\n () => getSupportedPlatformInfoAsync(asyncParams),\n () => getSupportedPlatformInfoSync({ ...asyncParams, getter: syncGetter }),\n ];\n}\n"]} +\ No newline at end of file ++{"version":3,"sources":["supported-platform-info.ts"],"names":["memo","clearMemo","getSupportedFunction","supportedPlatforms","getter","defaultGetter","supportedMap","filter","key","Platform","OS","forEach","select","default","getSupportedPlatformInfoSync","defaultValue","memoKey","undefined","output","getSupportedPlatformInfoAsync","Promise","resolve","getSupportedPlatformInfoFunctions","syncGetter","asyncParams"],"mappings":";;;;;;;;;;AAAA;;AAWA;AACA,IAAIA,IAAc,GAAG,EAArB;;AAEO,SAASC,SAAT,GAAqB;AAC1BD,EAAAA,IAAI,GAAG,EAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASE,oBAAT,CACEC,kBADF,EAEEC,MAFF,EAGEC,aAHF,EAIa;AACX,MAAIC,YAAiB,GAAG,EAAxB;AACAH,EAAAA,kBAAkB,CACfI,MADH,CACWC,GAAD,IAASC,sBAASC,EAAT,IAAeF,GADlC,EAEGG,OAFH,CAEYH,GAAD,IAAUF,YAAY,CAACE,GAAD,CAAZ,GAAoBJ,MAFzC;AAGA,SAAOK,sBAASG,MAAT,CAAgB,EACrB,GAAGN,YADkB;AAErBO,IAAAA,OAAO,EAAER;AAFY,GAAhB,CAAP;AAID;AAED;AACA;AACA;AACA;;;AACO,SAASS,4BAAT,OAKsC;AAAA,MALG;AAC9CV,IAAAA,MAD8C;AAE9CD,IAAAA,kBAF8C;AAG9CY,IAAAA,YAH8C;AAI9CC,IAAAA;AAJ8C,GAKH;;AAC3C,MAAIA,OAAO,IAAIhB,IAAI,CAACgB,OAAD,CAAJ,IAAiBC,SAAhC,EAA2C;AACzC,WAAOjB,IAAI,CAACgB,OAAD,CAAX;AACD,GAFD,MAEO;AACL,UAAME,MAAM,GAAGhB,oBAAoB,CAACC,kBAAD,EAAqBC,MAArB,EAA6B,MAAMW,YAAnC,CAApB,EAAf;;AACA,QAAIC,OAAJ,EAAa;AACXhB,MAAAA,IAAI,CAACgB,OAAD,CAAJ,GAAgBE,MAAhB;AACD;;AACD,WAAOA,MAAP;AACD;AACF;AAED;AACA;AACA;AACA;;;AACO,eAAeC,6BAAf,QAKgD;AAAA,MALA;AACrDf,IAAAA,MADqD;AAErDD,IAAAA,kBAFqD;AAGrDY,IAAAA,YAHqD;AAIrDC,IAAAA;AAJqD,GAKA;;AACrD,MAAIA,OAAO,IAAIhB,IAAI,CAACgB,OAAD,CAAJ,IAAiBC,SAAhC,EAA2C;AACzC,WAAOjB,IAAI,CAACgB,OAAD,CAAX;AACD,GAFD,MAEO;AACL,UAAME,MAAM,GAAG,MAAMhB,oBAAoB,CAACC,kBAAD,EAAqBC,MAArB,EAA6B,MACpEgB,OAAO,CAACC,OAAR,CAAgBN,YAAhB,CADuC,CAApB,EAArB;;AAGA,QAAIC,OAAJ,EAAa;AACXhB,MAAAA,IAAI,CAACgB,OAAD,CAAJ,GAAgBE,MAAhB;AACD;;AAED,WAAOA,MAAP;AACD;AACF;AAED;AACA;AACA;AACA;;;AACO,SAASI,iCAAT,QAGyE;AAAA,MAH3B;AACnDC,IAAAA,UADmD;AAEnD,OAAGC;AAFgD,GAG2B;AAC9E,SAAO,CACL,MAAML,6BAA6B,CAACK,WAAD,CAD9B,EAEL,MAAMV,4BAA4B,CAAC,EAAE,GAAGU,WAAL;AAAkBpB,IAAAA,MAAM,EAAEmB;AAA1B,GAAD,CAF7B,CAAP;AAID","sourcesContent":["import { Platform } from 'react-native';\n\nimport {\n PlatformArray,\n Getter,\n GetSupportedPlatformInfoAsyncParams,\n GetSupportedPlatformInfoSyncParams,\n GetSupportedPlatformInfoFunctionsParams,\n} from './privateTypes';\n\ntype MemoType = { [key: string]: any };\n// centralized memo object\nlet memo: MemoType = {};\n\nexport function clearMemo() {\n memo = {};\n}\n\n/**\n * function returns the proper getter based current platform X supported platforms\n * @param supportedPlatforms array of supported platforms (OS)\n * @param getter desired function used to get info\n * @param defaultGetter getter that returns a default value if desired getter is not supported by current platform\n */\nfunction getSupportedFunction(\n supportedPlatforms: PlatformArray,\n getter: Getter,\n defaultGetter: Getter\n): Getter {\n let supportedMap: any = {};\n supportedPlatforms\n .filter((key) => Platform.OS == key)\n .forEach((key) => (supportedMap[key] = getter));\n return Platform.select({\n ...supportedMap,\n default: defaultGetter,\n });\n}\n\n/**\n * function used to get desired info synchronously — with optional memoization\n * @param param0\n */\nexport function getSupportedPlatformInfoSync({\n getter,\n supportedPlatforms,\n defaultValue,\n memoKey,\n}: GetSupportedPlatformInfoSyncParams): T {\n if (memoKey && memo[memoKey] != undefined) {\n return memo[memoKey];\n } else {\n const output = getSupportedFunction(supportedPlatforms, getter, () => defaultValue)();\n if (memoKey) {\n memo[memoKey] = output;\n }\n return output;\n }\n}\n\n/**\n * function used to get desired info asynchronously — with optional memoization\n * @param param0\n */\nexport async function getSupportedPlatformInfoAsync({\n getter,\n supportedPlatforms,\n defaultValue,\n memoKey,\n}: GetSupportedPlatformInfoAsyncParams): Promise {\n if (memoKey && memo[memoKey] != undefined) {\n return memo[memoKey];\n } else {\n const output = await getSupportedFunction(supportedPlatforms, getter, () =>\n Promise.resolve(defaultValue)\n )();\n if (memoKey) {\n memo[memoKey] = output;\n }\n\n return output;\n }\n}\n\n/**\n * function that returns array of getter functions [async, sync]\n * @param param0\n */\nexport function getSupportedPlatformInfoFunctions({\n syncGetter,\n ...asyncParams\n}: GetSupportedPlatformInfoFunctionsParams): [Getter>, Getter] {\n return [\n () => getSupportedPlatformInfoAsync(asyncParams),\n () => getSupportedPlatformInfoSync({ ...asyncParams, getter: syncGetter }),\n ];\n}\n"]} +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/commonjs/web/index.js b/node_modules/react-native-device-info/lib/commonjs/web/index.js +index d222f30..656b19a 100644 +--- a/node_modules/react-native-device-info/lib/commonjs/web/index.js ++++ b/node_modules/react-native-device-info/lib/commonjs/web/index.js +@@ -3,7 +3,7 @@ + Object.defineProperty(exports, "__esModule", { + value: true + }); +-exports.getPowerStateSync = exports.getPowerState = exports.getTotalMemory = exports.getUsedMemory = exports.getMaxMemory = exports.getFreeDiskStorageSync = exports.getFreeDiskStorage = exports.getTotalDiskCapacitySync = exports.getTotalDiskCapacity = exports.getBaseOs = exports.isAirplaneMode = exports.isLocationEnabled = exports.getBatteryLevelSync = exports.getBatteryLevel = exports.isCameraPresentSync = exports.isCameraPresent = exports.isBatteryChargingSync = exports.isBatteryCharging = exports.getUserAgent = exports.getInstallReferrer = exports.getUsedMemorySync = exports.getTotalMemorySync = exports.isLocationEnabledSync = exports.getUserAgentSync = exports.isAirplaneModeSync = exports.getInstallReferrerSync = exports.getMaxMemorySync = void 0; ++exports.isLocationEnabledSync = exports.isLocationEnabled = exports.isCameraPresentSync = exports.isCameraPresent = exports.isBatteryChargingSync = exports.isBatteryCharging = exports.isAirplaneModeSync = exports.isAirplaneMode = exports.getUserAgentSync = exports.getUserAgent = exports.getUsedMemorySync = exports.getUsedMemory = exports.getTotalMemorySync = exports.getTotalMemory = exports.getTotalDiskCapacitySync = exports.getTotalDiskCapacity = exports.getPowerStateSync = exports.getPowerState = exports.getMaxMemorySync = exports.getMaxMemory = exports.getInstallReferrerSync = exports.getInstallReferrer = exports.getFreeDiskStorageSync = exports.getFreeDiskStorage = exports.getBatteryLevelSync = exports.getBatteryLevel = exports.getBaseOs = void 0; + + var _reactNative = require("react-native"); + +@@ -220,9 +220,12 @@ exports.getBaseOs = getBaseOs; + + const getTotalDiskCapacity = async () => { + if (navigator.storage && navigator.storage.estimate) { +- return navigator.storage.estimate().then(({ +- quota +- }) => quota); ++ return navigator.storage.estimate().then(_ref => { ++ let { ++ quota ++ } = _ref; ++ return quota; ++ }); + } + + return -1; +@@ -239,10 +242,13 @@ exports.getTotalDiskCapacitySync = getTotalDiskCapacitySync; + + const getFreeDiskStorage = async () => { + if (navigator.storage && navigator.storage.estimate) { +- return navigator.storage.estimate().then(({ +- quota, +- usage +- }) => quota - usage); ++ return navigator.storage.estimate().then(_ref2 => { ++ let { ++ quota, ++ usage ++ } = _ref2; ++ return quota - usage; ++ }); + } + + return -1; +diff --git a/node_modules/react-native-device-info/lib/commonjs/web/index.js.map b/node_modules/react-native-device-info/lib/commonjs/web/index.js.map +index 7c4991f..a0e32de 100644 +--- a/node_modules/react-native-device-info/lib/commonjs/web/index.js.map ++++ b/node_modules/react-native-device-info/lib/commonjs/web/index.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["index.js"],"names":["deviceInfoEmitter","NativeEventEmitter","NativeModules","RNDeviceInfo","batteryCharging","batteryLevel","powerState","_readPowerState","battery","level","charging","chargingtime","dischargingtime","lowPowerMode","batteryState","getMaxMemorySync","window","performance","memory","jsHeapSizeLimit","getInstallReferrerSync","document","referrer","isAirplaneModeSync","navigator","onLine","getUserAgentSync","userAgent","isLocationEnabledSync","geolocation","getTotalMemorySync","deviceMemory","getUsedMemorySync","usedJSHeapSize","init","getBattery","then","addEventListener","emit","getBaseOsSync","platform","macosPlatforms","windowsPlatforms","iosPlatforms","os","indexOf","test","getInstallReferrer","getUserAgent","isBatteryCharging","isBatteryChargingSync","isCameraPresent","mediaDevices","enumerateDevices","devices","find","d","kind","isCameraPresentSync","console","log","getBatteryLevel","getBatteryLevelSync","isLocationEnabled","isAirplaneMode","getBaseOs","getTotalDiskCapacity","storage","estimate","quota","getTotalDiskCapacitySync","getFreeDiskStorage","usage","getFreeDiskStorageSync","getMaxMemory","getUsedMemory","getTotalMemory","getPowerState","getPowerStateSync"],"mappings":"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","sourcesContent":["import { NativeEventEmitter, NativeModules } from 'react-native';\n\nconst deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);\n\nlet batteryCharging = false,\n batteryLevel = -1,\n powerState = {};\n\nconst _readPowerState = (battery) => {\n const { level, charging, chargingtime, dischargingtime } = battery;\n\n return {\n batteryLevel: level,\n lowPowerMode: false,\n batteryState: level === 1 ? 'full' : charging ? 'charging' : 'unplugged',\n chargingtime,\n dischargingtime,\n };\n};\n\nexport const getMaxMemorySync = () => {\n if (window.performance && window.performance.memory) {\n return window.performance.memory.jsHeapSizeLimit;\n }\n return -1;\n};\n\nexport const getInstallReferrerSync = () => {\n return document.referrer;\n};\n\nexport const isAirplaneModeSync = () => {\n return !!navigator.onLine;\n};\n\nexport const getUserAgentSync = () => {\n return window.navigator.userAgent;\n};\n\nexport const isLocationEnabledSync = () => {\n return !!navigator.geolocation;\n};\n\nexport const getTotalMemorySync = () => {\n if (navigator.deviceMemory) {\n return navigator.deviceMemory * 1000000000;\n }\n return -1;\n};\n\nexport const getUsedMemorySync = () => {\n if (window.performance && window.performance.memory) {\n return window.performance.memory.usedJSHeapSize;\n }\n return -1;\n};\n\nconst init = () => {\n if (typeof navigator === 'undefined' || !navigator.getBattery) return;\n\n navigator.getBattery().then((battery) => {\n batteryCharging = battery.charging;\n\n battery.addEventListener('chargingchange', () => {\n const { charging } = battery;\n\n batteryCharging = charging;\n powerState = _readPowerState(battery);\n\n deviceInfoEmitter.emit('RNDeviceInfo_powerStateDidChange', powerState);\n });\n\n battery.addEventListener('levelchange', () => {\n const { level } = battery;\n\n batteryLevel = level;\n powerState = _readPowerState(battery);\n\n deviceInfoEmitter.emit('RNDeviceInfo_batteryLevelDidChange', level);\n if (level < 0.2) {\n deviceInfoEmitter.emit('RNDeviceInfo_batteryLevelIsLow', level);\n }\n });\n });\n};\n\nconst getBaseOsSync = () => {\n const userAgent = window.navigator.userAgent,\n platform = window.navigator.platform,\n macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],\n windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],\n iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n\n let os = platform;\n\n if (macosPlatforms.indexOf(platform) !== -1) {\n os = 'Mac OS';\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n os = 'iOS';\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n os = 'Windows';\n } else if (/Android/.test(userAgent)) {\n os = 'Android';\n } else if (!os && /Linux/.test(platform)) {\n os = 'Linux';\n }\n\n return os;\n};\n\ninit();\n/**\n * react-native-web empty polyfill.\n */\n\nexport const getInstallReferrer = async () => {\n return getInstallReferrerSync();\n};\n\nexport const getUserAgent = async () => {\n return getUserAgentSync();\n};\n\nexport const isBatteryCharging = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then(battery => battery.charging);\n }\n return false;\n};\n\nexport const isBatteryChargingSync = () => {\n return batteryCharging;\n};\n\nexport const isCameraPresent = async () => {\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices().then(devices => {\n return !!devices.find((d) => d.kind === 'videoinput');\n });\n }\n return false;\n};\n\nexport const isCameraPresentSync = () => {\n console.log(\n '[react-native-device-info] isCameraPresentSync not supported - please use isCameraPresent'\n );\n return false;\n};\n\nexport const getBatteryLevel = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then(battery => battery.level);\n }\n return -1;\n};\n\nexport const getBatteryLevelSync = () => {\n return batteryLevel;\n};\n\nexport const isLocationEnabled = async () => {\n return isLocationEnabledSync();\n};\n\nexport const isAirplaneMode = async () => {\n return isAirplaneModeSync();\n};\n\nexport const getBaseOs = async () => {\n return getBaseOsSync();\n};\n\nexport const getTotalDiskCapacity = async () => {\n if (navigator.storage && navigator.storage.estimate) {\n return navigator.storage.estimate().then(({ quota }) => quota)\n }\n return -1;\n};\n\nexport const getTotalDiskCapacitySync = () => {\n console.log(\n '[react-native-device-info] getTotalDiskCapacitySync not supported - please use getTotalDiskCapacity'\n );\n return -1;\n};\n\nexport const getFreeDiskStorage = async () => {\n if (navigator.storage && navigator.storage.estimate) {\n return navigator.storage.estimate().then(({ quota, usage }) => quota - usage)\n }\n return -1;\n};\n\nexport const getFreeDiskStorageSync = () => {\n console.log(\n '[react-native-device-info] getFreeDiskStorageSync not supported - please use getFreeDiskStorage'\n );\n return -1;\n};\n\nexport const getMaxMemory = async () => {\n return getMaxMemorySync();\n};\n\nexport const getUsedMemory = async () => {\n return getUsedMemorySync();\n};\n\nexport const getTotalMemory = async () => {\n return getTotalMemorySync();\n};\n\nexport const getPowerState = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then((battery) => _readPowerState(battery))\n }\n return {};\n};\n\nexport const getPowerStateSync = () => {\n return powerState;\n};\n"]} +\ No newline at end of file ++{"version":3,"sources":["index.js"],"names":["deviceInfoEmitter","NativeEventEmitter","NativeModules","RNDeviceInfo","batteryCharging","batteryLevel","powerState","_readPowerState","battery","level","charging","chargingtime","dischargingtime","lowPowerMode","batteryState","getMaxMemorySync","window","performance","memory","jsHeapSizeLimit","getInstallReferrerSync","document","referrer","isAirplaneModeSync","navigator","onLine","getUserAgentSync","userAgent","isLocationEnabledSync","geolocation","getTotalMemorySync","deviceMemory","getUsedMemorySync","usedJSHeapSize","init","getBattery","then","addEventListener","emit","getBaseOsSync","platform","macosPlatforms","windowsPlatforms","iosPlatforms","os","indexOf","test","getInstallReferrer","getUserAgent","isBatteryCharging","isBatteryChargingSync","isCameraPresent","mediaDevices","enumerateDevices","devices","find","d","kind","isCameraPresentSync","console","log","getBatteryLevel","getBatteryLevelSync","isLocationEnabled","isAirplaneMode","getBaseOs","getTotalDiskCapacity","storage","estimate","quota","getTotalDiskCapacitySync","getFreeDiskStorage","usage","getFreeDiskStorageSync","getMaxMemory","getUsedMemory","getTotalMemory","getPowerState","getPowerStateSync"],"mappings":"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","sourcesContent":["import { NativeEventEmitter, NativeModules } from 'react-native';\n\nconst deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);\n\nlet batteryCharging = false,\n batteryLevel = -1,\n powerState = {};\n\nconst _readPowerState = (battery) => {\n const { level, charging, chargingtime, dischargingtime } = battery;\n\n return {\n batteryLevel: level,\n lowPowerMode: false,\n batteryState: level === 1 ? 'full' : charging ? 'charging' : 'unplugged',\n chargingtime,\n dischargingtime,\n };\n};\n\nexport const getMaxMemorySync = () => {\n if (window.performance && window.performance.memory) {\n return window.performance.memory.jsHeapSizeLimit;\n }\n return -1;\n};\n\nexport const getInstallReferrerSync = () => {\n return document.referrer;\n};\n\nexport const isAirplaneModeSync = () => {\n return !!navigator.onLine;\n};\n\nexport const getUserAgentSync = () => {\n return window.navigator.userAgent;\n};\n\nexport const isLocationEnabledSync = () => {\n return !!navigator.geolocation;\n};\n\nexport const getTotalMemorySync = () => {\n if (navigator.deviceMemory) {\n return navigator.deviceMemory * 1000000000;\n }\n return -1;\n};\n\nexport const getUsedMemorySync = () => {\n if (window.performance && window.performance.memory) {\n return window.performance.memory.usedJSHeapSize;\n }\n return -1;\n};\n\nconst init = () => {\n if (typeof navigator === 'undefined' || !navigator.getBattery) return;\n\n navigator.getBattery().then((battery) => {\n batteryCharging = battery.charging;\n\n battery.addEventListener('chargingchange', () => {\n const { charging } = battery;\n\n batteryCharging = charging;\n powerState = _readPowerState(battery);\n\n deviceInfoEmitter.emit('RNDeviceInfo_powerStateDidChange', powerState);\n });\n\n battery.addEventListener('levelchange', () => {\n const { level } = battery;\n\n batteryLevel = level;\n powerState = _readPowerState(battery);\n\n deviceInfoEmitter.emit('RNDeviceInfo_batteryLevelDidChange', level);\n if (level < 0.2) {\n deviceInfoEmitter.emit('RNDeviceInfo_batteryLevelIsLow', level);\n }\n });\n });\n};\n\nconst getBaseOsSync = () => {\n const userAgent = window.navigator.userAgent,\n platform = window.navigator.platform,\n macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],\n windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],\n iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n\n let os = platform;\n\n if (macosPlatforms.indexOf(platform) !== -1) {\n os = 'Mac OS';\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n os = 'iOS';\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n os = 'Windows';\n } else if (/Android/.test(userAgent)) {\n os = 'Android';\n } else if (!os && /Linux/.test(platform)) {\n os = 'Linux';\n }\n\n return os;\n};\n\ninit();\n/**\n * react-native-web empty polyfill.\n */\n\nexport const getInstallReferrer = async () => {\n return getInstallReferrerSync();\n};\n\nexport const getUserAgent = async () => {\n return getUserAgentSync();\n};\n\nexport const isBatteryCharging = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then(battery => battery.charging);\n }\n return false;\n};\n\nexport const isBatteryChargingSync = () => {\n return batteryCharging;\n};\n\nexport const isCameraPresent = async () => {\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices().then(devices => {\n return !!devices.find((d) => d.kind === 'videoinput');\n });\n }\n return false;\n};\n\nexport const isCameraPresentSync = () => {\n console.log(\n '[react-native-device-info] isCameraPresentSync not supported - please use isCameraPresent'\n );\n return false;\n};\n\nexport const getBatteryLevel = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then(battery => battery.level);\n }\n return -1;\n};\n\nexport const getBatteryLevelSync = () => {\n return batteryLevel;\n};\n\nexport const isLocationEnabled = async () => {\n return isLocationEnabledSync();\n};\n\nexport const isAirplaneMode = async () => {\n return isAirplaneModeSync();\n};\n\nexport const getBaseOs = async () => {\n return getBaseOsSync();\n};\n\nexport const getTotalDiskCapacity = async () => {\n if (navigator.storage && navigator.storage.estimate) {\n return navigator.storage.estimate().then(({ quota }) => quota)\n }\n return -1;\n};\n\nexport const getTotalDiskCapacitySync = () => {\n console.log(\n '[react-native-device-info] getTotalDiskCapacitySync not supported - please use getTotalDiskCapacity'\n );\n return -1;\n};\n\nexport const getFreeDiskStorage = async () => {\n if (navigator.storage && navigator.storage.estimate) {\n return navigator.storage.estimate().then(({ quota, usage }) => quota - usage)\n }\n return -1;\n};\n\nexport const getFreeDiskStorageSync = () => {\n console.log(\n '[react-native-device-info] getFreeDiskStorageSync not supported - please use getFreeDiskStorage'\n );\n return -1;\n};\n\nexport const getMaxMemory = async () => {\n return getMaxMemorySync();\n};\n\nexport const getUsedMemory = async () => {\n return getUsedMemorySync();\n};\n\nexport const getTotalMemory = async () => {\n return getTotalMemorySync();\n};\n\nexport const getPowerState = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then((battery) => _readPowerState(battery))\n }\n return {};\n};\n\nexport const getPowerStateSync = () => {\n return powerState;\n};\n"]} +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/module/fabric/NativeDeviceInfoModule.js b/node_modules/react-native-device-info/lib/module/fabric/NativeDeviceInfoModule.js +new file mode 100644 +index 0000000..9455226 +--- /dev/null ++++ b/node_modules/react-native-device-info/lib/module/fabric/NativeDeviceInfoModule.js +@@ -0,0 +1,3 @@ ++import { TurboModuleRegistry } from 'react-native'; ++export default TurboModuleRegistry.get('RNDeviceInfo'); ++//# sourceMappingURL=NativeDeviceInfoModule.js.map +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/module/fabric/NativeDeviceInfoModule.js.map b/node_modules/react-native-device-info/lib/module/fabric/NativeDeviceInfoModule.js.map +new file mode 100644 +index 0000000..7915f74 +--- /dev/null ++++ b/node_modules/react-native-device-info/lib/module/fabric/NativeDeviceInfoModule.js.map +@@ -0,0 +1 @@ ++{"version":3,"sources":["NativeDeviceInfoModule.ts"],"names":["TurboModuleRegistry","getEnforcing"],"mappings":"AAAA,SAASA,mBAAT,QAAiD,cAAjD;AAuJA,eAAeA,mBAAmB,CAACC,YAApB,CAAuC,cAAvC,CAAf","sourcesContent":["import { TurboModuleRegistry, TurboModule } from 'react-native';\n\nexport interface Spec extends TurboModule {\n getPowerState: () => Promise<{\n batteryLevel: number;\n batteryState: string;\n lowPowerMode: boolean;\n }>;\n getPowerStateSync: () => {\n batteryLevel: number;\n batteryState: string;\n lowPowerMode: boolean;\n }; // should be PowerState\n getSupported32BitAbis: () => Promise;\n getSupported32BitAbisSync: () => string[];\n getSupported64BitAbis: () => Promise;\n getSupported64BitAbisSync: () => string[];\n getSupportedAbis: () => Promise;\n getSupportedAbisSync: () => string[];\n getSystemManufacturer: () => Promise;\n getSystemManufacturerSync: () => string;\n getAndroidId: () => Promise;\n getAndroidIdSync: () => string;\n getApiLevel: () => Promise;\n getApiLevelSync: () => number;\n getAvailableLocationProviders: () => Promise;\n getAvailableLocationProvidersSync: () => Object; // should be LocationProviderInfo\n getBaseOs: () => Promise;\n getBaseOsSync: () => string;\n getBatteryLevel: () => Promise;\n getBatteryLevelSync: () => number;\n getBootloader: () => Promise;\n getBootloaderSync: () => string;\n getBuildId: () => Promise;\n getBuildIdSync: () => string;\n getCarrier: () => Promise;\n getCarrierSync: () => string;\n getCodename: () => Promise;\n getCodenameSync: () => string;\n getDevice: () => Promise;\n getDeviceName: () => Promise;\n getDeviceNameSync: () => string;\n getDeviceSync: () => string;\n getDeviceToken: () => Promise;\n getDisplay: () => Promise;\n getDisplaySync: () => string;\n getFingerprint: () => Promise;\n getFingerprintSync: () => string;\n getFirstInstallTime: () => Promise;\n getFirstInstallTimeSync: () => number;\n getFontScale: () => Promise;\n getFontScaleSync: () => number;\n getFreeDiskStorage: () => Promise;\n getFreeDiskStorageOld: () => Promise;\n getFreeDiskStorageSync: () => number;\n getFreeDiskStorageOldSync: () => number;\n getHardware: () => Promise;\n getHardwareSync: () => string;\n getHost: () => Promise;\n getHostSync: () => string;\n getIncremental: () => Promise;\n getIncrementalSync: () => string;\n getInstallerPackageName: () => Promise;\n getInstallerPackageNameSync: () => string;\n getInstallReferrer: () => Promise;\n getInstallReferrerSync: () => string;\n getInstanceId: () => Promise;\n getInstanceIdSync: () => string;\n getIpAddress: () => Promise;\n getIpAddressSync: () => string;\n getLastUpdateTime: () => Promise;\n getLastUpdateTimeSync: () => number;\n getMacAddress: () => Promise;\n getMacAddressSync: () => string;\n getMaxMemory: () => Promise;\n getMaxMemorySync: () => number;\n getPhoneNumber: () => Promise;\n getPhoneNumberSync: () => string;\n getPreviewSdkInt: () => Promise;\n getPreviewSdkIntSync: () => number;\n getProduct: () => Promise;\n getProductSync: () => string;\n getSecurityPatch: () => Promise;\n getSecurityPatchSync: () => string;\n getSerialNumber: () => Promise;\n getSerialNumberSync: () => string;\n getSystemAvailableFeatures: () => Promise;\n getSystemAvailableFeaturesSync: () => string[];\n getTags: () => Promise;\n getTagsSync: () => string;\n getTotalDiskCapacity: () => Promise;\n getTotalDiskCapacityOld: () => Promise;\n getTotalDiskCapacitySync: () => number;\n getTotalDiskCapacityOldSync: () => number;\n getTotalMemory: () => Promise;\n getTotalMemorySync: () => number;\n getType: () => Promise;\n getTypeSync: () => string;\n getUniqueId: () => Promise;\n getUniqueIdSync: () => string;\n getUsedMemory: () => Promise;\n getUsedMemorySync: () => number;\n getUserAgent: () => Promise;\n getUserAgentSync: () => string;\n getBrightness: () => Promise;\n getBrightnessSync: () => number;\n hasGms: () => Promise;\n hasGmsSync: () => boolean;\n hasHms: () => Promise;\n hasHmsSync: () => boolean;\n hasSystemFeature: (feature: string) => Promise;\n hasSystemFeatureSync: (feature: string) => boolean;\n isAirplaneMode: () => Promise;\n isAirplaneModeSync: () => boolean;\n isBatteryCharging: () => Promise;\n isBatteryChargingSync: () => boolean;\n isCameraPresent: () => Promise;\n isCameraPresentSync: () => boolean;\n isEmulator: () => Promise;\n isEmulatorSync: () => boolean;\n isHeadphonesConnected: () => Promise;\n isHeadphonesConnectedSync: () => boolean;\n isLocationEnabled: () => Promise;\n isLocationEnabledSync: () => boolean;\n isPinOrFingerprintSet: () => Promise;\n isPinOrFingerprintSetSync: () => boolean;\n isMouseConnected: () => Promise;\n isMouseConnectedSync: () => boolean;\n isKeyboardConnected: () => Promise;\n isKeyboardConnectedSync: () => boolean;\n isTabletMode: () => Promise;\n syncUniqueId: () => Promise;\n\n addListener(eventName: string): void;\n removeListeners(count: number): void;\n getConstants(): {\n appName: string;\n appVersion: string;\n brand: string;\n buildNumber: string;\n bundleId: string;\n deviceId: string;\n deviceType: string;\n isTablet: boolean;\n isDisplayZoomed?: boolean;\n model: string;\n systemName: string;\n systemVersion: string;\n };\n}\n\nexport default TurboModuleRegistry.getEnforcing('RNDeviceInfo');\n"]} +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/module/index.js b/node_modules/react-native-device-info/lib/module/index.js +index 9db4a5c..6ba1b7f 100644 +--- a/node_modules/react-native-device-info/lib/module/index.js ++++ b/node_modules/react-native-device-info/lib/module/index.js +@@ -1,10 +1,20 @@ + import { useCallback, useEffect, useState } from 'react'; +-import { Dimensions, NativeEventEmitter, NativeModules, Platform } from 'react-native'; ++import { Dimensions, NativeEventEmitter, Platform } from 'react-native'; + import { useOnEvent, useOnMount } from './internal/asyncHookWrappers'; +-import devicesWithDynamicIsland from "./internal/devicesWithDynamicIsland"; ++import devicesWithDynamicIsland from './internal/devicesWithDynamicIsland'; + import devicesWithNotch from './internal/devicesWithNotch'; + import RNDeviceInfo from './internal/nativeInterface'; + import { getSupportedPlatformInfoAsync, getSupportedPlatformInfoFunctions, getSupportedPlatformInfoSync } from './internal/supported-platform-info'; ++let constants; ++ ++function getConstants() { ++ if (constants === undefined) { ++ constants = RNDeviceInfo.getConstants(); ++ } ++ ++ return constants; ++} ++ + export const [getUniqueId, getUniqueIdSync] = getSupportedPlatformInfoFunctions({ + memoKey: 'uniqueId', + supportedPlatforms: ['android', 'ios', 'windows'], +@@ -76,7 +86,7 @@ export function getMacAddressSync() { + export const getDeviceId = () => getSupportedPlatformInfoSync({ + defaultValue: 'unknown', + memoKey: 'deviceId', +- getter: () => RNDeviceInfo.deviceId, ++ getter: () => getConstants().deviceId, + supportedPlatforms: ['android', 'ios', 'windows'] + }); + export const [getManufacturer, getManufacturerSync] = getSupportedPlatformInfoFunctions({ +@@ -90,20 +100,20 @@ export const getModel = () => getSupportedPlatformInfoSync({ + memoKey: 'model', + defaultValue: 'unknown', + supportedPlatforms: ['ios', 'android', 'windows'], +- getter: () => RNDeviceInfo.model ++ getter: () => getConstants().model + }); + export const getBrand = () => getSupportedPlatformInfoSync({ + memoKey: 'brand', + supportedPlatforms: ['android', 'ios', 'windows'], + defaultValue: 'unknown', +- getter: () => RNDeviceInfo.brand ++ getter: () => getConstants().brand + }); + export const getSystemName = () => getSupportedPlatformInfoSync({ + defaultValue: 'unknown', + supportedPlatforms: ['ios', 'android', 'windows'], + memoKey: 'systemName', + getter: () => Platform.select({ +- ios: RNDeviceInfo.systemName, ++ ios: getConstants().systemName, + android: 'Android', + windows: 'Windows', + default: 'unknown' +@@ -111,7 +121,7 @@ export const getSystemName = () => getSupportedPlatformInfoSync({ + }); + export const getSystemVersion = () => getSupportedPlatformInfoSync({ + defaultValue: 'unknown', +- getter: () => RNDeviceInfo.systemVersion, ++ getter: () => getConstants().systemVersion, + supportedPlatforms: ['android', 'ios', 'windows'], + memoKey: 'systemVersion' + }); +@@ -133,7 +143,7 @@ export const getBundleId = () => getSupportedPlatformInfoSync({ + memoKey: 'bundleId', + supportedPlatforms: ['android', 'ios', 'windows'], + defaultValue: 'unknown', +- getter: () => RNDeviceInfo.bundleId ++ getter: () => getConstants().bundleId + }); + export const [getInstallerPackageName, getInstallerPackageNameSync] = getSupportedPlatformInfoFunctions({ + memoKey: 'installerPackageName', +@@ -145,20 +155,20 @@ export const [getInstallerPackageName, getInstallerPackageNameSync] = getSupport + export const getApplicationName = () => getSupportedPlatformInfoSync({ + memoKey: 'appName', + defaultValue: 'unknown', +- getter: () => RNDeviceInfo.appName, ++ getter: () => getConstants().appName, + supportedPlatforms: ['android', 'ios', 'windows'] + }); + export const getBuildNumber = () => getSupportedPlatformInfoSync({ + memoKey: 'buildNumber', + supportedPlatforms: ['android', 'ios', 'windows'], +- getter: () => RNDeviceInfo.buildNumber, ++ getter: () => getConstants().buildNumber, + defaultValue: 'unknown' + }); + export const getVersion = () => getSupportedPlatformInfoSync({ + memoKey: 'version', + defaultValue: 'unknown', + supportedPlatforms: ['android', 'ios', 'windows'], +- getter: () => RNDeviceInfo.appVersion ++ getter: () => getConstants().appVersion + }); + export function getReadableVersion() { + return getVersion() + '.' + getBuildNumber(); +@@ -302,7 +312,13 @@ export const isTablet = () => getSupportedPlatformInfoSync({ + defaultValue: false, + supportedPlatforms: ['android', 'ios', 'windows'], + memoKey: 'tablet', +- getter: () => RNDeviceInfo.isTablet ++ getter: () => getConstants().isTablet ++}); ++export const isDisplayZoomed = () => getSupportedPlatformInfoSync({ ++ defaultValue: false, ++ supportedPlatforms: ['ios'], ++ memoKey: 'zoomed', ++ getter: () => getConstants().isDisplayZoomed + }); + export const [isPinOrFingerprintSet, isPinOrFingerprintSetSync] = getSupportedPlatformInfoFunctions({ + supportedPlatforms: ['android', 'ios', 'windows'], +@@ -313,6 +329,8 @@ export const [isPinOrFingerprintSet, isPinOrFingerprintSetSync] = getSupportedPl + let notch; + export function hasNotch() { + if (notch === undefined) { ++ console.log(RNDeviceInfo); ++ + let _brand = getBrand(); + + let _model = getModel(); +@@ -488,7 +506,7 @@ export const getDeviceType = () => { + memoKey: 'deviceType', + supportedPlatforms: ['android', 'ios', 'windows'], + defaultValue: 'unknown', +- getter: () => RNDeviceInfo.deviceType ++ getter: () => getConstants().deviceType + }); + }; + export const getDeviceTypeSync = () => { +@@ -496,7 +514,7 @@ export const getDeviceTypeSync = () => { + memoKey: 'deviceType', + supportedPlatforms: ['android', 'ios', 'windows'], + defaultValue: 'unknown', +- getter: () => RNDeviceInfo.deviceType ++ getter: () => getConstants().deviceType + }); + }; + export const [supportedAbis, supportedAbisSync] = getSupportedPlatformInfoFunctions({ +@@ -595,7 +613,7 @@ export async function getDeviceToken() { + + return 'unknown'; + } +-const deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo); ++const deviceInfoEmitter = new NativeEventEmitter(RNDeviceInfo); + export function useBatteryLevel() { + const [batteryLevel, setBatteryLevel] = useState(null); + useEffect(() => { +@@ -819,6 +837,7 @@ const DeviceInfo = { + isKeyboardConnectedSync, + isTabletMode, + isTablet, ++ isDisplayZoomed, + supported32BitAbis, + supported32BitAbisSync, + supported64BitAbis, +diff --git a/node_modules/react-native-device-info/lib/module/index.js.flow b/node_modules/react-native-device-info/lib/module/index.js.flow +index 02fbb10..fdb85b0 100644 +--- a/node_modules/react-native-device-info/lib/module/index.js.flow ++++ b/node_modules/react-native-device-info/lib/module/index.js.flow +@@ -153,6 +153,7 @@ declare module.exports: { + isKeyboardConnectedSync: () => boolean, + isTabletMode: () => Promise, + isTablet: () => boolean, ++ isDisplayZoomed: () => boolean, + supported32BitAbis: () => Promise, + supported32BitAbisSync: () => string[], + supported64BitAbis: () => Promise, +diff --git a/node_modules/react-native-device-info/lib/module/index.js.map b/node_modules/react-native-device-info/lib/module/index.js.map +index ee4ed0f..05b2714 100644 +--- a/node_modules/react-native-device-info/lib/module/index.js.map ++++ b/node_modules/react-native-device-info/lib/module/index.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["index.ts"],"names":["useCallback","useEffect","useState","Dimensions","NativeEventEmitter","NativeModules","Platform","useOnEvent","useOnMount","devicesWithDynamicIsland","devicesWithNotch","RNDeviceInfo","getSupportedPlatformInfoAsync","getSupportedPlatformInfoFunctions","getSupportedPlatformInfoSync","getUniqueId","getUniqueIdSync","memoKey","supportedPlatforms","getter","syncGetter","defaultValue","uniqueId","syncUniqueId","OS","getInstanceId","getInstanceIdSync","getSerialNumber","getSerialNumberSync","getAndroidId","getAndroidIdSync","getIpAddress","getIpAddressSync","isCameraPresent","isCameraPresentSync","getMacAddress","getMacAddressSync","getDeviceId","deviceId","getManufacturer","getManufacturerSync","Promise","resolve","getSystemManufacturer","getSystemManufacturerSync","getModel","model","getBrand","brand","getSystemName","select","ios","systemName","android","windows","default","getSystemVersion","systemVersion","getBuildId","getBuildIdSync","getApiLevel","getApiLevelSync","getBundleId","bundleId","getInstallerPackageName","getInstallerPackageNameSync","getApplicationName","appName","getBuildNumber","buildNumber","getVersion","appVersion","getReadableVersion","getDeviceName","getDeviceNameSync","getUsedMemory","getUsedMemorySync","getUserAgent","getUserAgentSync","getFontScale","getFontScaleSync","getBootloader","getBootloaderSync","getDevice","getDeviceSync","getDisplay","getDisplaySync","getFingerprint","getFingerprintSync","getHardware","getHardwareSync","getHost","getHostSync","getProduct","getProductSync","getTags","getTagsSync","getType","getTypeSync","getBaseOs","getBaseOsSync","getPreviewSdkInt","getPreviewSdkIntSync","getSecurityPatch","getSecurityPatchSync","getCodename","getCodenameSync","getIncremental","getIncrementalSync","isEmulator","isEmulatorSync","isTablet","isPinOrFingerprintSet","isPinOrFingerprintSetSync","notch","hasNotch","undefined","_brand","_model","findIndex","item","toLowerCase","dynamicIsland","hasDynamicIsland","hasGms","hasGmsSync","hasHms","hasHmsSync","getFirstInstallTime","getFirstInstallTimeSync","getInstallReferrer","getInstallReferrerSync","getLastUpdateTime","getLastUpdateTimeSync","getPhoneNumber","getPhoneNumberSync","getCarrier","getCarrierSync","getTotalMemory","getTotalMemorySync","getMaxMemory","getMaxMemorySync","getTotalDiskCapacity","getTotalDiskCapacitySync","getTotalDiskCapacityOld","getTotalDiskCapacityOldSync","getFreeDiskStorage","getFreeDiskStorageSync","getFreeDiskStorageOld","getFreeDiskStorageOldSync","getBatteryLevel","getBatteryLevelSync","getPowerState","getPowerStateSync","isBatteryCharging","isBatteryChargingSync","isLandscape","isLandscapeSync","height","width","get","isAirplaneMode","isAirplaneModeSync","getDeviceType","deviceType","getDeviceTypeSync","supportedAbis","supportedAbisSync","getSupportedAbis","getSupportedAbisSync","supported32BitAbis","supported32BitAbisSync","getSupported32BitAbis","getSupported32BitAbisSync","supported64BitAbis","supported64BitAbisSync","getSupported64BitAbis","getSupported64BitAbisSync","hasSystemFeature","feature","hasSystemFeatureSync","isLowBatteryLevel","level","getSystemAvailableFeatures","getSystemAvailableFeaturesSync","isLocationEnabled","isLocationEnabledSync","isHeadphonesConnected","isHeadphonesConnectedSync","isMouseConnected","isMouseConnectedSync","isKeyboardConnected","isKeyboardConnectedSync","isTabletMode","getAvailableLocationProviders","getAvailableLocationProvidersSync","getBrightness","getBrightnessSync","getDeviceToken","deviceInfoEmitter","useBatteryLevel","batteryLevel","setBatteryLevel","setInitialValue","initialValue","onChange","subscription","addListener","remove","useBatteryLevelIsLow","batteryLevelIsLow","setBatteryLevelIsLow","usePowerState","powerState","setPowerState","state","useIsHeadphonesConnected","useFirstInstallTime","useDeviceName","useHasSystemFeature","asyncGetter","useIsEmulator","useManufacturer","useBrightness","brightness","setBrightness","value","DeviceInfo"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { Dimensions, NativeEventEmitter, NativeModules, Platform } from 'react-native';\nimport { useOnEvent, useOnMount } from './internal/asyncHookWrappers';\nimport devicesWithDynamicIsland from \"./internal/devicesWithDynamicIsland\";\nimport devicesWithNotch from './internal/devicesWithNotch';\nimport RNDeviceInfo from './internal/nativeInterface';\nimport {\n getSupportedPlatformInfoAsync,\n getSupportedPlatformInfoFunctions,\n getSupportedPlatformInfoSync,\n} from './internal/supported-platform-info';\nimport { DeviceInfoModule } from './internal/privateTypes';\nimport type {\n AsyncHookResult,\n DeviceType,\n LocationProviderInfo,\n PowerState,\n} from './internal/types';\n\nexport const [getUniqueId, getUniqueIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'uniqueId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getUniqueId(),\n syncGetter: () => RNDeviceInfo.getUniqueIdSync(),\n defaultValue: 'unknown',\n});\n\nlet uniqueId: string;\nexport async function syncUniqueId() {\n if (Platform.OS === 'ios') {\n uniqueId = await RNDeviceInfo.syncUniqueId();\n } else {\n uniqueId = await getUniqueId();\n }\n return uniqueId;\n}\n\nexport const [getInstanceId, getInstanceIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'instanceId',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getInstanceId(),\n syncGetter: () => RNDeviceInfo.getInstanceIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getSerialNumber, getSerialNumberSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'serialNumber',\n supportedPlatforms: ['android', 'windows'],\n getter: () => RNDeviceInfo.getSerialNumber(),\n syncGetter: () => RNDeviceInfo.getSerialNumberSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getAndroidId, getAndroidIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'androidId',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getAndroidId(),\n syncGetter: () => RNDeviceInfo.getAndroidIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getIpAddress, getIpAddressSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getIpAddress(),\n syncGetter: () => RNDeviceInfo.getIpAddressSync(),\n defaultValue: 'unknown',\n});\n\nexport const [isCameraPresent, isCameraPresentSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.isCameraPresent(),\n syncGetter: () => RNDeviceInfo.isCameraPresentSync(),\n defaultValue: false,\n});\n\nexport async function getMacAddress() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getMacAddress();\n } else if (Platform.OS === 'ios') {\n return '02:00:00:00:00:00';\n }\n return 'unknown';\n}\n\nexport function getMacAddressSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getMacAddressSync();\n } else if (Platform.OS === 'ios') {\n return '02:00:00:00:00:00';\n }\n return 'unknown';\n}\n\nexport const getDeviceId = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n memoKey: 'deviceId',\n getter: () => RNDeviceInfo.deviceId,\n supportedPlatforms: ['android', 'ios', 'windows'],\n });\n\nexport const [getManufacturer, getManufacturerSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'manufacturer',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () =>\n Platform.OS == 'ios' ? Promise.resolve('Apple') : RNDeviceInfo.getSystemManufacturer(),\n syncGetter: () => (Platform.OS == 'ios' ? 'Apple' : RNDeviceInfo.getSystemManufacturerSync()),\n defaultValue: 'unknown',\n});\n\nexport const getModel = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'model',\n defaultValue: 'unknown',\n supportedPlatforms: ['ios', 'android', 'windows'],\n getter: () => RNDeviceInfo.model,\n });\n\nexport const getBrand = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'brand',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.brand,\n });\n\nexport const getSystemName = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n supportedPlatforms: ['ios', 'android', 'windows'],\n memoKey: 'systemName',\n getter: () =>\n Platform.select({\n ios: RNDeviceInfo.systemName,\n android: 'Android',\n windows: 'Windows',\n default: 'unknown',\n }),\n });\n\nexport const getSystemVersion = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.systemVersion,\n supportedPlatforms: ['android', 'ios', 'windows'],\n memoKey: 'systemVersion',\n });\n\nexport const [getBuildId, getBuildIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'buildId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getBuildId(),\n syncGetter: () => RNDeviceInfo.getBuildIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getApiLevel, getApiLevelSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'apiLevel',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getApiLevel(),\n syncGetter: () => RNDeviceInfo.getApiLevelSync(),\n defaultValue: -1,\n});\n\nexport const getBundleId = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'bundleId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.bundleId,\n });\n\nexport const [\n getInstallerPackageName,\n getInstallerPackageNameSync,\n] = getSupportedPlatformInfoFunctions({\n memoKey: 'installerPackageName',\n supportedPlatforms: ['android', 'windows', 'ios'],\n getter: () => RNDeviceInfo.getInstallerPackageName(),\n syncGetter: () => RNDeviceInfo.getInstallerPackageNameSync(),\n defaultValue: 'unknown',\n});\n\nexport const getApplicationName = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'appName',\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.appName,\n supportedPlatforms: ['android', 'ios', 'windows'],\n });\n\nexport const getBuildNumber = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'buildNumber',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.buildNumber,\n defaultValue: 'unknown',\n });\n\nexport const getVersion = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'version',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.appVersion,\n });\n\nexport function getReadableVersion() {\n return getVersion() + '.' + getBuildNumber();\n}\n\nexport const [getDeviceName, getDeviceNameSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getDeviceName(),\n syncGetter: () => RNDeviceInfo.getDeviceNameSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getUsedMemory, getUsedMemorySync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getUsedMemory(),\n syncGetter: () => RNDeviceInfo.getUsedMemorySync(),\n defaultValue: -1,\n});\n\nexport const getUserAgent = () =>\n getSupportedPlatformInfoAsync({\n memoKey: 'userAgent',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'ios', 'web'],\n getter: () => RNDeviceInfo.getUserAgent(),\n });\n\nexport const getUserAgentSync = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'userAgentSync',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'web'],\n getter: () => RNDeviceInfo.getUserAgentSync(),\n });\n\nexport const [getFontScale, getFontScaleSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getFontScale(),\n syncGetter: () => RNDeviceInfo.getFontScaleSync(),\n defaultValue: -1,\n});\n\nexport const [getBootloader, getBootloaderSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'bootloader',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getBootloader(),\n syncGetter: () => RNDeviceInfo.getBootloaderSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getDevice, getDeviceSync] = getSupportedPlatformInfoFunctions({\n getter: () => RNDeviceInfo.getDevice(),\n syncGetter: () => RNDeviceInfo.getDeviceSync(),\n defaultValue: 'unknown',\n memoKey: 'device',\n supportedPlatforms: ['android'],\n});\n\nexport const [getDisplay, getDisplaySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'display',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getDisplay(),\n syncGetter: () => RNDeviceInfo.getDisplaySync(),\n defaultValue: 'unknown',\n});\n\nexport const [getFingerprint, getFingerprintSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'fingerprint',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getFingerprint(),\n syncGetter: () => RNDeviceInfo.getFingerprintSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getHardware, getHardwareSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'hardware',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getHardware(),\n syncGetter: () => RNDeviceInfo.getHardwareSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getHost, getHostSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'host',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getHost(),\n syncGetter: () => RNDeviceInfo.getHostSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getProduct, getProductSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'product',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getProduct(),\n syncGetter: () => RNDeviceInfo.getProductSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getTags, getTagsSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'tags',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getTags(),\n syncGetter: () => RNDeviceInfo.getTagsSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getType, getTypeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'type',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getType(),\n syncGetter: () => RNDeviceInfo.getTypeSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getBaseOs, getBaseOsSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'baseOs',\n supportedPlatforms: ['android', 'web', 'windows'],\n getter: () => RNDeviceInfo.getBaseOs(),\n syncGetter: () => RNDeviceInfo.getBaseOsSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getPreviewSdkInt, getPreviewSdkIntSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'previewSdkInt',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getPreviewSdkInt(),\n syncGetter: () => RNDeviceInfo.getPreviewSdkIntSync(),\n defaultValue: -1,\n});\n\nexport const [getSecurityPatch, getSecurityPatchSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'securityPatch',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSecurityPatch(),\n syncGetter: () => RNDeviceInfo.getSecurityPatchSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getCodename, getCodenameSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'codeName',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getCodename(),\n syncGetter: () => RNDeviceInfo.getCodenameSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getIncremental, getIncrementalSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'incremental',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getIncremental(),\n syncGetter: () => RNDeviceInfo.getIncrementalSync(),\n defaultValue: 'unknown',\n});\n\nexport const [isEmulator, isEmulatorSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'emulator',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.isEmulator(),\n syncGetter: () => RNDeviceInfo.isEmulatorSync(),\n defaultValue: false,\n});\n\nexport const isTablet = () =>\n getSupportedPlatformInfoSync({\n defaultValue: false,\n supportedPlatforms: ['android', 'ios', 'windows'],\n memoKey: 'tablet',\n getter: () => RNDeviceInfo.isTablet,\n });\n\nexport const [isPinOrFingerprintSet, isPinOrFingerprintSetSync] = getSupportedPlatformInfoFunctions(\n {\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.isPinOrFingerprintSet(),\n syncGetter: () => RNDeviceInfo.isPinOrFingerprintSetSync(),\n defaultValue: false,\n }\n);\n\nlet notch: boolean;\nexport function hasNotch() {\n if (notch === undefined) {\n let _brand = getBrand();\n let _model = getModel();\n notch =\n devicesWithNotch.findIndex(\n (item) =>\n item.brand.toLowerCase() === _brand.toLowerCase() &&\n item.model.toLowerCase() === _model.toLowerCase()\n ) !== -1;\n }\n return notch;\n}\n\nlet dynamicIsland: boolean;\nexport function hasDynamicIsland() {\n if (dynamicIsland === undefined) {\n let _brand = getBrand();\n let _model = getModel();\n dynamicIsland =\n devicesWithDynamicIsland.findIndex(\n (item) =>\n item.brand.toLowerCase() === _brand.toLowerCase() &&\n item.model.toLowerCase() === _model.toLowerCase()\n ) !== -1;\n }\n return dynamicIsland;\n}\n\nexport const [hasGms, hasGmsSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.hasGms(),\n syncGetter: () => RNDeviceInfo.hasGmsSync(),\n defaultValue: false,\n});\n\nexport const [hasHms, hasHmsSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.hasHms(),\n syncGetter: () => RNDeviceInfo.hasHmsSync(),\n defaultValue: false,\n});\n\nexport const [getFirstInstallTime, getFirstInstallTimeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'firstInstallTime',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getFirstInstallTime(),\n syncGetter: () => RNDeviceInfo.getFirstInstallTimeSync(),\n defaultValue: -1,\n});\n\nexport const [getInstallReferrer, getInstallReferrerSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'installReferrer',\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getInstallReferrer(),\n syncGetter: () => RNDeviceInfo.getInstallReferrerSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getLastUpdateTime, getLastUpdateTimeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'lastUpdateTime',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getLastUpdateTime(),\n syncGetter: () => RNDeviceInfo.getLastUpdateTimeSync(),\n defaultValue: -1,\n});\n\nexport const [getPhoneNumber, getPhoneNumberSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getPhoneNumber(),\n syncGetter: () => RNDeviceInfo.getPhoneNumberSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getCarrier, getCarrierSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.getCarrier(),\n syncGetter: () => RNDeviceInfo.getCarrierSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getTotalMemory, getTotalMemorySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'totalMemory',\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getTotalMemory(),\n syncGetter: () => RNDeviceInfo.getTotalMemorySync(),\n defaultValue: -1,\n});\n\nexport const [getMaxMemory, getMaxMemorySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'maxMemory',\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getMaxMemory(),\n syncGetter: () => RNDeviceInfo.getMaxMemorySync(),\n defaultValue: -1,\n});\n\nexport const [getTotalDiskCapacity, getTotalDiskCapacitySync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getTotalDiskCapacity(),\n syncGetter: () => RNDeviceInfo.getTotalDiskCapacitySync(),\n defaultValue: -1,\n});\n\nexport async function getTotalDiskCapacityOld() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getTotalDiskCapacityOld();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getTotalDiskCapacity();\n }\n\n return -1;\n}\n\nexport function getTotalDiskCapacityOldSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getTotalDiskCapacityOldSync();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getTotalDiskCapacitySync();\n }\n\n return -1;\n}\n\nexport const [getFreeDiskStorage, getFreeDiskStorageSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getFreeDiskStorage(),\n syncGetter: () => RNDeviceInfo.getFreeDiskStorageSync(),\n defaultValue: -1,\n});\n\nexport async function getFreeDiskStorageOld() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getFreeDiskStorageOld();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getFreeDiskStorage();\n }\n\n return -1;\n}\n\nexport function getFreeDiskStorageOldSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getFreeDiskStorageOldSync();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getFreeDiskStorageSync();\n }\n\n return -1;\n}\n\nexport const [getBatteryLevel, getBatteryLevelSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getBatteryLevel(),\n syncGetter: () => RNDeviceInfo.getBatteryLevelSync(),\n defaultValue: -1,\n});\n\nexport const [getPowerState, getPowerStateSync] = getSupportedPlatformInfoFunctions<\n Partial\n>({\n supportedPlatforms: ['ios', 'android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getPowerState(),\n syncGetter: () => RNDeviceInfo.getPowerStateSync(),\n defaultValue: {},\n});\n\nexport const [isBatteryCharging, isBatteryChargingSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.isBatteryCharging(),\n syncGetter: () => RNDeviceInfo.isBatteryChargingSync(),\n defaultValue: false,\n});\n\nexport async function isLandscape() {\n return Promise.resolve(isLandscapeSync());\n}\n\nexport function isLandscapeSync() {\n const { height, width } = Dimensions.get('window');\n return width >= height;\n}\n\nexport const [isAirplaneMode, isAirplaneModeSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'web'],\n getter: () => RNDeviceInfo.isAirplaneMode(),\n syncGetter: () => RNDeviceInfo.isAirplaneModeSync(),\n defaultValue: false,\n});\n\nexport const getDeviceType = () => {\n return getSupportedPlatformInfoSync({\n memoKey: 'deviceType',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.deviceType,\n });\n};\n\nexport const getDeviceTypeSync = () => {\n return getSupportedPlatformInfoSync({\n memoKey: 'deviceType',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.deviceType,\n });\n};\n\nexport const [supportedAbis, supportedAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supportedAbis',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getSupportedAbis(),\n syncGetter: () => RNDeviceInfo.getSupportedAbisSync(),\n defaultValue: [] as string[],\n});\n\nexport const [supported32BitAbis, supported32BitAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supported32BitAbis',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSupported32BitAbis(),\n syncGetter: () => RNDeviceInfo.getSupported32BitAbisSync(),\n defaultValue: [] as string[],\n});\n\nexport const [supported64BitAbis, supported64BitAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supported64BitAbis',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSupported64BitAbis(),\n syncGetter: () => RNDeviceInfo.getSupported64BitAbisSync(),\n defaultValue: [],\n});\n\nexport async function hasSystemFeature(feature: string) {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.hasSystemFeature(feature);\n }\n return false;\n}\n\nexport function hasSystemFeatureSync(feature: string) {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.hasSystemFeatureSync(feature);\n }\n return false;\n}\n\nexport function isLowBatteryLevel(level: number): boolean {\n if (Platform.OS === 'android') {\n return level < 0.15;\n }\n return level < 0.2;\n}\n\nexport const [\n getSystemAvailableFeatures,\n getSystemAvailableFeaturesSync,\n] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSystemAvailableFeatures(),\n syncGetter: () => RNDeviceInfo.getSystemAvailableFeaturesSync(),\n defaultValue: [] as string[],\n});\n\nexport const [isLocationEnabled, isLocationEnabledSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'web'],\n getter: () => RNDeviceInfo.isLocationEnabled(),\n syncGetter: () => RNDeviceInfo.isLocationEnabledSync(),\n defaultValue: false,\n});\n\nexport const [isHeadphonesConnected, isHeadphonesConnectedSync] = getSupportedPlatformInfoFunctions(\n {\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.isHeadphonesConnected(),\n syncGetter: () => RNDeviceInfo.isHeadphonesConnectedSync(),\n defaultValue: false,\n }\n);\n\nexport const [isMouseConnected, isMouseConnectedSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isMouseConnected(),\n syncGetter: () => RNDeviceInfo.isMouseConnectedSync(),\n defaultValue: false,\n});\n\nexport const [isKeyboardConnected, isKeyboardConnectedSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isKeyboardConnected(),\n syncGetter: () => RNDeviceInfo.isKeyboardConnectedSync(),\n defaultValue: false,\n});\n\nexport const isTabletMode = () =>\n getSupportedPlatformInfoAsync({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isTabletMode(),\n defaultValue: false,\n });\n\nexport const [\n getAvailableLocationProviders,\n getAvailableLocationProvidersSync,\n] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.getAvailableLocationProviders(),\n syncGetter: () => RNDeviceInfo.getAvailableLocationProvidersSync(),\n defaultValue: {},\n});\n\nexport const [getBrightness, getBrightnessSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['ios'],\n getter: () => RNDeviceInfo.getBrightness(),\n syncGetter: () => RNDeviceInfo.getBrightnessSync(),\n defaultValue: -1,\n});\n\nexport async function getDeviceToken() {\n if (Platform.OS === 'ios') {\n return RNDeviceInfo.getDeviceToken();\n }\n return 'unknown';\n}\n\nconst deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);\nexport function useBatteryLevel(): number | null {\n const [batteryLevel, setBatteryLevel] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBatteryLevel();\n setBatteryLevel(initialValue);\n };\n\n const onChange = (level: number) => {\n setBatteryLevel(level);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_batteryLevelDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return batteryLevel;\n}\n\nexport function useBatteryLevelIsLow(): number | null {\n const [batteryLevelIsLow, setBatteryLevelIsLow] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBatteryLevel();\n isLowBatteryLevel(initialValue) && setBatteryLevelIsLow(initialValue);\n };\n\n setInitialValue();\n\n const onChange = (level: number) => {\n setBatteryLevelIsLow(level);\n };\n\n const subscription = deviceInfoEmitter.addListener('RNDeviceInfo_batteryLevelIsLow', onChange);\n\n return () => subscription.remove();\n }, []);\n\n return batteryLevelIsLow;\n}\n\nexport function usePowerState(): Partial {\n const [powerState, setPowerState] = useState>({});\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: Partial = await getPowerState();\n setPowerState(initialValue);\n };\n\n const onChange = (state: PowerState) => {\n setPowerState(state);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_powerStateDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return powerState;\n}\n\nexport function useIsHeadphonesConnected(): AsyncHookResult {\n return useOnEvent('RNDeviceInfo_headphoneConnectionDidChange', isHeadphonesConnected, false);\n}\n\nexport function useFirstInstallTime(): AsyncHookResult {\n return useOnMount(getFirstInstallTime, -1);\n}\n\nexport function useDeviceName(): AsyncHookResult {\n return useOnMount(getDeviceName, 'unknown');\n}\n\nexport function useHasSystemFeature(feature: string): AsyncHookResult {\n const asyncGetter = useCallback(() => hasSystemFeature(feature), [feature]);\n return useOnMount(asyncGetter, false);\n}\n\nexport function useIsEmulator(): AsyncHookResult {\n return useOnMount(isEmulator, false);\n}\n\nexport function useManufacturer(): AsyncHookResult {\n return useOnMount(getManufacturer, 'unknown');\n}\n\nexport function useBrightness(): number | null {\n const [brightness, setBrightness] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBrightness();\n setBrightness(initialValue);\n };\n\n const onChange = (value: number) => {\n setBrightness(value);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_brightnessDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return brightness;\n}\n\nexport type { AsyncHookResult, DeviceType, LocationProviderInfo, PowerState };\n\nconst DeviceInfo: DeviceInfoModule = {\n getAndroidId,\n getAndroidIdSync,\n getApiLevel,\n getApiLevelSync,\n getApplicationName,\n getAvailableLocationProviders,\n getAvailableLocationProvidersSync,\n getBaseOs,\n getBaseOsSync,\n getBatteryLevel,\n getBatteryLevelSync,\n getBootloader,\n getBootloaderSync,\n getBrand,\n getBuildId,\n getBuildIdSync,\n getBuildNumber,\n getBundleId,\n getCarrier,\n getCarrierSync,\n getCodename,\n getCodenameSync,\n getDevice,\n getDeviceId,\n getDeviceName,\n getDeviceNameSync,\n getDeviceSync,\n getDeviceToken,\n getDeviceType,\n getDisplay,\n getDisplaySync,\n getFingerprint,\n getFingerprintSync,\n getFirstInstallTime,\n getFirstInstallTimeSync,\n getFontScale,\n getFontScaleSync,\n getFreeDiskStorage,\n getFreeDiskStorageOld,\n getFreeDiskStorageSync,\n getFreeDiskStorageOldSync,\n getHardware,\n getHardwareSync,\n getHost,\n getHostSync,\n getIncremental,\n getIncrementalSync,\n getInstallerPackageName,\n getInstallerPackageNameSync,\n getInstallReferrer,\n getInstallReferrerSync,\n getInstanceId,\n getInstanceIdSync,\n getIpAddress,\n getIpAddressSync,\n getLastUpdateTime,\n getLastUpdateTimeSync,\n getMacAddress,\n getMacAddressSync,\n getManufacturer,\n getManufacturerSync,\n getMaxMemory,\n getMaxMemorySync,\n getModel,\n getPhoneNumber,\n getPhoneNumberSync,\n getPowerState,\n getPowerStateSync,\n getPreviewSdkInt,\n getPreviewSdkIntSync,\n getProduct,\n getProductSync,\n getReadableVersion,\n getSecurityPatch,\n getSecurityPatchSync,\n getSerialNumber,\n getSerialNumberSync,\n getSystemAvailableFeatures,\n getSystemAvailableFeaturesSync,\n getSystemName,\n getSystemVersion,\n getTags,\n getTagsSync,\n getTotalDiskCapacity,\n getTotalDiskCapacityOld,\n getTotalDiskCapacitySync,\n getTotalDiskCapacityOldSync,\n getTotalMemory,\n getTotalMemorySync,\n getType,\n getTypeSync,\n getUniqueId,\n getUniqueIdSync,\n getUsedMemory,\n getUsedMemorySync,\n getUserAgent,\n getUserAgentSync,\n getVersion,\n getBrightness,\n getBrightnessSync,\n hasGms,\n hasGmsSync,\n hasHms,\n hasHmsSync,\n hasNotch,\n hasDynamicIsland,\n hasSystemFeature,\n hasSystemFeatureSync,\n isAirplaneMode,\n isAirplaneModeSync,\n isBatteryCharging,\n isBatteryChargingSync,\n isCameraPresent,\n isCameraPresentSync,\n isEmulator,\n isEmulatorSync,\n isHeadphonesConnected,\n isHeadphonesConnectedSync,\n isLandscape,\n isLandscapeSync,\n isLocationEnabled,\n isLocationEnabledSync,\n isPinOrFingerprintSet,\n isPinOrFingerprintSetSync,\n isMouseConnected,\n isMouseConnectedSync,\n isKeyboardConnected,\n isKeyboardConnectedSync,\n isTabletMode,\n isTablet,\n supported32BitAbis,\n supported32BitAbisSync,\n supported64BitAbis,\n supported64BitAbisSync,\n supportedAbis,\n supportedAbisSync,\n syncUniqueId,\n useBatteryLevel,\n useBatteryLevelIsLow,\n useDeviceName,\n useFirstInstallTime,\n useHasSystemFeature,\n useIsEmulator,\n usePowerState,\n useManufacturer,\n useIsHeadphonesConnected,\n useBrightness,\n};\n\nexport default DeviceInfo;\n"]} +\ No newline at end of file ++{"version":3,"sources":["index.ts"],"names":["useCallback","useEffect","useState","Dimensions","NativeEventEmitter","Platform","useOnEvent","useOnMount","devicesWithDynamicIsland","devicesWithNotch","RNDeviceInfo","getSupportedPlatformInfoAsync","getSupportedPlatformInfoFunctions","getSupportedPlatformInfoSync","constants","getConstants","undefined","getUniqueId","getUniqueIdSync","memoKey","supportedPlatforms","getter","syncGetter","defaultValue","uniqueId","syncUniqueId","OS","getInstanceId","getInstanceIdSync","getSerialNumber","getSerialNumberSync","getAndroidId","getAndroidIdSync","getIpAddress","getIpAddressSync","isCameraPresent","isCameraPresentSync","getMacAddress","getMacAddressSync","getDeviceId","deviceId","getManufacturer","getManufacturerSync","Promise","resolve","getSystemManufacturer","getSystemManufacturerSync","getModel","model","getBrand","brand","getSystemName","select","ios","systemName","android","windows","default","getSystemVersion","systemVersion","getBuildId","getBuildIdSync","getApiLevel","getApiLevelSync","getBundleId","bundleId","getInstallerPackageName","getInstallerPackageNameSync","getApplicationName","appName","getBuildNumber","buildNumber","getVersion","appVersion","getReadableVersion","getDeviceName","getDeviceNameSync","getUsedMemory","getUsedMemorySync","getUserAgent","getUserAgentSync","getFontScale","getFontScaleSync","getBootloader","getBootloaderSync","getDevice","getDeviceSync","getDisplay","getDisplaySync","getFingerprint","getFingerprintSync","getHardware","getHardwareSync","getHost","getHostSync","getProduct","getProductSync","getTags","getTagsSync","getType","getTypeSync","getBaseOs","getBaseOsSync","getPreviewSdkInt","getPreviewSdkIntSync","getSecurityPatch","getSecurityPatchSync","getCodename","getCodenameSync","getIncremental","getIncrementalSync","isEmulator","isEmulatorSync","isTablet","isDisplayZoomed","isPinOrFingerprintSet","isPinOrFingerprintSetSync","notch","hasNotch","console","log","_brand","_model","findIndex","item","toLowerCase","dynamicIsland","hasDynamicIsland","hasGms","hasGmsSync","hasHms","hasHmsSync","getFirstInstallTime","getFirstInstallTimeSync","getInstallReferrer","getInstallReferrerSync","getLastUpdateTime","getLastUpdateTimeSync","getPhoneNumber","getPhoneNumberSync","getCarrier","getCarrierSync","getTotalMemory","getTotalMemorySync","getMaxMemory","getMaxMemorySync","getTotalDiskCapacity","getTotalDiskCapacitySync","getTotalDiskCapacityOld","getTotalDiskCapacityOldSync","getFreeDiskStorage","getFreeDiskStorageSync","getFreeDiskStorageOld","getFreeDiskStorageOldSync","getBatteryLevel","getBatteryLevelSync","getPowerState","getPowerStateSync","isBatteryCharging","isBatteryChargingSync","isLandscape","isLandscapeSync","height","width","get","isAirplaneMode","isAirplaneModeSync","getDeviceType","deviceType","getDeviceTypeSync","supportedAbis","supportedAbisSync","getSupportedAbis","getSupportedAbisSync","supported32BitAbis","supported32BitAbisSync","getSupported32BitAbis","getSupported32BitAbisSync","supported64BitAbis","supported64BitAbisSync","getSupported64BitAbis","getSupported64BitAbisSync","hasSystemFeature","feature","hasSystemFeatureSync","isLowBatteryLevel","level","getSystemAvailableFeatures","getSystemAvailableFeaturesSync","isLocationEnabled","isLocationEnabledSync","isHeadphonesConnected","isHeadphonesConnectedSync","isMouseConnected","isMouseConnectedSync","isKeyboardConnected","isKeyboardConnectedSync","isTabletMode","getAvailableLocationProviders","getAvailableLocationProvidersSync","getBrightness","getBrightnessSync","getDeviceToken","deviceInfoEmitter","useBatteryLevel","batteryLevel","setBatteryLevel","setInitialValue","initialValue","onChange","subscription","addListener","remove","useBatteryLevelIsLow","batteryLevelIsLow","setBatteryLevelIsLow","usePowerState","powerState","setPowerState","state","useIsHeadphonesConnected","useFirstInstallTime","useDeviceName","useHasSystemFeature","asyncGetter","useIsEmulator","useManufacturer","useBrightness","brightness","setBrightness","value","DeviceInfo"],"mappings":"AAAA,SAASA,WAAT,EAAsBC,SAAtB,EAAiCC,QAAjC,QAAiD,OAAjD;AACA,SAASC,UAAT,EAAqBC,kBAArB,EAAyCC,QAAzC,QAAyD,cAAzD;AACA,SAASC,UAAT,EAAqBC,UAArB,QAAuC,8BAAvC;AACA,OAAOC,wBAAP,MAAqC,qCAArC;AACA,OAAOC,gBAAP,MAA6B,6BAA7B;AACA,OAAOC,YAAP,MAAyB,4BAAzB;AACA,SACEC,6BADF,EAEEC,iCAFF,EAGEC,4BAHF,QAIO,oCAJP;AAaA,IAAIC,SAAJ;;AAEA,SAASC,YAAT,GAAwB;AACtB,MAAID,SAAS,KAAKE,SAAlB,EAA6B;AAC3BF,IAAAA,SAAS,GAAGJ,YAAY,CAACK,YAAb,EAAZ;AACD;;AACD,SAAOD,SAAP;AACD;;AAED,OAAO,MAAM,CAACG,WAAD,EAAcC,eAAd,IAAiCN,iCAAiC,CAAC;AAC9EO,EAAAA,OAAO,EAAE,UADqE;AAE9EC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAF0D;AAG9EC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACO,WAAb,EAHgE;AAI9EK,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACQ,eAAb,EAJ4D;AAK9EK,EAAAA,YAAY,EAAE;AALgE,CAAD,CAAxE;AAQP,IAAIC,QAAJ;AACA,OAAO,eAAeC,YAAf,GAA8B;AACnC,MAAIpB,QAAQ,CAACqB,EAAT,KAAgB,KAApB,EAA2B;AACzBF,IAAAA,QAAQ,GAAG,MAAMd,YAAY,CAACe,YAAb,EAAjB;AACD,GAFD,MAEO;AACLD,IAAAA,QAAQ,GAAG,MAAMP,WAAW,EAA5B;AACD;;AACD,SAAOO,QAAP;AACD;AAED,OAAO,MAAM,CAACG,aAAD,EAAgBC,iBAAhB,IAAqChB,iCAAiC,CAAC;AAClFO,EAAAA,OAAO,EAAE,YADyE;AAElFC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAF8D;AAGlFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACiB,aAAb,EAHoE;AAIlFL,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACkB,iBAAb,EAJgE;AAKlFL,EAAAA,YAAY,EAAE;AALoE,CAAD,CAA5E;AAQP,OAAO,MAAM,CAACM,eAAD,EAAkBC,mBAAlB,IAAyClB,iCAAiC,CAAC;AACtFO,EAAAA,OAAO,EAAE,cAD6E;AAEtFC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,SAAZ,CAFkE;AAGtFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACmB,eAAb,EAHwE;AAItFP,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACoB,mBAAb,EAJoE;AAKtFP,EAAAA,YAAY,EAAE;AALwE,CAAD,CAAhF;AAQP,OAAO,MAAM,CAACQ,YAAD,EAAeC,gBAAf,IAAmCpB,iCAAiC,CAAC;AAChFO,EAAAA,OAAO,EAAE,WADuE;AAEhFC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAF4D;AAGhFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACqB,YAAb,EAHkE;AAIhFT,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACsB,gBAAb,EAJ8D;AAKhFT,EAAAA,YAAY,EAAE;AALkE,CAAD,CAA1E;AAQP,OAAO,MAAM,CAACU,YAAD,EAAeC,gBAAf,IAAmCtB,iCAAiC,CAAC;AAChFQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAD4D;AAEhFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACuB,YAAb,EAFkE;AAGhFX,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACwB,gBAAb,EAH8D;AAIhFX,EAAAA,YAAY,EAAE;AAJkE,CAAD,CAA1E;AAOP,OAAO,MAAM,CAACY,eAAD,EAAkBC,mBAAlB,IAAyCxB,iCAAiC,CAAC;AACtFQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,SAAZ,EAAuB,KAAvB,CADkE;AAEtFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACyB,eAAb,EAFwE;AAGtFb,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC0B,mBAAb,EAHoE;AAItFb,EAAAA,YAAY,EAAE;AAJwE,CAAD,CAAhF;AAOP,OAAO,eAAec,aAAf,GAA+B;AACpC,MAAIhC,QAAQ,CAACqB,EAAT,KAAgB,SAApB,EAA+B;AAC7B,WAAOhB,YAAY,CAAC2B,aAAb,EAAP;AACD,GAFD,MAEO,IAAIhC,QAAQ,CAACqB,EAAT,KAAgB,KAApB,EAA2B;AAChC,WAAO,mBAAP;AACD;;AACD,SAAO,SAAP;AACD;AAED,OAAO,SAASY,iBAAT,GAA6B;AAClC,MAAIjC,QAAQ,CAACqB,EAAT,KAAgB,SAApB,EAA+B;AAC7B,WAAOhB,YAAY,CAAC4B,iBAAb,EAAP;AACD,GAFD,MAEO,IAAIjC,QAAQ,CAACqB,EAAT,KAAgB,KAApB,EAA2B;AAChC,WAAO,mBAAP;AACD;;AACD,SAAO,SAAP;AACD;AAED,OAAO,MAAMa,WAAW,GAAG,MACzB1B,4BAA4B,CAAC;AAC3BU,EAAAA,YAAY,EAAE,SADa;AAE3BJ,EAAAA,OAAO,EAAE,UAFkB;AAG3BE,EAAAA,MAAM,EAAE,MAAMN,YAAY,GAAGyB,QAHF;AAI3BpB,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB;AAJO,CAAD,CADvB;AAQP,OAAO,MAAM,CAACqB,eAAD,EAAkBC,mBAAlB,IAAyC9B,iCAAiC,CAAC;AACtFO,EAAAA,OAAO,EAAE,cAD6E;AAEtFC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAFkE;AAGtFC,EAAAA,MAAM,EAAE,MACNhB,QAAQ,CAACqB,EAAT,IAAe,KAAf,GAAuBiB,OAAO,CAACC,OAAR,CAAgB,OAAhB,CAAvB,GAAkDlC,YAAY,CAACmC,qBAAb,EAJkC;AAKtFvB,EAAAA,UAAU,EAAE,MAAOjB,QAAQ,CAACqB,EAAT,IAAe,KAAf,GAAuB,OAAvB,GAAiChB,YAAY,CAACoC,yBAAb,EALkC;AAMtFvB,EAAAA,YAAY,EAAE;AANwE,CAAD,CAAhF;AASP,OAAO,MAAMwB,QAAQ,GAAG,MACtBlC,4BAA4B,CAAC;AAC3BM,EAAAA,OAAO,EAAE,OADkB;AAE3BI,EAAAA,YAAY,EAAE,SAFa;AAG3BH,EAAAA,kBAAkB,EAAE,CAAC,KAAD,EAAQ,SAAR,EAAmB,SAAnB,CAHO;AAI3BC,EAAAA,MAAM,EAAE,MAAMN,YAAY,GAAGiC;AAJF,CAAD,CADvB;AAQP,OAAO,MAAMC,QAAQ,GAAG,MACtBpC,4BAA4B,CAAC;AAC3BM,EAAAA,OAAO,EAAE,OADkB;AAE3BC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAFO;AAG3BG,EAAAA,YAAY,EAAE,SAHa;AAI3BF,EAAAA,MAAM,EAAE,MAAMN,YAAY,GAAGmC;AAJF,CAAD,CADvB;AAQP,OAAO,MAAMC,aAAa,GAAG,MAC3BtC,4BAA4B,CAAC;AAC3BU,EAAAA,YAAY,EAAE,SADa;AAE3BH,EAAAA,kBAAkB,EAAE,CAAC,KAAD,EAAQ,SAAR,EAAmB,SAAnB,CAFO;AAG3BD,EAAAA,OAAO,EAAE,YAHkB;AAI3BE,EAAAA,MAAM,EAAE,MACNhB,QAAQ,CAAC+C,MAAT,CAAgB;AACdC,IAAAA,GAAG,EAAEtC,YAAY,GAAGuC,UADN;AAEdC,IAAAA,OAAO,EAAE,SAFK;AAGdC,IAAAA,OAAO,EAAE,SAHK;AAIdC,IAAAA,OAAO,EAAE;AAJK,GAAhB;AALyB,CAAD,CADvB;AAcP,OAAO,MAAMC,gBAAgB,GAAG,MAC9B7C,4BAA4B,CAAC;AAC3BU,EAAAA,YAAY,EAAE,SADa;AAE3BF,EAAAA,MAAM,EAAE,MAAMN,YAAY,GAAG4C,aAFF;AAG3BvC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAHO;AAI3BD,EAAAA,OAAO,EAAE;AAJkB,CAAD,CADvB;AAQP,OAAO,MAAM,CAACyC,UAAD,EAAaC,cAAb,IAA+BjD,iCAAiC,CAAC;AAC5EO,EAAAA,OAAO,EAAE,SADmE;AAE5EC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAFwD;AAG5EC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACkD,UAAb,EAH8D;AAI5EtC,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACmD,cAAb,EAJ0D;AAK5EtC,EAAAA,YAAY,EAAE;AAL8D,CAAD,CAAtE;AAQP,OAAO,MAAM,CAACuC,WAAD,EAAcC,eAAd,IAAiCnD,iCAAiC,CAAC;AAC9EO,EAAAA,OAAO,EAAE,UADqE;AAE9EC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAF0D;AAG9EC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACoD,WAAb,EAHgE;AAI9ExC,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACqD,eAAb,EAJ4D;AAK9ExC,EAAAA,YAAY,EAAE,CAAC;AAL+D,CAAD,CAAxE;AAQP,OAAO,MAAMyC,WAAW,GAAG,MACzBnD,4BAA4B,CAAC;AAC3BM,EAAAA,OAAO,EAAE,UADkB;AAE3BC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAFO;AAG3BG,EAAAA,YAAY,EAAE,SAHa;AAI3BF,EAAAA,MAAM,EAAE,MAAMN,YAAY,GAAGkD;AAJF,CAAD,CADvB;AAQP,OAAO,MAAM,CACXC,uBADW,EAEXC,2BAFW,IAGTvD,iCAAiC,CAAC;AACpCO,EAAAA,OAAO,EAAE,sBAD2B;AAEpCC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,SAAZ,EAAuB,KAAvB,CAFgB;AAGpCC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACwD,uBAAb,EAHsB;AAIpC5C,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACyD,2BAAb,EAJkB;AAKpC5C,EAAAA,YAAY,EAAE;AALsB,CAAD,CAH9B;AAWP,OAAO,MAAM6C,kBAAkB,GAAG,MAChCvD,4BAA4B,CAAC;AAC3BM,EAAAA,OAAO,EAAE,SADkB;AAE3BI,EAAAA,YAAY,EAAE,SAFa;AAG3BF,EAAAA,MAAM,EAAE,MAAMN,YAAY,GAAGsD,OAHF;AAI3BjD,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB;AAJO,CAAD,CADvB;AAQP,OAAO,MAAMkD,cAAc,GAAG,MAC5BzD,4BAA4B,CAAC;AAC3BM,EAAAA,OAAO,EAAE,aADkB;AAE3BC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAFO;AAG3BC,EAAAA,MAAM,EAAE,MAAMN,YAAY,GAAGwD,WAHF;AAI3BhD,EAAAA,YAAY,EAAE;AAJa,CAAD,CADvB;AAQP,OAAO,MAAMiD,UAAU,GAAG,MACxB3D,4BAA4B,CAAC;AAC3BM,EAAAA,OAAO,EAAE,SADkB;AAE3BI,EAAAA,YAAY,EAAE,SAFa;AAG3BH,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAHO;AAI3BC,EAAAA,MAAM,EAAE,MAAMN,YAAY,GAAG0D;AAJF,CAAD,CADvB;AAQP,OAAO,SAASC,kBAAT,GAA8B;AACnC,SAAOF,UAAU,KAAK,GAAf,GAAqBF,cAAc,EAA1C;AACD;AAED,OAAO,MAAM,CAACK,aAAD,EAAgBC,iBAAhB,IAAqChE,iCAAiC,CAAC;AAClFQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAD8D;AAElFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACiE,aAAb,EAFoE;AAGlFrD,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACkE,iBAAb,EAHgE;AAIlFrD,EAAAA,YAAY,EAAE;AAJoE,CAAD,CAA5E;AAOP,OAAO,MAAM,CAACsD,aAAD,EAAgBC,iBAAhB,IAAqClE,iCAAiC,CAAC;AAClFQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,EAA8B,KAA9B,CAD8D;AAElFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACmE,aAAb,EAFoE;AAGlFvD,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACoE,iBAAb,EAHgE;AAIlFvD,EAAAA,YAAY,EAAE,CAAC;AAJmE,CAAD,CAA5E;AAOP,OAAO,MAAMwD,YAAY,GAAG,MAC1BpE,6BAA6B,CAAC;AAC5BQ,EAAAA,OAAO,EAAE,WADmB;AAE5BI,EAAAA,YAAY,EAAE,SAFc;AAG5BH,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,KAAnB,CAHQ;AAI5BC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACqE,YAAb;AAJc,CAAD,CADxB;AAQP,OAAO,MAAMC,gBAAgB,GAAG,MAC9BnE,4BAA4B,CAAC;AAC3BM,EAAAA,OAAO,EAAE,eADkB;AAE3BI,EAAAA,YAAY,EAAE,SAFa;AAG3BH,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,CAHO;AAI3BC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACsE,gBAAb;AAJa,CAAD,CADvB;AAQP,OAAO,MAAM,CAACC,YAAD,EAAeC,gBAAf,IAAmCtE,iCAAiC,CAAC;AAChFQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAD4D;AAEhFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACuE,YAAb,EAFkE;AAGhF3D,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACwE,gBAAb,EAH8D;AAIhF3D,EAAAA,YAAY,EAAE,CAAC;AAJiE,CAAD,CAA1E;AAOP,OAAO,MAAM,CAAC4D,aAAD,EAAgBC,iBAAhB,IAAqCxE,iCAAiC,CAAC;AAClFO,EAAAA,OAAO,EAAE,YADyE;AAElFC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAF8D;AAGlFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACyE,aAAb,EAHoE;AAIlF7D,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC0E,iBAAb,EAJgE;AAKlF7D,EAAAA,YAAY,EAAE;AALoE,CAAD,CAA5E;AAQP,OAAO,MAAM,CAAC8D,SAAD,EAAYC,aAAZ,IAA6B1E,iCAAiC,CAAC;AAC1ES,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC2E,SAAb,EAD4D;AAE1E/D,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC4E,aAAb,EAFwD;AAG1E/D,EAAAA,YAAY,EAAE,SAH4D;AAI1EJ,EAAAA,OAAO,EAAE,QAJiE;AAK1EC,EAAAA,kBAAkB,EAAE,CAAC,SAAD;AALsD,CAAD,CAApE;AAQP,OAAO,MAAM,CAACmE,UAAD,EAAaC,cAAb,IAA+B5E,iCAAiC,CAAC;AAC5EO,EAAAA,OAAO,EAAE,SADmE;AAE5EC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAFwD;AAG5EC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC6E,UAAb,EAH8D;AAI5EjE,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC8E,cAAb,EAJ0D;AAK5EjE,EAAAA,YAAY,EAAE;AAL8D,CAAD,CAAtE;AAQP,OAAO,MAAM,CAACkE,cAAD,EAAiBC,kBAAjB,IAAuC9E,iCAAiC,CAAC;AACpFO,EAAAA,OAAO,EAAE,aAD2E;AAEpFC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAFgE;AAGpFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC+E,cAAb,EAHsE;AAIpFnE,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACgF,kBAAb,EAJkE;AAKpFnE,EAAAA,YAAY,EAAE;AALsE,CAAD,CAA9E;AAQP,OAAO,MAAM,CAACoE,WAAD,EAAcC,eAAd,IAAiChF,iCAAiC,CAAC;AAC9EO,EAAAA,OAAO,EAAE,UADqE;AAE9EC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAF0D;AAG9EC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACiF,WAAb,EAHgE;AAI9ErE,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACkF,eAAb,EAJ4D;AAK9ErE,EAAAA,YAAY,EAAE;AALgE,CAAD,CAAxE;AAQP,OAAO,MAAM,CAACsE,OAAD,EAAUC,WAAV,IAAyBlF,iCAAiC,CAAC;AACtEO,EAAAA,OAAO,EAAE,MAD6D;AAEtEC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAFkD;AAGtEC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACmF,OAAb,EAHwD;AAItEvE,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACoF,WAAb,EAJoD;AAKtEvE,EAAAA,YAAY,EAAE;AALwD,CAAD,CAAhE;AAQP,OAAO,MAAM,CAACwE,UAAD,EAAaC,cAAb,IAA+BpF,iCAAiC,CAAC;AAC5EO,EAAAA,OAAO,EAAE,SADmE;AAE5EC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAFwD;AAG5EC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACqF,UAAb,EAH8D;AAI5EzE,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACsF,cAAb,EAJ0D;AAK5EzE,EAAAA,YAAY,EAAE;AAL8D,CAAD,CAAtE;AAQP,OAAO,MAAM,CAAC0E,OAAD,EAAUC,WAAV,IAAyBtF,iCAAiC,CAAC;AACtEO,EAAAA,OAAO,EAAE,MAD6D;AAEtEC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAFkD;AAGtEC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACuF,OAAb,EAHwD;AAItE3E,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACwF,WAAb,EAJoD;AAKtE3E,EAAAA,YAAY,EAAE;AALwD,CAAD,CAAhE;AAQP,OAAO,MAAM,CAAC4E,OAAD,EAAUC,WAAV,IAAyBxF,iCAAiC,CAAC;AACtEO,EAAAA,OAAO,EAAE,MAD6D;AAEtEC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAFkD;AAGtEC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACyF,OAAb,EAHwD;AAItE7E,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC0F,WAAb,EAJoD;AAKtE7E,EAAAA,YAAY,EAAE;AALwD,CAAD,CAAhE;AAQP,OAAO,MAAM,CAAC8E,SAAD,EAAYC,aAAZ,IAA6B1F,iCAAiC,CAAC;AAC1EO,EAAAA,OAAO,EAAE,QADiE;AAE1EC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAFsD;AAG1EC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC2F,SAAb,EAH4D;AAI1E/E,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC4F,aAAb,EAJwD;AAK1E/E,EAAAA,YAAY,EAAE;AAL4D,CAAD,CAApE;AAQP,OAAO,MAAM,CAACgF,gBAAD,EAAmBC,oBAAnB,IAA2C5F,iCAAiC,CAAC;AACxFO,EAAAA,OAAO,EAAE,eAD+E;AAExFC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAFoE;AAGxFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC6F,gBAAb,EAH0E;AAIxFjF,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC8F,oBAAb,EAJsE;AAKxFjF,EAAAA,YAAY,EAAE,CAAC;AALyE,CAAD,CAAlF;AAQP,OAAO,MAAM,CAACkF,gBAAD,EAAmBC,oBAAnB,IAA2C9F,iCAAiC,CAAC;AACxFO,EAAAA,OAAO,EAAE,eAD+E;AAExFC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAFoE;AAGxFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC+F,gBAAb,EAH0E;AAIxFnF,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACgG,oBAAb,EAJsE;AAKxFnF,EAAAA,YAAY,EAAE;AAL0E,CAAD,CAAlF;AAQP,OAAO,MAAM,CAACoF,WAAD,EAAcC,eAAd,IAAiChG,iCAAiC,CAAC;AAC9EO,EAAAA,OAAO,EAAE,UADqE;AAE9EC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAF0D;AAG9EC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACiG,WAAb,EAHgE;AAI9ErF,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACkG,eAAb,EAJ4D;AAK9ErF,EAAAA,YAAY,EAAE;AALgE,CAAD,CAAxE;AAQP,OAAO,MAAM,CAACsF,cAAD,EAAiBC,kBAAjB,IAAuClG,iCAAiC,CAAC;AACpFO,EAAAA,OAAO,EAAE,aAD2E;AAEpFC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAFgE;AAGpFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACmG,cAAb,EAHsE;AAIpFvF,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACoG,kBAAb,EAJkE;AAKpFvF,EAAAA,YAAY,EAAE;AALsE,CAAD,CAA9E;AAQP,OAAO,MAAM,CAACwF,UAAD,EAAaC,cAAb,IAA+BpG,iCAAiC,CAAC;AAC5EO,EAAAA,OAAO,EAAE,UADmE;AAE5EC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAFwD;AAG5EC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACqG,UAAb,EAH8D;AAI5EzF,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACsG,cAAb,EAJ0D;AAK5EzF,EAAAA,YAAY,EAAE;AAL8D,CAAD,CAAtE;AAQP,OAAO,MAAM0F,QAAQ,GAAG,MACtBpG,4BAA4B,CAAC;AAC3BU,EAAAA,YAAY,EAAE,KADa;AAE3BH,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAFO;AAG3BD,EAAAA,OAAO,EAAE,QAHkB;AAI3BE,EAAAA,MAAM,EAAE,MAAMN,YAAY,GAAGkG;AAJF,CAAD,CADvB;AAQP,OAAO,MAAMC,eAAe,GAAG,MAC7BrG,4BAA4B,CAAC;AAC3BU,EAAAA,YAAY,EAAE,KADa;AAE3BH,EAAAA,kBAAkB,EAAE,CAAC,KAAD,CAFO;AAG3BD,EAAAA,OAAO,EAAE,QAHkB;AAI3BE,EAAAA,MAAM,EAAE,MAAMN,YAAY,GAAGmG;AAJF,CAAD,CADvB;AAQP,OAAO,MAAM,CAACC,qBAAD,EAAwBC,yBAAxB,IAAqDxG,iCAAiC,CACjG;AACEQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CADtB;AAEEC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACyG,qBAAb,EAFhB;AAGE7F,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC0G,yBAAb,EAHpB;AAIE7F,EAAAA,YAAY,EAAE;AAJhB,CADiG,CAA5F;AASP,IAAI8F,KAAJ;AACA,OAAO,SAASC,QAAT,GAAoB;AACzB,MAAID,KAAK,KAAKrG,SAAd,EAAyB;AACvBuG,IAAAA,OAAO,CAACC,GAAR,CAAY9G,YAAZ;;AACA,QAAI+G,MAAM,GAAGxE,QAAQ,EAArB;;AACA,QAAIyE,MAAM,GAAG3E,QAAQ,EAArB;;AACAsE,IAAAA,KAAK,GACH5G,gBAAgB,CAACkH,SAAjB,CACGC,IAAD,IACEA,IAAI,CAAC1E,KAAL,CAAW2E,WAAX,OAA6BJ,MAAM,CAACI,WAAP,EAA7B,IACAD,IAAI,CAAC5E,KAAL,CAAW6E,WAAX,OAA6BH,MAAM,CAACG,WAAP,EAHjC,MAIM,CAAC,CALT;AAMD;;AACD,SAAOR,KAAP;AACD;AAED,IAAIS,aAAJ;AACA,OAAO,SAASC,gBAAT,GAA4B;AACjC,MAAID,aAAa,KAAK9G,SAAtB,EAAiC;AAC/B,QAAIyG,MAAM,GAAGxE,QAAQ,EAArB;;AACA,QAAIyE,MAAM,GAAG3E,QAAQ,EAArB;;AACA+E,IAAAA,aAAa,GACXtH,wBAAwB,CAACmH,SAAzB,CACGC,IAAD,IACEA,IAAI,CAAC1E,KAAL,CAAW2E,WAAX,OAA6BJ,MAAM,CAACI,WAAP,EAA7B,IACAD,IAAI,CAAC5E,KAAL,CAAW6E,WAAX,OAA6BH,MAAM,CAACG,WAAP,EAHjC,MAIM,CAAC,CALT;AAMD;;AACD,SAAOC,aAAP;AACD;AAED,OAAO,MAAM,CAACE,MAAD,EAASC,UAAT,IAAuBrH,iCAAiC,CAAC;AACpEQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CADgD;AAEpEC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACsH,MAAb,EAFsD;AAGpE1G,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACuH,UAAb,EAHkD;AAIpE1G,EAAAA,YAAY,EAAE;AAJsD,CAAD,CAA9D;AAOP,OAAO,MAAM,CAAC2G,MAAD,EAASC,UAAT,IAAuBvH,iCAAiC,CAAC;AACpEQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CADgD;AAEpEC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACwH,MAAb,EAFsD;AAGpE5G,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACyH,UAAb,EAHkD;AAIpE5G,EAAAA,YAAY,EAAE;AAJsD,CAAD,CAA9D;AAOP,OAAO,MAAM,CAAC6G,mBAAD,EAAsBC,uBAAtB,IAAiDzH,iCAAiC,CAAC;AAC9FO,EAAAA,OAAO,EAAE,kBADqF;AAE9FC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAF0E;AAG9FC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC0H,mBAAb,EAHgF;AAI9F9G,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC2H,uBAAb,EAJ4E;AAK9F9G,EAAAA,YAAY,EAAE,CAAC;AAL+E,CAAD,CAAxF;AAQP,OAAO,MAAM,CAAC+G,kBAAD,EAAqBC,sBAArB,IAA+C3H,iCAAiC,CAAC;AAC5FO,EAAAA,OAAO,EAAE,iBADmF;AAE5FC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,SAAZ,EAAuB,KAAvB,CAFwE;AAG5FC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC4H,kBAAb,EAH8E;AAI5FhH,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC6H,sBAAb,EAJ0E;AAK5FhH,EAAAA,YAAY,EAAE;AAL8E,CAAD,CAAtF;AAQP,OAAO,MAAM,CAACiH,iBAAD,EAAoBC,qBAApB,IAA6C7H,iCAAiC,CAAC;AAC1FO,EAAAA,OAAO,EAAE,gBADiF;AAE1FC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAFsE;AAG1FC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC8H,iBAAb,EAH4E;AAI1FlH,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC+H,qBAAb,EAJwE;AAK1FlH,EAAAA,YAAY,EAAE,CAAC;AAL2E,CAAD,CAApF;AAQP,OAAO,MAAM,CAACmH,cAAD,EAAiBC,kBAAjB,IAAuC/H,iCAAiC,CAAC;AACpFQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CADgE;AAEpFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACgI,cAAb,EAFsE;AAGpFpH,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACiI,kBAAb,EAHkE;AAIpFpH,EAAAA,YAAY,EAAE;AAJsE,CAAD,CAA9E;AAOP,OAAO,MAAM,CAACqH,UAAD,EAAaC,cAAb,IAA+BjI,iCAAiC,CAAC;AAC5EQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,CADwD;AAE5EC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACkI,UAAb,EAF8D;AAG5EtH,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACmI,cAAb,EAH0D;AAI5EtH,EAAAA,YAAY,EAAE;AAJ8D,CAAD,CAAtE;AAOP,OAAO,MAAM,CAACuH,cAAD,EAAiBC,kBAAjB,IAAuCnI,iCAAiC,CAAC;AACpFO,EAAAA,OAAO,EAAE,aAD2E;AAEpFC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,EAA8B,KAA9B,CAFgE;AAGpFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACoI,cAAb,EAHsE;AAIpFxH,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACqI,kBAAb,EAJkE;AAKpFxH,EAAAA,YAAY,EAAE,CAAC;AALqE,CAAD,CAA9E;AAQP,OAAO,MAAM,CAACyH,YAAD,EAAeC,gBAAf,IAAmCrI,iCAAiC,CAAC;AAChFO,EAAAA,OAAO,EAAE,WADuE;AAEhFC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,SAAZ,EAAuB,KAAvB,CAF4D;AAGhFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACsI,YAAb,EAHkE;AAIhF1H,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACuI,gBAAb,EAJ8D;AAKhF1H,EAAAA,YAAY,EAAE,CAAC;AALiE,CAAD,CAA1E;AAQP,OAAO,MAAM,CAAC2H,oBAAD,EAAuBC,wBAAvB,IAAmDvI,iCAAiC,CAAC;AAChGQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,EAA8B,KAA9B,CAD4E;AAEhGC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACwI,oBAAb,EAFkF;AAGhG5H,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACyI,wBAAb,EAH8E;AAIhG5H,EAAAA,YAAY,EAAE,CAAC;AAJiF,CAAD,CAA1F;AAOP,OAAO,eAAe6H,uBAAf,GAAyC;AAC9C,MAAI/I,QAAQ,CAACqB,EAAT,KAAgB,SAApB,EAA+B;AAC7B,WAAOhB,YAAY,CAAC0I,uBAAb,EAAP;AACD;;AACD,MAAI/I,QAAQ,CAACqB,EAAT,KAAgB,KAAhB,IAAyBrB,QAAQ,CAACqB,EAAT,KAAgB,SAAzC,IAAsDrB,QAAQ,CAACqB,EAAT,KAAgB,KAA1E,EAAiF;AAC/E,WAAOwH,oBAAoB,EAA3B;AACD;;AAED,SAAO,CAAC,CAAR;AACD;AAED,OAAO,SAASG,2BAAT,GAAuC;AAC5C,MAAIhJ,QAAQ,CAACqB,EAAT,KAAgB,SAApB,EAA+B;AAC7B,WAAOhB,YAAY,CAAC2I,2BAAb,EAAP;AACD;;AACD,MAAIhJ,QAAQ,CAACqB,EAAT,KAAgB,KAAhB,IAAyBrB,QAAQ,CAACqB,EAAT,KAAgB,SAAzC,IAAsDrB,QAAQ,CAACqB,EAAT,KAAgB,KAA1E,EAAiF;AAC/E,WAAOyH,wBAAwB,EAA/B;AACD;;AAED,SAAO,CAAC,CAAR;AACD;AAED,OAAO,MAAM,CAACG,kBAAD,EAAqBC,sBAArB,IAA+C3I,iCAAiC,CAAC;AAC5FQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,EAA8B,KAA9B,CADwE;AAE5FC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC4I,kBAAb,EAF8E;AAG5FhI,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC6I,sBAAb,EAH0E;AAI5FhI,EAAAA,YAAY,EAAE,CAAC;AAJ6E,CAAD,CAAtF;AAOP,OAAO,eAAeiI,qBAAf,GAAuC;AAC5C,MAAInJ,QAAQ,CAACqB,EAAT,KAAgB,SAApB,EAA+B;AAC7B,WAAOhB,YAAY,CAAC8I,qBAAb,EAAP;AACD;;AACD,MAAInJ,QAAQ,CAACqB,EAAT,KAAgB,KAAhB,IAAyBrB,QAAQ,CAACqB,EAAT,KAAgB,SAAzC,IAAsDrB,QAAQ,CAACqB,EAAT,KAAgB,KAA1E,EAAiF;AAC/E,WAAO4H,kBAAkB,EAAzB;AACD;;AAED,SAAO,CAAC,CAAR;AACD;AAED,OAAO,SAASG,yBAAT,GAAqC;AAC1C,MAAIpJ,QAAQ,CAACqB,EAAT,KAAgB,SAApB,EAA+B;AAC7B,WAAOhB,YAAY,CAAC+I,yBAAb,EAAP;AACD;;AACD,MAAIpJ,QAAQ,CAACqB,EAAT,KAAgB,KAAhB,IAAyBrB,QAAQ,CAACqB,EAAT,KAAgB,SAAzC,IAAsDrB,QAAQ,CAACqB,EAAT,KAAgB,KAA1E,EAAiF;AAC/E,WAAO6H,sBAAsB,EAA7B;AACD;;AAED,SAAO,CAAC,CAAR;AACD;AAED,OAAO,MAAM,CAACG,eAAD,EAAkBC,mBAAlB,IAAyC/I,iCAAiC,CAAC;AACtFQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,EAA8B,KAA9B,CADkE;AAEtFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACgJ,eAAb,EAFwE;AAGtFpI,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACiJ,mBAAb,EAHoE;AAItFpI,EAAAA,YAAY,EAAE,CAAC;AAJuE,CAAD,CAAhF;AAOP,OAAO,MAAM,CAACqI,aAAD,EAAgBC,iBAAhB,IAAqCjJ,iCAAiC,CAEjF;AACAQ,EAAAA,kBAAkB,EAAE,CAAC,KAAD,EAAQ,SAAR,EAAmB,SAAnB,EAA8B,KAA9B,CADpB;AAEAC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACkJ,aAAb,EAFd;AAGAtI,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACmJ,iBAAb,EAHlB;AAIAtI,EAAAA,YAAY,EAAE;AAJd,CAFiF,CAA5E;AASP,OAAO,MAAM,CAACuI,iBAAD,EAAoBC,qBAApB,IAA6CnJ,iCAAiC,CAAC;AAC1FQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,EAA8B,KAA9B,CADsE;AAE1FC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACoJ,iBAAb,EAF4E;AAG1FxI,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACqJ,qBAAb,EAHwE;AAI1FxI,EAAAA,YAAY,EAAE;AAJ4E,CAAD,CAApF;AAOP,OAAO,eAAeyI,WAAf,GAA6B;AAClC,SAAOrH,OAAO,CAACC,OAAR,CAAgBqH,eAAe,EAA/B,CAAP;AACD;AAED,OAAO,SAASA,eAAT,GAA2B;AAChC,QAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA;AAAV,MAAoBhK,UAAU,CAACiK,GAAX,CAAe,QAAf,CAA1B;AACA,SAAOD,KAAK,IAAID,MAAhB;AACD;AAED,OAAO,MAAM,CAACG,cAAD,EAAiBC,kBAAjB,IAAuC1J,iCAAiC,CAAC;AACpFQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,CADgE;AAEpFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC2J,cAAb,EAFsE;AAGpF/I,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC4J,kBAAb,EAHkE;AAIpF/I,EAAAA,YAAY,EAAE;AAJsE,CAAD,CAA9E;AAOP,OAAO,MAAMgJ,aAAa,GAAG,MAAM;AACjC,SAAO1J,4BAA4B,CAAC;AAClCM,IAAAA,OAAO,EAAE,YADyB;AAElCC,IAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAFc;AAGlCG,IAAAA,YAAY,EAAE,SAHoB;AAIlCF,IAAAA,MAAM,EAAE,MAAMN,YAAY,GAAGyJ;AAJK,GAAD,CAAnC;AAMD,CAPM;AASP,OAAO,MAAMC,iBAAiB,GAAG,MAAM;AACrC,SAAO5J,4BAA4B,CAAC;AAClCM,IAAAA,OAAO,EAAE,YADyB;AAElCC,IAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAFc;AAGlCG,IAAAA,YAAY,EAAE,SAHoB;AAIlCF,IAAAA,MAAM,EAAE,MAAMN,YAAY,GAAGyJ;AAJK,GAAD,CAAnC;AAMD,CAPM;AASP,OAAO,MAAM,CAACE,aAAD,EAAgBC,iBAAhB,IAAqC/J,iCAAiC,CAAC;AAClFO,EAAAA,OAAO,EAAE,gBADyE;AAElFC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,SAAnB,CAF8D;AAGlFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACkK,gBAAb,EAHoE;AAIlFtJ,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACmK,oBAAb,EAJgE;AAKlFtJ,EAAAA,YAAY,EAAE;AALoE,CAAD,CAA5E;AAQP,OAAO,MAAM,CAACuJ,kBAAD,EAAqBC,sBAArB,IAA+CnK,iCAAiC,CAAC;AAC5FO,EAAAA,OAAO,EAAE,qBADmF;AAE5FC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAFwE;AAG5FC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACsK,qBAAb,EAH8E;AAI5F1J,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACuK,yBAAb,EAJ0E;AAK5F1J,EAAAA,YAAY,EAAE;AAL8E,CAAD,CAAtF;AAQP,OAAO,MAAM,CAAC2J,kBAAD,EAAqBC,sBAArB,IAA+CvK,iCAAiC,CAAC;AAC5FO,EAAAA,OAAO,EAAE,qBADmF;AAE5FC,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAFwE;AAG5FC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC0K,qBAAb,EAH8E;AAI5F9J,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC2K,yBAAb,EAJ0E;AAK5F9J,EAAAA,YAAY,EAAE;AAL8E,CAAD,CAAtF;AAQP,OAAO,eAAe+J,gBAAf,CAAgCC,OAAhC,EAAiD;AACtD,MAAIlL,QAAQ,CAACqB,EAAT,KAAgB,SAApB,EAA+B;AAC7B,WAAOhB,YAAY,CAAC4K,gBAAb,CAA8BC,OAA9B,CAAP;AACD;;AACD,SAAO,KAAP;AACD;AAED,OAAO,SAASC,oBAAT,CAA8BD,OAA9B,EAA+C;AACpD,MAAIlL,QAAQ,CAACqB,EAAT,KAAgB,SAApB,EAA+B;AAC7B,WAAOhB,YAAY,CAAC8K,oBAAb,CAAkCD,OAAlC,CAAP;AACD;;AACD,SAAO,KAAP;AACD;AAED,OAAO,SAASE,iBAAT,CAA2BC,KAA3B,EAAmD;AACxD,MAAIrL,QAAQ,CAACqB,EAAT,KAAgB,SAApB,EAA+B;AAC7B,WAAOgK,KAAK,GAAG,IAAf;AACD;;AACD,SAAOA,KAAK,GAAG,GAAf;AACD;AAED,OAAO,MAAM,CACXC,0BADW,EAEXC,8BAFW,IAGThL,iCAAiC,CAAC;AACpCQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CADgB;AAEpCC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACiL,0BAAb,EAFsB;AAGpCrK,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACkL,8BAAb,EAHkB;AAIpCrK,EAAAA,YAAY,EAAE;AAJsB,CAAD,CAH9B;AAUP,OAAO,MAAM,CAACsK,iBAAD,EAAoBC,qBAApB,IAA6ClL,iCAAiC,CAAC;AAC1FQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,EAAmB,KAAnB,CADsE;AAE1FC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACmL,iBAAb,EAF4E;AAG1FvK,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACoL,qBAAb,EAHwE;AAI1FvK,EAAAA,YAAY,EAAE;AAJ4E,CAAD,CAApF;AAOP,OAAO,MAAM,CAACwK,qBAAD,EAAwBC,yBAAxB,IAAqDpL,iCAAiC,CACjG;AACEQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,CADtB;AAEEC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACqL,qBAAb,EAFhB;AAGEzK,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACsL,yBAAb,EAHpB;AAIEzK,EAAAA,YAAY,EAAE;AAJhB,CADiG,CAA5F;AASP,OAAO,MAAM,CAAC0K,gBAAD,EAAmBC,oBAAnB,IAA2CtL,iCAAiC,CAAC;AACxFQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CADoE;AAExFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACuL,gBAAb,EAF0E;AAGxF3K,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAACwL,oBAAb,EAHsE;AAIxF3K,EAAAA,YAAY,EAAE;AAJ0E,CAAD,CAAlF;AAOP,OAAO,MAAM,CAAC4K,mBAAD,EAAsBC,uBAAtB,IAAiDxL,iCAAiC,CAAC;AAC9FQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CAD0E;AAE9FC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAACyL,mBAAb,EAFgF;AAG9F7K,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC0L,uBAAb,EAH4E;AAI9F7K,EAAAA,YAAY,EAAE;AAJgF,CAAD,CAAxF;AAOP,OAAO,MAAM8K,YAAY,GAAG,MAC1B1L,6BAA6B,CAAC;AAC5BS,EAAAA,kBAAkB,EAAE,CAAC,SAAD,CADQ;AAE5BC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC2L,YAAb,EAFc;AAG5B9K,EAAAA,YAAY,EAAE;AAHc,CAAD,CADxB;AAOP,OAAO,MAAM,CACX+K,6BADW,EAEXC,iCAFW,IAGT3L,iCAAiC,CAAC;AACpCQ,EAAAA,kBAAkB,EAAE,CAAC,SAAD,EAAY,KAAZ,CADgB;AAEpCC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC4L,6BAAb,EAFsB;AAGpChL,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC6L,iCAAb,EAHkB;AAIpChL,EAAAA,YAAY,EAAE;AAJsB,CAAD,CAH9B;AAUP,OAAO,MAAM,CAACiL,aAAD,EAAgBC,iBAAhB,IAAqC7L,iCAAiC,CAAC;AAClFQ,EAAAA,kBAAkB,EAAE,CAAC,KAAD,CAD8D;AAElFC,EAAAA,MAAM,EAAE,MAAMX,YAAY,CAAC8L,aAAb,EAFoE;AAGlFlL,EAAAA,UAAU,EAAE,MAAMZ,YAAY,CAAC+L,iBAAb,EAHgE;AAIlFlL,EAAAA,YAAY,EAAE,CAAC;AAJmE,CAAD,CAA5E;AAOP,OAAO,eAAemL,cAAf,GAAgC;AACrC,MAAIrM,QAAQ,CAACqB,EAAT,KAAgB,KAApB,EAA2B;AACzB,WAAOhB,YAAY,CAACgM,cAAb,EAAP;AACD;;AACD,SAAO,SAAP;AACD;AAED,MAAMC,iBAAiB,GAAG,IAAIvM,kBAAJ,CAAuBM,YAAvB,CAA1B;AACA,OAAO,SAASkM,eAAT,GAA0C;AAC/C,QAAM,CAACC,YAAD,EAAeC,eAAf,IAAkC5M,QAAQ,CAAgB,IAAhB,CAAhD;AAEAD,EAAAA,SAAS,CAAC,MAAM;AACd,UAAM8M,eAAe,GAAG,YAAY;AAClC,YAAMC,YAAoB,GAAG,MAAMtD,eAAe,EAAlD;AACAoD,MAAAA,eAAe,CAACE,YAAD,CAAf;AACD,KAHD;;AAKA,UAAMC,QAAQ,GAAIvB,KAAD,IAAmB;AAClCoB,MAAAA,eAAe,CAACpB,KAAD,CAAf;AACD,KAFD;;AAIAqB,IAAAA,eAAe;AAEf,UAAMG,YAAY,GAAGP,iBAAiB,CAACQ,WAAlB,CACnB,oCADmB,EAEnBF,QAFmB,CAArB;AAKA,WAAO,MAAMC,YAAY,CAACE,MAAb,EAAb;AACD,GAlBQ,EAkBN,EAlBM,CAAT;AAoBA,SAAOP,YAAP;AACD;AAED,OAAO,SAASQ,oBAAT,GAA+C;AACpD,QAAM,CAACC,iBAAD,EAAoBC,oBAApB,IAA4CrN,QAAQ,CAAgB,IAAhB,CAA1D;AAEAD,EAAAA,SAAS,CAAC,MAAM;AACd,UAAM8M,eAAe,GAAG,YAAY;AAClC,YAAMC,YAAoB,GAAG,MAAMtD,eAAe,EAAlD;AACA+B,MAAAA,iBAAiB,CAACuB,YAAD,CAAjB,IAAmCO,oBAAoB,CAACP,YAAD,CAAvD;AACD,KAHD;;AAKAD,IAAAA,eAAe;;AAEf,UAAME,QAAQ,GAAIvB,KAAD,IAAmB;AAClC6B,MAAAA,oBAAoB,CAAC7B,KAAD,CAApB;AACD,KAFD;;AAIA,UAAMwB,YAAY,GAAGP,iBAAiB,CAACQ,WAAlB,CAA8B,gCAA9B,EAAgEF,QAAhE,CAArB;AAEA,WAAO,MAAMC,YAAY,CAACE,MAAb,EAAb;AACD,GAfQ,EAeN,EAfM,CAAT;AAiBA,SAAOE,iBAAP;AACD;AAED,OAAO,SAASE,aAAT,GAA8C;AACnD,QAAM,CAACC,UAAD,EAAaC,aAAb,IAA8BxN,QAAQ,CAAsB,EAAtB,CAA5C;AAEAD,EAAAA,SAAS,CAAC,MAAM;AACd,UAAM8M,eAAe,GAAG,YAAY;AAClC,YAAMC,YAAiC,GAAG,MAAMpD,aAAa,EAA7D;AACA8D,MAAAA,aAAa,CAACV,YAAD,CAAb;AACD,KAHD;;AAKA,UAAMC,QAAQ,GAAIU,KAAD,IAAuB;AACtCD,MAAAA,aAAa,CAACC,KAAD,CAAb;AACD,KAFD;;AAIAZ,IAAAA,eAAe;AAEf,UAAMG,YAAY,GAAGP,iBAAiB,CAACQ,WAAlB,CACnB,kCADmB,EAEnBF,QAFmB,CAArB;AAKA,WAAO,MAAMC,YAAY,CAACE,MAAb,EAAb;AACD,GAlBQ,EAkBN,EAlBM,CAAT;AAoBA,SAAOK,UAAP;AACD;AAED,OAAO,SAASG,wBAAT,GAA8D;AACnE,SAAOtN,UAAU,CAAC,2CAAD,EAA8CyL,qBAA9C,EAAqE,KAArE,CAAjB;AACD;AAED,OAAO,SAAS8B,mBAAT,GAAwD;AAC7D,SAAOtN,UAAU,CAAC6H,mBAAD,EAAsB,CAAC,CAAvB,CAAjB;AACD;AAED,OAAO,SAAS0F,aAAT,GAAkD;AACvD,SAAOvN,UAAU,CAACoE,aAAD,EAAgB,SAAhB,CAAjB;AACD;AAED,OAAO,SAASoJ,mBAAT,CAA6BxC,OAA7B,EAAwE;AAC7E,QAAMyC,WAAW,GAAGhO,WAAW,CAAC,MAAMsL,gBAAgB,CAACC,OAAD,CAAvB,EAAkC,CAACA,OAAD,CAAlC,CAA/B;AACA,SAAOhL,UAAU,CAACyN,WAAD,EAAc,KAAd,CAAjB;AACD;AAED,OAAO,SAASC,aAAT,GAAmD;AACxD,SAAO1N,UAAU,CAACwG,UAAD,EAAa,KAAb,CAAjB;AACD;AAED,OAAO,SAASmH,eAAT,GAAoD;AACzD,SAAO3N,UAAU,CAACkC,eAAD,EAAkB,SAAlB,CAAjB;AACD;AAED,OAAO,SAAS0L,aAAT,GAAwC;AAC7C,QAAM,CAACC,UAAD,EAAaC,aAAb,IAA8BnO,QAAQ,CAAgB,IAAhB,CAA5C;AAEAD,EAAAA,SAAS,CAAC,MAAM;AACd,UAAM8M,eAAe,GAAG,YAAY;AAClC,YAAMC,YAAoB,GAAG,MAAMR,aAAa,EAAhD;AACA6B,MAAAA,aAAa,CAACrB,YAAD,CAAb;AACD,KAHD;;AAKA,UAAMC,QAAQ,GAAIqB,KAAD,IAAmB;AAClCD,MAAAA,aAAa,CAACC,KAAD,CAAb;AACD,KAFD;;AAIAvB,IAAAA,eAAe;AAEf,UAAMG,YAAY,GAAGP,iBAAiB,CAACQ,WAAlB,CACnB,kCADmB,EAEnBF,QAFmB,CAArB;AAKA,WAAO,MAAMC,YAAY,CAACE,MAAb,EAAb;AACD,GAlBQ,EAkBN,EAlBM,CAAT;AAoBA,SAAOgB,UAAP;AACD;AAID,MAAMG,UAA4B,GAAG;AACnCxM,EAAAA,YADmC;AAEnCC,EAAAA,gBAFmC;AAGnC8B,EAAAA,WAHmC;AAInCC,EAAAA,eAJmC;AAKnCK,EAAAA,kBALmC;AAMnCkI,EAAAA,6BANmC;AAOnCC,EAAAA,iCAPmC;AAQnClG,EAAAA,SARmC;AASnCC,EAAAA,aATmC;AAUnCoD,EAAAA,eAVmC;AAWnCC,EAAAA,mBAXmC;AAYnCxE,EAAAA,aAZmC;AAanCC,EAAAA,iBAbmC;AAcnCnC,EAAAA,QAdmC;AAenCW,EAAAA,UAfmC;AAgBnCC,EAAAA,cAhBmC;AAiBnCS,EAAAA,cAjBmC;AAkBnCN,EAAAA,WAlBmC;AAmBnC4E,EAAAA,UAnBmC;AAoBnCC,EAAAA,cApBmC;AAqBnClC,EAAAA,WArBmC;AAsBnCC,EAAAA,eAtBmC;AAuBnCvB,EAAAA,SAvBmC;AAwBnC9C,EAAAA,WAxBmC;AAyBnCoC,EAAAA,aAzBmC;AA0BnCC,EAAAA,iBA1BmC;AA2BnCU,EAAAA,aA3BmC;AA4BnCoH,EAAAA,cA5BmC;AA6BnCnC,EAAAA,aA7BmC;AA8BnChF,EAAAA,UA9BmC;AA+BnCC,EAAAA,cA/BmC;AAgCnCC,EAAAA,cAhCmC;AAiCnCC,EAAAA,kBAjCmC;AAkCnC0C,EAAAA,mBAlCmC;AAmCnCC,EAAAA,uBAnCmC;AAoCnCpD,EAAAA,YApCmC;AAqCnCC,EAAAA,gBArCmC;AAsCnCoE,EAAAA,kBAtCmC;AAuCnCE,EAAAA,qBAvCmC;AAwCnCD,EAAAA,sBAxCmC;AAyCnCE,EAAAA,yBAzCmC;AA0CnC9D,EAAAA,WA1CmC;AA2CnCC,EAAAA,eA3CmC;AA4CnCC,EAAAA,OA5CmC;AA6CnCC,EAAAA,WA7CmC;AA8CnCe,EAAAA,cA9CmC;AA+CnCC,EAAAA,kBA/CmC;AAgDnC5C,EAAAA,uBAhDmC;AAiDnCC,EAAAA,2BAjDmC;AAkDnCmE,EAAAA,kBAlDmC;AAmDnCC,EAAAA,sBAnDmC;AAoDnC5G,EAAAA,aApDmC;AAqDnCC,EAAAA,iBArDmC;AAsDnCK,EAAAA,YAtDmC;AAuDnCC,EAAAA,gBAvDmC;AAwDnCsG,EAAAA,iBAxDmC;AAyDnCC,EAAAA,qBAzDmC;AA0DnCpG,EAAAA,aA1DmC;AA2DnCC,EAAAA,iBA3DmC;AA4DnCG,EAAAA,eA5DmC;AA6DnCC,EAAAA,mBA7DmC;AA8DnCsG,EAAAA,YA9DmC;AA+DnCC,EAAAA,gBA/DmC;AAgEnClG,EAAAA,QAhEmC;AAiEnC2F,EAAAA,cAjEmC;AAkEnCC,EAAAA,kBAlEmC;AAmEnCiB,EAAAA,aAnEmC;AAoEnCC,EAAAA,iBApEmC;AAqEnCtD,EAAAA,gBArEmC;AAsEnCC,EAAAA,oBAtEmC;AAuEnCT,EAAAA,UAvEmC;AAwEnCC,EAAAA,cAxEmC;AAyEnCtB,EAAAA,kBAzEmC;AA0EnC+B,EAAAA,gBA1EmC;AA2EnCC,EAAAA,oBA3EmC;AA4EnC7E,EAAAA,eA5EmC;AA6EnCC,EAAAA,mBA7EmC;AA8EnC6J,EAAAA,0BA9EmC;AA+EnCC,EAAAA,8BA/EmC;AAgFnCzI,EAAAA,aAhFmC;AAiFnCO,EAAAA,gBAjFmC;AAkFnCuC,EAAAA,OAlFmC;AAmFnCC,EAAAA,WAnFmC;AAoFnCgD,EAAAA,oBApFmC;AAqFnCE,EAAAA,uBArFmC;AAsFnCD,EAAAA,wBAtFmC;AAuFnCE,EAAAA,2BAvFmC;AAwFnCP,EAAAA,cAxFmC;AAyFnCC,EAAAA,kBAzFmC;AA0FnC5C,EAAAA,OA1FmC;AA2FnCC,EAAAA,WA3FmC;AA4FnCnF,EAAAA,WA5FmC;AA6FnCC,EAAAA,eA7FmC;AA8FnC2D,EAAAA,aA9FmC;AA+FnCC,EAAAA,iBA/FmC;AAgGnCC,EAAAA,YAhGmC;AAiGnCC,EAAAA,gBAjGmC;AAkGnCR,EAAAA,UAlGmC;AAmGnCgI,EAAAA,aAnGmC;AAoGnCC,EAAAA,iBApGmC;AAqGnCzE,EAAAA,MArGmC;AAsGnCC,EAAAA,UAtGmC;AAuGnCC,EAAAA,MAvGmC;AAwGnCC,EAAAA,UAxGmC;AAyGnCb,EAAAA,QAzGmC;AA0GnCS,EAAAA,gBA1GmC;AA2GnCuD,EAAAA,gBA3GmC;AA4GnCE,EAAAA,oBA5GmC;AA6GnCnB,EAAAA,cA7GmC;AA8GnCC,EAAAA,kBA9GmC;AA+GnCR,EAAAA,iBA/GmC;AAgHnCC,EAAAA,qBAhHmC;AAiHnC5H,EAAAA,eAjHmC;AAkHnCC,EAAAA,mBAlHmC;AAmHnC2E,EAAAA,UAnHmC;AAoHnCC,EAAAA,cApHmC;AAqHnC+E,EAAAA,qBArHmC;AAsHnCC,EAAAA,yBAtHmC;AAuHnChC,EAAAA,WAvHmC;AAwHnCC,EAAAA,eAxHmC;AAyHnC4B,EAAAA,iBAzHmC;AA0HnCC,EAAAA,qBA1HmC;AA2HnC3E,EAAAA,qBA3HmC;AA4HnCC,EAAAA,yBA5HmC;AA6HnC6E,EAAAA,gBA7HmC;AA8HnCC,EAAAA,oBA9HmC;AA+HnCC,EAAAA,mBA/HmC;AAgInCC,EAAAA,uBAhImC;AAiInCC,EAAAA,YAjImC;AAkInCpF,EAAAA,QAlImC;AAmInCC,EAAAA,eAnImC;AAoInC4D,EAAAA,kBApImC;AAqInCC,EAAAA,sBArImC;AAsInCG,EAAAA,kBAtImC;AAuInCC,EAAAA,sBAvImC;AAwInCT,EAAAA,aAxImC;AAyInCC,EAAAA,iBAzImC;AA0InClJ,EAAAA,YA1ImC;AA2InCmL,EAAAA,eA3ImC;AA4InCS,EAAAA,oBA5ImC;AA6InCS,EAAAA,aA7ImC;AA8InCD,EAAAA,mBA9ImC;AA+InCE,EAAAA,mBA/ImC;AAgJnCE,EAAAA,aAhJmC;AAiJnCT,EAAAA,aAjJmC;AAkJnCU,EAAAA,eAlJmC;AAmJnCN,EAAAA,wBAnJmC;AAoJnCO,EAAAA;AApJmC,CAArC;AAuJA,eAAeI,UAAf","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { Dimensions, NativeEventEmitter, Platform } from 'react-native';\nimport { useOnEvent, useOnMount } from './internal/asyncHookWrappers';\nimport devicesWithDynamicIsland from './internal/devicesWithDynamicIsland';\nimport devicesWithNotch from './internal/devicesWithNotch';\nimport RNDeviceInfo from './internal/nativeInterface';\nimport {\n getSupportedPlatformInfoAsync,\n getSupportedPlatformInfoFunctions,\n getSupportedPlatformInfoSync,\n} from './internal/supported-platform-info';\nimport { DeviceInfoModule, NativeConstants } from './internal/privateTypes';\nimport type {\n AsyncHookResult,\n DeviceType,\n LocationProviderInfo,\n PowerState,\n} from './internal/types';\n\nlet constants: NativeConstants;\n\nfunction getConstants() {\n if (constants === undefined) {\n constants = RNDeviceInfo.getConstants() as NativeConstants;\n }\n return constants;\n}\n\nexport const [getUniqueId, getUniqueIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'uniqueId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getUniqueId(),\n syncGetter: () => RNDeviceInfo.getUniqueIdSync(),\n defaultValue: 'unknown',\n});\n\nlet uniqueId: string;\nexport async function syncUniqueId() {\n if (Platform.OS === 'ios') {\n uniqueId = await RNDeviceInfo.syncUniqueId();\n } else {\n uniqueId = await getUniqueId();\n }\n return uniqueId;\n}\n\nexport const [getInstanceId, getInstanceIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'instanceId',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getInstanceId(),\n syncGetter: () => RNDeviceInfo.getInstanceIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getSerialNumber, getSerialNumberSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'serialNumber',\n supportedPlatforms: ['android', 'windows'],\n getter: () => RNDeviceInfo.getSerialNumber(),\n syncGetter: () => RNDeviceInfo.getSerialNumberSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getAndroidId, getAndroidIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'androidId',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getAndroidId(),\n syncGetter: () => RNDeviceInfo.getAndroidIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getIpAddress, getIpAddressSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getIpAddress(),\n syncGetter: () => RNDeviceInfo.getIpAddressSync(),\n defaultValue: 'unknown',\n});\n\nexport const [isCameraPresent, isCameraPresentSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.isCameraPresent(),\n syncGetter: () => RNDeviceInfo.isCameraPresentSync(),\n defaultValue: false,\n});\n\nexport async function getMacAddress() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getMacAddress();\n } else if (Platform.OS === 'ios') {\n return '02:00:00:00:00:00';\n }\n return 'unknown';\n}\n\nexport function getMacAddressSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getMacAddressSync();\n } else if (Platform.OS === 'ios') {\n return '02:00:00:00:00:00';\n }\n return 'unknown';\n}\n\nexport const getDeviceId = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n memoKey: 'deviceId',\n getter: () => getConstants().deviceId,\n supportedPlatforms: ['android', 'ios', 'windows'],\n });\n\nexport const [getManufacturer, getManufacturerSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'manufacturer',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () =>\n Platform.OS == 'ios' ? Promise.resolve('Apple') : RNDeviceInfo.getSystemManufacturer(),\n syncGetter: () => (Platform.OS == 'ios' ? 'Apple' : RNDeviceInfo.getSystemManufacturerSync()),\n defaultValue: 'unknown',\n});\n\nexport const getModel = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'model',\n defaultValue: 'unknown',\n supportedPlatforms: ['ios', 'android', 'windows'],\n getter: () => getConstants().model,\n });\n\nexport const getBrand = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'brand',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => getConstants().brand,\n });\n\nexport const getSystemName = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n supportedPlatforms: ['ios', 'android', 'windows'],\n memoKey: 'systemName',\n getter: () =>\n Platform.select({\n ios: getConstants().systemName,\n android: 'Android',\n windows: 'Windows',\n default: 'unknown',\n }),\n });\n\nexport const getSystemVersion = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n getter: () => getConstants().systemVersion,\n supportedPlatforms: ['android', 'ios', 'windows'],\n memoKey: 'systemVersion',\n });\n\nexport const [getBuildId, getBuildIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'buildId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getBuildId(),\n syncGetter: () => RNDeviceInfo.getBuildIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getApiLevel, getApiLevelSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'apiLevel',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getApiLevel(),\n syncGetter: () => RNDeviceInfo.getApiLevelSync(),\n defaultValue: -1,\n});\n\nexport const getBundleId = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'bundleId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => getConstants().bundleId,\n });\n\nexport const [\n getInstallerPackageName,\n getInstallerPackageNameSync,\n] = getSupportedPlatformInfoFunctions({\n memoKey: 'installerPackageName',\n supportedPlatforms: ['android', 'windows', 'ios'],\n getter: () => RNDeviceInfo.getInstallerPackageName(),\n syncGetter: () => RNDeviceInfo.getInstallerPackageNameSync(),\n defaultValue: 'unknown',\n});\n\nexport const getApplicationName = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'appName',\n defaultValue: 'unknown',\n getter: () => getConstants().appName,\n supportedPlatforms: ['android', 'ios', 'windows'],\n });\n\nexport const getBuildNumber = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'buildNumber',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => getConstants().buildNumber,\n defaultValue: 'unknown',\n });\n\nexport const getVersion = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'version',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => getConstants().appVersion,\n });\n\nexport function getReadableVersion() {\n return getVersion() + '.' + getBuildNumber();\n}\n\nexport const [getDeviceName, getDeviceNameSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getDeviceName(),\n syncGetter: () => RNDeviceInfo.getDeviceNameSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getUsedMemory, getUsedMemorySync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getUsedMemory(),\n syncGetter: () => RNDeviceInfo.getUsedMemorySync(),\n defaultValue: -1,\n});\n\nexport const getUserAgent = () =>\n getSupportedPlatformInfoAsync({\n memoKey: 'userAgent',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'ios', 'web'],\n getter: () => RNDeviceInfo.getUserAgent(),\n });\n\nexport const getUserAgentSync = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'userAgentSync',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'web'],\n getter: () => RNDeviceInfo.getUserAgentSync(),\n });\n\nexport const [getFontScale, getFontScaleSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getFontScale(),\n syncGetter: () => RNDeviceInfo.getFontScaleSync(),\n defaultValue: -1,\n});\n\nexport const [getBootloader, getBootloaderSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'bootloader',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getBootloader(),\n syncGetter: () => RNDeviceInfo.getBootloaderSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getDevice, getDeviceSync] = getSupportedPlatformInfoFunctions({\n getter: () => RNDeviceInfo.getDevice(),\n syncGetter: () => RNDeviceInfo.getDeviceSync(),\n defaultValue: 'unknown',\n memoKey: 'device',\n supportedPlatforms: ['android'],\n});\n\nexport const [getDisplay, getDisplaySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'display',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getDisplay(),\n syncGetter: () => RNDeviceInfo.getDisplaySync(),\n defaultValue: 'unknown',\n});\n\nexport const [getFingerprint, getFingerprintSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'fingerprint',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getFingerprint(),\n syncGetter: () => RNDeviceInfo.getFingerprintSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getHardware, getHardwareSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'hardware',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getHardware(),\n syncGetter: () => RNDeviceInfo.getHardwareSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getHost, getHostSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'host',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getHost(),\n syncGetter: () => RNDeviceInfo.getHostSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getProduct, getProductSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'product',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getProduct(),\n syncGetter: () => RNDeviceInfo.getProductSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getTags, getTagsSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'tags',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getTags(),\n syncGetter: () => RNDeviceInfo.getTagsSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getType, getTypeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'type',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getType(),\n syncGetter: () => RNDeviceInfo.getTypeSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getBaseOs, getBaseOsSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'baseOs',\n supportedPlatforms: ['android', 'web', 'windows'],\n getter: () => RNDeviceInfo.getBaseOs(),\n syncGetter: () => RNDeviceInfo.getBaseOsSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getPreviewSdkInt, getPreviewSdkIntSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'previewSdkInt',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getPreviewSdkInt(),\n syncGetter: () => RNDeviceInfo.getPreviewSdkIntSync(),\n defaultValue: -1,\n});\n\nexport const [getSecurityPatch, getSecurityPatchSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'securityPatch',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSecurityPatch(),\n syncGetter: () => RNDeviceInfo.getSecurityPatchSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getCodename, getCodenameSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'codeName',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getCodename(),\n syncGetter: () => RNDeviceInfo.getCodenameSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getIncremental, getIncrementalSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'incremental',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getIncremental(),\n syncGetter: () => RNDeviceInfo.getIncrementalSync(),\n defaultValue: 'unknown',\n});\n\nexport const [isEmulator, isEmulatorSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'emulator',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.isEmulator(),\n syncGetter: () => RNDeviceInfo.isEmulatorSync(),\n defaultValue: false,\n});\n\nexport const isTablet = () =>\n getSupportedPlatformInfoSync({\n defaultValue: false,\n supportedPlatforms: ['android', 'ios', 'windows'],\n memoKey: 'tablet',\n getter: () => getConstants().isTablet,\n });\n\nexport const isDisplayZoomed = () =>\n getSupportedPlatformInfoSync({\n defaultValue: false,\n supportedPlatforms: ['ios'],\n memoKey: 'zoomed',\n getter: () => getConstants().isDisplayZoomed,\n });\n\nexport const [isPinOrFingerprintSet, isPinOrFingerprintSetSync] = getSupportedPlatformInfoFunctions(\n {\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.isPinOrFingerprintSet(),\n syncGetter: () => RNDeviceInfo.isPinOrFingerprintSetSync(),\n defaultValue: false,\n }\n);\n\nlet notch: boolean;\nexport function hasNotch() {\n if (notch === undefined) {\n console.log(RNDeviceInfo);\n let _brand = getBrand();\n let _model = getModel();\n notch =\n devicesWithNotch.findIndex(\n (item) =>\n item.brand.toLowerCase() === _brand.toLowerCase() &&\n item.model.toLowerCase() === _model.toLowerCase()\n ) !== -1;\n }\n return notch;\n}\n\nlet dynamicIsland: boolean;\nexport function hasDynamicIsland() {\n if (dynamicIsland === undefined) {\n let _brand = getBrand();\n let _model = getModel();\n dynamicIsland =\n devicesWithDynamicIsland.findIndex(\n (item) =>\n item.brand.toLowerCase() === _brand.toLowerCase() &&\n item.model.toLowerCase() === _model.toLowerCase()\n ) !== -1;\n }\n return dynamicIsland;\n}\n\nexport const [hasGms, hasGmsSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.hasGms(),\n syncGetter: () => RNDeviceInfo.hasGmsSync(),\n defaultValue: false,\n});\n\nexport const [hasHms, hasHmsSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.hasHms(),\n syncGetter: () => RNDeviceInfo.hasHmsSync(),\n defaultValue: false,\n});\n\nexport const [getFirstInstallTime, getFirstInstallTimeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'firstInstallTime',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getFirstInstallTime(),\n syncGetter: () => RNDeviceInfo.getFirstInstallTimeSync(),\n defaultValue: -1,\n});\n\nexport const [getInstallReferrer, getInstallReferrerSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'installReferrer',\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getInstallReferrer(),\n syncGetter: () => RNDeviceInfo.getInstallReferrerSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getLastUpdateTime, getLastUpdateTimeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'lastUpdateTime',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getLastUpdateTime(),\n syncGetter: () => RNDeviceInfo.getLastUpdateTimeSync(),\n defaultValue: -1,\n});\n\nexport const [getPhoneNumber, getPhoneNumberSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getPhoneNumber(),\n syncGetter: () => RNDeviceInfo.getPhoneNumberSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getCarrier, getCarrierSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.getCarrier(),\n syncGetter: () => RNDeviceInfo.getCarrierSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getTotalMemory, getTotalMemorySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'totalMemory',\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getTotalMemory(),\n syncGetter: () => RNDeviceInfo.getTotalMemorySync(),\n defaultValue: -1,\n});\n\nexport const [getMaxMemory, getMaxMemorySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'maxMemory',\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getMaxMemory(),\n syncGetter: () => RNDeviceInfo.getMaxMemorySync(),\n defaultValue: -1,\n});\n\nexport const [getTotalDiskCapacity, getTotalDiskCapacitySync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getTotalDiskCapacity(),\n syncGetter: () => RNDeviceInfo.getTotalDiskCapacitySync(),\n defaultValue: -1,\n});\n\nexport async function getTotalDiskCapacityOld() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getTotalDiskCapacityOld();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getTotalDiskCapacity();\n }\n\n return -1;\n}\n\nexport function getTotalDiskCapacityOldSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getTotalDiskCapacityOldSync();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getTotalDiskCapacitySync();\n }\n\n return -1;\n}\n\nexport const [getFreeDiskStorage, getFreeDiskStorageSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getFreeDiskStorage(),\n syncGetter: () => RNDeviceInfo.getFreeDiskStorageSync(),\n defaultValue: -1,\n});\n\nexport async function getFreeDiskStorageOld() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getFreeDiskStorageOld();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getFreeDiskStorage();\n }\n\n return -1;\n}\n\nexport function getFreeDiskStorageOldSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getFreeDiskStorageOldSync();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getFreeDiskStorageSync();\n }\n\n return -1;\n}\n\nexport const [getBatteryLevel, getBatteryLevelSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getBatteryLevel(),\n syncGetter: () => RNDeviceInfo.getBatteryLevelSync(),\n defaultValue: -1,\n});\n\nexport const [getPowerState, getPowerStateSync] = getSupportedPlatformInfoFunctions<\n Partial\n>({\n supportedPlatforms: ['ios', 'android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getPowerState() as Promise>,\n syncGetter: () => RNDeviceInfo.getPowerStateSync() as Partial,\n defaultValue: {},\n});\n\nexport const [isBatteryCharging, isBatteryChargingSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.isBatteryCharging(),\n syncGetter: () => RNDeviceInfo.isBatteryChargingSync(),\n defaultValue: false,\n});\n\nexport async function isLandscape() {\n return Promise.resolve(isLandscapeSync());\n}\n\nexport function isLandscapeSync() {\n const { height, width } = Dimensions.get('window');\n return width >= height;\n}\n\nexport const [isAirplaneMode, isAirplaneModeSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'web'],\n getter: () => RNDeviceInfo.isAirplaneMode(),\n syncGetter: () => RNDeviceInfo.isAirplaneModeSync(),\n defaultValue: false,\n});\n\nexport const getDeviceType = () => {\n return getSupportedPlatformInfoSync({\n memoKey: 'deviceType',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => getConstants().deviceType,\n });\n};\n\nexport const getDeviceTypeSync = () => {\n return getSupportedPlatformInfoSync({\n memoKey: 'deviceType',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => getConstants().deviceType,\n });\n};\n\nexport const [supportedAbis, supportedAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supportedAbis',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getSupportedAbis(),\n syncGetter: () => RNDeviceInfo.getSupportedAbisSync(),\n defaultValue: [] as string[],\n});\n\nexport const [supported32BitAbis, supported32BitAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supported32BitAbis',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSupported32BitAbis(),\n syncGetter: () => RNDeviceInfo.getSupported32BitAbisSync(),\n defaultValue: [] as string[],\n});\n\nexport const [supported64BitAbis, supported64BitAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supported64BitAbis',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSupported64BitAbis(),\n syncGetter: () => RNDeviceInfo.getSupported64BitAbisSync(),\n defaultValue: [],\n});\n\nexport async function hasSystemFeature(feature: string) {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.hasSystemFeature(feature);\n }\n return false;\n}\n\nexport function hasSystemFeatureSync(feature: string) {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.hasSystemFeatureSync(feature);\n }\n return false;\n}\n\nexport function isLowBatteryLevel(level: number): boolean {\n if (Platform.OS === 'android') {\n return level < 0.15;\n }\n return level < 0.2;\n}\n\nexport const [\n getSystemAvailableFeatures,\n getSystemAvailableFeaturesSync,\n] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSystemAvailableFeatures(),\n syncGetter: () => RNDeviceInfo.getSystemAvailableFeaturesSync(),\n defaultValue: [] as string[],\n});\n\nexport const [isLocationEnabled, isLocationEnabledSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'web'],\n getter: () => RNDeviceInfo.isLocationEnabled(),\n syncGetter: () => RNDeviceInfo.isLocationEnabledSync(),\n defaultValue: false,\n});\n\nexport const [isHeadphonesConnected, isHeadphonesConnectedSync] = getSupportedPlatformInfoFunctions(\n {\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.isHeadphonesConnected(),\n syncGetter: () => RNDeviceInfo.isHeadphonesConnectedSync(),\n defaultValue: false,\n }\n);\n\nexport const [isMouseConnected, isMouseConnectedSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isMouseConnected(),\n syncGetter: () => RNDeviceInfo.isMouseConnectedSync(),\n defaultValue: false,\n});\n\nexport const [isKeyboardConnected, isKeyboardConnectedSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isKeyboardConnected(),\n syncGetter: () => RNDeviceInfo.isKeyboardConnectedSync(),\n defaultValue: false,\n});\n\nexport const isTabletMode = () =>\n getSupportedPlatformInfoAsync({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isTabletMode(),\n defaultValue: false,\n });\n\nexport const [\n getAvailableLocationProviders,\n getAvailableLocationProvidersSync,\n] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.getAvailableLocationProviders() as Promise,\n syncGetter: () => RNDeviceInfo.getAvailableLocationProvidersSync() as LocationProviderInfo,\n defaultValue: {},\n});\n\nexport const [getBrightness, getBrightnessSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['ios'],\n getter: () => RNDeviceInfo.getBrightness(),\n syncGetter: () => RNDeviceInfo.getBrightnessSync(),\n defaultValue: -1,\n});\n\nexport async function getDeviceToken() {\n if (Platform.OS === 'ios') {\n return RNDeviceInfo.getDeviceToken();\n }\n return 'unknown';\n}\n\nconst deviceInfoEmitter = new NativeEventEmitter(RNDeviceInfo);\nexport function useBatteryLevel(): number | null {\n const [batteryLevel, setBatteryLevel] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBatteryLevel();\n setBatteryLevel(initialValue);\n };\n\n const onChange = (level: number) => {\n setBatteryLevel(level);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_batteryLevelDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return batteryLevel;\n}\n\nexport function useBatteryLevelIsLow(): number | null {\n const [batteryLevelIsLow, setBatteryLevelIsLow] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBatteryLevel();\n isLowBatteryLevel(initialValue) && setBatteryLevelIsLow(initialValue);\n };\n\n setInitialValue();\n\n const onChange = (level: number) => {\n setBatteryLevelIsLow(level);\n };\n\n const subscription = deviceInfoEmitter.addListener('RNDeviceInfo_batteryLevelIsLow', onChange);\n\n return () => subscription.remove();\n }, []);\n\n return batteryLevelIsLow;\n}\n\nexport function usePowerState(): Partial {\n const [powerState, setPowerState] = useState>({});\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: Partial = await getPowerState();\n setPowerState(initialValue);\n };\n\n const onChange = (state: PowerState) => {\n setPowerState(state);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_powerStateDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return powerState;\n}\n\nexport function useIsHeadphonesConnected(): AsyncHookResult {\n return useOnEvent('RNDeviceInfo_headphoneConnectionDidChange', isHeadphonesConnected, false);\n}\n\nexport function useFirstInstallTime(): AsyncHookResult {\n return useOnMount(getFirstInstallTime, -1);\n}\n\nexport function useDeviceName(): AsyncHookResult {\n return useOnMount(getDeviceName, 'unknown');\n}\n\nexport function useHasSystemFeature(feature: string): AsyncHookResult {\n const asyncGetter = useCallback(() => hasSystemFeature(feature), [feature]);\n return useOnMount(asyncGetter, false);\n}\n\nexport function useIsEmulator(): AsyncHookResult {\n return useOnMount(isEmulator, false);\n}\n\nexport function useManufacturer(): AsyncHookResult {\n return useOnMount(getManufacturer, 'unknown');\n}\n\nexport function useBrightness(): number | null {\n const [brightness, setBrightness] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBrightness();\n setBrightness(initialValue);\n };\n\n const onChange = (value: number) => {\n setBrightness(value);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_brightnessDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return brightness;\n}\n\nexport type { AsyncHookResult, DeviceType, LocationProviderInfo, PowerState };\n\nconst DeviceInfo: DeviceInfoModule = {\n getAndroidId,\n getAndroidIdSync,\n getApiLevel,\n getApiLevelSync,\n getApplicationName,\n getAvailableLocationProviders,\n getAvailableLocationProvidersSync,\n getBaseOs,\n getBaseOsSync,\n getBatteryLevel,\n getBatteryLevelSync,\n getBootloader,\n getBootloaderSync,\n getBrand,\n getBuildId,\n getBuildIdSync,\n getBuildNumber,\n getBundleId,\n getCarrier,\n getCarrierSync,\n getCodename,\n getCodenameSync,\n getDevice,\n getDeviceId,\n getDeviceName,\n getDeviceNameSync,\n getDeviceSync,\n getDeviceToken,\n getDeviceType,\n getDisplay,\n getDisplaySync,\n getFingerprint,\n getFingerprintSync,\n getFirstInstallTime,\n getFirstInstallTimeSync,\n getFontScale,\n getFontScaleSync,\n getFreeDiskStorage,\n getFreeDiskStorageOld,\n getFreeDiskStorageSync,\n getFreeDiskStorageOldSync,\n getHardware,\n getHardwareSync,\n getHost,\n getHostSync,\n getIncremental,\n getIncrementalSync,\n getInstallerPackageName,\n getInstallerPackageNameSync,\n getInstallReferrer,\n getInstallReferrerSync,\n getInstanceId,\n getInstanceIdSync,\n getIpAddress,\n getIpAddressSync,\n getLastUpdateTime,\n getLastUpdateTimeSync,\n getMacAddress,\n getMacAddressSync,\n getManufacturer,\n getManufacturerSync,\n getMaxMemory,\n getMaxMemorySync,\n getModel,\n getPhoneNumber,\n getPhoneNumberSync,\n getPowerState,\n getPowerStateSync,\n getPreviewSdkInt,\n getPreviewSdkIntSync,\n getProduct,\n getProductSync,\n getReadableVersion,\n getSecurityPatch,\n getSecurityPatchSync,\n getSerialNumber,\n getSerialNumberSync,\n getSystemAvailableFeatures,\n getSystemAvailableFeaturesSync,\n getSystemName,\n getSystemVersion,\n getTags,\n getTagsSync,\n getTotalDiskCapacity,\n getTotalDiskCapacityOld,\n getTotalDiskCapacitySync,\n getTotalDiskCapacityOldSync,\n getTotalMemory,\n getTotalMemorySync,\n getType,\n getTypeSync,\n getUniqueId,\n getUniqueIdSync,\n getUsedMemory,\n getUsedMemorySync,\n getUserAgent,\n getUserAgentSync,\n getVersion,\n getBrightness,\n getBrightnessSync,\n hasGms,\n hasGmsSync,\n hasHms,\n hasHmsSync,\n hasNotch,\n hasDynamicIsland,\n hasSystemFeature,\n hasSystemFeatureSync,\n isAirplaneMode,\n isAirplaneModeSync,\n isBatteryCharging,\n isBatteryChargingSync,\n isCameraPresent,\n isCameraPresentSync,\n isEmulator,\n isEmulatorSync,\n isHeadphonesConnected,\n isHeadphonesConnectedSync,\n isLandscape,\n isLandscapeSync,\n isLocationEnabled,\n isLocationEnabledSync,\n isPinOrFingerprintSet,\n isPinOrFingerprintSetSync,\n isMouseConnected,\n isMouseConnectedSync,\n isKeyboardConnected,\n isKeyboardConnectedSync,\n isTabletMode,\n isTablet,\n isDisplayZoomed,\n supported32BitAbis,\n supported32BitAbisSync,\n supported64BitAbis,\n supported64BitAbisSync,\n supportedAbis,\n supportedAbisSync,\n syncUniqueId,\n useBatteryLevel,\n useBatteryLevelIsLow,\n useDeviceName,\n useFirstInstallTime,\n useHasSystemFeature,\n useIsEmulator,\n usePowerState,\n useManufacturer,\n useIsHeadphonesConnected,\n useBrightness,\n};\n\nexport default DeviceInfo;\n"]} +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/module/internal/asyncHookWrappers.js b/node_modules/react-native-device-info/lib/module/internal/asyncHookWrappers.js +index 0d5dca5..1a7cae1 100644 +--- a/node_modules/react-native-device-info/lib/module/internal/asyncHookWrappers.js ++++ b/node_modules/react-native-device-info/lib/module/internal/asyncHookWrappers.js +@@ -1,5 +1,6 @@ + import { useState, useEffect } from 'react'; +-import { NativeEventEmitter, NativeModules } from 'react-native'; ++import { NativeEventEmitter } from 'react-native'; ++import RNDeviceInfo from './nativeInterface'; + + /** + * simple hook wrapper for async functions for 'on-mount / componentDidMount' that only need to fired once +@@ -25,7 +26,7 @@ export function useOnMount(asyncGetter, initialResult) { + }, [asyncGetter]); + return response; + } +-export const deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo); ++export const deviceInfoEmitter = new NativeEventEmitter(RNDeviceInfo); + /** + * simple hook wrapper for handling events + * @param eventName +diff --git a/node_modules/react-native-device-info/lib/module/internal/asyncHookWrappers.js.map b/node_modules/react-native-device-info/lib/module/internal/asyncHookWrappers.js.map +index 87af78b..9705ec1 100644 +--- a/node_modules/react-native-device-info/lib/module/internal/asyncHookWrappers.js.map ++++ b/node_modules/react-native-device-info/lib/module/internal/asyncHookWrappers.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["asyncHookWrappers.ts"],"names":["useState","useEffect","NativeEventEmitter","NativeModules","useOnMount","asyncGetter","initialResult","response","setResponse","loading","result","getAsync","deviceInfoEmitter","RNDeviceInfo","useOnEvent","eventName","initialValueAsyncGetter","defaultValue","setResult","subscription","addListener","remove"],"mappings":"AAAA,SAASA,QAAT,EAAmBC,SAAnB,QAAoC,OAApC;AACA,SAASC,kBAAT,EAA6BC,aAA7B,QAAkD,cAAlD;;AAGA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAT,CAAuBC,WAAvB,EAAsDC,aAAtD,EAA4F;AACjG,QAAM,CAACC,QAAD,EAAWC,WAAX,IAA0BR,QAAQ,CAAqB;AAC3DS,IAAAA,OAAO,EAAE,IADkD;AAE3DC,IAAAA,MAAM,EAAEJ;AAFmD,GAArB,CAAxC;AAKAL,EAAAA,SAAS,CAAC,MAAM;AACd;AACA,UAAMU,QAAQ,GAAG,YAAY;AAC3B,YAAMD,MAAM,GAAG,MAAML,WAAW,EAAhC;AACAG,MAAAA,WAAW,CAAC;AAAEC,QAAAA,OAAO,EAAE,KAAX;AAAkBC,QAAAA;AAAlB,OAAD,CAAX;AACD,KAHD;;AAKAC,IAAAA,QAAQ;AACT,GARQ,EAQN,CAACN,WAAD,CARM,CAAT;AAUA,SAAOE,QAAP;AACD;AAED,OAAO,MAAMK,iBAAiB,GAAG,IAAIV,kBAAJ,CAAuBC,aAAa,CAACU,YAArC,CAA1B;AAEP;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,UAAT,CACLC,SADK,EAELC,uBAFK,EAGLC,YAHK,EAIe;AACpB,QAAM;AAAER,IAAAA,OAAF;AAAWC,IAAAA,MAAM,EAAEJ;AAAnB,MAAqCF,UAAU,CAACY,uBAAD,EAA0BC,YAA1B,CAArD;AACA,QAAM,CAACP,MAAD,EAASQ,SAAT,IAAsBlB,QAAQ,CAAIiB,YAAJ,CAApC,CAFoB,CAIpB;;AACAhB,EAAAA,SAAS,CAAC,MAAM;AACdiB,IAAAA,SAAS,CAACZ,aAAD,CAAT;AACD,GAFQ,EAEN,CAACA,aAAD,CAFM,CAAT,CALoB,CASpB;AACA;;AACAL,EAAAA,SAAS,CAAC,MAAM;AACd,UAAMkB,YAAY,GAAGP,iBAAiB,CAACQ,WAAlB,CAA8BL,SAA9B,EAAyCG,SAAzC,CAArB;AACA,WAAO,MAAMC,YAAY,CAACE,MAAb,EAAb;AACD,GAHQ,EAGN,CAACN,SAAD,CAHM,CAAT,CAXoB,CAgBpB;;AACA,SAAO;AAAEN,IAAAA,OAAF;AAAWC,IAAAA;AAAX,GAAP;AACD","sourcesContent":["import { useState, useEffect } from 'react';\nimport { NativeEventEmitter, NativeModules } from 'react-native';\nimport type { AsyncHookResult } from './types';\n\n/**\n * simple hook wrapper for async functions for 'on-mount / componentDidMount' that only need to fired once\n * @param asyncGetter async function that 'gets' something\n * @param initialResult -1 | false | 'unknown'\n */\nexport function useOnMount(asyncGetter: () => Promise, initialResult: T): AsyncHookResult {\n const [response, setResponse] = useState>({\n loading: true,\n result: initialResult,\n });\n\n useEffect(() => {\n // async function cuz react complains if useEffect's effect param is an async function\n const getAsync = async () => {\n const result = await asyncGetter();\n setResponse({ loading: false, result });\n };\n\n getAsync();\n }, [asyncGetter]);\n\n return response;\n}\n\nexport const deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);\n\n/**\n * simple hook wrapper for handling events\n * @param eventName\n * @param initialValueAsyncGetter\n * @param defaultValue\n */\nexport function useOnEvent(\n eventName: string,\n initialValueAsyncGetter: () => Promise,\n defaultValue: T\n): AsyncHookResult {\n const { loading, result: initialResult } = useOnMount(initialValueAsyncGetter, defaultValue);\n const [result, setResult] = useState(defaultValue);\n\n // sets the result to what the intial value is on mount\n useEffect(() => {\n setResult(initialResult);\n }, [initialResult]);\n\n // - set up the event listener to set the result\n // - set up the clean up function to remove subscription on unmount\n useEffect(() => {\n const subscription = deviceInfoEmitter.addListener(eventName, setResult);\n return () => subscription.remove();\n }, [eventName]);\n\n // loading will only be true while getting the inital value. After that, it will always be false, but a new result may occur\n return { loading, result };\n}\n"]} +\ No newline at end of file ++{"version":3,"sources":["asyncHookWrappers.ts"],"names":["useState","useEffect","NativeEventEmitter","RNDeviceInfo","useOnMount","asyncGetter","initialResult","response","setResponse","loading","result","getAsync","deviceInfoEmitter","useOnEvent","eventName","initialValueAsyncGetter","defaultValue","setResult","subscription","addListener","remove"],"mappings":"AAAA,SAASA,QAAT,EAAmBC,SAAnB,QAAoC,OAApC;AACA,SAASC,kBAAT,QAAmC,cAAnC;AACA,OAAOC,YAAP,MAAyB,mBAAzB;;AAGA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAT,CAAuBC,WAAvB,EAAsDC,aAAtD,EAA4F;AACjG,QAAM,CAACC,QAAD,EAAWC,WAAX,IAA0BR,QAAQ,CAAqB;AAC3DS,IAAAA,OAAO,EAAE,IADkD;AAE3DC,IAAAA,MAAM,EAAEJ;AAFmD,GAArB,CAAxC;AAKAL,EAAAA,SAAS,CAAC,MAAM;AACd;AACA,UAAMU,QAAQ,GAAG,YAAY;AAC3B,YAAMD,MAAM,GAAG,MAAML,WAAW,EAAhC;AACAG,MAAAA,WAAW,CAAC;AAAEC,QAAAA,OAAO,EAAE,KAAX;AAAkBC,QAAAA;AAAlB,OAAD,CAAX;AACD,KAHD;;AAKAC,IAAAA,QAAQ;AACT,GARQ,EAQN,CAACN,WAAD,CARM,CAAT;AAUA,SAAOE,QAAP;AACD;AAED,OAAO,MAAMK,iBAAiB,GAAG,IAAIV,kBAAJ,CAAuBC,YAAvB,CAA1B;AAEP;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASU,UAAT,CACLC,SADK,EAELC,uBAFK,EAGLC,YAHK,EAIe;AACpB,QAAM;AAAEP,IAAAA,OAAF;AAAWC,IAAAA,MAAM,EAAEJ;AAAnB,MAAqCF,UAAU,CAACW,uBAAD,EAA0BC,YAA1B,CAArD;AACA,QAAM,CAACN,MAAD,EAASO,SAAT,IAAsBjB,QAAQ,CAAIgB,YAAJ,CAApC,CAFoB,CAIpB;;AACAf,EAAAA,SAAS,CAAC,MAAM;AACdgB,IAAAA,SAAS,CAACX,aAAD,CAAT;AACD,GAFQ,EAEN,CAACA,aAAD,CAFM,CAAT,CALoB,CASpB;AACA;;AACAL,EAAAA,SAAS,CAAC,MAAM;AACd,UAAMiB,YAAY,GAAGN,iBAAiB,CAACO,WAAlB,CAA8BL,SAA9B,EAAyCG,SAAzC,CAArB;AACA,WAAO,MAAMC,YAAY,CAACE,MAAb,EAAb;AACD,GAHQ,EAGN,CAACN,SAAD,CAHM,CAAT,CAXoB,CAgBpB;;AACA,SAAO;AAAEL,IAAAA,OAAF;AAAWC,IAAAA;AAAX,GAAP;AACD","sourcesContent":["import { useState, useEffect } from 'react';\nimport { NativeEventEmitter } from 'react-native';\nimport RNDeviceInfo from './nativeInterface';\nimport type { AsyncHookResult } from './types';\n\n/**\n * simple hook wrapper for async functions for 'on-mount / componentDidMount' that only need to fired once\n * @param asyncGetter async function that 'gets' something\n * @param initialResult -1 | false | 'unknown'\n */\nexport function useOnMount(asyncGetter: () => Promise, initialResult: T): AsyncHookResult {\n const [response, setResponse] = useState>({\n loading: true,\n result: initialResult,\n });\n\n useEffect(() => {\n // async function cuz react complains if useEffect's effect param is an async function\n const getAsync = async () => {\n const result = await asyncGetter();\n setResponse({ loading: false, result });\n };\n\n getAsync();\n }, [asyncGetter]);\n\n return response;\n}\n\nexport const deviceInfoEmitter = new NativeEventEmitter(RNDeviceInfo);\n\n/**\n * simple hook wrapper for handling events\n * @param eventName\n * @param initialValueAsyncGetter\n * @param defaultValue\n */\nexport function useOnEvent(\n eventName: string,\n initialValueAsyncGetter: () => Promise,\n defaultValue: T\n): AsyncHookResult {\n const { loading, result: initialResult } = useOnMount(initialValueAsyncGetter, defaultValue);\n const [result, setResult] = useState(defaultValue);\n\n // sets the result to what the intial value is on mount\n useEffect(() => {\n setResult(initialResult);\n }, [initialResult]);\n\n // - set up the event listener to set the result\n // - set up the clean up function to remove subscription on unmount\n useEffect(() => {\n const subscription = deviceInfoEmitter.addListener(eventName, setResult);\n return () => subscription.remove();\n }, [eventName]);\n\n // loading will only be true while getting the inital value. After that, it will always be false, but a new result may occur\n return { loading, result };\n}\n"]} +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/module/internal/nativeInterface.js b/node_modules/react-native-device-info/lib/module/internal/nativeInterface.js +index 6b443c3..a6a0640 100644 +--- a/node_modules/react-native-device-info/lib/module/internal/nativeInterface.js ++++ b/node_modules/react-native-device-info/lib/module/internal/nativeInterface.js +@@ -1,9 +1,5 @@ +-import { Platform, NativeModules } from 'react-native'; +-let RNDeviceInfo = NativeModules.RNDeviceInfo; // @ts-ignore +- +-if (Platform.OS === 'web' || Platform.OS === 'dom') { +- RNDeviceInfo = require('../web'); +-} ++import { Platform } from 'react-native'; ++let RNDeviceInfo = require('../web'); + + if (!RNDeviceInfo) { + // Produce an error if we don't have the native module +diff --git a/node_modules/react-native-device-info/lib/module/internal/nativeInterface.js.map b/node_modules/react-native-device-info/lib/module/internal/nativeInterface.js.map +index 0cd28c5..bd0d8fa 100644 +--- a/node_modules/react-native-device-info/lib/module/internal/nativeInterface.js.map ++++ b/node_modules/react-native-device-info/lib/module/internal/nativeInterface.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["nativeInterface.ts"],"names":["Platform","NativeModules","RNDeviceInfo","OS","require","Error"],"mappings":"AAAA,SAASA,QAAT,EAAmBC,aAAnB,QAAwC,cAAxC;AAGA,IAAIC,YAAgD,GAAGD,aAAa,CAACC,YAArE,C,CAEA;;AACA,IAAIF,QAAQ,CAACG,EAAT,KAAgB,KAAhB,IAAyBH,QAAQ,CAACG,EAAT,KAAgB,KAA7C,EAAoD;AAClDD,EAAAA,YAAY,GAAGE,OAAO,CAAC,QAAD,CAAtB;AACD;;AAED,IAAI,CAACF,YAAL,EAAmB;AACjB;AACA,MACEF,QAAQ,CAACG,EAAT,KAAgB,SAAhB,IACAH,QAAQ,CAACG,EAAT,KAAgB,KADhB,IAEAH,QAAQ,CAACG,EAAT,KAAgB,KAFhB,IAGA;AACAH,EAAAA,QAAQ,CAACG,EAAT,KAAgB,KALlB,EAME;AACA,UAAM,IAAIE,KAAJ,CAAW;AACrB;AACA;AACA;AACA,sJAJU,CAAN;AAKD;AACF;;AAED,eAAeH,YAAf","sourcesContent":["import { Platform, NativeModules } from 'react-native';\nimport { DeviceInfoNativeModule } from './privateTypes';\n\nlet RNDeviceInfo: DeviceInfoNativeModule | undefined = NativeModules.RNDeviceInfo;\n\n// @ts-ignore\nif (Platform.OS === 'web' || Platform.OS === 'dom') {\n RNDeviceInfo = require('../web');\n}\n\nif (!RNDeviceInfo) {\n // Produce an error if we don't have the native module\n if (\n Platform.OS === 'android' ||\n Platform.OS === 'ios' ||\n Platform.OS === 'web' ||\n // @ts-ignore\n Platform.OS === 'dom'\n ) {\n throw new Error(`react-native-device-info: NativeModule.RNDeviceInfo is null. To fix this issue try these steps:\n • For react-native <= 0.59: Run \\`react-native link react-native-device-info\\` in the project root.\n • Rebuild and re-run the app.\n • If you are using CocoaPods on iOS, run \\`pod install\\` in the \\`ios\\` directory and then rebuild and re-run the app. You may also need to re-open Xcode to get the new pods.\n If none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-device-info/react-native-device-info`);\n }\n}\n\nexport default RNDeviceInfo as DeviceInfoNativeModule;\n"]} +\ No newline at end of file ++{"version":3,"sources":["nativeInterface.ts"],"names":["Platform","RNDeviceInfoModule","RNDeviceInfo","OS","require","Error"],"mappings":"AAAA,SAASA,QAAT,QAAyB,cAAzB;AACA,OAAOC,kBAAP,MAA+B,kCAA/B;AAEA,IAAIC,YAAY,GAAGD,kBAAnB,C,CAEA;;AACA,IAAID,QAAQ,CAACG,EAAT,KAAgB,KAAhB,IAAyBH,QAAQ,CAACG,EAAT,KAAgB,KAA7C,EAAoD;AAClDD,EAAAA,YAAY,GAAGE,OAAO,CAAC,QAAD,CAAtB;AACD;;AAED,IAAI,CAACF,YAAL,EAAmB;AACjB;AACA,MACEF,QAAQ,CAACG,EAAT,KAAgB,SAAhB,IACAH,QAAQ,CAACG,EAAT,KAAgB,KADhB,IAEAH,QAAQ,CAACG,EAAT,KAAgB,KAFhB,IAGA;AACAH,EAAAA,QAAQ,CAACG,EAAT,KAAgB,KALlB,EAME;AACA,UAAM,IAAIE,KAAJ,CAAW;AACrB;AACA;AACA;AACA,sJAJU,CAAN;AAKD;AACF;;AAED,eAAeH,YAAf","sourcesContent":["import { Platform } from 'react-native';\nimport RNDeviceInfoModule from '../fabric/NativeDeviceInfoModule';\n\nlet RNDeviceInfo = RNDeviceInfoModule;\n\n// @ts-ignore\nif (Platform.OS === 'web' || Platform.OS === 'dom') {\n RNDeviceInfo = require('../web');\n}\n\nif (!RNDeviceInfo) {\n // Produce an error if we don't have the native module\n if (\n Platform.OS === 'android' ||\n Platform.OS === 'ios' ||\n Platform.OS === 'web' ||\n // @ts-ignore\n Platform.OS === 'dom'\n ) {\n throw new Error(`react-native-device-info: NativeModule.RNDeviceInfo is null. To fix this issue try these steps:\n • For react-native <= 0.59: Run \\`react-native link react-native-device-info\\` in the project root.\n • Rebuild and re-run the app.\n • If you are using CocoaPods on iOS, run \\`pod install\\` in the \\`ios\\` directory and then rebuild and re-run the app. You may also need to re-open Xcode to get the new pods.\n If none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-device-info/react-native-device-info`);\n }\n}\n\nexport default RNDeviceInfo;\n"]} +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/module/internal/nativeInterface.native.js b/node_modules/react-native-device-info/lib/module/internal/nativeInterface.native.js +new file mode 100644 +index 0000000..fdb1e56 +--- /dev/null ++++ b/node_modules/react-native-device-info/lib/module/internal/nativeInterface.native.js +@@ -0,0 +1,6 @@ ++import { Platform } from 'react-native'; ++import RNDeviceInfoModule from '../fabric/NativeDeviceInfoModule'; ++let RNDeviceInfo = RNDeviceInfoModule; // @ts-ignore ++ ++export default RNDeviceInfo; ++//# sourceMappingURL=nativeInterface.js.map +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/module/internal/supported-platform-info.js b/node_modules/react-native-device-info/lib/module/internal/supported-platform-info.js +index 159dece..7af2eda 100644 +--- a/node_modules/react-native-device-info/lib/module/internal/supported-platform-info.js ++++ b/node_modules/react-native-device-info/lib/module/internal/supported-platform-info.js +@@ -24,12 +24,14 @@ function getSupportedFunction(supportedPlatforms, getter, defaultGetter) { + */ + + +-export function getSupportedPlatformInfoSync({ +- getter, +- supportedPlatforms, +- defaultValue, +- memoKey +-}) { ++export function getSupportedPlatformInfoSync(_ref) { ++ let { ++ getter, ++ supportedPlatforms, ++ defaultValue, ++ memoKey ++ } = _ref; ++ + if (memoKey && memo[memoKey] != undefined) { + return memo[memoKey]; + } else { +@@ -47,12 +49,14 @@ export function getSupportedPlatformInfoSync({ + * @param param0 + */ + +-export async function getSupportedPlatformInfoAsync({ +- getter, +- supportedPlatforms, +- defaultValue, +- memoKey +-}) { ++export async function getSupportedPlatformInfoAsync(_ref2) { ++ let { ++ getter, ++ supportedPlatforms, ++ defaultValue, ++ memoKey ++ } = _ref2; ++ + if (memoKey && memo[memoKey] != undefined) { + return memo[memoKey]; + } else { +@@ -70,10 +74,11 @@ export async function getSupportedPlatformInfoAsync({ + * @param param0 + */ + +-export function getSupportedPlatformInfoFunctions({ +- syncGetter, +- ...asyncParams +-}) { ++export function getSupportedPlatformInfoFunctions(_ref3) { ++ let { ++ syncGetter, ++ ...asyncParams ++ } = _ref3; + return [() => getSupportedPlatformInfoAsync(asyncParams), () => getSupportedPlatformInfoSync({ ...asyncParams, + getter: syncGetter + })]; +diff --git a/node_modules/react-native-device-info/lib/module/internal/supported-platform-info.js.map b/node_modules/react-native-device-info/lib/module/internal/supported-platform-info.js.map +index ec1b98e..b5c3120 100644 +--- a/node_modules/react-native-device-info/lib/module/internal/supported-platform-info.js.map ++++ b/node_modules/react-native-device-info/lib/module/internal/supported-platform-info.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["supported-platform-info.ts"],"names":["Platform","memo","clearMemo","getSupportedFunction","supportedPlatforms","getter","defaultGetter","supportedMap","filter","key","OS","forEach","select","default","getSupportedPlatformInfoSync","defaultValue","memoKey","undefined","output","getSupportedPlatformInfoAsync","Promise","resolve","getSupportedPlatformInfoFunctions","syncGetter","asyncParams"],"mappings":"AAAA,SAASA,QAAT,QAAyB,cAAzB;AAWA;AACA,IAAIC,IAAc,GAAG,EAArB;AAEA,OAAO,SAASC,SAAT,GAAqB;AAC1BD,EAAAA,IAAI,GAAG,EAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;AACA,SAASE,oBAAT,CACEC,kBADF,EAEEC,MAFF,EAGEC,aAHF,EAIa;AACX,MAAIC,YAAiB,GAAG,EAAxB;AACAH,EAAAA,kBAAkB,CACfI,MADH,CACWC,GAAD,IAAST,QAAQ,CAACU,EAAT,IAAeD,GADlC,EAEGE,OAFH,CAEYF,GAAD,IAAUF,YAAY,CAACE,GAAD,CAAZ,GAAoBJ,MAFzC;AAGA,SAAOL,QAAQ,CAACY,MAAT,CAAgB,EACrB,GAAGL,YADkB;AAErBM,IAAAA,OAAO,EAAEP;AAFY,GAAhB,CAAP;AAID;AAED;AACA;AACA;AACA;;;AACA,OAAO,SAASQ,4BAAT,CAAyC;AAC9CT,EAAAA,MAD8C;AAE9CD,EAAAA,kBAF8C;AAG9CW,EAAAA,YAH8C;AAI9CC,EAAAA;AAJ8C,CAAzC,EAKsC;AAC3C,MAAIA,OAAO,IAAIf,IAAI,CAACe,OAAD,CAAJ,IAAiBC,SAAhC,EAA2C;AACzC,WAAOhB,IAAI,CAACe,OAAD,CAAX;AACD,GAFD,MAEO;AACL,UAAME,MAAM,GAAGf,oBAAoB,CAACC,kBAAD,EAAqBC,MAArB,EAA6B,MAAMU,YAAnC,CAApB,EAAf;;AACA,QAAIC,OAAJ,EAAa;AACXf,MAAAA,IAAI,CAACe,OAAD,CAAJ,GAAgBE,MAAhB;AACD;;AACD,WAAOA,MAAP;AACD;AACF;AAED;AACA;AACA;AACA;;AACA,OAAO,eAAeC,6BAAf,CAAgD;AACrDd,EAAAA,MADqD;AAErDD,EAAAA,kBAFqD;AAGrDW,EAAAA,YAHqD;AAIrDC,EAAAA;AAJqD,CAAhD,EAKgD;AACrD,MAAIA,OAAO,IAAIf,IAAI,CAACe,OAAD,CAAJ,IAAiBC,SAAhC,EAA2C;AACzC,WAAOhB,IAAI,CAACe,OAAD,CAAX;AACD,GAFD,MAEO;AACL,UAAME,MAAM,GAAG,MAAMf,oBAAoB,CAACC,kBAAD,EAAqBC,MAArB,EAA6B,MACpEe,OAAO,CAACC,OAAR,CAAgBN,YAAhB,CADuC,CAApB,EAArB;;AAGA,QAAIC,OAAJ,EAAa;AACXf,MAAAA,IAAI,CAACe,OAAD,CAAJ,GAAgBE,MAAhB;AACD;;AAED,WAAOA,MAAP;AACD;AACF;AAED;AACA;AACA;AACA;;AACA,OAAO,SAASI,iCAAT,CAA8C;AACnDC,EAAAA,UADmD;AAEnD,KAAGC;AAFgD,CAA9C,EAGyE;AAC9E,SAAO,CACL,MAAML,6BAA6B,CAACK,WAAD,CAD9B,EAEL,MAAMV,4BAA4B,CAAC,EAAE,GAAGU,WAAL;AAAkBnB,IAAAA,MAAM,EAAEkB;AAA1B,GAAD,CAF7B,CAAP;AAID","sourcesContent":["import { Platform } from 'react-native';\n\nimport {\n PlatformArray,\n Getter,\n GetSupportedPlatformInfoAsyncParams,\n GetSupportedPlatformInfoSyncParams,\n GetSupportedPlatformInfoFunctionsParams,\n} from './privateTypes';\n\ntype MemoType = { [key: string]: any };\n// centralized memo object\nlet memo: MemoType = {};\n\nexport function clearMemo() {\n memo = {};\n}\n\n/**\n * function returns the proper getter based current platform X supported platforms\n * @param supportedPlatforms array of supported platforms (OS)\n * @param getter desired function used to get info\n * @param defaultGetter getter that returns a default value if desired getter is not supported by current platform\n */\nfunction getSupportedFunction(\n supportedPlatforms: PlatformArray,\n getter: Getter,\n defaultGetter: Getter\n): Getter {\n let supportedMap: any = {};\n supportedPlatforms\n .filter((key) => Platform.OS == key)\n .forEach((key) => (supportedMap[key] = getter));\n return Platform.select({\n ...supportedMap,\n default: defaultGetter,\n });\n}\n\n/**\n * function used to get desired info synchronously — with optional memoization\n * @param param0\n */\nexport function getSupportedPlatformInfoSync({\n getter,\n supportedPlatforms,\n defaultValue,\n memoKey,\n}: GetSupportedPlatformInfoSyncParams): T {\n if (memoKey && memo[memoKey] != undefined) {\n return memo[memoKey];\n } else {\n const output = getSupportedFunction(supportedPlatforms, getter, () => defaultValue)();\n if (memoKey) {\n memo[memoKey] = output;\n }\n return output;\n }\n}\n\n/**\n * function used to get desired info asynchronously — with optional memoization\n * @param param0\n */\nexport async function getSupportedPlatformInfoAsync({\n getter,\n supportedPlatforms,\n defaultValue,\n memoKey,\n}: GetSupportedPlatformInfoAsyncParams): Promise {\n if (memoKey && memo[memoKey] != undefined) {\n return memo[memoKey];\n } else {\n const output = await getSupportedFunction(supportedPlatforms, getter, () =>\n Promise.resolve(defaultValue)\n )();\n if (memoKey) {\n memo[memoKey] = output;\n }\n\n return output;\n }\n}\n\n/**\n * function that returns array of getter functions [async, sync]\n * @param param0\n */\nexport function getSupportedPlatformInfoFunctions({\n syncGetter,\n ...asyncParams\n}: GetSupportedPlatformInfoFunctionsParams): [Getter>, Getter] {\n return [\n () => getSupportedPlatformInfoAsync(asyncParams),\n () => getSupportedPlatformInfoSync({ ...asyncParams, getter: syncGetter }),\n ];\n}\n"]} +\ No newline at end of file ++{"version":3,"sources":["supported-platform-info.ts"],"names":["Platform","memo","clearMemo","getSupportedFunction","supportedPlatforms","getter","defaultGetter","supportedMap","filter","key","OS","forEach","select","default","getSupportedPlatformInfoSync","defaultValue","memoKey","undefined","output","getSupportedPlatformInfoAsync","Promise","resolve","getSupportedPlatformInfoFunctions","syncGetter","asyncParams"],"mappings":"AAAA,SAASA,QAAT,QAAyB,cAAzB;AAWA;AACA,IAAIC,IAAc,GAAG,EAArB;AAEA,OAAO,SAASC,SAAT,GAAqB;AAC1BD,EAAAA,IAAI,GAAG,EAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;AACA,SAASE,oBAAT,CACEC,kBADF,EAEEC,MAFF,EAGEC,aAHF,EAIa;AACX,MAAIC,YAAiB,GAAG,EAAxB;AACAH,EAAAA,kBAAkB,CACfI,MADH,CACWC,GAAD,IAAST,QAAQ,CAACU,EAAT,IAAeD,GADlC,EAEGE,OAFH,CAEYF,GAAD,IAAUF,YAAY,CAACE,GAAD,CAAZ,GAAoBJ,MAFzC;AAGA,SAAOL,QAAQ,CAACY,MAAT,CAAgB,EACrB,GAAGL,YADkB;AAErBM,IAAAA,OAAO,EAAEP;AAFY,GAAhB,CAAP;AAID;AAED;AACA;AACA;AACA;;;AACA,OAAO,SAASQ,4BAAT,OAKsC;AAAA,MALG;AAC9CT,IAAAA,MAD8C;AAE9CD,IAAAA,kBAF8C;AAG9CW,IAAAA,YAH8C;AAI9CC,IAAAA;AAJ8C,GAKH;;AAC3C,MAAIA,OAAO,IAAIf,IAAI,CAACe,OAAD,CAAJ,IAAiBC,SAAhC,EAA2C;AACzC,WAAOhB,IAAI,CAACe,OAAD,CAAX;AACD,GAFD,MAEO;AACL,UAAME,MAAM,GAAGf,oBAAoB,CAACC,kBAAD,EAAqBC,MAArB,EAA6B,MAAMU,YAAnC,CAApB,EAAf;;AACA,QAAIC,OAAJ,EAAa;AACXf,MAAAA,IAAI,CAACe,OAAD,CAAJ,GAAgBE,MAAhB;AACD;;AACD,WAAOA,MAAP;AACD;AACF;AAED;AACA;AACA;AACA;;AACA,OAAO,eAAeC,6BAAf,QAKgD;AAAA,MALA;AACrDd,IAAAA,MADqD;AAErDD,IAAAA,kBAFqD;AAGrDW,IAAAA,YAHqD;AAIrDC,IAAAA;AAJqD,GAKA;;AACrD,MAAIA,OAAO,IAAIf,IAAI,CAACe,OAAD,CAAJ,IAAiBC,SAAhC,EAA2C;AACzC,WAAOhB,IAAI,CAACe,OAAD,CAAX;AACD,GAFD,MAEO;AACL,UAAME,MAAM,GAAG,MAAMf,oBAAoB,CAACC,kBAAD,EAAqBC,MAArB,EAA6B,MACpEe,OAAO,CAACC,OAAR,CAAgBN,YAAhB,CADuC,CAApB,EAArB;;AAGA,QAAIC,OAAJ,EAAa;AACXf,MAAAA,IAAI,CAACe,OAAD,CAAJ,GAAgBE,MAAhB;AACD;;AAED,WAAOA,MAAP;AACD;AACF;AAED;AACA;AACA;AACA;;AACA,OAAO,SAASI,iCAAT,QAGyE;AAAA,MAH3B;AACnDC,IAAAA,UADmD;AAEnD,OAAGC;AAFgD,GAG2B;AAC9E,SAAO,CACL,MAAML,6BAA6B,CAACK,WAAD,CAD9B,EAEL,MAAMV,4BAA4B,CAAC,EAAE,GAAGU,WAAL;AAAkBnB,IAAAA,MAAM,EAAEkB;AAA1B,GAAD,CAF7B,CAAP;AAID","sourcesContent":["import { Platform } from 'react-native';\n\nimport {\n PlatformArray,\n Getter,\n GetSupportedPlatformInfoAsyncParams,\n GetSupportedPlatformInfoSyncParams,\n GetSupportedPlatformInfoFunctionsParams,\n} from './privateTypes';\n\ntype MemoType = { [key: string]: any };\n// centralized memo object\nlet memo: MemoType = {};\n\nexport function clearMemo() {\n memo = {};\n}\n\n/**\n * function returns the proper getter based current platform X supported platforms\n * @param supportedPlatforms array of supported platforms (OS)\n * @param getter desired function used to get info\n * @param defaultGetter getter that returns a default value if desired getter is not supported by current platform\n */\nfunction getSupportedFunction(\n supportedPlatforms: PlatformArray,\n getter: Getter,\n defaultGetter: Getter\n): Getter {\n let supportedMap: any = {};\n supportedPlatforms\n .filter((key) => Platform.OS == key)\n .forEach((key) => (supportedMap[key] = getter));\n return Platform.select({\n ...supportedMap,\n default: defaultGetter,\n });\n}\n\n/**\n * function used to get desired info synchronously — with optional memoization\n * @param param0\n */\nexport function getSupportedPlatformInfoSync({\n getter,\n supportedPlatforms,\n defaultValue,\n memoKey,\n}: GetSupportedPlatformInfoSyncParams): T {\n if (memoKey && memo[memoKey] != undefined) {\n return memo[memoKey];\n } else {\n const output = getSupportedFunction(supportedPlatforms, getter, () => defaultValue)();\n if (memoKey) {\n memo[memoKey] = output;\n }\n return output;\n }\n}\n\n/**\n * function used to get desired info asynchronously — with optional memoization\n * @param param0\n */\nexport async function getSupportedPlatformInfoAsync({\n getter,\n supportedPlatforms,\n defaultValue,\n memoKey,\n}: GetSupportedPlatformInfoAsyncParams): Promise {\n if (memoKey && memo[memoKey] != undefined) {\n return memo[memoKey];\n } else {\n const output = await getSupportedFunction(supportedPlatforms, getter, () =>\n Promise.resolve(defaultValue)\n )();\n if (memoKey) {\n memo[memoKey] = output;\n }\n\n return output;\n }\n}\n\n/**\n * function that returns array of getter functions [async, sync]\n * @param param0\n */\nexport function getSupportedPlatformInfoFunctions({\n syncGetter,\n ...asyncParams\n}: GetSupportedPlatformInfoFunctionsParams): [Getter>, Getter] {\n return [\n () => getSupportedPlatformInfoAsync(asyncParams),\n () => getSupportedPlatformInfoSync({ ...asyncParams, getter: syncGetter }),\n ];\n}\n"]} +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/module/web/index.js b/node_modules/react-native-device-info/lib/module/web/index.js +index 147a2c5..a4810c0 100644 +--- a/node_modules/react-native-device-info/lib/module/web/index.js ++++ b/node_modules/react-native-device-info/lib/module/web/index.js +@@ -159,9 +159,12 @@ export const getBaseOs = async () => { + }; + export const getTotalDiskCapacity = async () => { + if (navigator.storage && navigator.storage.estimate) { +- return navigator.storage.estimate().then(({ +- quota +- }) => quota); ++ return navigator.storage.estimate().then(_ref => { ++ let { ++ quota ++ } = _ref; ++ return quota; ++ }); + } + + return -1; +@@ -172,10 +175,13 @@ export const getTotalDiskCapacitySync = () => { + }; + export const getFreeDiskStorage = async () => { + if (navigator.storage && navigator.storage.estimate) { +- return navigator.storage.estimate().then(({ +- quota, +- usage +- }) => quota - usage); ++ return navigator.storage.estimate().then(_ref2 => { ++ let { ++ quota, ++ usage ++ } = _ref2; ++ return quota - usage; ++ }); + } + + return -1; +diff --git a/node_modules/react-native-device-info/lib/module/web/index.js.map b/node_modules/react-native-device-info/lib/module/web/index.js.map +index 68c17e6..2f2cfbd 100644 +--- a/node_modules/react-native-device-info/lib/module/web/index.js.map ++++ b/node_modules/react-native-device-info/lib/module/web/index.js.map +@@ -1 +1 @@ +-{"version":3,"sources":["index.js"],"names":["NativeEventEmitter","NativeModules","deviceInfoEmitter","RNDeviceInfo","batteryCharging","batteryLevel","powerState","_readPowerState","battery","level","charging","chargingtime","dischargingtime","lowPowerMode","batteryState","getMaxMemorySync","window","performance","memory","jsHeapSizeLimit","getInstallReferrerSync","document","referrer","isAirplaneModeSync","navigator","onLine","getUserAgentSync","userAgent","isLocationEnabledSync","geolocation","getTotalMemorySync","deviceMemory","getUsedMemorySync","usedJSHeapSize","init","getBattery","then","addEventListener","emit","getBaseOsSync","platform","macosPlatforms","windowsPlatforms","iosPlatforms","os","indexOf","test","getInstallReferrer","getUserAgent","isBatteryCharging","isBatteryChargingSync","isCameraPresent","mediaDevices","enumerateDevices","devices","find","d","kind","isCameraPresentSync","console","log","getBatteryLevel","getBatteryLevelSync","isLocationEnabled","isAirplaneMode","getBaseOs","getTotalDiskCapacity","storage","estimate","quota","getTotalDiskCapacitySync","getFreeDiskStorage","usage","getFreeDiskStorageSync","getMaxMemory","getUsedMemory","getTotalMemory","getPowerState","getPowerStateSync"],"mappings":"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","sourcesContent":["import { NativeEventEmitter, NativeModules } from 'react-native';\n\nconst deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);\n\nlet batteryCharging = false,\n batteryLevel = -1,\n powerState = {};\n\nconst _readPowerState = (battery) => {\n const { level, charging, chargingtime, dischargingtime } = battery;\n\n return {\n batteryLevel: level,\n lowPowerMode: false,\n batteryState: level === 1 ? 'full' : charging ? 'charging' : 'unplugged',\n chargingtime,\n dischargingtime,\n };\n};\n\nexport const getMaxMemorySync = () => {\n if (window.performance && window.performance.memory) {\n return window.performance.memory.jsHeapSizeLimit;\n }\n return -1;\n};\n\nexport const getInstallReferrerSync = () => {\n return document.referrer;\n};\n\nexport const isAirplaneModeSync = () => {\n return !!navigator.onLine;\n};\n\nexport const getUserAgentSync = () => {\n return window.navigator.userAgent;\n};\n\nexport const isLocationEnabledSync = () => {\n return !!navigator.geolocation;\n};\n\nexport const getTotalMemorySync = () => {\n if (navigator.deviceMemory) {\n return navigator.deviceMemory * 1000000000;\n }\n return -1;\n};\n\nexport const getUsedMemorySync = () => {\n if (window.performance && window.performance.memory) {\n return window.performance.memory.usedJSHeapSize;\n }\n return -1;\n};\n\nconst init = () => {\n if (typeof navigator === 'undefined' || !navigator.getBattery) return;\n\n navigator.getBattery().then((battery) => {\n batteryCharging = battery.charging;\n\n battery.addEventListener('chargingchange', () => {\n const { charging } = battery;\n\n batteryCharging = charging;\n powerState = _readPowerState(battery);\n\n deviceInfoEmitter.emit('RNDeviceInfo_powerStateDidChange', powerState);\n });\n\n battery.addEventListener('levelchange', () => {\n const { level } = battery;\n\n batteryLevel = level;\n powerState = _readPowerState(battery);\n\n deviceInfoEmitter.emit('RNDeviceInfo_batteryLevelDidChange', level);\n if (level < 0.2) {\n deviceInfoEmitter.emit('RNDeviceInfo_batteryLevelIsLow', level);\n }\n });\n });\n};\n\nconst getBaseOsSync = () => {\n const userAgent = window.navigator.userAgent,\n platform = window.navigator.platform,\n macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],\n windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],\n iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n\n let os = platform;\n\n if (macosPlatforms.indexOf(platform) !== -1) {\n os = 'Mac OS';\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n os = 'iOS';\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n os = 'Windows';\n } else if (/Android/.test(userAgent)) {\n os = 'Android';\n } else if (!os && /Linux/.test(platform)) {\n os = 'Linux';\n }\n\n return os;\n};\n\ninit();\n/**\n * react-native-web empty polyfill.\n */\n\nexport const getInstallReferrer = async () => {\n return getInstallReferrerSync();\n};\n\nexport const getUserAgent = async () => {\n return getUserAgentSync();\n};\n\nexport const isBatteryCharging = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then(battery => battery.charging);\n }\n return false;\n};\n\nexport const isBatteryChargingSync = () => {\n return batteryCharging;\n};\n\nexport const isCameraPresent = async () => {\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices().then(devices => {\n return !!devices.find((d) => d.kind === 'videoinput');\n });\n }\n return false;\n};\n\nexport const isCameraPresentSync = () => {\n console.log(\n '[react-native-device-info] isCameraPresentSync not supported - please use isCameraPresent'\n );\n return false;\n};\n\nexport const getBatteryLevel = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then(battery => battery.level);\n }\n return -1;\n};\n\nexport const getBatteryLevelSync = () => {\n return batteryLevel;\n};\n\nexport const isLocationEnabled = async () => {\n return isLocationEnabledSync();\n};\n\nexport const isAirplaneMode = async () => {\n return isAirplaneModeSync();\n};\n\nexport const getBaseOs = async () => {\n return getBaseOsSync();\n};\n\nexport const getTotalDiskCapacity = async () => {\n if (navigator.storage && navigator.storage.estimate) {\n return navigator.storage.estimate().then(({ quota }) => quota)\n }\n return -1;\n};\n\nexport const getTotalDiskCapacitySync = () => {\n console.log(\n '[react-native-device-info] getTotalDiskCapacitySync not supported - please use getTotalDiskCapacity'\n );\n return -1;\n};\n\nexport const getFreeDiskStorage = async () => {\n if (navigator.storage && navigator.storage.estimate) {\n return navigator.storage.estimate().then(({ quota, usage }) => quota - usage)\n }\n return -1;\n};\n\nexport const getFreeDiskStorageSync = () => {\n console.log(\n '[react-native-device-info] getFreeDiskStorageSync not supported - please use getFreeDiskStorage'\n );\n return -1;\n};\n\nexport const getMaxMemory = async () => {\n return getMaxMemorySync();\n};\n\nexport const getUsedMemory = async () => {\n return getUsedMemorySync();\n};\n\nexport const getTotalMemory = async () => {\n return getTotalMemorySync();\n};\n\nexport const getPowerState = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then((battery) => _readPowerState(battery))\n }\n return {};\n};\n\nexport const getPowerStateSync = () => {\n return powerState;\n};\n"]} +\ No newline at end of file ++{"version":3,"sources":["index.js"],"names":["NativeEventEmitter","NativeModules","deviceInfoEmitter","RNDeviceInfo","batteryCharging","batteryLevel","powerState","_readPowerState","battery","level","charging","chargingtime","dischargingtime","lowPowerMode","batteryState","getMaxMemorySync","window","performance","memory","jsHeapSizeLimit","getInstallReferrerSync","document","referrer","isAirplaneModeSync","navigator","onLine","getUserAgentSync","userAgent","isLocationEnabledSync","geolocation","getTotalMemorySync","deviceMemory","getUsedMemorySync","usedJSHeapSize","init","getBattery","then","addEventListener","emit","getBaseOsSync","platform","macosPlatforms","windowsPlatforms","iosPlatforms","os","indexOf","test","getInstallReferrer","getUserAgent","isBatteryCharging","isBatteryChargingSync","isCameraPresent","mediaDevices","enumerateDevices","devices","find","d","kind","isCameraPresentSync","console","log","getBatteryLevel","getBatteryLevelSync","isLocationEnabled","isAirplaneMode","getBaseOs","getTotalDiskCapacity","storage","estimate","quota","getTotalDiskCapacitySync","getFreeDiskStorage","usage","getFreeDiskStorageSync","getMaxMemory","getUsedMemory","getTotalMemory","getPowerState","getPowerStateSync"],"mappings":"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","sourcesContent":["import { NativeEventEmitter, NativeModules } from 'react-native';\n\nconst deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);\n\nlet batteryCharging = false,\n batteryLevel = -1,\n powerState = {};\n\nconst _readPowerState = (battery) => {\n const { level, charging, chargingtime, dischargingtime } = battery;\n\n return {\n batteryLevel: level,\n lowPowerMode: false,\n batteryState: level === 1 ? 'full' : charging ? 'charging' : 'unplugged',\n chargingtime,\n dischargingtime,\n };\n};\n\nexport const getMaxMemorySync = () => {\n if (window.performance && window.performance.memory) {\n return window.performance.memory.jsHeapSizeLimit;\n }\n return -1;\n};\n\nexport const getInstallReferrerSync = () => {\n return document.referrer;\n};\n\nexport const isAirplaneModeSync = () => {\n return !!navigator.onLine;\n};\n\nexport const getUserAgentSync = () => {\n return window.navigator.userAgent;\n};\n\nexport const isLocationEnabledSync = () => {\n return !!navigator.geolocation;\n};\n\nexport const getTotalMemorySync = () => {\n if (navigator.deviceMemory) {\n return navigator.deviceMemory * 1000000000;\n }\n return -1;\n};\n\nexport const getUsedMemorySync = () => {\n if (window.performance && window.performance.memory) {\n return window.performance.memory.usedJSHeapSize;\n }\n return -1;\n};\n\nconst init = () => {\n if (typeof navigator === 'undefined' || !navigator.getBattery) return;\n\n navigator.getBattery().then((battery) => {\n batteryCharging = battery.charging;\n\n battery.addEventListener('chargingchange', () => {\n const { charging } = battery;\n\n batteryCharging = charging;\n powerState = _readPowerState(battery);\n\n deviceInfoEmitter.emit('RNDeviceInfo_powerStateDidChange', powerState);\n });\n\n battery.addEventListener('levelchange', () => {\n const { level } = battery;\n\n batteryLevel = level;\n powerState = _readPowerState(battery);\n\n deviceInfoEmitter.emit('RNDeviceInfo_batteryLevelDidChange', level);\n if (level < 0.2) {\n deviceInfoEmitter.emit('RNDeviceInfo_batteryLevelIsLow', level);\n }\n });\n });\n};\n\nconst getBaseOsSync = () => {\n const userAgent = window.navigator.userAgent,\n platform = window.navigator.platform,\n macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],\n windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],\n iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n\n let os = platform;\n\n if (macosPlatforms.indexOf(platform) !== -1) {\n os = 'Mac OS';\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n os = 'iOS';\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n os = 'Windows';\n } else if (/Android/.test(userAgent)) {\n os = 'Android';\n } else if (!os && /Linux/.test(platform)) {\n os = 'Linux';\n }\n\n return os;\n};\n\ninit();\n/**\n * react-native-web empty polyfill.\n */\n\nexport const getInstallReferrer = async () => {\n return getInstallReferrerSync();\n};\n\nexport const getUserAgent = async () => {\n return getUserAgentSync();\n};\n\nexport const isBatteryCharging = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then(battery => battery.charging);\n }\n return false;\n};\n\nexport const isBatteryChargingSync = () => {\n return batteryCharging;\n};\n\nexport const isCameraPresent = async () => {\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices().then(devices => {\n return !!devices.find((d) => d.kind === 'videoinput');\n });\n }\n return false;\n};\n\nexport const isCameraPresentSync = () => {\n console.log(\n '[react-native-device-info] isCameraPresentSync not supported - please use isCameraPresent'\n );\n return false;\n};\n\nexport const getBatteryLevel = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then(battery => battery.level);\n }\n return -1;\n};\n\nexport const getBatteryLevelSync = () => {\n return batteryLevel;\n};\n\nexport const isLocationEnabled = async () => {\n return isLocationEnabledSync();\n};\n\nexport const isAirplaneMode = async () => {\n return isAirplaneModeSync();\n};\n\nexport const getBaseOs = async () => {\n return getBaseOsSync();\n};\n\nexport const getTotalDiskCapacity = async () => {\n if (navigator.storage && navigator.storage.estimate) {\n return navigator.storage.estimate().then(({ quota }) => quota)\n }\n return -1;\n};\n\nexport const getTotalDiskCapacitySync = () => {\n console.log(\n '[react-native-device-info] getTotalDiskCapacitySync not supported - please use getTotalDiskCapacity'\n );\n return -1;\n};\n\nexport const getFreeDiskStorage = async () => {\n if (navigator.storage && navigator.storage.estimate) {\n return navigator.storage.estimate().then(({ quota, usage }) => quota - usage)\n }\n return -1;\n};\n\nexport const getFreeDiskStorageSync = () => {\n console.log(\n '[react-native-device-info] getFreeDiskStorageSync not supported - please use getFreeDiskStorage'\n );\n return -1;\n};\n\nexport const getMaxMemory = async () => {\n return getMaxMemorySync();\n};\n\nexport const getUsedMemory = async () => {\n return getUsedMemorySync();\n};\n\nexport const getTotalMemory = async () => {\n return getTotalMemorySync();\n};\n\nexport const getPowerState = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then((battery) => _readPowerState(battery))\n }\n return {};\n};\n\nexport const getPowerStateSync = () => {\n return powerState;\n};\n"]} +\ No newline at end of file +diff --git a/node_modules/react-native-device-info/lib/typescript/fabric/NativeDeviceInfoModule.d.ts b/node_modules/react-native-device-info/lib/typescript/fabric/NativeDeviceInfoModule.d.ts +new file mode 100644 +index 0000000..08ca7ee +--- /dev/null ++++ b/node_modules/react-native-device-info/lib/typescript/fabric/NativeDeviceInfoModule.d.ts +@@ -0,0 +1,150 @@ ++import { TurboModule } from 'react-native'; ++export interface Spec extends TurboModule { ++ getPowerState: () => Promise<{ ++ batteryLevel: number; ++ batteryState: string; ++ lowPowerMode: boolean; ++ }>; ++ getPowerStateSync: () => { ++ batteryLevel: number; ++ batteryState: string; ++ lowPowerMode: boolean; ++ }; ++ getSupported32BitAbis: () => Promise; ++ getSupported32BitAbisSync: () => string[]; ++ getSupported64BitAbis: () => Promise; ++ getSupported64BitAbisSync: () => string[]; ++ getSupportedAbis: () => Promise; ++ getSupportedAbisSync: () => string[]; ++ getSystemManufacturer: () => Promise; ++ getSystemManufacturerSync: () => string; ++ getAndroidId: () => Promise; ++ getAndroidIdSync: () => string; ++ getApiLevel: () => Promise; ++ getApiLevelSync: () => number; ++ getAvailableLocationProviders: () => Promise; ++ getAvailableLocationProvidersSync: () => Object; ++ getBaseOs: () => Promise; ++ getBaseOsSync: () => string; ++ getBatteryLevel: () => Promise; ++ getBatteryLevelSync: () => number; ++ getBootloader: () => Promise; ++ getBootloaderSync: () => string; ++ getBuildId: () => Promise; ++ getBuildIdSync: () => string; ++ getCarrier: () => Promise; ++ getCarrierSync: () => string; ++ getCodename: () => Promise; ++ getCodenameSync: () => string; ++ getDevice: () => Promise; ++ getDeviceName: () => Promise; ++ getDeviceNameSync: () => string; ++ getDeviceSync: () => string; ++ getDeviceToken: () => Promise; ++ getDisplay: () => Promise; ++ getDisplaySync: () => string; ++ getFingerprint: () => Promise; ++ getFingerprintSync: () => string; ++ getFirstInstallTime: () => Promise; ++ getFirstInstallTimeSync: () => number; ++ getFontScale: () => Promise; ++ getFontScaleSync: () => number; ++ getFreeDiskStorage: () => Promise; ++ getFreeDiskStorageOld: () => Promise; ++ getFreeDiskStorageSync: () => number; ++ getFreeDiskStorageOldSync: () => number; ++ getHardware: () => Promise; ++ getHardwareSync: () => string; ++ getHost: () => Promise; ++ getHostSync: () => string; ++ getIncremental: () => Promise; ++ getIncrementalSync: () => string; ++ getInstallerPackageName: () => Promise; ++ getInstallerPackageNameSync: () => string; ++ getInstallReferrer: () => Promise; ++ getInstallReferrerSync: () => string; ++ getInstanceId: () => Promise; ++ getInstanceIdSync: () => string; ++ getIpAddress: () => Promise; ++ getIpAddressSync: () => string; ++ getLastUpdateTime: () => Promise; ++ getLastUpdateTimeSync: () => number; ++ getMacAddress: () => Promise; ++ getMacAddressSync: () => string; ++ getMaxMemory: () => Promise; ++ getMaxMemorySync: () => number; ++ getPhoneNumber: () => Promise; ++ getPhoneNumberSync: () => string; ++ getPreviewSdkInt: () => Promise; ++ getPreviewSdkIntSync: () => number; ++ getProduct: () => Promise; ++ getProductSync: () => string; ++ getSecurityPatch: () => Promise; ++ getSecurityPatchSync: () => string; ++ getSerialNumber: () => Promise; ++ getSerialNumberSync: () => string; ++ getSystemAvailableFeatures: () => Promise; ++ getSystemAvailableFeaturesSync: () => string[]; ++ getTags: () => Promise; ++ getTagsSync: () => string; ++ getTotalDiskCapacity: () => Promise; ++ getTotalDiskCapacityOld: () => Promise; ++ getTotalDiskCapacitySync: () => number; ++ getTotalDiskCapacityOldSync: () => number; ++ getTotalMemory: () => Promise; ++ getTotalMemorySync: () => number; ++ getType: () => Promise; ++ getTypeSync: () => string; ++ getUniqueId: () => Promise; ++ getUniqueIdSync: () => string; ++ getUsedMemory: () => Promise; ++ getUsedMemorySync: () => number; ++ getUserAgent: () => Promise; ++ getUserAgentSync: () => string; ++ getBrightness: () => Promise; ++ getBrightnessSync: () => number; ++ hasGms: () => Promise; ++ hasGmsSync: () => boolean; ++ hasHms: () => Promise; ++ hasHmsSync: () => boolean; ++ hasSystemFeature: (feature: string) => Promise; ++ hasSystemFeatureSync: (feature: string) => boolean; ++ isAirplaneMode: () => Promise; ++ isAirplaneModeSync: () => boolean; ++ isBatteryCharging: () => Promise; ++ isBatteryChargingSync: () => boolean; ++ isCameraPresent: () => Promise; ++ isCameraPresentSync: () => boolean; ++ isEmulator: () => Promise; ++ isEmulatorSync: () => boolean; ++ isHeadphonesConnected: () => Promise; ++ isHeadphonesConnectedSync: () => boolean; ++ isLocationEnabled: () => Promise; ++ isLocationEnabledSync: () => boolean; ++ isPinOrFingerprintSet: () => Promise; ++ isPinOrFingerprintSetSync: () => boolean; ++ isMouseConnected: () => Promise; ++ isMouseConnectedSync: () => boolean; ++ isKeyboardConnected: () => Promise; ++ isKeyboardConnectedSync: () => boolean; ++ isTabletMode: () => Promise; ++ syncUniqueId: () => Promise; ++ addListener(eventName: string): void; ++ removeListeners(count: number): void; ++ getConstants(): { ++ appName: string; ++ appVersion: string; ++ brand: string; ++ buildNumber: string; ++ bundleId: string; ++ deviceId: string; ++ deviceType: string; ++ isTablet: boolean; ++ isDisplayZoomed?: boolean; ++ model: string; ++ systemName: string; ++ systemVersion: string; ++ }; ++} ++declare const _default: Spec; ++export default _default; +diff --git a/node_modules/react-native-device-info/lib/typescript/index.d.ts b/node_modules/react-native-device-info/lib/typescript/index.d.ts +index 9ee719c..bf0912a 100644 +--- a/node_modules/react-native-device-info/lib/typescript/index.d.ts ++++ b/node_modules/react-native-device-info/lib/typescript/index.d.ts +@@ -44,6 +44,7 @@ export declare const getCodename: import("./internal/privateTypes").Getter>, getIncrementalSync: import("./internal/privateTypes").Getter; + export declare const isEmulator: import("./internal/privateTypes").Getter>, isEmulatorSync: import("./internal/privateTypes").Getter; + export declare const isTablet: () => boolean; ++export declare const isDisplayZoomed: () => boolean | undefined; + export declare const isPinOrFingerprintSet: import("./internal/privateTypes").Getter>, isPinOrFingerprintSetSync: import("./internal/privateTypes").Getter; + export declare function hasNotch(): boolean; + export declare function hasDynamicIsland(): boolean; +diff --git a/node_modules/react-native-device-info/lib/typescript/internal/nativeInterface.d.ts b/node_modules/react-native-device-info/lib/typescript/internal/nativeInterface.d.ts +index 56c84eb..59f6bc5 100644 +--- a/node_modules/react-native-device-info/lib/typescript/internal/nativeInterface.d.ts ++++ b/node_modules/react-native-device-info/lib/typescript/internal/nativeInterface.d.ts +@@ -1,3 +1,2 @@ +-import { DeviceInfoNativeModule } from './privateTypes'; +-declare const _default: DeviceInfoNativeModule; +-export default _default; ++declare let RNDeviceInfo: import("../fabric/NativeDeviceInfoModule").Spec; ++export default RNDeviceInfo; +diff --git a/node_modules/react-native-device-info/lib/typescript/internal/privateTypes.d.ts b/node_modules/react-native-device-info/lib/typescript/internal/privateTypes.d.ts +index f137e75..129b5ef 100644 +--- a/node_modules/react-native-device-info/lib/typescript/internal/privateTypes.d.ts ++++ b/node_modules/react-native-device-info/lib/typescript/internal/privateTypes.d.ts +@@ -5,7 +5,7 @@ export declare type NotchDevice = { + model: string; + [key: string]: string; + }; +-interface NativeConstants { ++export interface NativeConstants { + appName: string; + appVersion: string; + brand: string; +@@ -14,6 +14,7 @@ interface NativeConstants { + deviceId: string; + deviceType: DeviceType; + isTablet: boolean; ++ isDisplayZoomed?: boolean; + model: string; + systemName: string; + systemVersion: string; +@@ -170,6 +171,7 @@ export interface DeviceInfoModule extends ExposedNativeMethods { + isLandscape: () => Promise; + isLandscapeSync: () => boolean; + isTablet: () => boolean; ++ isDisplayZoomed: () => boolean | undefined; + supported32BitAbis: () => Promise; + supported32BitAbisSync: () => string[]; + supported64BitAbis: () => Promise; +diff --git a/node_modules/react-native-device-info/package.json b/node_modules/react-native-device-info/package.json +index f15e34f..8afd532 100644 +--- a/node_modules/react-native-device-info/package.json ++++ b/node_modules/react-native-device-info/package.json +@@ -104,7 +104,7 @@ + "@testing-library/react-hooks": "^7.0.2", + "@types/jest": "^27.4.1", + "@types/react": "17.0.39", +- "@types/react-native": "^0.67.2", ++ "@types/react-native": "^0.71.3", + "eslint": "^7", + "eslint-plugin-prettier": "^4.0.0", + "husky": "^7.0.4", +@@ -134,5 +134,13 @@ + "module", + "typescript" + ] ++ }, ++ "codegenConfig": { ++ "name": "rndeviceinfomodule", ++ "type": "modules", ++ "jsSrcsDir": "./src/fabric", ++ "android": { ++ "javaPackageName": "com.learnium.RNDeviceInfo" ++ } + } + } +diff --git a/node_modules/react-native-device-info/src/fabric/NativeDeviceInfoModule.ts b/node_modules/react-native-device-info/src/fabric/NativeDeviceInfoModule.ts +new file mode 100644 +index 0000000..0dce963 +--- /dev/null ++++ b/node_modules/react-native-device-info/src/fabric/NativeDeviceInfoModule.ts +@@ -0,0 +1,152 @@ ++import { TurboModuleRegistry, TurboModule } from 'react-native'; ++ ++export interface Spec extends TurboModule { ++ getPowerState: () => Promise<{ ++ batteryLevel: number; ++ batteryState: string; ++ lowPowerMode: boolean; ++ }>; ++ getPowerStateSync: () => { ++ batteryLevel: number; ++ batteryState: string; ++ lowPowerMode: boolean; ++ }; // should be PowerState ++ getSupported32BitAbis: () => Promise; ++ getSupported32BitAbisSync: () => string[]; ++ getSupported64BitAbis: () => Promise; ++ getSupported64BitAbisSync: () => string[]; ++ getSupportedAbis: () => Promise; ++ getSupportedAbisSync: () => string[]; ++ getSystemManufacturer: () => Promise; ++ getSystemManufacturerSync: () => string; ++ getAndroidId: () => Promise; ++ getAndroidIdSync: () => string; ++ getApiLevel: () => Promise; ++ getApiLevelSync: () => number; ++ getAvailableLocationProviders: () => Promise; ++ getAvailableLocationProvidersSync: () => Object; // should be LocationProviderInfo ++ getBaseOs: () => Promise; ++ getBaseOsSync: () => string; ++ getBatteryLevel: () => Promise; ++ getBatteryLevelSync: () => number; ++ getBootloader: () => Promise; ++ getBootloaderSync: () => string; ++ getBuildId: () => Promise; ++ getBuildIdSync: () => string; ++ getCarrier: () => Promise; ++ getCarrierSync: () => string; ++ getCodename: () => Promise; ++ getCodenameSync: () => string; ++ getDevice: () => Promise; ++ getDeviceName: () => Promise; ++ getDeviceNameSync: () => string; ++ getDeviceSync: () => string; ++ getDeviceToken: () => Promise; ++ getDisplay: () => Promise; ++ getDisplaySync: () => string; ++ getFingerprint: () => Promise; ++ getFingerprintSync: () => string; ++ getFirstInstallTime: () => Promise; ++ getFirstInstallTimeSync: () => number; ++ getFontScale: () => Promise; ++ getFontScaleSync: () => number; ++ getFreeDiskStorage: () => Promise; ++ getFreeDiskStorageOld: () => Promise; ++ getFreeDiskStorageSync: () => number; ++ getFreeDiskStorageOldSync: () => number; ++ getHardware: () => Promise; ++ getHardwareSync: () => string; ++ getHost: () => Promise; ++ getHostSync: () => string; ++ getIncremental: () => Promise; ++ getIncrementalSync: () => string; ++ getInstallerPackageName: () => Promise; ++ getInstallerPackageNameSync: () => string; ++ getInstallReferrer: () => Promise; ++ getInstallReferrerSync: () => string; ++ getInstanceId: () => Promise; ++ getInstanceIdSync: () => string; ++ getIpAddress: () => Promise; ++ getIpAddressSync: () => string; ++ getLastUpdateTime: () => Promise; ++ getLastUpdateTimeSync: () => number; ++ getMacAddress: () => Promise; ++ getMacAddressSync: () => string; ++ getMaxMemory: () => Promise; ++ getMaxMemorySync: () => number; ++ getPhoneNumber: () => Promise; ++ getPhoneNumberSync: () => string; ++ getPreviewSdkInt: () => Promise; ++ getPreviewSdkIntSync: () => number; ++ getProduct: () => Promise; ++ getProductSync: () => string; ++ getSecurityPatch: () => Promise; ++ getSecurityPatchSync: () => string; ++ getSerialNumber: () => Promise; ++ getSerialNumberSync: () => string; ++ getSystemAvailableFeatures: () => Promise; ++ getSystemAvailableFeaturesSync: () => string[]; ++ getTags: () => Promise; ++ getTagsSync: () => string; ++ getTotalDiskCapacity: () => Promise; ++ getTotalDiskCapacityOld: () => Promise; ++ getTotalDiskCapacitySync: () => number; ++ getTotalDiskCapacityOldSync: () => number; ++ getTotalMemory: () => Promise; ++ getTotalMemorySync: () => number; ++ getType: () => Promise; ++ getTypeSync: () => string; ++ getUniqueId: () => Promise; ++ getUniqueIdSync: () => string; ++ getUsedMemory: () => Promise; ++ getUsedMemorySync: () => number; ++ getUserAgent: () => Promise; ++ getUserAgentSync: () => string; ++ getBrightness: () => Promise; ++ getBrightnessSync: () => number; ++ hasGms: () => Promise; ++ hasGmsSync: () => boolean; ++ hasHms: () => Promise; ++ hasHmsSync: () => boolean; ++ hasSystemFeature: (feature: string) => Promise; ++ hasSystemFeatureSync: (feature: string) => boolean; ++ isAirplaneMode: () => Promise; ++ isAirplaneModeSync: () => boolean; ++ isBatteryCharging: () => Promise; ++ isBatteryChargingSync: () => boolean; ++ isCameraPresent: () => Promise; ++ isCameraPresentSync: () => boolean; ++ isEmulator: () => Promise; ++ isEmulatorSync: () => boolean; ++ isHeadphonesConnected: () => Promise; ++ isHeadphonesConnectedSync: () => boolean; ++ isLocationEnabled: () => Promise; ++ isLocationEnabledSync: () => boolean; ++ isPinOrFingerprintSet: () => Promise; ++ isPinOrFingerprintSetSync: () => boolean; ++ isMouseConnected: () => Promise; ++ isMouseConnectedSync: () => boolean; ++ isKeyboardConnected: () => Promise; ++ isKeyboardConnectedSync: () => boolean; ++ isTabletMode: () => Promise; ++ syncUniqueId: () => Promise; ++ ++ addListener(eventName: string): void; ++ removeListeners(count: number): void; ++ getConstants(): { ++ appName: string; ++ appVersion: string; ++ brand: string; ++ buildNumber: string; ++ bundleId: string; ++ deviceId: string; ++ deviceType: string; ++ isTablet: boolean; ++ isDisplayZoomed?: boolean; ++ model: string; ++ systemName: string; ++ systemVersion: string; ++ }; ++} ++ ++export default TurboModuleRegistry.get('RNDeviceInfo'); +diff --git a/node_modules/react-native-device-info/src/index.js.flow b/node_modules/react-native-device-info/src/index.js.flow +index 02fbb10..fdb85b0 100644 +--- a/node_modules/react-native-device-info/src/index.js.flow ++++ b/node_modules/react-native-device-info/src/index.js.flow +@@ -153,6 +153,7 @@ declare module.exports: { + isKeyboardConnectedSync: () => boolean, + isTabletMode: () => Promise, + isTablet: () => boolean, ++ isDisplayZoomed: () => boolean, + supported32BitAbis: () => Promise, + supported32BitAbisSync: () => string[], + supported64BitAbis: () => Promise, +diff --git a/node_modules/react-native-device-info/src/index.ts b/node_modules/react-native-device-info/src/index.ts +index 6108ab9..85b1c44 100644 +--- a/node_modules/react-native-device-info/src/index.ts ++++ b/node_modules/react-native-device-info/src/index.ts +@@ -1,7 +1,7 @@ + import { useCallback, useEffect, useState } from 'react'; +-import { Dimensions, NativeEventEmitter, NativeModules, Platform } from 'react-native'; ++import { Dimensions, NativeEventEmitter, Platform } from 'react-native'; + import { useOnEvent, useOnMount } from './internal/asyncHookWrappers'; +-import devicesWithDynamicIsland from "./internal/devicesWithDynamicIsland"; ++import devicesWithDynamicIsland from './internal/devicesWithDynamicIsland'; + import devicesWithNotch from './internal/devicesWithNotch'; + import RNDeviceInfo from './internal/nativeInterface'; + import { +@@ -9,7 +9,7 @@ import { + getSupportedPlatformInfoFunctions, + getSupportedPlatformInfoSync, + } from './internal/supported-platform-info'; +-import { DeviceInfoModule } from './internal/privateTypes'; ++import { DeviceInfoModule, NativeConstants } from './internal/privateTypes'; + import type { + AsyncHookResult, + DeviceType, +@@ -17,6 +17,15 @@ import type { + PowerState, + } from './internal/types'; + ++let constants: NativeConstants; ++ ++function getConstants() { ++ if (constants === undefined) { ++ constants = RNDeviceInfo.getConstants() as NativeConstants; ++ } ++ return constants; ++} ++ + export const [getUniqueId, getUniqueIdSync] = getSupportedPlatformInfoFunctions({ + memoKey: 'uniqueId', + supportedPlatforms: ['android', 'ios', 'windows'], +@@ -95,7 +104,7 @@ export const getDeviceId = () => + getSupportedPlatformInfoSync({ + defaultValue: 'unknown', + memoKey: 'deviceId', +- getter: () => RNDeviceInfo.deviceId, ++ getter: () => getConstants().deviceId, + supportedPlatforms: ['android', 'ios', 'windows'], + }); + +@@ -113,7 +122,7 @@ export const getModel = () => + memoKey: 'model', + defaultValue: 'unknown', + supportedPlatforms: ['ios', 'android', 'windows'], +- getter: () => RNDeviceInfo.model, ++ getter: () => getConstants().model, + }); + + export const getBrand = () => +@@ -121,7 +130,7 @@ export const getBrand = () => + memoKey: 'brand', + supportedPlatforms: ['android', 'ios', 'windows'], + defaultValue: 'unknown', +- getter: () => RNDeviceInfo.brand, ++ getter: () => getConstants().brand, + }); + + export const getSystemName = () => +@@ -131,7 +140,7 @@ export const getSystemName = () => + memoKey: 'systemName', + getter: () => + Platform.select({ +- ios: RNDeviceInfo.systemName, ++ ios: getConstants().systemName, + android: 'Android', + windows: 'Windows', + default: 'unknown', +@@ -141,7 +150,7 @@ export const getSystemName = () => + export const getSystemVersion = () => + getSupportedPlatformInfoSync({ + defaultValue: 'unknown', +- getter: () => RNDeviceInfo.systemVersion, ++ getter: () => getConstants().systemVersion, + supportedPlatforms: ['android', 'ios', 'windows'], + memoKey: 'systemVersion', + }); +@@ -167,7 +176,7 @@ export const getBundleId = () => + memoKey: 'bundleId', + supportedPlatforms: ['android', 'ios', 'windows'], + defaultValue: 'unknown', +- getter: () => RNDeviceInfo.bundleId, ++ getter: () => getConstants().bundleId, + }); + + export const [ +@@ -185,7 +194,7 @@ export const getApplicationName = () => + getSupportedPlatformInfoSync({ + memoKey: 'appName', + defaultValue: 'unknown', +- getter: () => RNDeviceInfo.appName, ++ getter: () => getConstants().appName, + supportedPlatforms: ['android', 'ios', 'windows'], + }); + +@@ -193,7 +202,7 @@ export const getBuildNumber = () => + getSupportedPlatformInfoSync({ + memoKey: 'buildNumber', + supportedPlatforms: ['android', 'ios', 'windows'], +- getter: () => RNDeviceInfo.buildNumber, ++ getter: () => getConstants().buildNumber, + defaultValue: 'unknown', + }); + +@@ -202,7 +211,7 @@ export const getVersion = () => + memoKey: 'version', + defaultValue: 'unknown', + supportedPlatforms: ['android', 'ios', 'windows'], +- getter: () => RNDeviceInfo.appVersion, ++ getter: () => getConstants().appVersion, + }); + + export function getReadableVersion() { +@@ -371,7 +380,15 @@ export const isTablet = () => + defaultValue: false, + supportedPlatforms: ['android', 'ios', 'windows'], + memoKey: 'tablet', +- getter: () => RNDeviceInfo.isTablet, ++ getter: () => getConstants().isTablet, ++ }); ++ ++export const isDisplayZoomed = () => ++ getSupportedPlatformInfoSync({ ++ defaultValue: false, ++ supportedPlatforms: ['ios'], ++ memoKey: 'zoomed', ++ getter: () => getConstants().isDisplayZoomed, + }); + + export const [isPinOrFingerprintSet, isPinOrFingerprintSetSync] = getSupportedPlatformInfoFunctions( +@@ -386,6 +403,7 @@ export const [isPinOrFingerprintSet, isPinOrFingerprintSetSync] = getSupportedPl + let notch: boolean; + export function hasNotch() { + if (notch === undefined) { ++ console.log(RNDeviceInfo); + let _brand = getBrand(); + let _model = getModel(); + notch = +@@ -550,8 +568,8 @@ export const [getPowerState, getPowerStateSync] = getSupportedPlatformInfoFuncti + Partial + >({ + supportedPlatforms: ['ios', 'android', 'windows', 'web'], +- getter: () => RNDeviceInfo.getPowerState(), +- syncGetter: () => RNDeviceInfo.getPowerStateSync(), ++ getter: () => RNDeviceInfo.getPowerState() as Promise>, ++ syncGetter: () => RNDeviceInfo.getPowerStateSync() as Partial, + defaultValue: {}, + }); + +@@ -583,7 +601,7 @@ export const getDeviceType = () => { + memoKey: 'deviceType', + supportedPlatforms: ['android', 'ios', 'windows'], + defaultValue: 'unknown', +- getter: () => RNDeviceInfo.deviceType, ++ getter: () => getConstants().deviceType, + }); + }; + +@@ -592,7 +610,7 @@ export const getDeviceTypeSync = () => { + memoKey: 'deviceType', + supportedPlatforms: ['android', 'ios', 'windows'], + defaultValue: 'unknown', +- getter: () => RNDeviceInfo.deviceType, ++ getter: () => getConstants().deviceType, + }); + }; + +@@ -693,8 +711,8 @@ export const [ + getAvailableLocationProvidersSync, + ] = getSupportedPlatformInfoFunctions({ + supportedPlatforms: ['android', 'ios'], +- getter: () => RNDeviceInfo.getAvailableLocationProviders(), +- syncGetter: () => RNDeviceInfo.getAvailableLocationProvidersSync(), ++ getter: () => RNDeviceInfo.getAvailableLocationProviders() as Promise, ++ syncGetter: () => RNDeviceInfo.getAvailableLocationProvidersSync() as LocationProviderInfo, + defaultValue: {}, + }); + +@@ -712,7 +730,7 @@ export async function getDeviceToken() { + return 'unknown'; + } + +-const deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo); ++const deviceInfoEmitter = new NativeEventEmitter(RNDeviceInfo); + export function useBatteryLevel(): number | null { + const [batteryLevel, setBatteryLevel] = useState(null); + +@@ -972,6 +990,7 @@ const DeviceInfo: DeviceInfoModule = { + isKeyboardConnectedSync, + isTabletMode, + isTablet, ++ isDisplayZoomed, + supported32BitAbis, + supported32BitAbisSync, + supported64BitAbis, +diff --git a/node_modules/react-native-device-info/src/internal/asyncHookWrappers.ts b/node_modules/react-native-device-info/src/internal/asyncHookWrappers.ts +index 2f39850..aa69cd1 100644 +--- a/node_modules/react-native-device-info/src/internal/asyncHookWrappers.ts ++++ b/node_modules/react-native-device-info/src/internal/asyncHookWrappers.ts +@@ -1,5 +1,6 @@ + import { useState, useEffect } from 'react'; +-import { NativeEventEmitter, NativeModules } from 'react-native'; ++import { NativeEventEmitter } from 'react-native'; ++import RNDeviceInfo from './nativeInterface'; + import type { AsyncHookResult } from './types'; + + /** +@@ -26,7 +27,7 @@ export function useOnMount(asyncGetter: () => Promise, initialResult: T): + return response; + } + +-export const deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo); ++export const deviceInfoEmitter = new NativeEventEmitter(RNDeviceInfo); + + /** + * simple hook wrapper for handling events +diff --git a/node_modules/react-native-device-info/src/internal/nativeInterface.native.ts b/node_modules/react-native-device-info/src/internal/nativeInterface.native.ts +new file mode 100644 +index 0000000..6408740 +--- /dev/null ++++ b/node_modules/react-native-device-info/src/internal/nativeInterface.native.ts +@@ -0,0 +1,3 @@ ++import RNDeviceInfoModule from '../fabric/NativeDeviceInfoModule'; ++ ++export default RNDeviceInfoModule; +diff --git a/node_modules/react-native-device-info/src/internal/nativeInterface.ts b/node_modules/react-native-device-info/src/internal/nativeInterface.ts +index 0e47d75..0ce6bc1 100644 +--- a/node_modules/react-native-device-info/src/internal/nativeInterface.ts ++++ b/node_modules/react-native-device-info/src/internal/nativeInterface.ts +@@ -1,12 +1,6 @@ +-import { Platform, NativeModules } from 'react-native'; +-import { DeviceInfoNativeModule } from './privateTypes'; ++import { Platform } from 'react-native'; + +-let RNDeviceInfo: DeviceInfoNativeModule | undefined = NativeModules.RNDeviceInfo; +- +-// @ts-ignore +-if (Platform.OS === 'web' || Platform.OS === 'dom') { +- RNDeviceInfo = require('../web'); +-} ++let RNDeviceInfo = require('../web'); + + if (!RNDeviceInfo) { + // Produce an error if we don't have the native module +@@ -25,4 +19,4 @@ if (!RNDeviceInfo) { + } + } + +-export default RNDeviceInfo as DeviceInfoNativeModule; ++export default RNDeviceInfo; +diff --git a/node_modules/react-native-device-info/src/internal/privateTypes.ts b/node_modules/react-native-device-info/src/internal/privateTypes.ts +index fb71735..9c41855 100644 +--- a/node_modules/react-native-device-info/src/internal/privateTypes.ts ++++ b/node_modules/react-native-device-info/src/internal/privateTypes.ts +@@ -8,7 +8,7 @@ export type NotchDevice = { + [key: string]: string; + }; + +-interface NativeConstants { ++export interface NativeConstants { + appName: string; + appVersion: string; + brand: string; +@@ -17,6 +17,7 @@ interface NativeConstants { + deviceId: string; + deviceType: DeviceType; + isTablet: boolean; ++ isDisplayZoomed?: boolean; + model: string; + systemName: string; + systemVersion: string; +@@ -179,6 +180,7 @@ export interface DeviceInfoModule extends ExposedNativeMethods { + isLandscape: () => Promise; + isLandscapeSync: () => boolean; + isTablet: () => boolean; ++ isDisplayZoomed: () => boolean | undefined; + supported32BitAbis: () => Promise; + supported32BitAbisSync: () => string[]; + supported64BitAbis: () => Promise; diff --git a/patches/react-native-pdf+6.7.3.patch b/patches/react-native-pdf+6.7.3.patch index 63024e7d4c1f..0f0f270cefd1 100644 --- a/patches/react-native-pdf+6.7.3.patch +++ b/patches/react-native-pdf+6.7.3.patch @@ -1,3 +1,33 @@ +diff --git a/node_modules/react-native-pdf/react-native-pdf.podspec b/node_modules/react-native-pdf/react-native-pdf.podspec +index fb36140..5d5f19e 100644 +--- a/node_modules/react-native-pdf/react-native-pdf.podspec ++++ b/node_modules/react-native-pdf/react-native-pdf.podspec +@@ -17,24 +17,11 @@ Pod::Spec.new do |s| + s.framework = "PDFKit" + + if fabric_enabled +- folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' +- +- s.pod_target_xcconfig = { +- 'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/boost" "$(PODS_ROOT)/boost-for-react-native" "$(PODS_ROOT)/RCT-Folly"', +- "CLANG_CXX_LANGUAGE_STANDARD" => "c++17", +- } + s.platforms = { ios: '11.0', tvos: '11.0' } +- s.compiler_flags = folly_compiler_flags + ' -DRCT_NEW_ARCH_ENABLED' + s.source_files = 'ios/**/*.{h,m,mm,cpp}' + s.requires_arc = true + +- s.dependency "React" +- s.dependency "React-RCTFabric" +- s.dependency "React-Codegen" +- s.dependency "RCT-Folly" +- s.dependency "RCTRequired" +- s.dependency "RCTTypeSafety" +- s.dependency "ReactCommon/turbomodule/core" ++ install_modules_dependencies(s) + else + s.platform = :ios, '8.0' + s.source_files = 'ios/**/*.{h,m,mm}' diff --git a/node_modules/react-native-pdf/index.js b/node_modules/react-native-pdf/index.js index c05de52..bea7af8 100644 --- a/node_modules/react-native-pdf/index.js diff --git a/patches/react-native-plaid-link-sdk+11.5.0+001+initial.patch b/patches/react-native-plaid-link-sdk+11.5.0+001+initial.patch new file mode 100644 index 000000000000..6035477256b7 --- /dev/null +++ b/patches/react-native-plaid-link-sdk+11.5.0+001+initial.patch @@ -0,0 +1,4 @@ +diff --git a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.m b/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.mm +similarity index 100% +rename from node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.m +rename to node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.mm diff --git a/patches/react-native-plaid-link-sdk+11.5.0+002+turbomodule.patch b/patches/react-native-plaid-link-sdk+11.5.0+002+turbomodule.patch new file mode 100644 index 000000000000..7d5aab6c84cf --- /dev/null +++ b/patches/react-native-plaid-link-sdk+11.5.0+002+turbomodule.patch @@ -0,0 +1,3287 @@ +diff --git a/node_modules/react-native-plaid-link-sdk/README.md b/node_modules/react-native-plaid-link-sdk/README.md +index 93ebca6..7bea608 100644 +--- a/node_modules/react-native-plaid-link-sdk/README.md ++++ b/node_modules/react-native-plaid-link-sdk/README.md +@@ -49,7 +49,6 @@ cd ios && bundle install && bundle exec pod install + + AutoLinking should handle all of the Android setup. + +- + ### React Native Setup + + - To initialize `PlaidLink`, you will need to first create a `link_token` at [/link/token/create](https://plaid.com/docs/#create-link-token). Check out our [QuickStart guide](https://plaid.com/docs/quickstart/#introduction) for additional API information. +@@ -58,7 +57,13 @@ AutoLinking should handle all of the Android setup. + + ```javascript + import { Text } from 'react-native'; +-import { PlaidLink, LinkSuccess, LinkExit, LinkLogLevel, LinkIOSPresentationStyle } from 'react-native-plaid-link-sdk'; ++import { ++ PlaidLink, ++ LinkSuccess, ++ LinkExit, ++ LinkLogLevel, ++ LinkIOSPresentationStyle, ++} from 'react-native-plaid-link-sdk'; + + const MyPlaidComponent = () => { + return ( +@@ -77,7 +82,7 @@ const MyPlaidComponent = () => { + // UI is always presented in full screen on Android. + iOSPresentationStyle={LinkIOSPresentationStyle.MODAL} + > +- Add Account ++ Add Account + + ); + }; +@@ -92,6 +97,7 @@ const MyPlaidComponent = () => { + ##### Android OAuth Requirements + + ###### Register your app package name ++ + 1. Log into your [Plaid Dashboard](https://dashboard.plaid.com/developers/api) and navigate to the API page under the Developers tab. + 2. Next to Allowed Android package names click "Configure" then "Add New Android Package Name". + 3. Enter your package name, for example `com.plaid.example`. +@@ -100,17 +106,16 @@ const MyPlaidComponent = () => { + ##### iOS OAuth Requirements + + For iOS OAuth to work, specific requirements must be met. ++ + 1. Redirect URIs must be [registered](https://plaid.com/docs/link/ios/#register-your-redirect-uri), and set up as [universal links](https://developer.apple.com/documentation/xcode/supporting-associated-domains). + 2. Your native iOS application, must be configured with your associated domain. See your iOS [set up universal links](https://plaid.com/docs/link/ios/#set-up-universal-links) for more information. + +- + ##### Link Token OAuth Requirements + + - On iOS you must configure your `link_token` with a [redirect_uri](https://plaid.com/docs/api/tokens/#link-token-create-request-redirect-uri) to support OAuth. When creating a `link_token` for initializing Link on Android, `android_package_name` must be specified and `redirect_uri` must be left blank. + + - On Android you must configure your `link_token` with an [android_package_name](https://plaid.com/docs/api/tokens/#link-token-create-request-android-package-name) to support OAuth. When creating a `link_token` for initializing Link on iOS, `android_package_name` must be left blank and `redirect_uri` should be used instead. + +- + #### To receive onEvent callbacks: + + The React Native Plaid module emits `onEvent` events throughout the account linking process — see [details here](https://plaid.com/docs/link/react-native/#onevent). To receive these events in your React Native app, wrap the `PlaidLink` react component with the following in order to listen for those events: +@@ -139,9 +144,9 @@ class PlaidEventContainer extends React.Component { + You can also use the `usePlaidEmitter` hook in react functional components: + + ```javascript +- usePlaidEmitter((event: LinkEvent) => { +- console.log(event) +- }) ++usePlaidEmitter((event: LinkEvent) => { ++ console.log(event); ++}); + ``` + + ## Upgrading +@@ -165,6 +170,8 @@ While these older versions are expected to continue to work without disruption, + | 11.0.2 | * | [4.0.0+] | 21 | 33 | >=5.0.0 | 14.0 | Active, supports Xcode 15.0.1 | + | 11.0.1 | * | [4.0.0+] | 21 | 33 | >=5.0.0 | 14.0 | Active, supports Xcode 15.0.1 | + | 11.0.0 | * | [4.0.0+] | 21 | 33 | >=5.0.0 | 14.0 | Active, supports Xcode 15.0.1 | ++| 10.13.0 | >= 0.66.0 | [3.14.3+] | 21 | 33 | >=4.7.2 | 11.0 | Active, supports Xcode 14 | ++| 10.12.0 | >= 0.66.0 | [3.14.3+] | 21 | 33 | >=4.7.1 | 11.0 | Active, supports Xcode 14 | + | 10.11.0 | >= 0.66.0 | [3.14.1+] | 21 | 33 | >=4.7.1 | 11.0 | Active, supports Xcode 14 | + | ~10.10.0~ | >= 0.66.0 | [3.14.2+] | 21 | 33 | >=4.7.1 | 11.0 | **Deprecated** | + | 10.9.1 | >= 0.66.0 | [3.14.1+] | 21 | 33 | >=4.7.0 | 11.0 | Active, supports Xcode 14 | +diff --git a/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/checksums/checksums.lock b/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/checksums/checksums.lock +deleted file mode 100644 +index b5da584..0000000 +Binary files a/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/checksums/checksums.lock and /dev/null differ +diff --git a/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/checksums/md5-checksums.bin b/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/checksums/md5-checksums.bin +deleted file mode 100644 +index ef608b4..0000000 +Binary files a/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/checksums/md5-checksums.bin and /dev/null differ +diff --git a/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/checksums/sha1-checksums.bin b/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/checksums/sha1-checksums.bin +deleted file mode 100644 +index 0856ae4..0000000 +Binary files a/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/checksums/sha1-checksums.bin and /dev/null differ +diff --git a/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/dependencies-accessors/dependencies-accessors.lock b/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/dependencies-accessors/dependencies-accessors.lock +deleted file mode 100644 +index 12aea68..0000000 +Binary files a/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/dependencies-accessors/dependencies-accessors.lock and /dev/null differ +diff --git a/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/dependencies-accessors/gc.properties b/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/dependencies-accessors/gc.properties +deleted file mode 100644 +index e69de29..0000000 +diff --git a/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/fileChanges/last-build.bin b/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/fileChanges/last-build.bin +deleted file mode 100644 +index f76dd23..0000000 +Binary files a/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/fileChanges/last-build.bin and /dev/null differ +diff --git a/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/fileHashes/fileHashes.lock b/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/fileHashes/fileHashes.lock +deleted file mode 100644 +index 752a252..0000000 +Binary files a/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/fileHashes/fileHashes.lock and /dev/null differ +diff --git a/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/gc.properties b/node_modules/react-native-plaid-link-sdk/android/.gradle/7.4.2/gc.properties +deleted file mode 100644 +index e69de29..0000000 +diff --git a/node_modules/react-native-plaid-link-sdk/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/node_modules/react-native-plaid-link-sdk/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +deleted file mode 100644 +index 470ca89..0000000 +Binary files a/node_modules/react-native-plaid-link-sdk/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock and /dev/null differ +diff --git a/node_modules/react-native-plaid-link-sdk/android/.gradle/buildOutputCleanup/cache.properties b/node_modules/react-native-plaid-link-sdk/android/.gradle/buildOutputCleanup/cache.properties +deleted file mode 100644 +index 1439672..0000000 +--- a/node_modules/react-native-plaid-link-sdk/android/.gradle/buildOutputCleanup/cache.properties ++++ /dev/null +@@ -1,2 +0,0 @@ +-#Thu Nov 09 09:41:17 PST 2023 +-gradle.version=7.4.2 +diff --git a/node_modules/react-native-plaid-link-sdk/android/.gradle/checksums/checksums.lock b/node_modules/react-native-plaid-link-sdk/android/.gradle/checksums/checksums.lock +deleted file mode 100644 +index 34602e1..0000000 +Binary files a/node_modules/react-native-plaid-link-sdk/android/.gradle/checksums/checksums.lock and /dev/null differ +diff --git a/node_modules/react-native-plaid-link-sdk/android/.gradle/checksums/md5-checksums.bin b/node_modules/react-native-plaid-link-sdk/android/.gradle/checksums/md5-checksums.bin +deleted file mode 100644 +index 2420123..0000000 +Binary files a/node_modules/react-native-plaid-link-sdk/android/.gradle/checksums/md5-checksums.bin and /dev/null differ +diff --git a/node_modules/react-native-plaid-link-sdk/android/.gradle/checksums/sha1-checksums.bin b/node_modules/react-native-plaid-link-sdk/android/.gradle/checksums/sha1-checksums.bin +deleted file mode 100644 +index 1081852..0000000 +Binary files a/node_modules/react-native-plaid-link-sdk/android/.gradle/checksums/sha1-checksums.bin and /dev/null differ +diff --git a/node_modules/react-native-plaid-link-sdk/android/.gradle/vcs-1/gc.properties b/node_modules/react-native-plaid-link-sdk/android/.gradle/vcs-1/gc.properties +deleted file mode 100644 +index e69de29..0000000 +diff --git a/node_modules/react-native-plaid-link-sdk/android/.idea/gradle.xml b/node_modules/react-native-plaid-link-sdk/android/.idea/gradle.xml +deleted file mode 100644 +index 0364d75..0000000 +--- a/node_modules/react-native-plaid-link-sdk/android/.idea/gradle.xml ++++ /dev/null +@@ -1,14 +0,0 @@ +- +- +- +- +- +- +- +\ No newline at end of file +diff --git a/node_modules/react-native-plaid-link-sdk/android/.idea/misc.xml b/node_modules/react-native-plaid-link-sdk/android/.idea/misc.xml +deleted file mode 100644 +index a318cae..0000000 +--- a/node_modules/react-native-plaid-link-sdk/android/.idea/misc.xml ++++ /dev/null +@@ -1,9 +0,0 @@ +- +- +- +- +- +- +- +- +\ No newline at end of file +diff --git a/node_modules/react-native-plaid-link-sdk/android/.idea/vcs.xml b/node_modules/react-native-plaid-link-sdk/android/.idea/vcs.xml +deleted file mode 100644 +index 6c0b863..0000000 +--- a/node_modules/react-native-plaid-link-sdk/android/.idea/vcs.xml ++++ /dev/null +@@ -1,6 +0,0 @@ +- +- +- +- +- +- +\ No newline at end of file +diff --git a/node_modules/react-native-plaid-link-sdk/android/build.gradle b/node_modules/react-native-plaid-link-sdk/android/build.gradle +index 2d9e2ce..e88208b 100644 +--- a/node_modules/react-native-plaid-link-sdk/android/build.gradle ++++ b/node_modules/react-native-plaid-link-sdk/android/build.gradle +@@ -12,7 +12,12 @@ allprojects { + + + buildscript { +- ext.kotlin_version = '1.8.22' ++ ext { ++ kotlin_version = '1.8.22' ++ } ++ ext.safeExtGet = {prop, fallback -> ++ rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback ++ } + repositories { + google() + mavenCentral() +@@ -25,10 +30,32 @@ buildscript { + } + } + ++def isNewArchitectureEnabled() { ++ // To opt-in for the New Architecture, you can either: ++ // - Set `newArchEnabled` to true inside the `gradle.properties` file ++ // - Invoke gradle with `-newArchEnabled=true` ++ // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true` ++ return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" ++} ++ ++if (isNewArchitectureEnabled()) { ++ apply plugin: "com.facebook.react" ++} ++ + apply plugin: 'com.android.library' + apply plugin: "kotlin-android" + + android { ++ ++ // Used to override the NDK path/version on internal CI or by allowing ++ // users to customize the NDK path/version from their root project (e.g. for M1 support) ++ if (rootProject.hasProperty("ndkPath")) { ++ ndkPath rootProject.ext.ndkPath ++ } ++ if (rootProject.hasProperty("ndkVersion")) { ++ ndkVersion rootProject.ext.ndkVersion ++ } ++ + def agpVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0].toInteger() + if (agpVersion >= 7) { + namespace 'com.plaid' +@@ -52,6 +79,14 @@ android { + } + } + ++ sourceSets.main { ++ java { ++ if (!isNewArchitectureEnabled()) { ++ srcDirs += 'src/paper/java' ++ } ++ } ++ } ++ + buildTypes { + release { + debuggable = false +diff --git a/node_modules/react-native-plaid-link-sdk/android/local.properties b/node_modules/react-native-plaid-link-sdk/android/local.properties +deleted file mode 100644 +index 0b4e321..0000000 +--- a/node_modules/react-native-plaid-link-sdk/android/local.properties ++++ /dev/null +@@ -1,8 +0,0 @@ +-## This file must *NOT* be checked into Version Control Systems, +-# as it contains information specific to your local configuration. +-# +-# Location of the SDK. This is only used by Gradle. +-# For customization when using a Version Control System, please read the +-# header note. +-#Fri Aug 11 13:58:32 PDT 2023 +-sdk.dir=/Users/dtroupe/Library/Android/sdk +diff --git a/node_modules/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PLKEmbeddedViewManager.kt b/node_modules/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PLKEmbeddedViewManager.kt +index c73011f..66fd266 100644 +--- a/node_modules/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PLKEmbeddedViewManager.kt ++++ b/node_modules/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PLKEmbeddedViewManager.kt +@@ -19,9 +19,9 @@ class PLKEmbeddedViewManager : SimpleViewManager() { + } + + override fun getExportedCustomBubblingEventTypeConstants(): Map { +- return mapOf( +- EVENT_NAME to mapOf( +- "phasedRegistrationNames" to mapOf( ++ return mutableMapOf( ++ EVENT_NAME to mutableMapOf( ++ "phasedRegistrationNames" to mutableMapOf( + "bubbled" to EVENT_NAME + ) + )) +diff --git a/node_modules/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PlaidModule.kt b/node_modules/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PlaidModule.kt +index 293374a..b79352e 100644 +--- a/node_modules/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PlaidModule.kt ++++ b/node_modules/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PlaidModule.kt +@@ -24,9 +24,9 @@ import org.json.JSONException + import org.json.JSONObject + import java.util.ArrayList + +-@ReactModule(name = PlaidModule.TAG) ++@ReactModule(name = PlaidModule.NAME) + class PlaidModule internal constructor(reactContext: ReactApplicationContext) : +- ReactContextBaseJavaModule(reactContext), ActivityEventListener { ++ NativePlaidLinkModuleAndroidSpec(reactContext), ActivityEventListener { + + val mActivityResultManager by lazy { ActivityResultManager() } + +@@ -38,11 +38,11 @@ class PlaidModule internal constructor(reactContext: ReactApplicationContext) : + companion object { + private const val LINK_TOKEN_PREFIX = "link" + +- const val TAG = "PlaidAndroid" ++ const val NAME = "PlaidAndroid" + } + + override fun getName(): String { +- return PlaidModule.TAG ++ return NAME + } + + override fun initialize() { +@@ -78,7 +78,7 @@ class PlaidModule internal constructor(reactContext: ReactApplicationContext) : + + @ReactMethod + @Suppress("unused") +- fun startLinkActivityForResult( ++ override fun startLinkActivityForResult( + token: String, + noLoadingState: Boolean, + logLevel: String, +@@ -113,6 +113,10 @@ class PlaidModule internal constructor(reactContext: ReactApplicationContext) : + } + } + ++ override fun addListener(eventName: String?) = Unit ++ ++ override fun removeListeners(count: Double) = Unit ++ + private fun maybeGetStringField(obj: JSONObject, fieldName: String): String? { + if (obj.has(fieldName) && !TextUtils.isEmpty(obj.getString(fieldName))) { + return obj.getString(fieldName) +diff --git a/node_modules/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PlaidPackage.java b/node_modules/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PlaidPackage.java +index c59299e..d6b310e 100644 +--- a/node_modules/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PlaidPackage.java ++++ b/node_modules/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PlaidPackage.java +@@ -6,19 +6,54 @@ import java.util.List; + import java.util.Map; + + import com.facebook.react.TurboReactPackage; ++import com.facebook.react.ViewManagerOnDemandReactPackage; ++import com.facebook.react.bridge.ModuleSpec; + import com.facebook.react.bridge.NativeModule; + import com.facebook.react.bridge.ReactApplicationContext; ++import com.facebook.react.module.annotations.ReactModule; ++import com.facebook.react.module.annotations.ReactModuleList; + import com.facebook.react.module.model.ReactModuleInfo; + import com.facebook.react.module.model.ReactModuleInfoProvider; ++import com.facebook.react.turbomodule.core.interfaces.TurboModule; + import com.facebook.react.uimanager.ViewManager; + +-@SuppressWarnings("unused") +-public class PlaidPackage extends TurboReactPackage { ++import javax.annotation.Nonnull; ++import javax.annotation.Nullable; + ++@ReactModuleList(nativeModules = {PlaidModule.class}) ++public class PlaidPackage extends TurboReactPackage implements ViewManagerOnDemandReactPackage { ++ ++ /** ++ * {@inheritDoc} ++ */ ++ @Override ++ public List getViewManagerNames(ReactApplicationContext reactContext) { ++ return null; ++ } ++ ++ @Override ++ protected List getViewManagers(ReactApplicationContext reactContext) { ++ return null; ++ } ++ ++ /** ++ * {@inheritDoc} ++ */ + @Override +- public NativeModule getModule( +- String name, ReactApplicationContext reactContext) { +- return new PlaidModule(reactContext); ++ public @Nullable ++ ViewManager createViewManager( ++ ReactApplicationContext reactContext, String viewManagerName) { ++ return null; ++ } ++ ++ @Override ++ public NativeModule getModule(String name, @Nonnull ReactApplicationContext reactContext) { ++ switch (name) { ++ case PlaidModule.NAME: ++ return new PlaidModule(reactContext); ++ default: ++ return null; ++ } + } + + @Override +@@ -28,19 +63,44 @@ public class PlaidPackage extends TurboReactPackage { + + @Override + public ReactModuleInfoProvider getReactModuleInfoProvider() { +- return () -> { +- Map map = new HashMap<>(); +- map.put( +- "PlaidAndroid", +- new ReactModuleInfo( +- "PlaidAndroid", +- "com.reactlibrary.PlaidModule", +- false, +- false, +- true, +- false, +- false)); +- return map; +- }; ++ try { ++ Class reactModuleInfoProviderClass = ++ Class.forName("com.plaid.PlaidPackage$$ReactModuleInfoProvider"); ++ return (ReactModuleInfoProvider) reactModuleInfoProviderClass.newInstance(); ++ } catch (ClassNotFoundException e) { ++ // ReactModuleSpecProcessor does not run at build-time. Create this ReactModuleInfoProvider by ++ // hand. ++ return new ReactModuleInfoProvider() { ++ @Override ++ public Map getReactModuleInfos() { ++ final Map reactModuleInfoMap = new HashMap<>(); ++ ++ Class[] moduleList = ++ new Class[]{ ++ PlaidModule.class, ++ }; ++ ++ for (Class moduleClass : moduleList) { ++ ReactModule reactModule = moduleClass.getAnnotation(ReactModule.class); ++ ++ reactModuleInfoMap.put( ++ reactModule.name(), ++ new ReactModuleInfo( ++ reactModule.name(), ++ moduleClass.getName(), ++ reactModule.canOverrideExistingModule(), ++ reactModule.needsEagerInit(), ++ reactModule.hasConstants(), ++ reactModule.isCxxModule(), ++ TurboModule.class.isAssignableFrom(moduleClass))); ++ } ++ ++ return reactModuleInfoMap; ++ } ++ }; ++ } catch (InstantiationException | IllegalAccessException e) { ++ throw new RuntimeException( ++ "No ReactModuleInfoProvider for com.plaid.PlaidPackage$$ReactModuleInfoProvider", e); ++ } + } + } +diff --git a/node_modules/react-native-plaid-link-sdk/android/src/paper/java/com/plaid/NativePlaidLinkModuleAndroidSpec.java b/node_modules/react-native-plaid-link-sdk/android/src/paper/java/com/plaid/NativePlaidLinkModuleAndroidSpec.java +new file mode 100644 +index 0000000..fee5a11 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/android/src/paper/java/com/plaid/NativePlaidLinkModuleAndroidSpec.java +@@ -0,0 +1,46 @@ ++ ++/** ++ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). ++ * ++ * Do not edit this file as changes may cause incorrect behavior and will be lost ++ * once the code is regenerated. ++ * ++ * @generated by codegen project: GenerateModuleJavaSpec.js ++ * ++ * @nolint ++ */ ++ ++package com.plaid; ++ ++import com.facebook.proguard.annotations.DoNotStrip; ++import com.facebook.react.bridge.Callback; ++import com.facebook.react.bridge.ReactApplicationContext; ++import com.facebook.react.bridge.ReactContextBaseJavaModule; ++import com.facebook.react.bridge.ReactMethod; ++import com.facebook.react.turbomodule.core.interfaces.TurboModule; ++import javax.annotation.Nonnull; ++ ++public abstract class NativePlaidLinkModuleAndroidSpec extends ReactContextBaseJavaModule implements TurboModule { ++ public static final String NAME = "PlaidAndroid"; ++ ++ public NativePlaidLinkModuleAndroidSpec(ReactApplicationContext reactContext) { ++ super(reactContext); ++ } ++ ++ @Override ++ public @Nonnull String getName() { ++ return NAME; ++ } ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void startLinkActivityForResult(String token, boolean noLoadingState, String logLevel, Callback onSuccessCallback, Callback onExitCallback); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void addListener(String eventName); ++ ++ @ReactMethod ++ @DoNotStrip ++ public abstract void removeListeners(double count); ++} +diff --git a/node_modules/react-native-plaid-link-sdk/dist/EmbeddedLink/EmbeddedLinkView.js b/node_modules/react-native-plaid-link-sdk/dist/EmbeddedLink/EmbeddedLinkView.js +index c7b1e96..c429da7 100644 +--- a/node_modules/react-native-plaid-link-sdk/dist/EmbeddedLink/EmbeddedLinkView.js ++++ b/node_modules/react-native-plaid-link-sdk/dist/EmbeddedLink/EmbeddedLinkView.js +@@ -1,55 +1,69 @@ + import React from 'react'; + import NativeEmbeddedLinkView from './NativeEmbeddedLinkView'; + class EmbeddedEvent { +- constructor(event) { +- this.eventName = event.eventName; +- this.metadata = event.metadata; +- } ++ constructor(event) { ++ this.eventName = event.eventName; ++ this.metadata = event.metadata; ++ } + } + class EmbeddedExit { +- constructor(event) { +- this.error = event.error; +- this.metadata = event.metadata; +- } ++ constructor(event) { ++ this.error = event.error; ++ this.metadata = event.metadata; ++ } + } + class EmbeddedSuccess { +- constructor(event) { +- this.publicToken = event.publicToken; +- this.metadata = event.metadata; +- } ++ constructor(event) { ++ this.publicToken = event.publicToken; ++ this.metadata = event.metadata; ++ } + } +-export const EmbeddedLinkView = (props) => { +- const { token, iOSPresentationStyle, onEvent, onSuccess, onExit, style } = props; +- const onEmbeddedEvent = (event) => { +- switch (event.nativeEvent.embeddedEventName) { +- case 'onSuccess': { +- if (!onSuccess) { +- return; +- } +- const embeddedSuccess = new EmbeddedSuccess(event.nativeEvent); +- onSuccess(embeddedSuccess); +- break; +- } +- case 'onExit': { +- if (!onExit) { +- return; +- } +- const embeddedExit = new EmbeddedExit(event.nativeEvent); +- onExit(embeddedExit); +- break; +- } +- case 'onEvent': { +- if (!onEvent) { +- return; +- } +- const embeddedEvent = new EmbeddedEvent(event.nativeEvent); +- onEvent(embeddedEvent); +- break; +- } +- default: { +- return; +- } ++export const EmbeddedLinkView = props => { ++ const { ++ token, ++ iOSPresentationStyle, ++ onEvent, ++ onSuccess, ++ onExit, ++ style, ++ } = props; ++ const onEmbeddedEvent = event => { ++ switch (event.nativeEvent.embeddedEventName) { ++ case 'onSuccess': { ++ if (!onSuccess) { ++ return; + } +- }; +- return ; ++ const embeddedSuccess = new EmbeddedSuccess(event.nativeEvent); ++ onSuccess(embeddedSuccess); ++ break; ++ } ++ case 'onExit': { ++ if (!onExit) { ++ return; ++ } ++ const embeddedExit = new EmbeddedExit(event.nativeEvent); ++ onExit(embeddedExit); ++ break; ++ } ++ case 'onEvent': { ++ if (!onEvent) { ++ return; ++ } ++ const embeddedEvent = new EmbeddedEvent(event.nativeEvent); ++ onEvent(embeddedEvent); ++ break; ++ } ++ default: { ++ return; ++ } ++ } ++ }; ++ return ( ++ ++ ); + }; +diff --git a/node_modules/react-native-plaid-link-sdk/dist/PlaidLink.d.ts b/node_modules/react-native-plaid-link-sdk/dist/PlaidLink.d.ts +index a48b319..43205dd 100644 +--- a/node_modules/react-native-plaid-link-sdk/dist/PlaidLink.d.ts ++++ b/node_modules/react-native-plaid-link-sdk/dist/PlaidLink.d.ts +@@ -4,9 +4,9 @@ import { LinkEventListener, PlaidLinkComponentProps, PlaidLinkProps } from './Ty + * A hook that registers a listener on the Plaid emitter for the 'onEvent' type. + * The listener is cleaned up when this view is unmounted + * +- * @param LinkEventListener the listener to call ++ * @param linkEventListener the listener to call + */ +-export declare const usePlaidEmitter: (LinkEventListener: LinkEventListener) => void; ++export declare const usePlaidEmitter: (linkEventListener: LinkEventListener) => void; + export declare const openLink: (props: PlaidLinkProps) => Promise; + export declare const dismissLink: () => void; + export declare const PlaidLink: (props: PlaidLinkComponentProps) => React.JSX.Element; +diff --git a/node_modules/react-native-plaid-link-sdk/dist/PlaidLink.js b/node_modules/react-native-plaid-link-sdk/dist/PlaidLink.js +index 21da2bc..6c43633 100644 +--- a/node_modules/react-native-plaid-link-sdk/dist/PlaidLink.js ++++ b/node_modules/react-native-plaid-link-sdk/dist/PlaidLink.js +@@ -1,83 +1,146 @@ +-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { +- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } +- return new (P || (P = Promise))(function (resolve, reject) { +- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } +- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } +- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } +- step((generator = generator.apply(thisArg, _arguments || [])).next()); ++var __awaiter = ++ (this && this.__awaiter) || ++ function(thisArg, _arguments, P, generator) { ++ function adopt(value) { ++ return value instanceof P ++ ? value ++ : new P(function(resolve) { ++ resolve(value); ++ }); ++ } ++ return new (P || (P = Promise))(function(resolve, reject) { ++ function fulfilled(value) { ++ try { ++ step(generator.next(value)); ++ } catch (e) { ++ reject(e); ++ } ++ } ++ function rejected(value) { ++ try { ++ step(generator['throw'](value)); ++ } catch (e) { ++ reject(e); ++ } ++ } ++ function step(result) { ++ result.done ++ ? resolve(result.value) ++ : adopt(result.value).then(fulfilled, rejected); ++ } ++ step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +-}; ++ }; ++var _a; + import React, { useEffect } from 'react'; +-import { NativeEventEmitter, NativeModules, Platform, TouchableOpacity, } from 'react-native'; +-import { LinkIOSPresentationStyle, LinkLogLevel, } from './Types'; ++import { NativeEventEmitter, Platform, TouchableOpacity } from 'react-native'; ++import { LinkIOSPresentationStyle, LinkLogLevel } from './Types'; ++import RNLinksdkAndroid from './fabric/NativePlaidLinkModuleAndroid'; ++import RNLinksdkiOS from './fabric/NativePlaidLinkModuleiOS'; ++const RNLinksdk = ++ (_a = Platform.OS === 'android' ? RNLinksdkAndroid : RNLinksdkiOS) !== null && ++ _a !== void 0 ++ ? _a ++ : undefined; + /** + * A hook that registers a listener on the Plaid emitter for the 'onEvent' type. + * The listener is cleaned up when this view is unmounted + * +- * @param LinkEventListener the listener to call ++ * @param linkEventListener the listener to call + */ +-export const usePlaidEmitter = (LinkEventListener) => { +- useEffect(() => { +- const emitter = new NativeEventEmitter(Platform.OS === 'ios' +- ? NativeModules.RNLinksdk +- : NativeModules.PlaidAndroid); +- const listener = emitter.addListener('onEvent', LinkEventListener); +- // Clean up after this effect: +- return function cleanup() { +- listener.remove(); +- }; +- }, []); ++export const usePlaidEmitter = linkEventListener => { ++ useEffect(() => { ++ const emitter = new NativeEventEmitter(RNLinksdk); ++ const listener = emitter.addListener('onEvent', linkEventListener); ++ // Clean up after this effect: ++ return function cleanup() { ++ listener.remove(); ++ }; ++ }, []); + }; +-export const openLink = (props) => __awaiter(void 0, void 0, void 0, function* () { +- var _a, _b; ++export const openLink = props => ++ __awaiter(void 0, void 0, void 0, function*() { ++ var _b, _c; + let config = props.tokenConfig; +- let noLoadingState = (_a = config.noLoadingState) !== null && _a !== void 0 ? _a : false; ++ let noLoadingState = ++ (_b = config.noLoadingState) !== null && _b !== void 0 ? _b : false; + if (Platform.OS === 'android') { +- NativeModules.PlaidAndroid.startLinkActivityForResult(config.token, noLoadingState, (_b = config.logLevel) !== null && _b !== void 0 ? _b : LinkLogLevel.ERROR, (result) => { +- if (props.onSuccess != null) { +- props.onSuccess(result); +- } +- }, (result) => { +- if (props.onExit != null) { +- if (result.error != null && result.error.displayMessage != null) { +- //TODO(RNSDK-118): Remove errorDisplayMessage field in next major update. +- result.error.errorDisplayMessage = result.error.displayMessage; +- } +- props.onExit(result); ++ if (RNLinksdkAndroid === null) { ++ throw new Error( ++ '[react-native-plaid-link-sdk] RNLinksdkAndroid is not defined', ++ ); ++ } ++ RNLinksdkAndroid.startLinkActivityForResult( ++ config.token, ++ noLoadingState, ++ (_c = config.logLevel) !== null && _c !== void 0 ++ ? _c ++ : LinkLogLevel.ERROR, ++ // @ts-ignore we use Object type in the spec file as it maps to NSDictionary and ReadableMap ++ result => { ++ if (props.onSuccess != null) { ++ props.onSuccess(result); ++ } ++ }, ++ result => { ++ if (props.onExit != null) { ++ if (result.error != null && result.error.displayMessage != null) { ++ //TODO(RNSDK-118): Remove errorDisplayMessage field in next major update. ++ result.error.errorDisplayMessage = result.error.displayMessage; + } +- }); +- } +- else { +- NativeModules.RNLinksdk.create(config.token, noLoadingState); +- let presentFullScreen = props.iOSPresentationStyle == LinkIOSPresentationStyle.FULL_SCREEN; +- NativeModules.RNLinksdk.open(presentFullScreen, (result) => { +- if (props.onSuccess != null) { +- props.onSuccess(result); +- } +- }, (error, result) => { +- if (props.onExit != null) { +- if (error) { +- var data = result || {}; +- data.error = error; +- props.onExit(data); +- } +- else { +- props.onExit(result); +- } ++ props.onExit(result); ++ } ++ }, ++ ); ++ } else { ++ if (RNLinksdkiOS === null) { ++ throw new Error( ++ '[react-native-plaid-link-sdk] RNLinksdkiOS is not defined', ++ ); ++ } ++ RNLinksdkiOS.create(config.token, noLoadingState); ++ let presentFullScreen = ++ props.iOSPresentationStyle == LinkIOSPresentationStyle.FULL_SCREEN; ++ RNLinksdkiOS.open( ++ presentFullScreen, ++ // @ts-ignore we use Object type in the spec file as it maps to NSDictionary and ReadableMap ++ result => { ++ if (props.onSuccess != null) { ++ props.onSuccess(result); ++ } ++ }, ++ (error, result) => { ++ if (props.onExit != null) { ++ if (error) { ++ var data = result || {}; ++ data.error = error; ++ props.onExit(data); ++ } else { ++ props.onExit(result); + } +- }); ++ } ++ }, ++ ); + } +-}); ++ }); + export const dismissLink = () => { +- if (Platform.OS === 'ios') { +- NativeModules.RNLinksdk.dismiss(); ++ if (Platform.OS === 'ios') { ++ if (RNLinksdkiOS === null) { ++ throw new Error( ++ '[react-native-plaid-link-sdk] RNLinksdkiOS is not defined', ++ ); + } ++ RNLinksdkiOS.dismiss(); ++ } + }; +-export const PlaidLink = (props) => { +- function onPress() { +- var _a; +- (_a = props.onPress) === null || _a === void 0 ? void 0 : _a.call(props); +- openLink(props); +- } +- return {props.children}; ++export const PlaidLink = props => { ++ function onPress() { ++ var _a; ++ (_a = props.onPress) === null || _a === void 0 ? void 0 : _a.call(props); ++ openLink(props); ++ } ++ return ( ++ // @ts-ignore some types directories misconfiguration ++ {props.children} ++ ); + }; +diff --git a/node_modules/react-native-plaid-link-sdk/dist/Types.js b/node_modules/react-native-plaid-link-sdk/dist/Types.js +index 184adad..11b34e3 100644 +--- a/node_modules/react-native-plaid-link-sdk/dist/Types.js ++++ b/node_modules/react-native-plaid-link-sdk/dist/Types.js +@@ -1,430 +1,681 @@ + export var LinkLogLevel; +-(function (LinkLogLevel) { +- LinkLogLevel["DEBUG"] = "debug"; +- LinkLogLevel["INFO"] = "info"; +- LinkLogLevel["WARN"] = "warn"; +- LinkLogLevel["ERROR"] = "error"; ++(function(LinkLogLevel) { ++ LinkLogLevel['DEBUG'] = 'debug'; ++ LinkLogLevel['INFO'] = 'info'; ++ LinkLogLevel['WARN'] = 'warn'; ++ LinkLogLevel['ERROR'] = 'error'; + })(LinkLogLevel || (LinkLogLevel = {})); + export var PlaidEnvironment; +-(function (PlaidEnvironment) { +- PlaidEnvironment["PRODUCTION"] = "production"; +- PlaidEnvironment["DEVELOPMENT"] = "development"; +- PlaidEnvironment["SANDBOX"] = "sandbox"; ++(function(PlaidEnvironment) { ++ PlaidEnvironment['PRODUCTION'] = 'production'; ++ PlaidEnvironment['DEVELOPMENT'] = 'development'; ++ PlaidEnvironment['SANDBOX'] = 'sandbox'; + })(PlaidEnvironment || (PlaidEnvironment = {})); + export var PlaidProduct; +-(function (PlaidProduct) { +- PlaidProduct["ASSETS"] = "assets"; +- PlaidProduct["AUTH"] = "auth"; +- PlaidProduct["DEPOSIT_SWITCH"] = "deposit_switch"; +- PlaidProduct["IDENTITY"] = "identity"; +- PlaidProduct["INCOME"] = "income"; +- PlaidProduct["INVESTMENTS"] = "investments"; +- PlaidProduct["LIABILITIES"] = "liabilities"; +- PlaidProduct["LIABILITIES_REPORT"] = "liabilities_report"; +- PlaidProduct["PAYMENT_INITIATION"] = "payment_initiation"; +- PlaidProduct["TRANSACTIONS"] = "transactions"; ++(function(PlaidProduct) { ++ PlaidProduct['ASSETS'] = 'assets'; ++ PlaidProduct['AUTH'] = 'auth'; ++ PlaidProduct['DEPOSIT_SWITCH'] = 'deposit_switch'; ++ PlaidProduct['IDENTITY'] = 'identity'; ++ PlaidProduct['INCOME'] = 'income'; ++ PlaidProduct['INVESTMENTS'] = 'investments'; ++ PlaidProduct['LIABILITIES'] = 'liabilities'; ++ PlaidProduct['LIABILITIES_REPORT'] = 'liabilities_report'; ++ PlaidProduct['PAYMENT_INITIATION'] = 'payment_initiation'; ++ PlaidProduct['TRANSACTIONS'] = 'transactions'; + })(PlaidProduct || (PlaidProduct = {})); + export var LinkAccountType; +-(function (LinkAccountType) { +- LinkAccountType["CREDIT"] = "credit"; +- LinkAccountType["DEPOSITORY"] = "depository"; +- LinkAccountType["INVESTMENT"] = "investment"; +- LinkAccountType["LOAN"] = "loan"; +- LinkAccountType["OTHER"] = "other"; ++(function(LinkAccountType) { ++ LinkAccountType['CREDIT'] = 'credit'; ++ LinkAccountType['DEPOSITORY'] = 'depository'; ++ LinkAccountType['INVESTMENT'] = 'investment'; ++ LinkAccountType['LOAN'] = 'loan'; ++ LinkAccountType['OTHER'] = 'other'; + })(LinkAccountType || (LinkAccountType = {})); + export var LinkAccountSubtypes; +-(function (LinkAccountSubtypes) { +- LinkAccountSubtypes["ALL"] = "all"; +- LinkAccountSubtypes["CREDIT_CARD"] = "credit card"; +- LinkAccountSubtypes["PAYPAL"] = "paypal"; +- LinkAccountSubtypes["AUTO"] = "auto"; +- LinkAccountSubtypes["BUSINESS"] = "business"; +- LinkAccountSubtypes["COMMERCIAL"] = "commercial"; +- LinkAccountSubtypes["CONSTRUCTION"] = "construction"; +- LinkAccountSubtypes["CONSUMER"] = "consumer"; +- LinkAccountSubtypes["HOME_EQUITY"] = "home equity"; +- LinkAccountSubtypes["LINE_OF_CREDIT"] = "line of credit"; +- LinkAccountSubtypes["LOAN"] = "loan"; +- LinkAccountSubtypes["MORTGAGE"] = "mortgage"; +- LinkAccountSubtypes["OVERDRAFT"] = "overdraft"; +- LinkAccountSubtypes["STUDENT"] = "student"; +- LinkAccountSubtypes["CASH_MANAGEMENT"] = "cash management"; +- LinkAccountSubtypes["CD"] = "cd"; +- LinkAccountSubtypes["CHECKING"] = "checking"; +- LinkAccountSubtypes["EBT"] = "ebt"; +- LinkAccountSubtypes["HSA"] = "hsa"; +- LinkAccountSubtypes["MONEY_MARKET"] = "money market"; +- LinkAccountSubtypes["PREPAID"] = "prepaid"; +- LinkAccountSubtypes["SAVINGS"] = "savings"; +- LinkAccountSubtypes["FOUR_0_1_A"] = "401a"; +- LinkAccountSubtypes["FOUR_0_1_K"] = "401k"; +- LinkAccountSubtypes["FOUR_0_3_B"] = "403B"; +- LinkAccountSubtypes["FOUR_5_7_B"] = "457b"; +- LinkAccountSubtypes["FIVE_2_9"] = "529"; +- LinkAccountSubtypes["BROKERAGE"] = "brokerage"; +- LinkAccountSubtypes["CASH_ISA"] = "cash isa"; +- LinkAccountSubtypes["EDUCATION_SAVINGS_ACCOUNT"] = "education savings account"; +- LinkAccountSubtypes["FIXED_ANNUNITY"] = "fixed annuity"; +- LinkAccountSubtypes["GIC"] = "gic"; +- LinkAccountSubtypes["HEALTH_REIMBURSEMENT_ARRANGEMENT"] = "health reimbursement arrangement"; +- LinkAccountSubtypes["IRA"] = "ira"; +- LinkAccountSubtypes["ISA"] = "isa"; +- LinkAccountSubtypes["KEOGH"] = "keogh"; +- LinkAccountSubtypes["LIF"] = "lif"; +- LinkAccountSubtypes["LIRA"] = "lira"; +- LinkAccountSubtypes["LRIF"] = "lrif"; +- LinkAccountSubtypes["LRSP"] = "lrsp"; +- LinkAccountSubtypes["MUTUAL_FUND"] = "mutual fund"; +- LinkAccountSubtypes["NON_TAXABLE_BROKERAGE_ACCOUNT"] = "non-taxable brokerage account"; +- LinkAccountSubtypes["PENSION"] = "pension"; +- LinkAccountSubtypes["PLAN"] = "plan"; +- LinkAccountSubtypes["PRIF"] = "prif"; +- LinkAccountSubtypes["PROFIT_SHARING_PLAN"] = "profit sharing plan"; +- LinkAccountSubtypes["RDSP"] = "rdsp"; +- LinkAccountSubtypes["RESP"] = "resp"; +- LinkAccountSubtypes["RETIREMENT"] = "retirement"; +- LinkAccountSubtypes["RLIF"] = "rlif"; +- LinkAccountSubtypes["ROTH_401K"] = "roth 401k"; +- LinkAccountSubtypes["ROTH"] = "roth"; +- LinkAccountSubtypes["RRIF"] = "rrif"; +- LinkAccountSubtypes["RRSP"] = "rrsp"; +- LinkAccountSubtypes["SARSEP"] = "sarsep"; +- LinkAccountSubtypes["SEP_IRA"] = "sep ira"; +- LinkAccountSubtypes["SIMPLE_IRA"] = "simple ira"; +- LinkAccountSubtypes["SIPP"] = "sipp"; +- LinkAccountSubtypes["STOCK_PLAN"] = "stock plan"; +- LinkAccountSubtypes["TFSA"] = "tfsa"; +- LinkAccountSubtypes["THRIFT_SAVINGS_PLAN"] = "thrift savings plan"; +- LinkAccountSubtypes["TRUST"] = "trust"; +- LinkAccountSubtypes["UGMA"] = "ugma"; +- LinkAccountSubtypes["UTMA"] = "utma"; +- LinkAccountSubtypes["VARIABLE_ANNUITY"] = "variable annuity"; ++(function(LinkAccountSubtypes) { ++ LinkAccountSubtypes['ALL'] = 'all'; ++ LinkAccountSubtypes['CREDIT_CARD'] = 'credit card'; ++ LinkAccountSubtypes['PAYPAL'] = 'paypal'; ++ LinkAccountSubtypes['AUTO'] = 'auto'; ++ LinkAccountSubtypes['BUSINESS'] = 'business'; ++ LinkAccountSubtypes['COMMERCIAL'] = 'commercial'; ++ LinkAccountSubtypes['CONSTRUCTION'] = 'construction'; ++ LinkAccountSubtypes['CONSUMER'] = 'consumer'; ++ LinkAccountSubtypes['HOME_EQUITY'] = 'home equity'; ++ LinkAccountSubtypes['LINE_OF_CREDIT'] = 'line of credit'; ++ LinkAccountSubtypes['LOAN'] = 'loan'; ++ LinkAccountSubtypes['MORTGAGE'] = 'mortgage'; ++ LinkAccountSubtypes['OVERDRAFT'] = 'overdraft'; ++ LinkAccountSubtypes['STUDENT'] = 'student'; ++ LinkAccountSubtypes['CASH_MANAGEMENT'] = 'cash management'; ++ LinkAccountSubtypes['CD'] = 'cd'; ++ LinkAccountSubtypes['CHECKING'] = 'checking'; ++ LinkAccountSubtypes['EBT'] = 'ebt'; ++ LinkAccountSubtypes['HSA'] = 'hsa'; ++ LinkAccountSubtypes['MONEY_MARKET'] = 'money market'; ++ LinkAccountSubtypes['PREPAID'] = 'prepaid'; ++ LinkAccountSubtypes['SAVINGS'] = 'savings'; ++ LinkAccountSubtypes['FOUR_0_1_A'] = '401a'; ++ LinkAccountSubtypes['FOUR_0_1_K'] = '401k'; ++ LinkAccountSubtypes['FOUR_0_3_B'] = '403B'; ++ LinkAccountSubtypes['FOUR_5_7_B'] = '457b'; ++ LinkAccountSubtypes['FIVE_2_9'] = '529'; ++ LinkAccountSubtypes['BROKERAGE'] = 'brokerage'; ++ LinkAccountSubtypes['CASH_ISA'] = 'cash isa'; ++ LinkAccountSubtypes['EDUCATION_SAVINGS_ACCOUNT'] = ++ 'education savings account'; ++ LinkAccountSubtypes['FIXED_ANNUNITY'] = 'fixed annuity'; ++ LinkAccountSubtypes['GIC'] = 'gic'; ++ LinkAccountSubtypes['HEALTH_REIMBURSEMENT_ARRANGEMENT'] = ++ 'health reimbursement arrangement'; ++ LinkAccountSubtypes['IRA'] = 'ira'; ++ LinkAccountSubtypes['ISA'] = 'isa'; ++ LinkAccountSubtypes['KEOGH'] = 'keogh'; ++ LinkAccountSubtypes['LIF'] = 'lif'; ++ LinkAccountSubtypes['LIRA'] = 'lira'; ++ LinkAccountSubtypes['LRIF'] = 'lrif'; ++ LinkAccountSubtypes['LRSP'] = 'lrsp'; ++ LinkAccountSubtypes['MUTUAL_FUND'] = 'mutual fund'; ++ LinkAccountSubtypes['NON_TAXABLE_BROKERAGE_ACCOUNT'] = ++ 'non-taxable brokerage account'; ++ LinkAccountSubtypes['PENSION'] = 'pension'; ++ LinkAccountSubtypes['PLAN'] = 'plan'; ++ LinkAccountSubtypes['PRIF'] = 'prif'; ++ LinkAccountSubtypes['PROFIT_SHARING_PLAN'] = 'profit sharing plan'; ++ LinkAccountSubtypes['RDSP'] = 'rdsp'; ++ LinkAccountSubtypes['RESP'] = 'resp'; ++ LinkAccountSubtypes['RETIREMENT'] = 'retirement'; ++ LinkAccountSubtypes['RLIF'] = 'rlif'; ++ LinkAccountSubtypes['ROTH_401K'] = 'roth 401k'; ++ LinkAccountSubtypes['ROTH'] = 'roth'; ++ LinkAccountSubtypes['RRIF'] = 'rrif'; ++ LinkAccountSubtypes['RRSP'] = 'rrsp'; ++ LinkAccountSubtypes['SARSEP'] = 'sarsep'; ++ LinkAccountSubtypes['SEP_IRA'] = 'sep ira'; ++ LinkAccountSubtypes['SIMPLE_IRA'] = 'simple ira'; ++ LinkAccountSubtypes['SIPP'] = 'sipp'; ++ LinkAccountSubtypes['STOCK_PLAN'] = 'stock plan'; ++ LinkAccountSubtypes['TFSA'] = 'tfsa'; ++ LinkAccountSubtypes['THRIFT_SAVINGS_PLAN'] = 'thrift savings plan'; ++ LinkAccountSubtypes['TRUST'] = 'trust'; ++ LinkAccountSubtypes['UGMA'] = 'ugma'; ++ LinkAccountSubtypes['UTMA'] = 'utma'; ++ LinkAccountSubtypes['VARIABLE_ANNUITY'] = 'variable annuity'; + })(LinkAccountSubtypes || (LinkAccountSubtypes = {})); + export class LinkAccountSubtypeCredit { +- constructor(type, subtype) { +- this.type = type; +- this.subtype = subtype; +- } ++ constructor(type, subtype) { ++ this.type = type; ++ this.subtype = subtype; ++ } + } +-LinkAccountSubtypeCredit.ALL = new LinkAccountSubtypeCredit(LinkAccountType.CREDIT, LinkAccountSubtypes.ALL); +-LinkAccountSubtypeCredit.CREDIT_CARD = new LinkAccountSubtypeCredit(LinkAccountType.CREDIT, LinkAccountSubtypes.CREDIT_CARD); +-LinkAccountSubtypeCredit.PAYPAL = new LinkAccountSubtypeCredit(LinkAccountType.CREDIT, LinkAccountSubtypes.PAYPAL); ++LinkAccountSubtypeCredit.ALL = new LinkAccountSubtypeCredit( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.ALL, ++); ++LinkAccountSubtypeCredit.CREDIT_CARD = new LinkAccountSubtypeCredit( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.CREDIT_CARD, ++); ++LinkAccountSubtypeCredit.PAYPAL = new LinkAccountSubtypeCredit( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.PAYPAL, ++); + export class LinkAccountSubtypeDepository { +- constructor(type, subtype) { +- this.type = type; +- this.subtype = subtype; +- } ++ constructor(type, subtype) { ++ this.type = type; ++ this.subtype = subtype; ++ } + } +-LinkAccountSubtypeDepository.ALL = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.ALL); +-LinkAccountSubtypeDepository.CASH_MANAGEMENT = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.CASH_MANAGEMENT); +-LinkAccountSubtypeDepository.CD = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.CD); +-LinkAccountSubtypeDepository.CHECKING = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.CHECKING); +-LinkAccountSubtypeDepository.EBT = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.EBT); +-LinkAccountSubtypeDepository.HSA = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.HSA); +-LinkAccountSubtypeDepository.MONEY_MARKET = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.MONEY_MARKET); +-LinkAccountSubtypeDepository.PAYPAL = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.PAYPAL); +-LinkAccountSubtypeDepository.PREPAID = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.PREPAID); +-LinkAccountSubtypeDepository.SAVINGS = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.SAVINGS); ++LinkAccountSubtypeDepository.ALL = new LinkAccountSubtypeDepository( ++ LinkAccountType.DEPOSITORY, ++ LinkAccountSubtypes.ALL, ++); ++LinkAccountSubtypeDepository.CASH_MANAGEMENT = new LinkAccountSubtypeDepository( ++ LinkAccountType.DEPOSITORY, ++ LinkAccountSubtypes.CASH_MANAGEMENT, ++); ++LinkAccountSubtypeDepository.CD = new LinkAccountSubtypeDepository( ++ LinkAccountType.DEPOSITORY, ++ LinkAccountSubtypes.CD, ++); ++LinkAccountSubtypeDepository.CHECKING = new LinkAccountSubtypeDepository( ++ LinkAccountType.DEPOSITORY, ++ LinkAccountSubtypes.CHECKING, ++); ++LinkAccountSubtypeDepository.EBT = new LinkAccountSubtypeDepository( ++ LinkAccountType.DEPOSITORY, ++ LinkAccountSubtypes.EBT, ++); ++LinkAccountSubtypeDepository.HSA = new LinkAccountSubtypeDepository( ++ LinkAccountType.DEPOSITORY, ++ LinkAccountSubtypes.HSA, ++); ++LinkAccountSubtypeDepository.MONEY_MARKET = new LinkAccountSubtypeDepository( ++ LinkAccountType.DEPOSITORY, ++ LinkAccountSubtypes.MONEY_MARKET, ++); ++LinkAccountSubtypeDepository.PAYPAL = new LinkAccountSubtypeDepository( ++ LinkAccountType.DEPOSITORY, ++ LinkAccountSubtypes.PAYPAL, ++); ++LinkAccountSubtypeDepository.PREPAID = new LinkAccountSubtypeDepository( ++ LinkAccountType.DEPOSITORY, ++ LinkAccountSubtypes.PREPAID, ++); ++LinkAccountSubtypeDepository.SAVINGS = new LinkAccountSubtypeDepository( ++ LinkAccountType.DEPOSITORY, ++ LinkAccountSubtypes.SAVINGS, ++); + export class LinkAccountSubtypeInvestment { +- constructor(type, subtype) { +- this.type = type; +- this.subtype = subtype; +- } ++ constructor(type, subtype) { ++ this.type = type; ++ this.subtype = subtype; ++ } + } +-LinkAccountSubtypeInvestment.ALL = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ALL); +-LinkAccountSubtypeInvestment.BROKERAGE = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.BROKERAGE); +-LinkAccountSubtypeInvestment.CASH_ISA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.CASH_ISA); +-LinkAccountSubtypeInvestment.EDUCATION_SAVINGS_ACCOUNT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.EDUCATION_SAVINGS_ACCOUNT); +-LinkAccountSubtypeInvestment.FIXED_ANNUNITY = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FIXED_ANNUNITY); +-LinkAccountSubtypeInvestment.GIC = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.GIC); +-LinkAccountSubtypeInvestment.HEALTH_REIMBURSEMENT_ARRANGEMENT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.HEALTH_REIMBURSEMENT_ARRANGEMENT); +-LinkAccountSubtypeInvestment.HSA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.HSA); +-LinkAccountSubtypeInvestment.INVESTMENT_401A = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_0_1_A); +-LinkAccountSubtypeInvestment.INVESTMENT_401K = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_0_1_K); +-LinkAccountSubtypeInvestment.INVESTMENT_403B = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_0_3_B); +-LinkAccountSubtypeInvestment.INVESTMENT_457B = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_5_7_B); +-LinkAccountSubtypeInvestment.INVESTMENT_529 = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FIVE_2_9); +-LinkAccountSubtypeInvestment.IRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.IRA); +-LinkAccountSubtypeInvestment.ISA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ISA); +-LinkAccountSubtypeInvestment.KEOGH = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.KEOGH); +-LinkAccountSubtypeInvestment.LIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LIF); +-LinkAccountSubtypeInvestment.LIRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LIRA); +-LinkAccountSubtypeInvestment.LRIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LRIF); +-LinkAccountSubtypeInvestment.LRSP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LRSP); +-LinkAccountSubtypeInvestment.MUTUAL_FUND = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.MUTUAL_FUND); +-LinkAccountSubtypeInvestment.NON_TAXABLE_BROKERAGE_ACCOUNT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.NON_TAXABLE_BROKERAGE_ACCOUNT); +-LinkAccountSubtypeInvestment.PENSION = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PENSION); +-LinkAccountSubtypeInvestment.PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PLAN); +-LinkAccountSubtypeInvestment.PRIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PRIF); +-LinkAccountSubtypeInvestment.PROFIT_SHARING_PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PROFIT_SHARING_PLAN); +-LinkAccountSubtypeInvestment.RDSP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RDSP); +-LinkAccountSubtypeInvestment.RESP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RESP); +-LinkAccountSubtypeInvestment.RETIREMENT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RETIREMENT); +-LinkAccountSubtypeInvestment.RLIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RLIF); +-LinkAccountSubtypeInvestment.ROTH = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ROTH); +-LinkAccountSubtypeInvestment.ROTH_401K = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ROTH_401K); +-LinkAccountSubtypeInvestment.RRIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RRIF); +-LinkAccountSubtypeInvestment.RRSP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RRSP); +-LinkAccountSubtypeInvestment.SARSEP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SARSEP); +-LinkAccountSubtypeInvestment.SEP_IRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SEP_IRA); +-LinkAccountSubtypeInvestment.SIMPLE_IRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SIMPLE_IRA); +-LinkAccountSubtypeInvestment.SIIP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SIPP); +-LinkAccountSubtypeInvestment.STOCK_PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.STOCK_PLAN); +-LinkAccountSubtypeInvestment.TFSA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.TFSA); +-LinkAccountSubtypeInvestment.THRIFT_SAVINGS_PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.THRIFT_SAVINGS_PLAN); +-LinkAccountSubtypeInvestment.TRUST = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.TRUST); +-LinkAccountSubtypeInvestment.UGMA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.UGMA); +-LinkAccountSubtypeInvestment.UTMA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.UTMA); +-LinkAccountSubtypeInvestment.VARIABLE_ANNUITY = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.VARIABLE_ANNUITY); ++LinkAccountSubtypeInvestment.ALL = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.ALL, ++); ++LinkAccountSubtypeInvestment.BROKERAGE = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.BROKERAGE, ++); ++LinkAccountSubtypeInvestment.CASH_ISA = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.CASH_ISA, ++); ++LinkAccountSubtypeInvestment.EDUCATION_SAVINGS_ACCOUNT = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.EDUCATION_SAVINGS_ACCOUNT, ++); ++LinkAccountSubtypeInvestment.FIXED_ANNUNITY = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.FIXED_ANNUNITY, ++); ++LinkAccountSubtypeInvestment.GIC = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.GIC, ++); ++LinkAccountSubtypeInvestment.HEALTH_REIMBURSEMENT_ARRANGEMENT = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.HEALTH_REIMBURSEMENT_ARRANGEMENT, ++); ++LinkAccountSubtypeInvestment.HSA = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.HSA, ++); ++LinkAccountSubtypeInvestment.INVESTMENT_401A = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.FOUR_0_1_A, ++); ++LinkAccountSubtypeInvestment.INVESTMENT_401K = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.FOUR_0_1_K, ++); ++LinkAccountSubtypeInvestment.INVESTMENT_403B = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.FOUR_0_3_B, ++); ++LinkAccountSubtypeInvestment.INVESTMENT_457B = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.FOUR_5_7_B, ++); ++LinkAccountSubtypeInvestment.INVESTMENT_529 = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.FIVE_2_9, ++); ++LinkAccountSubtypeInvestment.IRA = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.IRA, ++); ++LinkAccountSubtypeInvestment.ISA = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.ISA, ++); ++LinkAccountSubtypeInvestment.KEOGH = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.KEOGH, ++); ++LinkAccountSubtypeInvestment.LIF = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.LIF, ++); ++LinkAccountSubtypeInvestment.LIRA = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.LIRA, ++); ++LinkAccountSubtypeInvestment.LRIF = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.LRIF, ++); ++LinkAccountSubtypeInvestment.LRSP = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.LRSP, ++); ++LinkAccountSubtypeInvestment.MUTUAL_FUND = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.MUTUAL_FUND, ++); ++LinkAccountSubtypeInvestment.NON_TAXABLE_BROKERAGE_ACCOUNT = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.NON_TAXABLE_BROKERAGE_ACCOUNT, ++); ++LinkAccountSubtypeInvestment.PENSION = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.PENSION, ++); ++LinkAccountSubtypeInvestment.PLAN = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.PLAN, ++); ++LinkAccountSubtypeInvestment.PRIF = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.PRIF, ++); ++LinkAccountSubtypeInvestment.PROFIT_SHARING_PLAN = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.PROFIT_SHARING_PLAN, ++); ++LinkAccountSubtypeInvestment.RDSP = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.RDSP, ++); ++LinkAccountSubtypeInvestment.RESP = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.RESP, ++); ++LinkAccountSubtypeInvestment.RETIREMENT = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.RETIREMENT, ++); ++LinkAccountSubtypeInvestment.RLIF = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.RLIF, ++); ++LinkAccountSubtypeInvestment.ROTH = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.ROTH, ++); ++LinkAccountSubtypeInvestment.ROTH_401K = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.ROTH_401K, ++); ++LinkAccountSubtypeInvestment.RRIF = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.RRIF, ++); ++LinkAccountSubtypeInvestment.RRSP = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.RRSP, ++); ++LinkAccountSubtypeInvestment.SARSEP = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.SARSEP, ++); ++LinkAccountSubtypeInvestment.SEP_IRA = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.SEP_IRA, ++); ++LinkAccountSubtypeInvestment.SIMPLE_IRA = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.SIMPLE_IRA, ++); ++LinkAccountSubtypeInvestment.SIIP = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.SIPP, ++); ++LinkAccountSubtypeInvestment.STOCK_PLAN = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.STOCK_PLAN, ++); ++LinkAccountSubtypeInvestment.TFSA = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.TFSA, ++); ++LinkAccountSubtypeInvestment.THRIFT_SAVINGS_PLAN = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.THRIFT_SAVINGS_PLAN, ++); ++LinkAccountSubtypeInvestment.TRUST = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.TRUST, ++); ++LinkAccountSubtypeInvestment.UGMA = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.UGMA, ++); ++LinkAccountSubtypeInvestment.UTMA = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.UTMA, ++); ++LinkAccountSubtypeInvestment.VARIABLE_ANNUITY = new LinkAccountSubtypeInvestment( ++ LinkAccountType.INVESTMENT, ++ LinkAccountSubtypes.VARIABLE_ANNUITY, ++); + export class LinkAccountSubtypeLoan { +- constructor(type, subtype) { +- this.type = type; +- this.subtype = subtype; +- } ++ constructor(type, subtype) { ++ this.type = type; ++ this.subtype = subtype; ++ } + } +-LinkAccountSubtypeLoan.ALL = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.ALL); +-LinkAccountSubtypeLoan.AUTO = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.AUTO); +-LinkAccountSubtypeLoan.BUSINESS = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.BUSINESS); +-LinkAccountSubtypeLoan.COMMERCIAL = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.COMMERCIAL); +-LinkAccountSubtypeLoan.CONSTRUCTION = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.CONSTRUCTION); +-LinkAccountSubtypeLoan.CONSUMER = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.CONSUMER); +-LinkAccountSubtypeLoan.HOME_EQUITY = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.HOME_EQUITY); +-LinkAccountSubtypeLoan.LINE_OF_CREDIT = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.LINE_OF_CREDIT); +-LinkAccountSubtypeLoan.LOAN = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.LOAN); +-LinkAccountSubtypeLoan.MORTGAGE = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.MORTGAGE); +-LinkAccountSubtypeLoan.OVERDRAFT = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.OVERDRAFT); +-LinkAccountSubtypeLoan.STUDENT = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.STUDENT); ++LinkAccountSubtypeLoan.ALL = new LinkAccountSubtypeLoan( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.ALL, ++); ++LinkAccountSubtypeLoan.AUTO = new LinkAccountSubtypeLoan( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.AUTO, ++); ++LinkAccountSubtypeLoan.BUSINESS = new LinkAccountSubtypeLoan( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.BUSINESS, ++); ++LinkAccountSubtypeLoan.COMMERCIAL = new LinkAccountSubtypeLoan( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.COMMERCIAL, ++); ++LinkAccountSubtypeLoan.CONSTRUCTION = new LinkAccountSubtypeLoan( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.CONSTRUCTION, ++); ++LinkAccountSubtypeLoan.CONSUMER = new LinkAccountSubtypeLoan( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.CONSUMER, ++); ++LinkAccountSubtypeLoan.HOME_EQUITY = new LinkAccountSubtypeLoan( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.HOME_EQUITY, ++); ++LinkAccountSubtypeLoan.LINE_OF_CREDIT = new LinkAccountSubtypeLoan( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.LINE_OF_CREDIT, ++); ++LinkAccountSubtypeLoan.LOAN = new LinkAccountSubtypeLoan( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.LOAN, ++); ++LinkAccountSubtypeLoan.MORTGAGE = new LinkAccountSubtypeLoan( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.MORTGAGE, ++); ++LinkAccountSubtypeLoan.OVERDRAFT = new LinkAccountSubtypeLoan( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.OVERDRAFT, ++); ++LinkAccountSubtypeLoan.STUDENT = new LinkAccountSubtypeLoan( ++ LinkAccountType.CREDIT, ++ LinkAccountSubtypes.STUDENT, ++); + export class LinkAccountSubtypeUnknown { +- constructor(type, subtype) { +- this.type = type; +- this.subtype = subtype; +- } ++ constructor(type, subtype) { ++ this.type = type; ++ this.subtype = subtype; ++ } + } + export var LinkAccountVerificationStatus; +-(function (LinkAccountVerificationStatus) { +- LinkAccountVerificationStatus["PENDING_AUTOMATIC_VERIFICATION"] = "pending_automatic_verification"; +- LinkAccountVerificationStatus["PENDING_MANUAL_VERIFICATION"] = "pending_manual_verification"; +- LinkAccountVerificationStatus["MANUALLY_VERIFIED"] = "manually_verified"; ++(function(LinkAccountVerificationStatus) { ++ LinkAccountVerificationStatus['PENDING_AUTOMATIC_VERIFICATION'] = ++ 'pending_automatic_verification'; ++ LinkAccountVerificationStatus['PENDING_MANUAL_VERIFICATION'] = ++ 'pending_manual_verification'; ++ LinkAccountVerificationStatus['MANUALLY_VERIFIED'] = 'manually_verified'; + })(LinkAccountVerificationStatus || (LinkAccountVerificationStatus = {})); + export var LinkExitMetadataStatus; +-(function (LinkExitMetadataStatus) { +- LinkExitMetadataStatus["CONNECTED"] = "connected"; +- LinkExitMetadataStatus["CHOOSE_DEVICE"] = "choose_device"; +- LinkExitMetadataStatus["REQUIRES_ACCOUNT_SELECTION"] = "requires_account_selection"; +- LinkExitMetadataStatus["REQUIRES_CODE"] = "requires_code"; +- LinkExitMetadataStatus["REQUIRES_CREDENTIALS"] = "requires_credentials"; +- LinkExitMetadataStatus["REQUIRES_EXTERNAL_ACTION"] = "requires_external_action"; +- LinkExitMetadataStatus["REQUIRES_OAUTH"] = "requires_oauth"; +- LinkExitMetadataStatus["REQUIRES_QUESTIONS"] = "requires_questions"; +- LinkExitMetadataStatus["REQUIRES_RECAPTCHA"] = "requires_recaptcha"; +- LinkExitMetadataStatus["REQUIRES_SELECTIONS"] = "requires_selections"; +- LinkExitMetadataStatus["REQUIRES_DEPOSIT_SWITCH_ALLOCATION_CONFIGURATION"] = "requires_deposit_switch_allocation_configuration"; +- LinkExitMetadataStatus["REQUIRES_DEPOSIT_SWITCH_ALLOCATION_SELECTION"] = "requires_deposit_switch_allocation_selection"; ++(function(LinkExitMetadataStatus) { ++ LinkExitMetadataStatus['CONNECTED'] = 'connected'; ++ LinkExitMetadataStatus['CHOOSE_DEVICE'] = 'choose_device'; ++ LinkExitMetadataStatus['REQUIRES_ACCOUNT_SELECTION'] = ++ 'requires_account_selection'; ++ LinkExitMetadataStatus['REQUIRES_CODE'] = 'requires_code'; ++ LinkExitMetadataStatus['REQUIRES_CREDENTIALS'] = 'requires_credentials'; ++ LinkExitMetadataStatus['REQUIRES_EXTERNAL_ACTION'] = ++ 'requires_external_action'; ++ LinkExitMetadataStatus['REQUIRES_OAUTH'] = 'requires_oauth'; ++ LinkExitMetadataStatus['REQUIRES_QUESTIONS'] = 'requires_questions'; ++ LinkExitMetadataStatus['REQUIRES_RECAPTCHA'] = 'requires_recaptcha'; ++ LinkExitMetadataStatus['REQUIRES_SELECTIONS'] = 'requires_selections'; ++ LinkExitMetadataStatus['REQUIRES_DEPOSIT_SWITCH_ALLOCATION_CONFIGURATION'] = ++ 'requires_deposit_switch_allocation_configuration'; ++ LinkExitMetadataStatus['REQUIRES_DEPOSIT_SWITCH_ALLOCATION_SELECTION'] = ++ 'requires_deposit_switch_allocation_selection'; + })(LinkExitMetadataStatus || (LinkExitMetadataStatus = {})); + export var LinkErrorCode; +-(function (LinkErrorCode) { +- // ITEM_ERROR +- LinkErrorCode["INVALID_CREDENTIALS"] = "INVALID_CREDENTIALS"; +- LinkErrorCode["INVALID_MFA"] = "INVALID_MFA"; +- LinkErrorCode["ITEM_LOGIN_REQUIRED"] = "ITEM_LOGIN_REQUIRED"; +- LinkErrorCode["INSUFFICIENT_CREDENTIALS"] = "INSUFFICIENT_CREDENTIALS"; +- LinkErrorCode["ITEM_LOCKED"] = "ITEM_LOCKED"; +- LinkErrorCode["USER_SETUP_REQUIRED"] = "USER_SETUP_REQUIRED"; +- LinkErrorCode["MFA_NOT_SUPPORTED"] = "MFA_NOT_SUPPORTED"; +- LinkErrorCode["INVALID_SEND_METHOD"] = "INVALID_SEND_METHOD"; +- LinkErrorCode["NO_ACCOUNTS"] = "NO_ACCOUNTS"; +- LinkErrorCode["ITEM_NOT_SUPPORTED"] = "ITEM_NOT_SUPPORTED"; +- LinkErrorCode["TOO_MANY_VERIFICATION_ATTEMPTS"] = "TOO_MANY_VERIFICATION_ATTEMPTS"; +- LinkErrorCode["INVALD_UPDATED_USERNAME"] = "INVALD_UPDATED_USERNAME"; +- LinkErrorCode["INVALID_UPDATED_USERNAME"] = "INVALID_UPDATED_USERNAME"; +- LinkErrorCode["ITEM_NO_ERROR"] = "ITEM_NO_ERROR"; +- LinkErrorCode["item_no_error"] = "item-no-error"; +- LinkErrorCode["NO_AUTH_ACCOUNTS"] = "NO_AUTH_ACCOUNTS"; +- LinkErrorCode["NO_INVESTMENT_ACCOUNTS"] = "NO_INVESTMENT_ACCOUNTS"; +- LinkErrorCode["NO_INVESTMENT_AUTH_ACCOUNTS"] = "NO_INVESTMENT_AUTH_ACCOUNTS"; +- LinkErrorCode["NO_LIABILITY_ACCOUNTS"] = "NO_LIABILITY_ACCOUNTS"; +- LinkErrorCode["PRODUCTS_NOT_SUPPORTED"] = "PRODUCTS_NOT_SUPPORTED"; +- LinkErrorCode["ITEM_NOT_FOUND"] = "ITEM_NOT_FOUND"; +- LinkErrorCode["ITEM_PRODUCT_NOT_READY"] = "ITEM_PRODUCT_NOT_READY"; +- // INSTITUTION_ERROR +- LinkErrorCode["INSTITUTION_DOWN"] = "INSTITUTION_DOWN"; +- LinkErrorCode["INSTITUTION_NOT_RESPONDING"] = "INSTITUTION_NOT_RESPONDING"; +- LinkErrorCode["INSTITUTION_NOT_AVAILABLE"] = "INSTITUTION_NOT_AVAILABLE"; +- LinkErrorCode["INSTITUTION_NO_LONGER_SUPPORTED"] = "INSTITUTION_NO_LONGER_SUPPORTED"; +- // API_ERROR +- LinkErrorCode["INTERNAL_SERVER_ERROR"] = "INTERNAL_SERVER_ERROR"; +- LinkErrorCode["PLANNED_MAINTENANCE"] = "PLANNED_MAINTENANCE"; +- // ASSET_REPORT_ERROR +- LinkErrorCode["PRODUCT_NOT_ENABLED"] = "PRODUCT_NOT_ENABLED"; +- LinkErrorCode["DATA_UNAVAILABLE"] = "DATA_UNAVAILABLE"; +- LinkErrorCode["ASSET_PRODUCT_NOT_READY"] = "ASSET_PRODUCT_NOT_READY"; +- LinkErrorCode["ASSET_REPORT_GENERATION_FAILED"] = "ASSET_REPORT_GENERATION_FAILED"; +- LinkErrorCode["INVALID_PARENT"] = "INVALID_PARENT"; +- LinkErrorCode["INSIGHTS_NOT_ENABLED"] = "INSIGHTS_NOT_ENABLED"; +- LinkErrorCode["INSIGHTS_PREVIOUSLY_NOT_ENABLED"] = "INSIGHTS_PREVIOUSLY_NOT_ENABLED"; +- // BANK_TRANSFER_ERROR +- LinkErrorCode["BANK_TRANSFER_LIMIT_EXCEEDED"] = "BANK_TRANSFER_LIMIT_EXCEEDED"; +- LinkErrorCode["BANK_TRANSFER_MISSING_ORIGINATION_ACCOUNT"] = "BANK_TRANSFER_MISSING_ORIGINATION_ACCOUNT"; +- LinkErrorCode["BANK_TRANSFER_INVALID_ORIGINATION_ACCOUNT"] = "BANK_TRANSFER_INVALID_ORIGINATION_ACCOUNT"; +- LinkErrorCode["BANK_TRANSFER_ACCOUNT_BLOCKED"] = "BANK_TRANSFER_ACCOUNT_BLOCKED"; +- LinkErrorCode["BANK_TRANSFER_INSUFFICIENT_FUNDS"] = "BANK_TRANSFER_INSUFFICIENT_FUNDS"; +- LinkErrorCode["BANK_TRANSFER_NOT_CANCELLABLE"] = "BANK_TRANSFER_NOT_CANCELLABLE"; +- LinkErrorCode["BANK_TRANSFER_UNSUPPORTED_ACCOUNT_TYPE"] = "BANK_TRANSFER_UNSUPPORTED_ACCOUNT_TYPE"; +- LinkErrorCode["BANK_TRANSFER_UNSUPPORTED_ENVIRONMENT"] = "BANK_TRANSFER_UNSUPPORTED_ENVIRONMENT"; +- // SANDBOX_ERROR +- LinkErrorCode["SANDBOX_PRODUCT_NOT_ENABLED"] = "SANDBOX_PRODUCT_NOT_ENABLED"; +- LinkErrorCode["SANDBOX_WEBHOOK_INVALID"] = "SANDBOX_WEBHOOK_INVALID"; +- LinkErrorCode["SANDBOX_BANK_TRANSFER_EVENT_TRANSITION_INVALID"] = "SANDBOX_BANK_TRANSFER_EVENT_TRANSITION_INVALID"; +- // INVALID_REQUEST +- LinkErrorCode["MISSING_FIELDS"] = "MISSING_FIELDS"; +- LinkErrorCode["UNKNOWN_FIELDS"] = "UNKNOWN_FIELDS"; +- LinkErrorCode["INVALID_FIELD"] = "INVALID_FIELD"; +- LinkErrorCode["INCOMPATIBLE_API_VERSION"] = "INCOMPATIBLE_API_VERSION"; +- LinkErrorCode["INVALID_BODY"] = "INVALID_BODY"; +- LinkErrorCode["INVALID_HEADERS"] = "INVALID_HEADERS"; +- LinkErrorCode["NOT_FOUND"] = "NOT_FOUND"; +- LinkErrorCode["NO_LONGER_AVAILABLE"] = "NO_LONGER_AVAILABLE"; +- LinkErrorCode["SANDBOX_ONLY"] = "SANDBOX_ONLY"; +- LinkErrorCode["INVALID_ACCOUNT_NUMBER"] = "INVALID_ACCOUNT_NUMBER"; +- // INVALID_INPUT +- // From above ITEM_LOGIN_REQUIRED = "INVALID_CREDENTIALS", +- LinkErrorCode["INCORRECT_DEPOSIT_AMOUNTS"] = "INCORRECT_DEPOSIT_AMOUNTS"; +- LinkErrorCode["UNAUTHORIZED_ENVIRONMENT"] = "UNAUTHORIZED_ENVIRONMENT"; +- LinkErrorCode["INVALID_PRODUCT"] = "INVALID_PRODUCT"; +- LinkErrorCode["UNAUTHORIZED_ROUTE_ACCESS"] = "UNAUTHORIZED_ROUTE_ACCESS"; +- LinkErrorCode["DIRECT_INTEGRATION_NOT_ENABLED"] = "DIRECT_INTEGRATION_NOT_ENABLED"; +- LinkErrorCode["INVALID_API_KEYS"] = "INVALID_API_KEYS"; +- LinkErrorCode["INVALID_ACCESS_TOKEN"] = "INVALID_ACCESS_TOKEN"; +- LinkErrorCode["INVALID_PUBLIC_TOKEN"] = "INVALID_PUBLIC_TOKEN"; +- LinkErrorCode["INVALID_LINK_TOKEN"] = "INVALID_LINK_TOKEN"; +- LinkErrorCode["INVALID_PROCESSOR_TOKEN"] = "INVALID_PROCESSOR_TOKEN"; +- LinkErrorCode["INVALID_AUDIT_COPY_TOKEN"] = "INVALID_AUDIT_COPY_TOKEN"; +- LinkErrorCode["INVALID_ACCOUNT_ID"] = "INVALID_ACCOUNT_ID"; +- LinkErrorCode["MICRODEPOSITS_ALREADY_VERIFIED"] = "MICRODEPOSITS_ALREADY_VERIFIED"; +- // INVALID_RESULT +- LinkErrorCode["PLAID_DIRECT_ITEM_IMPORT_RETURNED_INVALID_MFA"] = "PLAID_DIRECT_ITEM_IMPORT_RETURNED_INVALID_MFA"; +- // RATE_LIMIT_EXCEEDED +- LinkErrorCode["ACCOUNTS_LIMIT"] = "ACCOUNTS_LIMIT"; +- LinkErrorCode["ADDITION_LIMIT"] = "ADDITION_LIMIT"; +- LinkErrorCode["AUTH_LIMIT"] = "AUTH_LIMIT"; +- LinkErrorCode["BALANCE_LIMIT"] = "BALANCE_LIMIT"; +- LinkErrorCode["IDENTITY_LIMIT"] = "IDENTITY_LIMIT"; +- LinkErrorCode["ITEM_GET_LIMIT"] = "ITEM_GET_LIMIT"; +- LinkErrorCode["RATE_LIMIT"] = "RATE_LIMIT"; +- LinkErrorCode["TRANSACTIONS_LIMIT"] = "TRANSACTIONS_LIMIT"; +- // RECAPTCHA_ERROR +- LinkErrorCode["RECAPTCHA_REQUIRED"] = "RECAPTCHA_REQUIRED"; +- LinkErrorCode["RECAPTCHA_BAD"] = "RECAPTCHA_BAD"; +- // OAUTH_ERROR +- LinkErrorCode["INCORRECT_OAUTH_NONCE"] = "INCORRECT_OAUTH_NONCE"; +- LinkErrorCode["OAUTH_STATE_ID_ALREADY_PROCESSED"] = "OAUTH_STATE_ID_ALREADY_PROCESSED"; ++(function(LinkErrorCode) { ++ // ITEM_ERROR ++ LinkErrorCode['INVALID_CREDENTIALS'] = 'INVALID_CREDENTIALS'; ++ LinkErrorCode['INVALID_MFA'] = 'INVALID_MFA'; ++ LinkErrorCode['ITEM_LOGIN_REQUIRED'] = 'ITEM_LOGIN_REQUIRED'; ++ LinkErrorCode['INSUFFICIENT_CREDENTIALS'] = 'INSUFFICIENT_CREDENTIALS'; ++ LinkErrorCode['ITEM_LOCKED'] = 'ITEM_LOCKED'; ++ LinkErrorCode['USER_SETUP_REQUIRED'] = 'USER_SETUP_REQUIRED'; ++ LinkErrorCode['MFA_NOT_SUPPORTED'] = 'MFA_NOT_SUPPORTED'; ++ LinkErrorCode['INVALID_SEND_METHOD'] = 'INVALID_SEND_METHOD'; ++ LinkErrorCode['NO_ACCOUNTS'] = 'NO_ACCOUNTS'; ++ LinkErrorCode['ITEM_NOT_SUPPORTED'] = 'ITEM_NOT_SUPPORTED'; ++ LinkErrorCode['TOO_MANY_VERIFICATION_ATTEMPTS'] = ++ 'TOO_MANY_VERIFICATION_ATTEMPTS'; ++ LinkErrorCode['INVALD_UPDATED_USERNAME'] = 'INVALD_UPDATED_USERNAME'; ++ LinkErrorCode['INVALID_UPDATED_USERNAME'] = 'INVALID_UPDATED_USERNAME'; ++ LinkErrorCode['ITEM_NO_ERROR'] = 'ITEM_NO_ERROR'; ++ LinkErrorCode['item_no_error'] = 'item-no-error'; ++ LinkErrorCode['NO_AUTH_ACCOUNTS'] = 'NO_AUTH_ACCOUNTS'; ++ LinkErrorCode['NO_INVESTMENT_ACCOUNTS'] = 'NO_INVESTMENT_ACCOUNTS'; ++ LinkErrorCode['NO_INVESTMENT_AUTH_ACCOUNTS'] = 'NO_INVESTMENT_AUTH_ACCOUNTS'; ++ LinkErrorCode['NO_LIABILITY_ACCOUNTS'] = 'NO_LIABILITY_ACCOUNTS'; ++ LinkErrorCode['PRODUCTS_NOT_SUPPORTED'] = 'PRODUCTS_NOT_SUPPORTED'; ++ LinkErrorCode['ITEM_NOT_FOUND'] = 'ITEM_NOT_FOUND'; ++ LinkErrorCode['ITEM_PRODUCT_NOT_READY'] = 'ITEM_PRODUCT_NOT_READY'; ++ // INSTITUTION_ERROR ++ LinkErrorCode['INSTITUTION_DOWN'] = 'INSTITUTION_DOWN'; ++ LinkErrorCode['INSTITUTION_NOT_RESPONDING'] = 'INSTITUTION_NOT_RESPONDING'; ++ LinkErrorCode['INSTITUTION_NOT_AVAILABLE'] = 'INSTITUTION_NOT_AVAILABLE'; ++ LinkErrorCode['INSTITUTION_NO_LONGER_SUPPORTED'] = ++ 'INSTITUTION_NO_LONGER_SUPPORTED'; ++ // API_ERROR ++ LinkErrorCode['INTERNAL_SERVER_ERROR'] = 'INTERNAL_SERVER_ERROR'; ++ LinkErrorCode['PLANNED_MAINTENANCE'] = 'PLANNED_MAINTENANCE'; ++ // ASSET_REPORT_ERROR ++ LinkErrorCode['PRODUCT_NOT_ENABLED'] = 'PRODUCT_NOT_ENABLED'; ++ LinkErrorCode['DATA_UNAVAILABLE'] = 'DATA_UNAVAILABLE'; ++ LinkErrorCode['ASSET_PRODUCT_NOT_READY'] = 'ASSET_PRODUCT_NOT_READY'; ++ LinkErrorCode['ASSET_REPORT_GENERATION_FAILED'] = ++ 'ASSET_REPORT_GENERATION_FAILED'; ++ LinkErrorCode['INVALID_PARENT'] = 'INVALID_PARENT'; ++ LinkErrorCode['INSIGHTS_NOT_ENABLED'] = 'INSIGHTS_NOT_ENABLED'; ++ LinkErrorCode['INSIGHTS_PREVIOUSLY_NOT_ENABLED'] = ++ 'INSIGHTS_PREVIOUSLY_NOT_ENABLED'; ++ // BANK_TRANSFER_ERROR ++ LinkErrorCode['BANK_TRANSFER_LIMIT_EXCEEDED'] = ++ 'BANK_TRANSFER_LIMIT_EXCEEDED'; ++ LinkErrorCode['BANK_TRANSFER_MISSING_ORIGINATION_ACCOUNT'] = ++ 'BANK_TRANSFER_MISSING_ORIGINATION_ACCOUNT'; ++ LinkErrorCode['BANK_TRANSFER_INVALID_ORIGINATION_ACCOUNT'] = ++ 'BANK_TRANSFER_INVALID_ORIGINATION_ACCOUNT'; ++ LinkErrorCode['BANK_TRANSFER_ACCOUNT_BLOCKED'] = ++ 'BANK_TRANSFER_ACCOUNT_BLOCKED'; ++ LinkErrorCode['BANK_TRANSFER_INSUFFICIENT_FUNDS'] = ++ 'BANK_TRANSFER_INSUFFICIENT_FUNDS'; ++ LinkErrorCode['BANK_TRANSFER_NOT_CANCELLABLE'] = ++ 'BANK_TRANSFER_NOT_CANCELLABLE'; ++ LinkErrorCode['BANK_TRANSFER_UNSUPPORTED_ACCOUNT_TYPE'] = ++ 'BANK_TRANSFER_UNSUPPORTED_ACCOUNT_TYPE'; ++ LinkErrorCode['BANK_TRANSFER_UNSUPPORTED_ENVIRONMENT'] = ++ 'BANK_TRANSFER_UNSUPPORTED_ENVIRONMENT'; ++ // SANDBOX_ERROR ++ LinkErrorCode['SANDBOX_PRODUCT_NOT_ENABLED'] = 'SANDBOX_PRODUCT_NOT_ENABLED'; ++ LinkErrorCode['SANDBOX_WEBHOOK_INVALID'] = 'SANDBOX_WEBHOOK_INVALID'; ++ LinkErrorCode['SANDBOX_BANK_TRANSFER_EVENT_TRANSITION_INVALID'] = ++ 'SANDBOX_BANK_TRANSFER_EVENT_TRANSITION_INVALID'; ++ // INVALID_REQUEST ++ LinkErrorCode['MISSING_FIELDS'] = 'MISSING_FIELDS'; ++ LinkErrorCode['UNKNOWN_FIELDS'] = 'UNKNOWN_FIELDS'; ++ LinkErrorCode['INVALID_FIELD'] = 'INVALID_FIELD'; ++ LinkErrorCode['INCOMPATIBLE_API_VERSION'] = 'INCOMPATIBLE_API_VERSION'; ++ LinkErrorCode['INVALID_BODY'] = 'INVALID_BODY'; ++ LinkErrorCode['INVALID_HEADERS'] = 'INVALID_HEADERS'; ++ LinkErrorCode['NOT_FOUND'] = 'NOT_FOUND'; ++ LinkErrorCode['NO_LONGER_AVAILABLE'] = 'NO_LONGER_AVAILABLE'; ++ LinkErrorCode['SANDBOX_ONLY'] = 'SANDBOX_ONLY'; ++ LinkErrorCode['INVALID_ACCOUNT_NUMBER'] = 'INVALID_ACCOUNT_NUMBER'; ++ // INVALID_INPUT ++ // From above ITEM_LOGIN_REQUIRED = "INVALID_CREDENTIALS", ++ LinkErrorCode['INCORRECT_DEPOSIT_AMOUNTS'] = 'INCORRECT_DEPOSIT_AMOUNTS'; ++ LinkErrorCode['UNAUTHORIZED_ENVIRONMENT'] = 'UNAUTHORIZED_ENVIRONMENT'; ++ LinkErrorCode['INVALID_PRODUCT'] = 'INVALID_PRODUCT'; ++ LinkErrorCode['UNAUTHORIZED_ROUTE_ACCESS'] = 'UNAUTHORIZED_ROUTE_ACCESS'; ++ LinkErrorCode['DIRECT_INTEGRATION_NOT_ENABLED'] = ++ 'DIRECT_INTEGRATION_NOT_ENABLED'; ++ LinkErrorCode['INVALID_API_KEYS'] = 'INVALID_API_KEYS'; ++ LinkErrorCode['INVALID_ACCESS_TOKEN'] = 'INVALID_ACCESS_TOKEN'; ++ LinkErrorCode['INVALID_PUBLIC_TOKEN'] = 'INVALID_PUBLIC_TOKEN'; ++ LinkErrorCode['INVALID_LINK_TOKEN'] = 'INVALID_LINK_TOKEN'; ++ LinkErrorCode['INVALID_PROCESSOR_TOKEN'] = 'INVALID_PROCESSOR_TOKEN'; ++ LinkErrorCode['INVALID_AUDIT_COPY_TOKEN'] = 'INVALID_AUDIT_COPY_TOKEN'; ++ LinkErrorCode['INVALID_ACCOUNT_ID'] = 'INVALID_ACCOUNT_ID'; ++ LinkErrorCode['MICRODEPOSITS_ALREADY_VERIFIED'] = ++ 'MICRODEPOSITS_ALREADY_VERIFIED'; ++ // INVALID_RESULT ++ LinkErrorCode['PLAID_DIRECT_ITEM_IMPORT_RETURNED_INVALID_MFA'] = ++ 'PLAID_DIRECT_ITEM_IMPORT_RETURNED_INVALID_MFA'; ++ // RATE_LIMIT_EXCEEDED ++ LinkErrorCode['ACCOUNTS_LIMIT'] = 'ACCOUNTS_LIMIT'; ++ LinkErrorCode['ADDITION_LIMIT'] = 'ADDITION_LIMIT'; ++ LinkErrorCode['AUTH_LIMIT'] = 'AUTH_LIMIT'; ++ LinkErrorCode['BALANCE_LIMIT'] = 'BALANCE_LIMIT'; ++ LinkErrorCode['IDENTITY_LIMIT'] = 'IDENTITY_LIMIT'; ++ LinkErrorCode['ITEM_GET_LIMIT'] = 'ITEM_GET_LIMIT'; ++ LinkErrorCode['RATE_LIMIT'] = 'RATE_LIMIT'; ++ LinkErrorCode['TRANSACTIONS_LIMIT'] = 'TRANSACTIONS_LIMIT'; ++ // RECAPTCHA_ERROR ++ LinkErrorCode['RECAPTCHA_REQUIRED'] = 'RECAPTCHA_REQUIRED'; ++ LinkErrorCode['RECAPTCHA_BAD'] = 'RECAPTCHA_BAD'; ++ // OAUTH_ERROR ++ LinkErrorCode['INCORRECT_OAUTH_NONCE'] = 'INCORRECT_OAUTH_NONCE'; ++ LinkErrorCode['OAUTH_STATE_ID_ALREADY_PROCESSED'] = ++ 'OAUTH_STATE_ID_ALREADY_PROCESSED'; + })(LinkErrorCode || (LinkErrorCode = {})); + export var LinkErrorType; +-(function (LinkErrorType) { +- LinkErrorType["BANK_TRANSFER"] = "BANK_TRANSFER_ERROR"; +- LinkErrorType["INVALID_REQUEST"] = "INVALID_REQUEST"; +- LinkErrorType["INVALID_RESULT"] = "INVALID_RESULT"; +- LinkErrorType["INVALID_INPUT"] = "INVALID_INPUT"; +- LinkErrorType["INSTITUTION_ERROR"] = "INSTITUTION_ERROR"; +- LinkErrorType["RATE_LIMIT_EXCEEDED"] = "RATE_LIMIT_EXCEEDED"; +- LinkErrorType["API_ERROR"] = "API_ERROR"; +- LinkErrorType["ITEM_ERROR"] = "ITEM_ERROR"; +- LinkErrorType["AUTH_ERROR"] = "AUTH_ERROR"; +- LinkErrorType["ASSET_REPORT_ERROR"] = "ASSET_REPORT_ERROR"; +- LinkErrorType["SANDBOX_ERROR"] = "SANDBOX_ERROR"; +- LinkErrorType["RECAPTCHA_ERROR"] = "RECAPTCHA_ERROR"; +- LinkErrorType["OAUTH_ERROR"] = "OAUTH_ERROR"; ++(function(LinkErrorType) { ++ LinkErrorType['BANK_TRANSFER'] = 'BANK_TRANSFER_ERROR'; ++ LinkErrorType['INVALID_REQUEST'] = 'INVALID_REQUEST'; ++ LinkErrorType['INVALID_RESULT'] = 'INVALID_RESULT'; ++ LinkErrorType['INVALID_INPUT'] = 'INVALID_INPUT'; ++ LinkErrorType['INSTITUTION_ERROR'] = 'INSTITUTION_ERROR'; ++ LinkErrorType['RATE_LIMIT_EXCEEDED'] = 'RATE_LIMIT_EXCEEDED'; ++ LinkErrorType['API_ERROR'] = 'API_ERROR'; ++ LinkErrorType['ITEM_ERROR'] = 'ITEM_ERROR'; ++ LinkErrorType['AUTH_ERROR'] = 'AUTH_ERROR'; ++ LinkErrorType['ASSET_REPORT_ERROR'] = 'ASSET_REPORT_ERROR'; ++ LinkErrorType['SANDBOX_ERROR'] = 'SANDBOX_ERROR'; ++ LinkErrorType['RECAPTCHA_ERROR'] = 'RECAPTCHA_ERROR'; ++ LinkErrorType['OAUTH_ERROR'] = 'OAUTH_ERROR'; + })(LinkErrorType || (LinkErrorType = {})); + export var LinkEventName; +-(function (LinkEventName) { +- LinkEventName["BANK_INCOME_INSIGHTS_COMPLETED"] = "BANK_INCOME_INSIGHTS_COMPLETED"; +- LinkEventName["CLOSE_OAUTH"] = "CLOSE_OAUTH"; +- LinkEventName["ERROR"] = "ERROR"; +- LinkEventName["EXIT"] = "EXIT"; +- LinkEventName["FAIL_OAUTH"] = "FAIL_OAUTH"; +- LinkEventName["HANDOFF"] = "HANDOFF"; +- LinkEventName["IDENTITY_VERIFICATION_START_STEP"] = "IDENTITY_VERIFICATION_START_STEP"; +- LinkEventName["IDENTITY_VERIFICATION_PASS_STEP"] = "IDENTITY_VERIFICATION_PASS_STEP"; +- LinkEventName["IDENTITY_VERIFICATION_FAIL_STEP"] = "IDENTITY_VERIFICATION_FAIL_STEP"; +- LinkEventName["IDENTITY_VERIFICATION_PENDING_REVIEW_STEP"] = "IDENTITY_VERIFICATION_PENDING_REVIEW_STEP"; +- LinkEventName["IDENTITY_VERIFICATION_PENDING_REVIEW_SESSION"] = "IDENTITY_VERIFICATION_PENDING_REVIEW_SESSION"; +- LinkEventName["IDENTITY_VERIFICATION_CREATE_SESSION"] = "IDENTITY_VERIFICATION_CREATE_SESSION"; +- LinkEventName["IDENTITY_VERIFICATION_RESUME_SESSION"] = "IDENTITY_VERIFICATION_RESUME_SESSION"; +- LinkEventName["IDENTITY_VERIFICATION_PASS_SESSION"] = "IDENTITY_VERIFICATION_PASS_SESSION"; +- LinkEventName["IDENTITY_VERIFICATION_FAIL_SESSION"] = "IDENTITY_VERIFICATION_FAIL_SESSION"; +- LinkEventName["IDENTITY_VERIFICATION_OPEN_UI"] = "IDENTITY_VERIFICATION_OPEN_UI"; +- LinkEventName["IDENTITY_VERIFICATION_RESUME_UI"] = "IDENTITY_VERIFICATION_RESUME_UI"; +- LinkEventName["IDENTITY_VERIFICATION_CLOSE_UI"] = "IDENTITY_VERIFICATION_CLOSE_UI"; +- LinkEventName["MATCHED_CONSENT"] = "MATCHED_CONSENT"; +- LinkEventName["MATCHED_SELECT_INSTITUTION"] = "MATCHED_SELECT_INSTITUTION"; +- LinkEventName["MATCHED_SELECT_VERIFY_METHOD"] = "MATCHED_SELECT_VERIFY_METHOD"; +- LinkEventName["OPEN"] = "OPEN"; +- LinkEventName["OPEN_MY_PLAID"] = "OPEN_MY_PLAID"; +- LinkEventName["OPEN_OAUTH"] = "OPEN_OAUTH"; +- LinkEventName["SEARCH_INSTITUTION"] = "SEARCH_INSTITUTION"; +- LinkEventName["SELECT_DEGRADED_INSTITUTION"] = "SELECT_DEGRADED_INSTITUTION"; +- LinkEventName["SELECT_DOWN_INSTITUTION"] = "SELECT_DOWN_INSTITUTION"; +- LinkEventName["SELECT_FILTERED_INSTITUTION"] = "SELECT_FILTERED_INSTITUTION"; +- LinkEventName["SELECT_INSTITUTION"] = "SELECT_INSTITUTION"; +- LinkEventName["SELECT_BRAND"] = "SELECT_BRAND"; +- LinkEventName["SELECT_AUTH_TYPE"] = "SELECT_AUTH_TYPE"; +- LinkEventName["SUBMIT_ACCOUNT_NUMBER"] = "SUBMIT_ACCOUNT_NUMBER"; +- LinkEventName["SUBMIT_DOCUMENTS"] = "SUBMIT_DOCUMENTS"; +- LinkEventName["SUBMIT_DOCUMENTS_SUCCESS"] = "SUBMIT_DOCUMENTS_SUCCESS"; +- LinkEventName["SUBMIT_DOCUMENTS_ERROR"] = "SUBMIT_DOCUMENTS_ERROR"; +- LinkEventName["SUBMIT_ROUTING_NUMBER"] = "SUBMIT_ROUTING_NUMBER"; +- LinkEventName["VIEW_DATA_TYPES"] = "VIEW_DATA_TYPES"; +- LinkEventName["SUBMIT_PHONE"] = "SUBMIT_PHONE"; +- LinkEventName["SKIP_SUBMIT_PHONE"] = "SKIP_SUBMIT_PHONE"; +- LinkEventName["VERIFY_PHONE"] = "VERIFY_PHONE"; +- LinkEventName["SUBMIT_CREDENTIALS"] = "SUBMIT_CREDENTIALS"; +- LinkEventName["SUBMIT_MFA"] = "SUBMIT_MFA"; +- LinkEventName["TRANSITION_VIEW"] = "TRANSITION_VIEW"; +- LinkEventName["CONNECT_NEW_INSTITUTION"] = "CONNECT_NEW_INSTITUTION"; ++(function(LinkEventName) { ++ LinkEventName['BANK_INCOME_INSIGHTS_COMPLETED'] = ++ 'BANK_INCOME_INSIGHTS_COMPLETED'; ++ LinkEventName['CLOSE_OAUTH'] = 'CLOSE_OAUTH'; ++ LinkEventName['ERROR'] = 'ERROR'; ++ LinkEventName['EXIT'] = 'EXIT'; ++ LinkEventName['FAIL_OAUTH'] = 'FAIL_OAUTH'; ++ LinkEventName['HANDOFF'] = 'HANDOFF'; ++ LinkEventName['IDENTITY_VERIFICATION_START_STEP'] = ++ 'IDENTITY_VERIFICATION_START_STEP'; ++ LinkEventName['IDENTITY_VERIFICATION_PASS_STEP'] = ++ 'IDENTITY_VERIFICATION_PASS_STEP'; ++ LinkEventName['IDENTITY_VERIFICATION_FAIL_STEP'] = ++ 'IDENTITY_VERIFICATION_FAIL_STEP'; ++ LinkEventName['IDENTITY_VERIFICATION_PENDING_REVIEW_STEP'] = ++ 'IDENTITY_VERIFICATION_PENDING_REVIEW_STEP'; ++ LinkEventName['IDENTITY_VERIFICATION_PENDING_REVIEW_SESSION'] = ++ 'IDENTITY_VERIFICATION_PENDING_REVIEW_SESSION'; ++ LinkEventName['IDENTITY_VERIFICATION_CREATE_SESSION'] = ++ 'IDENTITY_VERIFICATION_CREATE_SESSION'; ++ LinkEventName['IDENTITY_VERIFICATION_RESUME_SESSION'] = ++ 'IDENTITY_VERIFICATION_RESUME_SESSION'; ++ LinkEventName['IDENTITY_VERIFICATION_PASS_SESSION'] = ++ 'IDENTITY_VERIFICATION_PASS_SESSION'; ++ LinkEventName['IDENTITY_VERIFICATION_FAIL_SESSION'] = ++ 'IDENTITY_VERIFICATION_FAIL_SESSION'; ++ LinkEventName['IDENTITY_VERIFICATION_OPEN_UI'] = ++ 'IDENTITY_VERIFICATION_OPEN_UI'; ++ LinkEventName['IDENTITY_VERIFICATION_RESUME_UI'] = ++ 'IDENTITY_VERIFICATION_RESUME_UI'; ++ LinkEventName['IDENTITY_VERIFICATION_CLOSE_UI'] = ++ 'IDENTITY_VERIFICATION_CLOSE_UI'; ++ LinkEventName['MATCHED_CONSENT'] = 'MATCHED_CONSENT'; ++ LinkEventName['MATCHED_SELECT_INSTITUTION'] = 'MATCHED_SELECT_INSTITUTION'; ++ LinkEventName['MATCHED_SELECT_VERIFY_METHOD'] = ++ 'MATCHED_SELECT_VERIFY_METHOD'; ++ LinkEventName['OPEN'] = 'OPEN'; ++ LinkEventName['OPEN_MY_PLAID'] = 'OPEN_MY_PLAID'; ++ LinkEventName['OPEN_OAUTH'] = 'OPEN_OAUTH'; ++ LinkEventName['SEARCH_INSTITUTION'] = 'SEARCH_INSTITUTION'; ++ LinkEventName['SELECT_DEGRADED_INSTITUTION'] = 'SELECT_DEGRADED_INSTITUTION'; ++ LinkEventName['SELECT_DOWN_INSTITUTION'] = 'SELECT_DOWN_INSTITUTION'; ++ LinkEventName['SELECT_FILTERED_INSTITUTION'] = 'SELECT_FILTERED_INSTITUTION'; ++ LinkEventName['SELECT_INSTITUTION'] = 'SELECT_INSTITUTION'; ++ LinkEventName['SELECT_BRAND'] = 'SELECT_BRAND'; ++ LinkEventName['SELECT_AUTH_TYPE'] = 'SELECT_AUTH_TYPE'; ++ LinkEventName['SUBMIT_ACCOUNT_NUMBER'] = 'SUBMIT_ACCOUNT_NUMBER'; ++ LinkEventName['SUBMIT_DOCUMENTS'] = 'SUBMIT_DOCUMENTS'; ++ LinkEventName['SUBMIT_DOCUMENTS_SUCCESS'] = 'SUBMIT_DOCUMENTS_SUCCESS'; ++ LinkEventName['SUBMIT_DOCUMENTS_ERROR'] = 'SUBMIT_DOCUMENTS_ERROR'; ++ LinkEventName['SUBMIT_ROUTING_NUMBER'] = 'SUBMIT_ROUTING_NUMBER'; ++ LinkEventName['VIEW_DATA_TYPES'] = 'VIEW_DATA_TYPES'; ++ LinkEventName['SUBMIT_PHONE'] = 'SUBMIT_PHONE'; ++ LinkEventName['SKIP_SUBMIT_PHONE'] = 'SKIP_SUBMIT_PHONE'; ++ LinkEventName['VERIFY_PHONE'] = 'VERIFY_PHONE'; ++ LinkEventName['SUBMIT_CREDENTIALS'] = 'SUBMIT_CREDENTIALS'; ++ LinkEventName['SUBMIT_MFA'] = 'SUBMIT_MFA'; ++ LinkEventName['TRANSITION_VIEW'] = 'TRANSITION_VIEW'; ++ LinkEventName['CONNECT_NEW_INSTITUTION'] = 'CONNECT_NEW_INSTITUTION'; + })(LinkEventName || (LinkEventName = {})); + export var LinkEventViewName; +-(function (LinkEventViewName) { +- LinkEventViewName["ACCEPT_TOS"] = "ACCEPT_TOS"; +- LinkEventViewName["CONNECTED"] = "CONNECTED"; +- LinkEventViewName["CONSENT"] = "CONSENT"; +- LinkEventViewName["CREDENTIAL"] = "CREDENTIAL"; +- LinkEventViewName["DATA_TRANSPARENCY"] = "DATA_TRANSPARENCY"; +- LinkEventViewName["DATA_TRANSPARENCY_CONSENT"] = "DATA_TRANSPARENCY_CONSENT"; +- LinkEventViewName["DOCUMENTARY_VERIFICATION"] = "DOCUMENTARY_VERIFICATION"; +- LinkEventViewName["ERROR"] = "ERROR"; +- LinkEventViewName["EXIT"] = "EXIT"; +- LinkEventViewName["KYC_CHECK"] = "KYC_CHECK"; +- LinkEventViewName["SELFIE_CHECK"] = "SELFIE_CHECK"; +- LinkEventViewName["LOADING"] = "LOADING"; +- LinkEventViewName["MATCHED_CONSENT"] = "MATCHED_CONSENT"; +- LinkEventViewName["MATCHED_CREDENTIAL"] = "MATCHED_CREDENTIAL"; +- LinkEventViewName["MATCHED_MFA"] = "MATCHED_MFA"; +- LinkEventViewName["MFA"] = "MFA"; +- LinkEventViewName["NUMBERS"] = "NUMBERS"; +- LinkEventViewName["NUMBERS_SELECT_INSTITUTION"] = "NUMBERS_SELECT_INSTITUTION"; +- LinkEventViewName["OAUTH"] = "OAUTH"; +- LinkEventViewName["RECAPTCHA"] = "RECAPTCHA"; +- LinkEventViewName["RISK_CHECK"] = "RISK_CHECK"; +- LinkEventViewName["SCREENING"] = "SCREENING"; +- LinkEventViewName["SELECT_ACCOUNT"] = "SELECT_ACCOUNT"; +- LinkEventViewName["SELECT_AUTH_TYPE"] = "SELECT_AUTH_TYPE"; +- LinkEventViewName["SUBMIT_PHONE"] = "SUBMIT_PHONE"; +- LinkEventViewName["VERIFY_PHONE"] = "VERIFY_PHONE"; +- LinkEventViewName["SELECT_SAVED_INSTITUTION"] = "SELECT_SAVED_INSTITUTION"; +- LinkEventViewName["SELECT_SAVED_ACCOUNT"] = "SELECT_SAVED_ACCOUNT"; +- LinkEventViewName["SELECT_BRAND"] = "SELECT_BRAND"; +- LinkEventViewName["SELECT_INSTITUTION"] = "SELECT_INSTITUTION"; +- LinkEventViewName["SUBMIT_DOCUMENTS"] = "SUBMIT_DOCUMENTS"; +- LinkEventViewName["SUBMIT_DOCUMENTS_SUCCESS"] = "SUBMIT_DOCUMENTS_SUCCESS"; +- LinkEventViewName["SUBMIT_DOCUMENTS_ERROR"] = "SUBMIT_DOCUMENTS_ERROR"; +- LinkEventViewName["UPLOAD_DOCUMENTS"] = "UPLOAD_DOCUMENTS"; +- LinkEventViewName["VERIFY_SMS"] = "VERIFY_SMS"; ++(function(LinkEventViewName) { ++ LinkEventViewName['ACCEPT_TOS'] = 'ACCEPT_TOS'; ++ LinkEventViewName['CONNECTED'] = 'CONNECTED'; ++ LinkEventViewName['CONSENT'] = 'CONSENT'; ++ LinkEventViewName['CREDENTIAL'] = 'CREDENTIAL'; ++ LinkEventViewName['DATA_TRANSPARENCY'] = 'DATA_TRANSPARENCY'; ++ LinkEventViewName['DATA_TRANSPARENCY_CONSENT'] = 'DATA_TRANSPARENCY_CONSENT'; ++ LinkEventViewName['DOCUMENTARY_VERIFICATION'] = 'DOCUMENTARY_VERIFICATION'; ++ LinkEventViewName['ERROR'] = 'ERROR'; ++ LinkEventViewName['EXIT'] = 'EXIT'; ++ LinkEventViewName['KYC_CHECK'] = 'KYC_CHECK'; ++ LinkEventViewName['SELFIE_CHECK'] = 'SELFIE_CHECK'; ++ LinkEventViewName['LOADING'] = 'LOADING'; ++ LinkEventViewName['MATCHED_CONSENT'] = 'MATCHED_CONSENT'; ++ LinkEventViewName['MATCHED_CREDENTIAL'] = 'MATCHED_CREDENTIAL'; ++ LinkEventViewName['MATCHED_MFA'] = 'MATCHED_MFA'; ++ LinkEventViewName['MFA'] = 'MFA'; ++ LinkEventViewName['NUMBERS'] = 'NUMBERS'; ++ LinkEventViewName['NUMBERS_SELECT_INSTITUTION'] = ++ 'NUMBERS_SELECT_INSTITUTION'; ++ LinkEventViewName['OAUTH'] = 'OAUTH'; ++ LinkEventViewName['RECAPTCHA'] = 'RECAPTCHA'; ++ LinkEventViewName['RISK_CHECK'] = 'RISK_CHECK'; ++ LinkEventViewName['SCREENING'] = 'SCREENING'; ++ LinkEventViewName['SELECT_ACCOUNT'] = 'SELECT_ACCOUNT'; ++ LinkEventViewName['SELECT_AUTH_TYPE'] = 'SELECT_AUTH_TYPE'; ++ LinkEventViewName['SUBMIT_PHONE'] = 'SUBMIT_PHONE'; ++ LinkEventViewName['VERIFY_PHONE'] = 'VERIFY_PHONE'; ++ LinkEventViewName['SELECT_SAVED_INSTITUTION'] = 'SELECT_SAVED_INSTITUTION'; ++ LinkEventViewName['SELECT_SAVED_ACCOUNT'] = 'SELECT_SAVED_ACCOUNT'; ++ LinkEventViewName['SELECT_BRAND'] = 'SELECT_BRAND'; ++ LinkEventViewName['SELECT_INSTITUTION'] = 'SELECT_INSTITUTION'; ++ LinkEventViewName['SUBMIT_DOCUMENTS'] = 'SUBMIT_DOCUMENTS'; ++ LinkEventViewName['SUBMIT_DOCUMENTS_SUCCESS'] = 'SUBMIT_DOCUMENTS_SUCCESS'; ++ LinkEventViewName['SUBMIT_DOCUMENTS_ERROR'] = 'SUBMIT_DOCUMENTS_ERROR'; ++ LinkEventViewName['UPLOAD_DOCUMENTS'] = 'UPLOAD_DOCUMENTS'; ++ LinkEventViewName['VERIFY_SMS'] = 'VERIFY_SMS'; + })(LinkEventViewName || (LinkEventViewName = {})); + /// Methods to present Link on iOS. + /// FULL_SCREEN is the converts to UIModalPresentationOverFullScreen on the native side. + /// MODAL will use the default presentation style for iOS which is UIModalPresentationAutomatic. + export var LinkIOSPresentationStyle; +-(function (LinkIOSPresentationStyle) { +- LinkIOSPresentationStyle["FULL_SCREEN"] = "FULL_SCREEN"; +- LinkIOSPresentationStyle["MODAL"] = "MODAL"; ++(function(LinkIOSPresentationStyle) { ++ LinkIOSPresentationStyle['FULL_SCREEN'] = 'FULL_SCREEN'; ++ LinkIOSPresentationStyle['MODAL'] = 'MODAL'; + })(LinkIOSPresentationStyle || (LinkIOSPresentationStyle = {})); +diff --git a/node_modules/react-native-plaid-link-sdk/dist/__tests__/Types.tests.d.ts b/node_modules/react-native-plaid-link-sdk/dist/__tests__/Types.tests.d.ts +index cd4ccde..cb0ff5c 100644 +--- a/node_modules/react-native-plaid-link-sdk/dist/__tests__/Types.tests.d.ts ++++ b/node_modules/react-native-plaid-link-sdk/dist/__tests__/Types.tests.d.ts +@@ -1 +1 @@ +-declare const Types: any; ++export {}; +diff --git a/node_modules/react-native-plaid-link-sdk/dist/__tests__/Types.tests.js b/node_modules/react-native-plaid-link-sdk/dist/__tests__/Types.tests.js +index 831866b..f38aff8 100644 +--- a/node_modules/react-native-plaid-link-sdk/dist/__tests__/Types.tests.js ++++ b/node_modules/react-native-plaid-link-sdk/dist/__tests__/Types.tests.js +@@ -1,14 +1,14 @@ +-"use strict"; + const Types = require('./../Types'); + test('test token configuration', () => { +- const linkTokenConfiguration = { +- token: "test-token", +- noLoadingState: false, +- logLevel: Types.LinkLogLevel.DEBUG, +- extras: null, +- }; +- expect(linkTokenConfiguration.noLoadingState).toBe(false); +- expect(linkTokenConfiguration.token).toBe("test-token"); +- expect(linkTokenConfiguration.logLevel).toBe(Types.LinkLogLevel.DEBUG); +- expect(linkTokenConfiguration.extras).toBe(null); ++ const linkTokenConfiguration = { ++ token: 'test-token', ++ noLoadingState: false, ++ logLevel: Types.LinkLogLevel.DEBUG, ++ extras: null, ++ }; ++ expect(linkTokenConfiguration.noLoadingState).toBe(false); ++ expect(linkTokenConfiguration.token).toBe('test-token'); ++ expect(linkTokenConfiguration.logLevel).toBe(Types.LinkLogLevel.DEBUG); ++ expect(linkTokenConfiguration.extras).toBe(null); + }); ++export {}; +diff --git a/node_modules/react-native-plaid-link-sdk/dist/check_version_hook.d.ts b/node_modules/react-native-plaid-link-sdk/dist/check_version_hook.d.ts +new file mode 100644 +index 0000000..cb0ff5c +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/dist/check_version_hook.d.ts +@@ -0,0 +1 @@ ++export {}; +diff --git a/node_modules/react-native-plaid-link-sdk/dist/check_version_hook.js b/node_modules/react-native-plaid-link-sdk/dist/check_version_hook.js +new file mode 100644 +index 0000000..34a47d4 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/dist/check_version_hook.js +@@ -0,0 +1,15 @@ ++'use strict'; ++const fs = require('fs'); ++const rn_version = JSON.parse(fs.readFileSync('package.json', 'utf-8'))[ ++ 'version' ++]; ++const android_version = fs ++ .readFileSync('android/src/main/AndroidManifest.xml', 'utf-8') ++ .match(/(?<=value=").*(?=")/)[0]; ++if (rn_version != android_version) { ++ console.error('Commit failed SDK version mismatch'); ++ console.error( ++ 'Please ensure package.json and android/src/main/AndroidManifest.xml have the same version', ++ ); ++ process.exit(-1); ++} +diff --git a/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModule.d.ts b/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModule.d.ts +new file mode 100644 +index 0000000..1de3019 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModule.d.ts +@@ -0,0 +1,14 @@ ++import { TurboModule } from 'react-native'; ++import { Int32 } from 'react-native/Libraries/Types/CodegenTypes'; ++import { LinkSuccess as UnsafeObject, LinkExit as Double, LinkError as Float } from '../Types'; ++export interface Spec extends TurboModule { ++ continueFromRedirectUriString(redirectUriString: string): void; ++ create(configuration: Object): void; ++ open(onSuccess: (success: UnsafeObject) => void, onExit: (error: Float, result: Double) => void): void; ++ dismiss(): void; ++ startLinkActivityForResult(data: string, onSuccessCallback: (result: UnsafeObject) => void, onExitCallback: (result: Double) => void): void; ++ addListener(eventName: string): void; ++ removeListeners(count: Int32): void; ++} ++declare const _default: Spec; ++export default _default; +diff --git a/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModule.js b/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModule.js +new file mode 100644 +index 0000000..310a9c5 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModule.js +@@ -0,0 +1,4 @@ ++// we use Object type because methods on the native side use NSDictionary and ReadableMap ++// and we want to stay compatible with those ++import { TurboModuleRegistry } from 'react-native'; ++export default TurboModuleRegistry.getEnforcing('RNLinksdk'); +diff --git a/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModuleAndroid.d.ts b/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModuleAndroid.d.ts +new file mode 100644 +index 0000000..82f29a1 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModuleAndroid.d.ts +@@ -0,0 +1,9 @@ ++import { TurboModule } from 'react-native'; ++import { Int32, UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes'; ++export interface Spec extends TurboModule { ++ startLinkActivityForResult(token: string, noLoadingState: boolean, logLevel: string, onSuccessCallback: (result: UnsafeObject) => void, onExitCallback: (result: UnsafeObject) => void): void; ++ addListener(eventName: string): void; ++ removeListeners(count: Int32): void; ++} ++declare const _default: Spec | null; ++export default _default; +diff --git a/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModuleAndroid.js b/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModuleAndroid.js +new file mode 100644 +index 0000000..d0ea456 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModuleAndroid.js +@@ -0,0 +1,4 @@ ++// we use Object type because methods on the native side use NSDictionary and ReadableMap ++// and we want to stay compatible with those ++import { TurboModuleRegistry } from 'react-native'; ++export default TurboModuleRegistry.get('PlaidAndroid'); +diff --git a/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModuleiOS.d.ts b/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModuleiOS.d.ts +new file mode 100644 +index 0000000..aefee8c +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModuleiOS.d.ts +@@ -0,0 +1,11 @@ ++import { TurboModule } from 'react-native'; ++import { Int32, UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes'; ++export interface Spec extends TurboModule { ++ create(token: string, noLoadingState: boolean): void; ++ open(fullScreen: boolean, onSuccess: (success: UnsafeObject) => void, onExit: (error: UnsafeObject, result: UnsafeObject) => void): void; ++ dismiss(): void; ++ addListener(eventName: string): void; ++ removeListeners(count: Int32): void; ++} ++declare const _default: Spec | null; ++export default _default; +diff --git a/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModuleiOS.js b/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModuleiOS.js +new file mode 100644 +index 0000000..99845a1 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/dist/fabric/NativePlaidLinkModuleiOS.js +@@ -0,0 +1,4 @@ ++// we use Object type because methods on the native side use NSDictionary and ReadableMap ++// and we want to stay compatible with those ++import { TurboModuleRegistry } from 'react-native'; ++export default TurboModuleRegistry.get('RNLinksdk'); +diff --git a/node_modules/react-native-plaid-link-sdk/dist/index.js b/node_modules/react-native-plaid-link-sdk/dist/index.js +index 68c2d4b..acad079 100644 +--- a/node_modules/react-native-plaid-link-sdk/dist/index.js ++++ b/node_modules/react-native-plaid-link-sdk/dist/index.js +@@ -1,6 +1,6 @@ +-import { openLink, dismissLink, usePlaidEmitter, PlaidLink, } from './PlaidLink'; ++import { openLink, dismissLink, usePlaidEmitter, PlaidLink } from './PlaidLink'; + export * from './Types'; + export default PlaidLink; +-export { PlaidLink, openLink, dismissLink, usePlaidEmitter, }; ++export { PlaidLink, openLink, dismissLink, usePlaidEmitter }; + // Components + export { EmbeddedLinkView } from './EmbeddedLink/EmbeddedLinkView'; +diff --git a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.h b/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.h +index 8a1c350..035b91c 100644 +--- a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.h ++++ b/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.h +@@ -1,15 +1,17 @@ +- +-#if __has_include() +-#import +-#import +-#else +-#import "RCTBridgeModule.h" +-#import "RCTEventEmitter.h" ++#ifdef RCT_NEW_ARCH_ENABLED ++#import + #endif ++#import ++#import "RCTEventEmitter.h" + + #import + +-@interface RNLinksdk : RCTEventEmitter ++@interface RNLinksdk : RCTEventEmitter ++#ifdef RCT_NEW_ARCH_ENABLED ++ ++#else ++ ++#endif + + + (NSDictionary *)dictionaryFromSuccess:(PLKLinkSuccess *)success; + + (NSDictionary *)dictionaryFromEvent:(PLKLinkEvent *)event; +diff --git a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.mm b/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.mm +index ef3fe85..b3b92d6 100644 +--- a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.mm ++++ b/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.mm +@@ -1,4 +1,5 @@ + #import "RNLinksdk.h" ++#import "RNPlaidHelper.h" + + #import + #import +@@ -66,11 +67,11 @@ - (void)stopObserving { + self.hasObservers = NO; + } + +-RCT_EXPORT_METHOD(create:(NSString*)token :(BOOL)noLoadingState) { +- __weak typeof(self) weakSelf = self; ++RCT_EXPORT_METHOD(create:(NSString*)token noLoadingState:(BOOL)noLoadingState) { ++ __weak RNLinksdk *weakSelf = self; + + void (^onSuccess)(PLKLinkSuccess *) = ^(PLKLinkSuccess *success) { +- __typeof(weakSelf) strongSelf = weakSelf; ++ RNLinksdk *strongSelf = weakSelf; + + if (strongSelf.successCallback) { + NSDictionary *jsMetadata = [RNLinksdk dictionaryFromSuccess:success]; +@@ -80,7 +81,7 @@ - (void)stopObserving { + }; + + void (^onExit)(PLKLinkExit *) = ^(PLKLinkExit *exit) { +- __typeof(weakSelf) strongSelf = weakSelf; ++ RNLinksdk *strongSelf = weakSelf; + + if (strongSelf.exitCallback) { + NSDictionary *exitMetadata = [RNLinksdk dictionaryFromExit:exit]; +@@ -94,7 +95,7 @@ - (void)stopObserving { + }; + + void (^onEvent)(PLKLinkEvent *) = ^(PLKLinkEvent *event) { +- __typeof(weakSelf) strongSelf = weakSelf; ++ RNLinksdk *strongSelf = weakSelf; + if (strongSelf.hasObservers) { + NSDictionary *eventDictionary = [RNLinksdk dictionaryFromEvent:event]; + [strongSelf sendEventWithName:kRNLinkKitOnEventEvent +@@ -108,11 +109,11 @@ - (void)stopObserving { + config.noLoadingState = noLoadingState; + + NSError *creationError = nil; +- self.linkHandler = [PLKPlaid createWithLinkTokenConfiguration:config error:&creationError]; ++ self.linkHandler = [RNPlaidHelper createWithLinkTokenConfiguration:config error:&creationError]; + self.creationError = creationError; + } + +-RCT_EXPORT_METHOD(open: (BOOL)fullScreen :(RCTResponseSenderBlock)onSuccess :(RCTResponseSenderBlock)onExit) { ++RCT_EXPORT_METHOD(open:(BOOL)fullScreen onSuccess:(RCTResponseSenderBlock)onSuccess onExit:(RCTResponseSenderBlock)onExit) { + if (self.linkHandler) { + self.successCallback = onSuccess; + self.exitCallback = onExit; +@@ -122,7 +123,7 @@ - (void)stopObserving { + // unnecessarily invoked. + __block bool didPresent = NO; + +- __weak typeof(self) weakSelf = self; ++ __weak RNLinksdk *weakSelf = self; + void(^presentationHandler)(UIViewController *) = ^(UIViewController *linkViewController) { + + if (fullScreen) { +@@ -619,4 +620,12 @@ + (NSDictionary *)dictionaryFromExit:(PLKLinkExit *)exit { + }; + } + ++#if RCT_NEW_ARCH_ENABLED ++- (std::shared_ptr)getTurboModule: ++ (const facebook::react::ObjCTurboModule::InitParams &)params ++{ ++ return std::make_shared(params); ++} ++#endif ++ + @end +diff --git a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +deleted file mode 100644 +index 919434a..0000000 +--- a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata ++++ /dev/null +@@ -1,7 +0,0 @@ +- +- +- +- +- +diff --git a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +deleted file mode 100644 +index 18d9810..0000000 +--- a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ++++ /dev/null +@@ -1,8 +0,0 @@ +- +- +- +- +- IDEDidComputeMac32BitWarning +- +- +- +diff --git a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcodeproj/project.xcworkspace/xcuserdata/dtroupe.xcuserdatad/UserInterfaceState.xcuserstate b/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcodeproj/project.xcworkspace/xcuserdata/dtroupe.xcuserdatad/UserInterfaceState.xcuserstate +deleted file mode 100644 +index 47e9cc2..0000000 +Binary files a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcodeproj/project.xcworkspace/xcuserdata/dtroupe.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ +diff --git a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcodeproj/xcuserdata/dtroupe.xcuserdatad/xcschemes/xcschememanagement.plist b/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcodeproj/xcuserdata/dtroupe.xcuserdatad/xcschemes/xcschememanagement.plist +deleted file mode 100644 +index 5b4fa70..0000000 +--- a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcodeproj/xcuserdata/dtroupe.xcuserdatad/xcschemes/xcschememanagement.plist ++++ /dev/null +@@ -1,19 +0,0 @@ +- +- +- +- +- SchemeUserState +- +- RNLinksdk.xcscheme_^#shared#^_ +- +- orderHint +- 0 +- +- RNLinksdkUnitTests.xcscheme_^#shared#^_ +- +- orderHint +- 1 +- +- +- +- +diff --git a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcworkspace/xcuserdata/dtroupe.xcuserdatad/UserInterfaceState.xcuserstate b/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcworkspace/xcuserdata/dtroupe.xcuserdatad/UserInterfaceState.xcuserstate +deleted file mode 100644 +index 824773d..0000000 +Binary files a/node_modules/react-native-plaid-link-sdk/ios/RNLinksdk.xcworkspace/xcuserdata/dtroupe.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ +diff --git a/node_modules/react-native-plaid-link-sdk/ios/RNPlaidHelper.h b/node_modules/react-native-plaid-link-sdk/ios/RNPlaidHelper.h +new file mode 100644 +index 0000000..535d333 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/ios/RNPlaidHelper.h +@@ -0,0 +1,7 @@ ++#import ++ ++@interface RNPlaidHelper : NSObject ++ +++ (id _Nullable)createWithLinkTokenConfiguration:(PLKLinkTokenConfiguration * _Nonnull)linkTokenConfiguration error:(NSError * _Nullable * _Nullable)error; ++ ++@end +diff --git a/node_modules/react-native-plaid-link-sdk/ios/RNPlaidHelper.m b/node_modules/react-native-plaid-link-sdk/ios/RNPlaidHelper.m +new file mode 100644 +index 0000000..2288299 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/ios/RNPlaidHelper.m +@@ -0,0 +1,10 @@ ++#import "RNPlaidHelper.h" ++ ++@implementation RNPlaidHelper ++ +++ (id _Nullable)createWithLinkTokenConfiguration:(PLKLinkTokenConfiguration * _Nonnull)linkTokenConfiguration error:(NSError * _Nullable * _Nullable)error ++{ ++ return [PLKPlaid createWithLinkTokenConfiguration:linkTokenConfiguration error:error]; ++} ++ ++@end +diff --git a/node_modules/react-native-plaid-link-sdk/package.json b/node_modules/react-native-plaid-link-sdk/package.json +index 22c7d2c..3d1b85c 100644 +--- a/node_modules/react-native-plaid-link-sdk/package.json ++++ b/node_modules/react-native-plaid-link-sdk/package.json +@@ -4,11 +4,13 @@ + "description": "React Native Plaid Link SDK", + "main": "dist/index.js", + "types": "dist/index.d.ts", ++ "react-native": "src/index.ts", + "files": [ + "dist/**/*", + "android/**/*", +- "ios", +- "react-native-plaid-link-sdk.podspec" ++ "ios/**/*", ++ "react-native-plaid-link-sdk.podspec", ++ "src/**/*" + ], + "scripts": { + "lint": "eslint \"./**/*.{js,jsx}\" --fix", +@@ -47,7 +49,7 @@ + "@react-native-community/eslint-plugin": "^1.1.0", + "@types/jest": "^26.0.14", + "@types/react": "^16.14.20", +- "@types/react-native": "^0.66.0", ++ "@types/react-native": "^0.71.3", + "@types/react-test-renderer": "^16.9.3", + "@typescript-eslint/eslint-plugin": "^4.33.0", + "@typescript-eslint/parser": "^4.33.0", +@@ -62,5 +64,16 @@ + "react": "18.0.0", + "react-native": "0.69.9", + "typescript": "^4.9.5" ++ }, ++ "dependencies": { ++ "react-native-plaid-link-sdk": "^10.4.0" ++ }, ++ "codegenConfig": { ++ "name": "rnplaidlink", ++ "type": "modules", ++ "jsSrcsDir": "./src/fabric", ++ "android": { ++ "javaPackageName": "com.plaid" ++ } + } + } +diff --git a/node_modules/react-native-plaid-link-sdk/react-native-plaid-link-sdk.podspec b/node_modules/react-native-plaid-link-sdk/react-native-plaid-link-sdk.podspec +index ee59a19..40ac7df 100644 +--- a/node_modules/react-native-plaid-link-sdk/react-native-plaid-link-sdk.podspec ++++ b/node_modules/react-native-plaid-link-sdk/react-native-plaid-link-sdk.podspec +@@ -2,6 +2,8 @@ require 'json' + + package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) + ++fabric_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1' ++ + Pod::Spec.new do |s| + s.name = package['name'] + s.version = package['version'] +@@ -13,8 +15,13 @@ Pod::Spec.new do |s| + s.platform = :ios, "14.0" + + s.source = { :git => "https://github.com/plaid/react-native-plaid-link-sdk.git", :tag => "v#{s.version}" } +- s.source_files = "ios/*.{h,m,swift}" ++ s.source_files = "ios/**/*.{h,m,mm,swift}" ++ ++ if fabric_enabled ++ install_modules_dependencies(s) ++ else ++ s.dependency "React-Core" ++ end + +- s.dependency 'React-Core' + s.dependency 'Plaid', '~> 5.2.0' + end +diff --git a/node_modules/react-native-plaid-link-sdk/src/EmbeddedLink/EmbeddedLinkView.tsx b/node_modules/react-native-plaid-link-sdk/src/EmbeddedLink/EmbeddedLinkView.tsx +new file mode 100644 +index 0000000..0243de2 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/src/EmbeddedLink/EmbeddedLinkView.tsx +@@ -0,0 +1,95 @@ ++import React from 'react'; ++import { StyleProp, ViewStyle } from 'react-native'; ++import NativeEmbeddedLinkView from './NativeEmbeddedLinkView'; ++import { ++ LinkSuccessListener, ++ LinkSuccess, ++ LinkExitListener, ++ LinkExit, ++ LinkIOSPresentationStyle, ++ LinkOnEventListener, ++ LinkEvent, ++ LinkEventName, ++ LinkEventMetadata, ++ LinkError, ++ LinkExitMetadata, ++ LinkSuccessMetadata, ++} from '../Types'; ++ ++type EmbeddedLinkProps = { ++ token: String, ++ iOSPresentationStyle: LinkIOSPresentationStyle, ++ onEvent: LinkOnEventListener | undefined, ++ onSuccess: LinkSuccessListener, ++ onExit: LinkExitListener | undefined, ++ style: StyleProp | undefined, ++} ++ ++class EmbeddedEvent implements LinkEvent { ++ eventName: LinkEventName; ++ metadata: LinkEventMetadata; ++ ++ constructor(event: any) { ++ this.eventName = event.eventName ++ this.metadata = event.metadata ++ } ++} ++ ++class EmbeddedExit implements LinkExit { ++ error: LinkError | undefined; ++ metadata: LinkExitMetadata; ++ ++ constructor(event: any) { ++ this.error = event.error; ++ this.metadata = event.metadata; ++ } ++} ++ ++class EmbeddedSuccess implements LinkSuccess { ++ publicToken: string; ++ metadata: LinkSuccessMetadata; ++ ++ constructor(event: any) { ++ this.publicToken = event.publicToken; ++ this.metadata = event.metadata; ++ } ++} ++ ++export const EmbeddedLinkView: React.FC = (props) => { ++ ++ const {token, iOSPresentationStyle, onEvent, onSuccess, onExit, style} = props; ++ ++ const onEmbeddedEvent = (event: any) => { ++ ++ switch (event.nativeEvent.embeddedEventName) { ++ case 'onSuccess': { ++ if (!onSuccess) { return; } ++ const embeddedSuccess = new EmbeddedSuccess(event.nativeEvent); ++ onSuccess(embeddedSuccess); ++ break; ++ } ++ case 'onExit': { ++ if (!onExit) {return; } ++ const embeddedExit = new EmbeddedExit(event.nativeEvent); ++ onExit(embeddedExit); ++ break; ++ } ++ case 'onEvent': { ++ if (!onEvent) { return; } ++ const embeddedEvent = new EmbeddedEvent(event.nativeEvent); ++ onEvent(embeddedEvent); ++ break; ++ } ++ default: { ++ return; ++ } ++ } ++ } ++ ++ return ++}; +\ No newline at end of file +diff --git a/node_modules/react-native-plaid-link-sdk/src/EmbeddedLink/EmbeddedLinkView.web.tsx b/node_modules/react-native-plaid-link-sdk/src/EmbeddedLink/EmbeddedLinkView.web.tsx +new file mode 100644 +index 0000000..7a71609 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/src/EmbeddedLink/EmbeddedLinkView.web.tsx +@@ -0,0 +1,5 @@ ++// EmbeddedLinkView.web.tsx is a shim file which causes web bundlers to ignore the EmbeddedLinkView.tsx file ++// which imports requireNativeComponent (causing a runtime error with react-native-web). ++// Ref - https://github.com/plaid/react-native-plaid-link-sdk/issues/564 ++import React from 'react'; ++export const EmbeddedLinkView = () => null; +diff --git a/node_modules/react-native-plaid-link-sdk/src/EmbeddedLink/NativeEmbeddedLinkView.tsx b/node_modules/react-native-plaid-link-sdk/src/EmbeddedLink/NativeEmbeddedLinkView.tsx +new file mode 100644 +index 0000000..da05fb1 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/src/EmbeddedLink/NativeEmbeddedLinkView.tsx +@@ -0,0 +1,9 @@ ++import { requireNativeComponent } from 'react-native'; ++ ++// Error "Tried to register two views with the same name PLKEmbeddedView" ++// will be thrown during hot reload when any change is made to the ++// file that is calling this requireNativeComponent('PLKEmbeddedView') call. ++// Leaving this in its own file resolves this issue. ++const NativeEmbeddedLinkView = requireNativeComponent('PLKEmbeddedView'); ++ ++export default NativeEmbeddedLinkView; +\ No newline at end of file +diff --git a/node_modules/react-native-plaid-link-sdk/src/PlaidLink.tsx b/node_modules/react-native-plaid-link-sdk/src/PlaidLink.tsx +new file mode 100644 +index 0000000..b35c06f +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/src/PlaidLink.tsx +@@ -0,0 +1,117 @@ ++import React, { useEffect } from 'react'; ++import { NativeEventEmitter, Platform, TouchableOpacity } from 'react-native'; ++import { ++ LinkError, ++ LinkEventListener, ++ LinkExit, ++ LinkIOSPresentationStyle, ++ LinkLogLevel, ++ LinkSuccess, ++ PlaidLinkComponentProps, ++ PlaidLinkProps, ++} from './Types'; ++import RNLinksdkAndroid from './fabric/NativePlaidLinkModuleAndroid'; ++import RNLinksdkiOS from './fabric/NativePlaidLinkModuleiOS'; ++ ++const RNLinksdk = (Platform.OS === 'android' ? RNLinksdkAndroid : RNLinksdkiOS) ?? undefined; ++ ++/** ++ * A hook that registers a listener on the Plaid emitter for the 'onEvent' type. ++ * The listener is cleaned up when this view is unmounted ++ * ++ * @param linkEventListener the listener to call ++ */ ++export const usePlaidEmitter = (linkEventListener: LinkEventListener) => { ++ useEffect(() => { ++ const emitter = new NativeEventEmitter(RNLinksdk); ++ const listener = emitter.addListener('onEvent', linkEventListener); ++ // Clean up after this effect: ++ return function cleanup() { ++ listener.remove(); ++ }; ++ }, []); ++}; ++ ++export const openLink = async (props: PlaidLinkProps) => { ++ let config = props.tokenConfig; ++ let noLoadingState = config.noLoadingState ?? false; ++ ++ if (Platform.OS === 'android') { ++ if (RNLinksdkAndroid === null) { ++ throw new Error('[react-native-plaid-link-sdk] RNLinksdkAndroid is not defined'); ++ } ++ ++ RNLinksdkAndroid.startLinkActivityForResult( ++ config.token, ++ noLoadingState, ++ config.logLevel ?? LinkLogLevel.ERROR, ++ // @ts-ignore we use Object type in the spec file as it maps to NSDictionary and ReadableMap ++ (result: LinkSuccess) => { ++ if (props.onSuccess != null) { ++ props.onSuccess(result); ++ } ++ }, ++ (result: LinkExit) => { ++ if (props.onExit != null) { ++ if (result.error != null && result.error.displayMessage != null) { ++ //TODO(RNSDK-118): Remove errorDisplayMessage field in next major update. ++ result.error.errorDisplayMessage = result.error.displayMessage; ++ } ++ props.onExit(result); ++ } ++ }, ++ ); ++ } else { ++ if (RNLinksdkiOS === null) { ++ throw new Error('[react-native-plaid-link-sdk] RNLinksdkiOS is not defined'); ++ } ++ ++ RNLinksdkiOS.create(config.token, noLoadingState); ++ ++ let presentFullScreen = ++ props.iOSPresentationStyle == LinkIOSPresentationStyle.FULL_SCREEN; ++ ++ RNLinksdkiOS.open( ++ presentFullScreen, ++ // @ts-ignore we use Object type in the spec file as it maps to NSDictionary and ReadableMap ++ (result: LinkSuccess) => { ++ if (props.onSuccess != null) { ++ props.onSuccess(result); ++ } ++ }, ++ (error: LinkError, result: LinkExit) => { ++ if (props.onExit != null) { ++ if (error) { ++ var data = result || {}; ++ data.error = error; ++ props.onExit(data); ++ } else { ++ props.onExit(result); ++ } ++ } ++ }, ++ ); ++ } ++}; ++ ++export const dismissLink = () => { ++ if (Platform.OS === 'ios') { ++ if (RNLinksdkiOS === null) { ++ throw new Error('[react-native-plaid-link-sdk] RNLinksdkiOS is not defined'); ++ } ++ ++ RNLinksdkiOS.dismiss(); ++ } ++}; ++ ++export const PlaidLink = (props: PlaidLinkComponentProps) => { ++ function onPress() { ++ props.onPress?.(); ++ openLink(props); ++ } ++ ++ return ( ++ // @ts-ignore some types directories misconfiguration ++ {props.children} ++ ); ++}; +diff --git a/node_modules/react-native-plaid-link-sdk/src/Types.ts b/node_modules/react-native-plaid-link-sdk/src/Types.ts +new file mode 100644 +index 0000000..a7d30c6 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/src/Types.ts +@@ -0,0 +1,550 @@ ++interface CommonPlaidLinkOptions { ++ logLevel?: LinkLogLevel; ++ extras?: Record; ++} ++ ++export type LinkTokenConfiguration = (CommonPlaidLinkOptions & { ++ token: string; ++ // A `Bool` indicating that Link should skip displaying a loading animation until the Link UI is fully loaded. ++ // This can be used to display custom loading UI while Link content is loading (and will skip any initial loading UI in Link). ++ // Note: Dismiss custom loading UI on the OPEN & EXIT events. ++ // ++ // Note: This should be set to `true` when setting the `eu_config.headless` field in /link/token/create requests to `true`. ++ // For reference, see https://plaid.com/docs/api/tokens/#link-token-create-request-eu-config-headless ++ noLoadingState?: boolean; ++}); ++ ++export enum LinkLogLevel { ++ DEBUG="debug", ++ INFO="info", ++ WARN="warn", ++ ERROR="error", ++} ++ ++export enum PlaidEnvironment { ++ PRODUCTION = 'production', ++ DEVELOPMENT = 'development', ++ SANDBOX = 'sandbox', ++} ++ ++export enum PlaidProduct { ++ ASSETS="assets", ++ AUTH="auth", ++ DEPOSIT_SWITCH="deposit_switch", ++ IDENTITY="identity", ++ INCOME="income", ++ INVESTMENTS="investments", ++ LIABILITIES="liabilities", ++ LIABILITIES_REPORT="liabilities_report", ++ PAYMENT_INITIATION="payment_initiation", ++ TRANSACTIONS="transactions", ++} ++ ++export enum LinkAccountType { ++ CREDIT = 'credit', ++ DEPOSITORY = 'depository', ++ INVESTMENT = 'investment', ++ LOAN = 'loan', ++ OTHER = 'other', ++} ++ ++export enum LinkAccountSubtypes { ++ ALL = 'all', ++ CREDIT_CARD = 'credit card', ++ PAYPAL = 'paypal', ++ AUTO = 'auto', ++ BUSINESS = 'business', ++ COMMERCIAL = 'commercial', ++ CONSTRUCTION = 'construction', ++ CONSUMER = 'consumer', ++ HOME_EQUITY = 'home equity', ++ LINE_OF_CREDIT = 'line of credit', ++ LOAN = 'loan', ++ MORTGAGE = 'mortgage', ++ OVERDRAFT = 'overdraft', ++ STUDENT = 'student', ++ CASH_MANAGEMENT = 'cash management', ++ CD = 'cd', ++ CHECKING = 'checking', ++ EBT = 'ebt', ++ HSA = 'hsa', ++ MONEY_MARKET = 'money market', ++ PREPAID = 'prepaid', ++ SAVINGS = 'savings', ++ FOUR_0_1_A = '401a', ++ FOUR_0_1_K = '401k', ++ FOUR_0_3_B = '403B', ++ FOUR_5_7_B = '457b', ++ FIVE_2_9 = '529', ++ BROKERAGE = 'brokerage', ++ CASH_ISA = 'cash isa', ++ EDUCATION_SAVINGS_ACCOUNT = 'education savings account', ++ FIXED_ANNUNITY = 'fixed annuity', ++ GIC = 'gic', ++ HEALTH_REIMBURSEMENT_ARRANGEMENT = 'health reimbursement arrangement', ++ IRA = 'ira', ++ ISA = 'isa', ++ KEOGH = 'keogh', ++ LIF = 'lif', ++ LIRA = 'lira', ++ LRIF = 'lrif', ++ LRSP = 'lrsp', ++ MUTUAL_FUND = 'mutual fund', ++ NON_TAXABLE_BROKERAGE_ACCOUNT = 'non-taxable brokerage account', ++ PENSION = 'pension', ++ PLAN = 'plan', ++ PRIF = 'prif', ++ PROFIT_SHARING_PLAN = 'profit sharing plan', ++ RDSP = 'rdsp', ++ RESP = 'resp', ++ RETIREMENT = 'retirement', ++ RLIF = 'rlif', ++ ROTH_401K = 'roth 401k', ++ ROTH = 'roth', ++ RRIF = 'rrif', ++ RRSP = 'rrsp', ++ SARSEP = 'sarsep', ++ SEP_IRA = 'sep ira', ++ SIMPLE_IRA = 'simple ira', ++ SIPP = 'sipp', ++ STOCK_PLAN = 'stock plan', ++ TFSA = 'tfsa', ++ THRIFT_SAVINGS_PLAN = 'thrift savings plan', ++ TRUST = 'trust', ++ UGMA = 'ugma', ++ UTMA = 'utma', ++ VARIABLE_ANNUITY = 'variable annuity' ++} ++ ++export interface LinkAccountSubtype { ++} ++ ++export class LinkAccountSubtypeCredit implements LinkAccountSubtype { ++ public static readonly ALL = new LinkAccountSubtypeCredit(LinkAccountType.CREDIT, LinkAccountSubtypes.ALL); ++ public static readonly CREDIT_CARD = new LinkAccountSubtypeCredit(LinkAccountType.CREDIT, LinkAccountSubtypes.CREDIT_CARD); ++ public static readonly PAYPAL = new LinkAccountSubtypeCredit(LinkAccountType.CREDIT, LinkAccountSubtypes.PAYPAL); ++ ++ private constructor(public readonly type: LinkAccountType, public readonly subtype: LinkAccountSubtype) { } ++} ++ ++export class LinkAccountSubtypeDepository implements LinkAccountSubtype { ++ public static readonly ALL = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.ALL); ++ public static readonly CASH_MANAGEMENT = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.CASH_MANAGEMENT); ++ public static readonly CD = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.CD); ++ public static readonly CHECKING = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.CHECKING); ++ public static readonly EBT = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.EBT); ++ public static readonly HSA = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.HSA); ++ public static readonly MONEY_MARKET = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.MONEY_MARKET); ++ public static readonly PAYPAL = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.PAYPAL); ++ public static readonly PREPAID = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.PREPAID); ++ public static readonly SAVINGS = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.SAVINGS); ++ ++ private constructor(public readonly type: LinkAccountType, public readonly subtype: LinkAccountSubtype) { } ++} ++ ++export class LinkAccountSubtypeInvestment implements LinkAccountSubtype { ++ public static readonly ALL = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ALL); ++ public static readonly BROKERAGE = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.BROKERAGE); ++ public static readonly CASH_ISA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.CASH_ISA); ++ public static readonly EDUCATION_SAVINGS_ACCOUNT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.EDUCATION_SAVINGS_ACCOUNT); ++ public static readonly FIXED_ANNUNITY = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FIXED_ANNUNITY); ++ public static readonly GIC = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.GIC); ++ public static readonly HEALTH_REIMBURSEMENT_ARRANGEMENT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.HEALTH_REIMBURSEMENT_ARRANGEMENT); ++ public static readonly HSA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.HSA); ++ public static readonly INVESTMENT_401A = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_0_1_A); ++ public static readonly INVESTMENT_401K = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_0_1_K); ++ public static readonly INVESTMENT_403B = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_0_3_B); ++ public static readonly INVESTMENT_457B = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_5_7_B); ++ public static readonly INVESTMENT_529 = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FIVE_2_9); ++ public static readonly IRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.IRA); ++ public static readonly ISA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ISA); ++ public static readonly KEOGH = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.KEOGH); ++ public static readonly LIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LIF); ++ public static readonly LIRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LIRA); ++ public static readonly LRIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LRIF); ++ public static readonly LRSP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LRSP); ++ public static readonly MUTUAL_FUND = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.MUTUAL_FUND); ++ public static readonly NON_TAXABLE_BROKERAGE_ACCOUNT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.NON_TAXABLE_BROKERAGE_ACCOUNT); ++ public static readonly PENSION = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PENSION); ++ public static readonly PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PLAN); ++ public static readonly PRIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PRIF); ++ public static readonly PROFIT_SHARING_PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PROFIT_SHARING_PLAN); ++ public static readonly RDSP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RDSP); ++ public static readonly RESP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RESP); ++ public static readonly RETIREMENT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RETIREMENT); ++ public static readonly RLIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RLIF); ++ public static readonly ROTH = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ROTH); ++ public static readonly ROTH_401K = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ROTH_401K); ++ public static readonly RRIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RRIF); ++ public static readonly RRSP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RRSP); ++ public static readonly SARSEP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SARSEP); ++ public static readonly SEP_IRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SEP_IRA); ++ public static readonly SIMPLE_IRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SIMPLE_IRA); ++ public static readonly SIIP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SIPP); ++ public static readonly STOCK_PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.STOCK_PLAN); ++ public static readonly TFSA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.TFSA); ++ public static readonly THRIFT_SAVINGS_PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.THRIFT_SAVINGS_PLAN); ++ public static readonly TRUST = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.TRUST); ++ public static readonly UGMA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.UGMA); ++ public static readonly UTMA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.UTMA); ++ public static readonly VARIABLE_ANNUITY = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.VARIABLE_ANNUITY); ++ ++ private constructor(public readonly type: LinkAccountType, public readonly subtype: LinkAccountSubtype) { } ++} ++ ++export class LinkAccountSubtypeLoan implements LinkAccountSubtype { ++ public static readonly ALL = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.ALL); ++ public static readonly AUTO = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.AUTO); ++ public static readonly BUSINESS = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.BUSINESS); ++ public static readonly COMMERCIAL = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.COMMERCIAL); ++ public static readonly CONSTRUCTION = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.CONSTRUCTION); ++ public static readonly CONSUMER = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.CONSUMER); ++ public static readonly HOME_EQUITY = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.HOME_EQUITY); ++ public static readonly LINE_OF_CREDIT = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.LINE_OF_CREDIT); ++ public static readonly LOAN = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.LOAN); ++ public static readonly MORTGAGE = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.MORTGAGE); ++ public static readonly OVERDRAFT = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.OVERDRAFT); ++ public static readonly STUDENT = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.STUDENT); ++ ++ private constructor(public readonly type: LinkAccountType, public readonly subtype: LinkAccountSubtype) { } ++} ++ ++export class LinkAccountSubtypeUnknown implements LinkAccountSubtype { ++ constructor(public readonly type: string, public readonly subtype: string) { } ++} ++ ++export interface LinkSuccess { ++ publicToken: string; ++ metadata: LinkSuccessMetadata; ++} ++ ++export interface LinkSuccessMetadata { ++ institution?: LinkInstitution; ++ accounts: LinkAccount[]; ++ linkSessionId: string; ++ metadataJson?: string; ++} ++ ++export interface LinkAccount { ++ id: string; ++ name?: string; ++ mask?: string; ++ type: LinkAccountType; ++ subtype: LinkAccountSubtype; ++ verificationStatus?: LinkAccountVerificationStatus; ++} ++ ++export enum LinkAccountVerificationStatus { ++ PENDING_AUTOMATIC_VERIFICATION = 'pending_automatic_verification', ++ PENDING_MANUAL_VERIFICATION = 'pending_manual_verification', ++ MANUALLY_VERIFIED = 'manually_verified', ++} ++ ++export interface LinkInstitution { ++ id: string; ++ name: string; ++} ++ ++export interface LinkExit { ++ error?: LinkError; ++ metadata: LinkExitMetadata; ++} ++ ++export interface LinkExitMetadata { ++ status?: LinkExitMetadataStatus; ++ institution?: LinkInstitution; ++ linkSessionId: string; ++ requestId: string; ++ metadataJson?: string; ++} ++ ++export enum LinkExitMetadataStatus { ++ CONNECTED = 'connected', ++ CHOOSE_DEVICE = 'choose_device', ++ REQUIRES_ACCOUNT_SELECTION = 'requires_account_selection', ++ REQUIRES_CODE = 'requires_code', ++ REQUIRES_CREDENTIALS = 'requires_credentials', ++ REQUIRES_EXTERNAL_ACTION = 'requires_external_action', ++ REQUIRES_OAUTH = 'requires_oauth', ++ REQUIRES_QUESTIONS = 'requires_questions', ++ REQUIRES_RECAPTCHA = 'requires_recaptcha', ++ REQUIRES_SELECTIONS = 'requires_selections', ++ REQUIRES_DEPOSIT_SWITCH_ALLOCATION_CONFIGURATION = 'requires_deposit_switch_allocation_configuration', ++ REQUIRES_DEPOSIT_SWITCH_ALLOCATION_SELECTION = 'requires_deposit_switch_allocation_selection', ++} ++ ++export interface LinkError { ++ errorCode: LinkErrorCode; ++ errorType: LinkErrorType; ++ errorMessage: string; ++ /** @deprecated DO NOT USE, data not guaranteed. Use `displayMessage` instead */ ++ errorDisplayMessage?: string; ++ displayMessage?: string; ++ errorJson?: string; ++} ++ ++export enum LinkErrorCode { ++ // ITEM_ERROR ++ INVALID_CREDENTIALS = "INVALID_CREDENTIALS", ++ INVALID_MFA = "INVALID_MFA", ++ ITEM_LOGIN_REQUIRED = "ITEM_LOGIN_REQUIRED", ++ INSUFFICIENT_CREDENTIALS = "INSUFFICIENT_CREDENTIALS", ++ ITEM_LOCKED = "ITEM_LOCKED", ++ USER_SETUP_REQUIRED = "USER_SETUP_REQUIRED", ++ MFA_NOT_SUPPORTED = "MFA_NOT_SUPPORTED", ++ INVALID_SEND_METHOD = "INVALID_SEND_METHOD", ++ NO_ACCOUNTS = "NO_ACCOUNTS", ++ ITEM_NOT_SUPPORTED = "ITEM_NOT_SUPPORTED", ++ TOO_MANY_VERIFICATION_ATTEMPTS = "TOO_MANY_VERIFICATION_ATTEMPTS", ++ ++ INVALD_UPDATED_USERNAME = "INVALD_UPDATED_USERNAME", ++ INVALID_UPDATED_USERNAME = "INVALID_UPDATED_USERNAME", ++ ++ ITEM_NO_ERROR = "ITEM_NO_ERROR", ++ item_no_error = "item-no-error", ++ NO_AUTH_ACCOUNTS = "NO_AUTH_ACCOUNTS", ++ NO_INVESTMENT_ACCOUNTS = "NO_INVESTMENT_ACCOUNTS", ++ NO_INVESTMENT_AUTH_ACCOUNTS = "NO_INVESTMENT_AUTH_ACCOUNTS", ++ NO_LIABILITY_ACCOUNTS = "NO_LIABILITY_ACCOUNTS", ++ PRODUCTS_NOT_SUPPORTED = "PRODUCTS_NOT_SUPPORTED", ++ ITEM_NOT_FOUND = "ITEM_NOT_FOUND", ++ ITEM_PRODUCT_NOT_READY = "ITEM_PRODUCT_NOT_READY", ++ ++ // INSTITUTION_ERROR ++ INSTITUTION_DOWN = "INSTITUTION_DOWN", ++ INSTITUTION_NOT_RESPONDING = "INSTITUTION_NOT_RESPONDING", ++ INSTITUTION_NOT_AVAILABLE = "INSTITUTION_NOT_AVAILABLE", ++ INSTITUTION_NO_LONGER_SUPPORTED = "INSTITUTION_NO_LONGER_SUPPORTED", ++ ++ // API_ERROR ++ INTERNAL_SERVER_ERROR = "INTERNAL_SERVER_ERROR", ++ PLANNED_MAINTENANCE = "PLANNED_MAINTENANCE", ++ ++ // ASSET_REPORT_ERROR ++ PRODUCT_NOT_ENABLED = "PRODUCT_NOT_ENABLED", ++ DATA_UNAVAILABLE = "DATA_UNAVAILABLE", ++ ASSET_PRODUCT_NOT_READY = "ASSET_PRODUCT_NOT_READY", ++ ASSET_REPORT_GENERATION_FAILED = "ASSET_REPORT_GENERATION_FAILED", ++ INVALID_PARENT = "INVALID_PARENT", ++ INSIGHTS_NOT_ENABLED = "INSIGHTS_NOT_ENABLED", ++ INSIGHTS_PREVIOUSLY_NOT_ENABLED = "INSIGHTS_PREVIOUSLY_NOT_ENABLED", ++ ++ // BANK_TRANSFER_ERROR ++ BANK_TRANSFER_LIMIT_EXCEEDED = "BANK_TRANSFER_LIMIT_EXCEEDED", ++ BANK_TRANSFER_MISSING_ORIGINATION_ACCOUNT = "BANK_TRANSFER_MISSING_ORIGINATION_ACCOUNT", ++ BANK_TRANSFER_INVALID_ORIGINATION_ACCOUNT = "BANK_TRANSFER_INVALID_ORIGINATION_ACCOUNT", ++ BANK_TRANSFER_ACCOUNT_BLOCKED = "BANK_TRANSFER_ACCOUNT_BLOCKED", ++ BANK_TRANSFER_INSUFFICIENT_FUNDS = "BANK_TRANSFER_INSUFFICIENT_FUNDS", ++ BANK_TRANSFER_NOT_CANCELLABLE = "BANK_TRANSFER_NOT_CANCELLABLE", ++ BANK_TRANSFER_UNSUPPORTED_ACCOUNT_TYPE = "BANK_TRANSFER_UNSUPPORTED_ACCOUNT_TYPE", ++ BANK_TRANSFER_UNSUPPORTED_ENVIRONMENT = "BANK_TRANSFER_UNSUPPORTED_ENVIRONMENT", ++ ++ // SANDBOX_ERROR ++ SANDBOX_PRODUCT_NOT_ENABLED = "SANDBOX_PRODUCT_NOT_ENABLED", ++ SANDBOX_WEBHOOK_INVALID = "SANDBOX_WEBHOOK_INVALID", ++ SANDBOX_BANK_TRANSFER_EVENT_TRANSITION_INVALID = "SANDBOX_BANK_TRANSFER_EVENT_TRANSITION_INVALID", ++ ++ // INVALID_REQUEST ++ MISSING_FIELDS = "MISSING_FIELDS", ++ UNKNOWN_FIELDS = "UNKNOWN_FIELDS", ++ INVALID_FIELD = "INVALID_FIELD", ++ INCOMPATIBLE_API_VERSION = "INCOMPATIBLE_API_VERSION", ++ INVALID_BODY = "INVALID_BODY", ++ INVALID_HEADERS = "INVALID_HEADERS", ++ NOT_FOUND = "NOT_FOUND", ++ NO_LONGER_AVAILABLE = "NO_LONGER_AVAILABLE", ++ SANDBOX_ONLY = "SANDBOX_ONLY", ++ INVALID_ACCOUNT_NUMBER = "INVALID_ACCOUNT_NUMBER", ++ ++ // INVALID_INPUT ++ // From above ITEM_LOGIN_REQUIRED = "INVALID_CREDENTIALS", ++ INCORRECT_DEPOSIT_AMOUNTS = "INCORRECT_DEPOSIT_AMOUNTS", ++ UNAUTHORIZED_ENVIRONMENT = "UNAUTHORIZED_ENVIRONMENT", ++ INVALID_PRODUCT = "INVALID_PRODUCT", ++ UNAUTHORIZED_ROUTE_ACCESS = "UNAUTHORIZED_ROUTE_ACCESS", ++ DIRECT_INTEGRATION_NOT_ENABLED = "DIRECT_INTEGRATION_NOT_ENABLED", ++ INVALID_API_KEYS = "INVALID_API_KEYS", ++ INVALID_ACCESS_TOKEN = "INVALID_ACCESS_TOKEN", ++ INVALID_PUBLIC_TOKEN = "INVALID_PUBLIC_TOKEN", ++ INVALID_LINK_TOKEN = "INVALID_LINK_TOKEN", ++ INVALID_PROCESSOR_TOKEN = "INVALID_PROCESSOR_TOKEN", ++ INVALID_AUDIT_COPY_TOKEN = "INVALID_AUDIT_COPY_TOKEN", ++ INVALID_ACCOUNT_ID = "INVALID_ACCOUNT_ID", ++ MICRODEPOSITS_ALREADY_VERIFIED = "MICRODEPOSITS_ALREADY_VERIFIED", ++ ++ // INVALID_RESULT ++ PLAID_DIRECT_ITEM_IMPORT_RETURNED_INVALID_MFA = "PLAID_DIRECT_ITEM_IMPORT_RETURNED_INVALID_MFA", ++ ++ // RATE_LIMIT_EXCEEDED ++ ACCOUNTS_LIMIT = "ACCOUNTS_LIMIT", ++ ADDITION_LIMIT = "ADDITION_LIMIT", ++ AUTH_LIMIT = "AUTH_LIMIT", ++ BALANCE_LIMIT = "BALANCE_LIMIT", ++ IDENTITY_LIMIT = "IDENTITY_LIMIT", ++ ITEM_GET_LIMIT = "ITEM_GET_LIMIT", ++ RATE_LIMIT = "RATE_LIMIT", ++ TRANSACTIONS_LIMIT = "TRANSACTIONS_LIMIT", ++ ++ // RECAPTCHA_ERROR ++ RECAPTCHA_REQUIRED = "RECAPTCHA_REQUIRED", ++ RECAPTCHA_BAD = "RECAPTCHA_BAD", ++ ++ // OAUTH_ERROR ++ INCORRECT_OAUTH_NONCE = "INCORRECT_OAUTH_NONCE", ++ OAUTH_STATE_ID_ALREADY_PROCESSED = "OAUTH_STATE_ID_ALREADY_PROCESSED", ++} ++ ++export enum LinkErrorType { ++ BANK_TRANSFER = 'BANK_TRANSFER_ERROR', ++ INVALID_REQUEST = 'INVALID_REQUEST', ++ INVALID_RESULT = 'INVALID_RESULT', ++ INVALID_INPUT = 'INVALID_INPUT', ++ INSTITUTION_ERROR = 'INSTITUTION_ERROR', ++ RATE_LIMIT_EXCEEDED = 'RATE_LIMIT_EXCEEDED', ++ API_ERROR = 'API_ERROR', ++ ITEM_ERROR = 'ITEM_ERROR', ++ AUTH_ERROR = 'AUTH_ERROR', ++ ASSET_REPORT_ERROR = 'ASSET_REPORT_ERROR', ++ SANDBOX_ERROR = 'SANDBOX_ERROR', ++ RECAPTCHA_ERROR = 'RECAPTCHA_ERROR', ++ OAUTH_ERROR = 'OAUTH_ERROR', ++} ++ ++export type LinkEventListener = (linkEvent: LinkEvent) => void ++ ++export interface LinkEvent { ++ eventName: LinkEventName; ++ metadata: LinkEventMetadata; ++} ++ ++export interface LinkEventMetadata { ++ accountNumberMask?: string; ++ linkSessionId: string; ++ mfaType?: string; ++ requestId?: string; ++ viewName: LinkEventViewName; ++ errorCode?: string; ++ errorMessage?: string; ++ errorType?: string; ++ exitStatus?: string; ++ institutionId?: string; ++ institutionName?: string; ++ institutionSearchQuery?: string; ++ isUpdateMode?: string; ++ matchReason?: string; ++ // see possible values for selection at https://plaid.com/docs/link/web/#link-web-onevent-selection ++ selection?: null | string; ++ timestamp: string; ++} ++ ++export enum LinkEventName { ++ BANK_INCOME_INSIGHTS_COMPLETED = "BANK_INCOME_INSIGHTS_COMPLETED", ++ CLOSE_OAUTH = 'CLOSE_OAUTH', ++ ERROR = 'ERROR', ++ EXIT = 'EXIT', ++ FAIL_OAUTH = 'FAIL_OAUTH', ++ HANDOFF = 'HANDOFF', ++ IDENTITY_VERIFICATION_START_STEP = 'IDENTITY_VERIFICATION_START_STEP', ++ IDENTITY_VERIFICATION_PASS_STEP = 'IDENTITY_VERIFICATION_PASS_STEP', ++ IDENTITY_VERIFICATION_FAIL_STEP = 'IDENTITY_VERIFICATION_FAIL_STEP', ++ IDENTITY_VERIFICATION_PENDING_REVIEW_STEP = 'IDENTITY_VERIFICATION_PENDING_REVIEW_STEP', ++ IDENTITY_VERIFICATION_PENDING_REVIEW_SESSION = 'IDENTITY_VERIFICATION_PENDING_REVIEW_SESSION', ++ IDENTITY_VERIFICATION_CREATE_SESSION = 'IDENTITY_VERIFICATION_CREATE_SESSION', ++ IDENTITY_VERIFICATION_RESUME_SESSION = 'IDENTITY_VERIFICATION_RESUME_SESSION', ++ IDENTITY_VERIFICATION_PASS_SESSION = 'IDENTITY_VERIFICATION_PASS_SESSION', ++ IDENTITY_VERIFICATION_FAIL_SESSION = 'IDENTITY_VERIFICATION_FAIL_SESSION', ++ IDENTITY_VERIFICATION_OPEN_UI = 'IDENTITY_VERIFICATION_OPEN_UI', ++ IDENTITY_VERIFICATION_RESUME_UI = 'IDENTITY_VERIFICATION_RESUME_UI', ++ IDENTITY_VERIFICATION_CLOSE_UI = 'IDENTITY_VERIFICATION_CLOSE_UI', ++ MATCHED_CONSENT = 'MATCHED_CONSENT', ++ MATCHED_SELECT_INSTITUTION = 'MATCHED_SELECT_INSTITUTION', ++ MATCHED_SELECT_VERIFY_METHOD = 'MATCHED_SELECT_VERIFY_METHOD', ++ OPEN = 'OPEN', ++ OPEN_MY_PLAID = 'OPEN_MY_PLAID', ++ OPEN_OAUTH = 'OPEN_OAUTH', ++ SEARCH_INSTITUTION = 'SEARCH_INSTITUTION', ++ SELECT_DEGRADED_INSTITUTION = 'SELECT_DEGRADED_INSTITUTION', ++ SELECT_DOWN_INSTITUTION = 'SELECT_DOWN_INSTITUTION', ++ SELECT_FILTERED_INSTITUTION = 'SELECT_FILTERED_INSTITUTION', ++ SELECT_INSTITUTION = 'SELECT_INSTITUTION', ++ SELECT_BRAND = 'SELECT_BRAND', ++ SELECT_AUTH_TYPE = 'SELECT_AUTH_TYPE', ++ SUBMIT_ACCOUNT_NUMBER = 'SUBMIT_ACCOUNT_NUMBER', ++ SUBMIT_DOCUMENTS = 'SUBMIT_DOCUMENTS', ++ SUBMIT_DOCUMENTS_SUCCESS = 'SUBMIT_DOCUMENTS_SUCCESS', ++ SUBMIT_DOCUMENTS_ERROR = 'SUBMIT_DOCUMENTS_ERROR', ++ SUBMIT_ROUTING_NUMBER = 'SUBMIT_ROUTING_NUMBER', ++ VIEW_DATA_TYPES = 'VIEW_DATA_TYPES', ++ SUBMIT_PHONE = 'SUBMIT_PHONE', ++ SKIP_SUBMIT_PHONE = 'SKIP_SUBMIT_PHONE', ++ VERIFY_PHONE = 'VERIFY_PHONE', ++ SUBMIT_CREDENTIALS = 'SUBMIT_CREDENTIALS', ++ SUBMIT_MFA = 'SUBMIT_MFA', ++ TRANSITION_VIEW = 'TRANSITION_VIEW', ++ CONNECT_NEW_INSTITUTION = 'CONNECT_NEW_INSTITUTION', ++} ++ ++export enum LinkEventViewName { ++ ACCEPT_TOS = 'ACCEPT_TOS', ++ CONNECTED = 'CONNECTED', ++ CONSENT = 'CONSENT', ++ CREDENTIAL = 'CREDENTIAL', ++ DATA_TRANSPARENCY = 'DATA_TRANSPARENCY', ++ DATA_TRANSPARENCY_CONSENT = 'DATA_TRANSPARENCY_CONSENT', ++ DOCUMENTARY_VERIFICATION = 'DOCUMENTARY_VERIFICATION', ++ ERROR = 'ERROR', ++ EXIT = 'EXIT', ++ KYC_CHECK = 'KYC_CHECK', ++ SELFIE_CHECK = 'SELFIE_CHECK', ++ LOADING = 'LOADING', ++ MATCHED_CONSENT = 'MATCHED_CONSENT', ++ MATCHED_CREDENTIAL = 'MATCHED_CREDENTIAL', ++ MATCHED_MFA = 'MATCHED_MFA', ++ MFA = 'MFA', ++ NUMBERS = 'NUMBERS', ++ NUMBERS_SELECT_INSTITUTION = 'NUMBERS_SELECT_INSTITUTION', ++ OAUTH = 'OAUTH', ++ RECAPTCHA = 'RECAPTCHA', ++ RISK_CHECK = 'RISK_CHECK', ++ SCREENING = 'SCREENING', ++ SELECT_ACCOUNT = 'SELECT_ACCOUNT', ++ SELECT_AUTH_TYPE = 'SELECT_AUTH_TYPE', ++ SUBMIT_PHONE = 'SUBMIT_PHONE', ++ VERIFY_PHONE = 'VERIFY_PHONE', ++ SELECT_SAVED_INSTITUTION = 'SELECT_SAVED_INSTITUTION', ++ SELECT_SAVED_ACCOUNT = 'SELECT_SAVED_ACCOUNT', ++ SELECT_BRAND = 'SELECT_BRAND', ++ SELECT_INSTITUTION = 'SELECT_INSTITUTION', ++ SUBMIT_DOCUMENTS = 'SUBMIT_DOCUMENTS', ++ SUBMIT_DOCUMENTS_SUCCESS = 'SUBMIT_DOCUMENTS_SUCCESS', ++ SUBMIT_DOCUMENTS_ERROR = 'SUBMIT_DOCUMENTS_ERROR', ++ UPLOAD_DOCUMENTS = 'UPLOAD_DOCUMENTS', ++ VERIFY_SMS = 'VERIFY_SMS', ++} ++ ++/// Methods to present Link on iOS. ++/// FULL_SCREEN is the converts to UIModalPresentationOverFullScreen on the native side. ++/// MODAL will use the default presentation style for iOS which is UIModalPresentationAutomatic. ++export enum LinkIOSPresentationStyle { ++ FULL_SCREEN = 'FULL_SCREEN', ++ MODAL = 'MODAL' ++} ++ ++export type LinkSuccessListener = (LinkSuccess: LinkSuccess) => void ++ ++export type LinkExitListener = (LinkExit: LinkExit) => void ++ ++export type LinkOnEventListener = (LinkEvent: LinkEvent) => void ++ ++export interface PlaidLinkProps { ++ tokenConfig: LinkTokenConfiguration ++ onSuccess: LinkSuccessListener ++ onExit?: LinkExitListener ++ iOSPresentationStyle?: LinkIOSPresentationStyle ++ logLevel?: LinkLogLevel ++ onPress?(): any ++} ++ ++export type PlaidLinkComponentProps = (PlaidLinkProps & { ++ children: React.ReactNode ++}); +diff --git a/node_modules/react-native-plaid-link-sdk/src/__tests__/Types.tests.ts b/node_modules/react-native-plaid-link-sdk/src/__tests__/Types.tests.ts +new file mode 100644 +index 0000000..2dd7a54 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/src/__tests__/Types.tests.ts +@@ -0,0 +1,15 @@ ++const Types = require('./../Types'); ++ ++test('test token configuration', () => { ++ const linkTokenConfiguration = { ++ token: "test-token", ++ noLoadingState: false, ++ logLevel: Types.LinkLogLevel.DEBUG, ++ extras: null, ++ }; ++ ++ expect(linkTokenConfiguration.noLoadingState).toBe(false); ++ expect(linkTokenConfiguration.token).toBe("test-token"); ++ expect(linkTokenConfiguration.logLevel).toBe(Types.LinkLogLevel.DEBUG); ++ expect(linkTokenConfiguration.extras).toBe(null); ++}); +\ No newline at end of file +diff --git a/node_modules/react-native-plaid-link-sdk/src/fabric/NativePlaidLinkModuleAndroid.ts b/node_modules/react-native-plaid-link-sdk/src/fabric/NativePlaidLinkModuleAndroid.ts +new file mode 100644 +index 0000000..d1e4062 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/src/fabric/NativePlaidLinkModuleAndroid.ts +@@ -0,0 +1,20 @@ ++// we use Object type because methods on the native side use NSDictionary and ReadableMap ++// and we want to stay compatible with those ++import {TurboModuleRegistry, TurboModule} from 'react-native'; ++import { Int32, UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes'; ++ ++export interface Spec extends TurboModule { ++ startLinkActivityForResult( ++ token: string, ++ noLoadingState: boolean, ++ logLevel: string, ++ onSuccessCallback: (result: UnsafeObject) => void, ++ onExitCallback: (result: UnsafeObject) => void ++ ): void; ++ ++ // those two are here for event emitter methods ++ addListener(eventName: string): void; ++ removeListeners(count: Int32): void; ++} ++ ++export default TurboModuleRegistry.get('PlaidAndroid'); +diff --git a/node_modules/react-native-plaid-link-sdk/src/fabric/NativePlaidLinkModuleiOS.ts b/node_modules/react-native-plaid-link-sdk/src/fabric/NativePlaidLinkModuleiOS.ts +new file mode 100644 +index 0000000..d1b3565 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/src/fabric/NativePlaidLinkModuleiOS.ts +@@ -0,0 +1,19 @@ ++// we use Object type because methods on the native side use NSDictionary and ReadableMap ++// and we want to stay compatible with those ++import {TurboModuleRegistry, TurboModule} from 'react-native'; ++import { Int32, UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes'; ++ ++export interface Spec extends TurboModule { ++ create(token: string, noLoadingState: boolean): void; ++ open( ++ fullScreen: boolean, ++ onSuccess: (success: UnsafeObject) => void, ++ onExit: (error: UnsafeObject, result: UnsafeObject) => void, ++ ): void; ++ dismiss(): void; ++ // those two are here for event emitter methods ++ addListener(eventName: string): void; ++ removeListeners(count: Int32): void; ++} ++ ++export default TurboModuleRegistry.get('RNLinksdk'); +diff --git a/node_modules/react-native-plaid-link-sdk/src/index.ts b/node_modules/react-native-plaid-link-sdk/src/index.ts +new file mode 100644 +index 0000000..23ef946 +--- /dev/null ++++ b/node_modules/react-native-plaid-link-sdk/src/index.ts +@@ -0,0 +1,21 @@ ++import { ++ openLink, ++ dismissLink, ++ usePlaidEmitter, ++ PlaidLink, ++} from './PlaidLink'; ++ ++export * from './Types'; ++ ++export default PlaidLink; ++ ++export { ++ PlaidLink, ++ openLink, ++ dismissLink, ++ usePlaidEmitter, ++}; ++ ++// Components ++ ++export { EmbeddedLinkView } from './EmbeddedLink/EmbeddedLinkView'; +\ No newline at end of file diff --git a/patches/react-native-screens+3.29.0+001+initial.patch b/patches/react-native-screens+3.29.0+001+initial.patch new file mode 100644 index 000000000000..dbe65b2abf3f --- /dev/null +++ b/patches/react-native-screens+3.29.0+001+initial.patch @@ -0,0 +1,49 @@ +diff --git a/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt b/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +index d9e0e58..2d946c4 100644 +--- a/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt ++++ b/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +@@ -3,7 +3,6 @@ package com.swmansion.rnscreens + import android.view.ViewGroup + import androidx.annotation.UiThread + import com.facebook.react.bridge.ReactContext +-import com.facebook.react.bridge.ReadableMap + import com.facebook.react.bridge.WritableMap + import com.facebook.react.bridge.WritableNativeMap + import com.facebook.react.uimanager.FabricViewStateManager +@@ -13,6 +12,9 @@ import kotlin.math.abs + abstract class FabricEnabledViewGroup constructor(context: ReactContext?) : ViewGroup(context), FabricViewStateManager.HasFabricViewStateManager { + private val mFabricViewStateManager: FabricViewStateManager = FabricViewStateManager() + ++ private var lastSetWidth = 0f ++ private var lastSetHeight = 0f ++ + override fun getFabricViewStateManager(): FabricViewStateManager { + return mFabricViewStateManager + } +@@ -28,17 +30,16 @@ abstract class FabricEnabledViewGroup constructor(context: ReactContext?) : View + + // Check incoming state values. If they're already the correct value, return early to prevent + // infinite UpdateState/SetState loop. +- val currentState: ReadableMap? = mFabricViewStateManager.getStateData() +- if (currentState != null) { +- val delta = 0.9f +- val stateFrameHeight: Float = if (currentState.hasKey("frameHeight")) currentState.getDouble("frameHeight").toFloat() else 0f +- val stateFrameWidth: Float = if (currentState.hasKey("frameWidth")) currentState.getDouble("frameWidth").toFloat() else 0f +- if (abs(stateFrameWidth - realWidth) < delta && +- abs(stateFrameHeight - realHeight) < delta +- ) { +- return +- } ++ val delta = 0.9f ++ if (abs(lastSetWidth - realWidth) < delta && ++ abs(lastSetHeight - realHeight) < delta ++ ) { ++ return + } ++ ++ lastSetWidth = realWidth ++ lastSetHeight = realHeight ++ + mFabricViewStateManager.setState { + val map: WritableMap = WritableNativeMap() + map.putDouble("frameWidth", realWidth.toDouble()) diff --git a/patches/react-native-screens+3.29.0+002+fixLayoutIssues.patch b/patches/react-native-screens+3.29.0+002+fixLayoutIssues.patch new file mode 100644 index 000000000000..9654c9cfcb42 --- /dev/null +++ b/patches/react-native-screens+3.29.0+002+fixLayoutIssues.patch @@ -0,0 +1,214 @@ +diff --git a/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt b/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +index 2d946c4..ccda8f3 100644 +--- a/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt ++++ b/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +@@ -12,38 +12,36 @@ import kotlin.math.abs + abstract class FabricEnabledViewGroup constructor(context: ReactContext?) : ViewGroup(context), FabricViewStateManager.HasFabricViewStateManager { + private val mFabricViewStateManager: FabricViewStateManager = FabricViewStateManager() + +- private var lastSetWidth = 0f +- private var lastSetHeight = 0f ++ private var lastHeaderHeight: Double = 0.0 + + override fun getFabricViewStateManager(): FabricViewStateManager { + return mFabricViewStateManager + } + +- protected fun updateScreenSizeFabric(width: Int, height: Int) { +- updateState(width, height) ++ protected fun updateScreenSizeFabric(width: Int, height: Int, headerHeight: Double) { ++ updateState(width, height, headerHeight) + } + + @UiThread +- fun updateState(width: Int, height: Int) { ++ fun updateState(width: Int, height: Int, headerHeight: Double) { + val realWidth: Float = PixelUtil.toDIPFromPixel(width.toFloat()) + val realHeight: Float = PixelUtil.toDIPFromPixel(height.toFloat()) + + // Check incoming state values. If they're already the correct value, return early to prevent + // infinite UpdateState/SetState loop. +- val delta = 0.9f +- if (abs(lastSetWidth - realWidth) < delta && +- abs(lastSetHeight - realHeight) < delta +- ) { ++ val delta = 0.9 ++ if (abs(lastHeaderHeight - headerHeight) < delta) { + return + } + +- lastSetWidth = realWidth +- lastSetHeight = realHeight ++ lastHeaderHeight = headerHeight + + mFabricViewStateManager.setState { + val map: WritableMap = WritableNativeMap() + map.putDouble("frameWidth", realWidth.toDouble()) + map.putDouble("frameHeight", realHeight.toDouble()) ++ map.putDouble("contentOffsetX", 0.0) ++ map.putDouble("contentOffsetY", headerHeight) + map + } + } +diff --git a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.kt b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.kt +index a7d28f9..e0b0d8e 100644 +--- a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.kt ++++ b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.kt +@@ -72,9 +72,9 @@ class Screen constructor(context: ReactContext?) : FabricEnabledViewGroup(contex + val width = r - l + val height = b - t + +- calculateHeaderHeight() ++ val headerHeight = if (container is ScreenStack) calculateHeaderHeight().first else 0.0 + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { +- updateScreenSizeFabric(width, height) ++ updateScreenSizeFabric(width, height, headerHeight) + } else { + updateScreenSizePaper(width, height) + } +@@ -246,7 +246,7 @@ class Screen constructor(context: ReactContext?) : FabricEnabledViewGroup(contex + mNativeBackButtonDismissalEnabled = enableNativeBackButtonDismissal + } + +- private fun calculateHeaderHeight() { ++ private fun calculateHeaderHeight(): Pair { + val actionBarTv = TypedValue() + val resolvedActionBarSize = context.theme.resolveAttribute(android.R.attr.actionBarSize, actionBarTv, true) + +@@ -265,6 +265,8 @@ class Screen constructor(context: ReactContext?) : FabricEnabledViewGroup(contex + val totalHeight = actionBarHeight + statusBarHeight + UIManagerHelper.getEventDispatcherForReactTag(context as ReactContext, id) + ?.dispatchEvent(HeaderHeightChangeEvent(id, totalHeight)) ++ ++ return actionBarHeight to statusBarHeight + } + + enum class StackPresentation { +diff --git a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +index 67194d3..c1a1b40 100644 +--- a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h ++++ b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +@@ -13,7 +13,7 @@ class RNSScreenComponentDescriptor final + using ConcreteComponentDescriptor::ConcreteComponentDescriptor; + + void adopt(ShadowNode& shadowNode) const override { +- react_native_assert( ++ react_native_assert( + dynamic_cast(&shadowNode)); + auto& screenShadowNode = + static_cast(shadowNode); +@@ -28,10 +28,7 @@ class RNSScreenComponentDescriptor final + shadowNode.getState()); + auto stateData = state->getData(); + +- if (stateData.frameSize.width != 0 && stateData.frameSize.height != 0) { +- layoutableShadowNode.setSize( +- Size{stateData.frameSize.width, stateData.frameSize.height}); +- } ++ layoutableShadowNode.setPadding({.bottom = stateData.contentOffset.y}); + + ConcreteComponentDescriptor::adopt(shadowNode); + } +diff --git a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +index ba61ed8..0e3746e 100644 +--- a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp ++++ b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +@@ -5,5 +5,11 @@ namespace react { + + extern const char RNSScreenComponentName[] = "RNSScreen"; + ++Point RNSScreenShadowNode::getContentOriginOffset() const { ++ auto stateData = getStateData(); ++ auto contentOffset = stateData.contentOffset; ++ return {contentOffset.x, contentOffset.y}; ++} ++ + } // namespace react + } // namespace facebook +diff --git a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +index ef25dd1..bbd7599 100644 +--- a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h ++++ b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +@@ -19,9 +19,11 @@ class JSI_EXPORT RNSScreenShadowNode final : public ConcreteViewShadowNode< + public: + using ConcreteViewShadowNode::ConcreteViewShadowNode; + ++ Point getContentOriginOffset() const override; ++ + static ShadowNodeTraits BaseTraits() { + auto traits = ConcreteViewShadowNode::BaseTraits(); +- traits.set(ShadowNodeTraits::Trait::RootNodeKind); ++ // traits.set(ShadowNodeTraits::Trait::RootNodeKind); + return traits; + } + }; +diff --git a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +index 69c77a6..6c3b8ca 100644 +--- a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp ++++ b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +@@ -6,8 +6,8 @@ namespace react { + #ifdef ANDROID + folly::dynamic RNSScreenState::getDynamic() const { + return folly::dynamic::object("frameWidth", frameSize.width)( +- "frameHeight", frameSize.height); +-} ++ "frameHeight", frameSize.height)("contentOffsetX", contentOffset.x)("contentOffsetY", contentOffset.y); ++ } + #endif + + } // namespace react +diff --git a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +index ce09807..e26d411 100644 +--- a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h ++++ b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +@@ -17,7 +17,7 @@ class JSI_EXPORT RNSScreenState final { + using Shared = std::shared_ptr; + + RNSScreenState(){}; +- RNSScreenState(Size frameSize_) : frameSize(frameSize_){}; ++ RNSScreenState(Size frameSize_, Point contentOffset_) : frameSize(frameSize_), contentOffset(contentOffset_){}; + + #ifdef ANDROID + RNSScreenState( +@@ -25,10 +25,14 @@ class JSI_EXPORT RNSScreenState final { + folly::dynamic data) + : frameSize(Size{ + (Float)data["frameWidth"].getDouble(), +- (Float)data["frameHeight"].getDouble()}){}; ++ (Float)data["frameHeight"].getDouble()}), ++ contentOffset(Point{ ++ (Float)data["contentOffsetX"].getDouble(), ++ (Float)data["contentOffsetY"].getDouble()}){}; + #endif + + const Size frameSize{}; ++ Point contentOffset; + + #ifdef ANDROID + folly::dynamic getDynamic() const; +diff --git a/node_modules/react-native-screens/ios/RNSScreen.h b/node_modules/react-native-screens/ios/RNSScreen.h +index f1bd9d8..797fc12 100644 +--- a/node_modules/react-native-screens/ios/RNSScreen.h ++++ b/node_modules/react-native-screens/ios/RNSScreen.h +@@ -42,6 +42,7 @@ namespace react = facebook::react; + #ifdef RCT_NEW_ARCH_ENABLED + - (void)setViewToSnapshot:(UIView *)snapshot; + - (void)resetViewToScreen; ++- (CGFloat)calculateHeaderHeightIsModal:(BOOL)isModal; + #endif + + @end +diff --git a/node_modules/react-native-screens/ios/RNSScreen.mm b/node_modules/react-native-screens/ios/RNSScreen.mm +index 4b24cff..8f480ca 100644 +--- a/node_modules/react-native-screens/ios/RNSScreen.mm ++++ b/node_modules/react-native-screens/ios/RNSScreen.mm +@@ -107,7 +107,8 @@ - (void)updateBounds + { + #ifdef RCT_NEW_ARCH_ENABLED + if (_state != nullptr) { +- auto newState = react::RNSScreenState{RCTSizeFromCGSize(self.bounds.size)}; ++ CGFloat headerHeight = [_controller calculateHeaderHeightIsModal:self.isPresentedAsNativeModal]; ++ auto newState = react::RNSScreenState{RCTSizeFromCGSize(self.bounds.size), RCTPointFromCGPoint(CGPointMake(0, headerHeight))}; + _state->updateState(std::move(newState)); + UINavigationController *navctr = _controller.navigationController; + [navctr.view setNeedsLayout]; diff --git a/patches/react-native-screens+3.29.0+003+fixIOSHeaderHeight.patch b/patches/react-native-screens+3.29.0+003+fixIOSHeaderHeight.patch new file mode 100644 index 000000000000..ae162204a692 --- /dev/null +++ b/patches/react-native-screens+3.29.0+003+fixIOSHeaderHeight.patch @@ -0,0 +1,35 @@ +diff --git a/node_modules/react-native-screens/ios/RNSScreen.mm b/node_modules/react-native-screens/ios/RNSScreen.mm +index 8f480ca..4cc5e7b 100644 +--- a/node_modules/react-native-screens/ios/RNSScreen.mm ++++ b/node_modules/react-native-screens/ios/RNSScreen.mm +@@ -108,7 +108,7 @@ - (void)updateBounds + #ifdef RCT_NEW_ARCH_ENABLED + if (_state != nullptr) { + CGFloat headerHeight = [_controller calculateHeaderHeightIsModal:self.isPresentedAsNativeModal]; +- auto newState = react::RNSScreenState{RCTSizeFromCGSize(self.bounds.size), RCTPointFromCGPoint(CGPointMake(0, headerHeight))}; ++ auto newState = react::RNSScreenState{RCTSizeFromCGSize(self.bounds.size), RCTPointFromCGPoint(CGPointMake(0, 0))}; + _state->updateState(std::move(newState)); + UINavigationController *navctr = _controller.navigationController; + [navctr.view setNeedsLayout]; +@@ -1106,17 +1106,11 @@ - (CGFloat)calculateHeaderHeightIsModal:(BOOL)isModal + { + UINavigationController *navctr = [self getVisibleNavigationControllerIsModal:isModal]; + +- // If navigation controller doesn't exists (or it is hidden) we want to handle two possible cases. +- // If there's no navigation controller for the modal, we simply don't want to return header height, as modal possibly +- // does not have header and we don't want to count status bar. If there's no navigation controller for the view we +- // just want to return status bar height (if it's hidden, it will simply return 0). ++ // If there's no navigation controller for the modal (or the navigation bar is hidden), we simply don't want to ++ // return header height, as modal possibly does not have header when navigation controller is nil, ++ // and we don't want to count status bar if navigation bar is hidden (inset could be negative). + if (navctr == nil || navctr.isNavigationBarHidden) { +- if (isModal) { +- return 0; +- } else { +- CGSize statusBarSize = [self getStatusBarHeightIsModal:isModal]; +- return MIN(statusBarSize.width, statusBarSize.height); +- } ++ return 0; + } + + CGFloat navbarHeight = navctr.navigationBar.frame.size.height; diff --git a/patches/react-native-vision-camera+4.0.0-beta.13.patch b/patches/react-native-vision-camera+4.0.0-beta.13.patch new file mode 100644 index 000000000000..6a1cd1c74576 --- /dev/null +++ b/patches/react-native-vision-camera+4.0.0-beta.13.patch @@ -0,0 +1,2106 @@ +diff --git a/node_modules/react-native-vision-camera/VisionCamera.podspec b/node_modules/react-native-vision-camera/VisionCamera.podspec +index 3a0e313..357a282 100644 +--- a/node_modules/react-native-vision-camera/VisionCamera.podspec ++++ b/node_modules/react-native-vision-camera/VisionCamera.podspec +@@ -40,6 +40,7 @@ Pod::Spec.new do |s| + # Note how this does not include headers, since those can nameclash. + s.source_files = [ + # Core ++ "ios/VisionCamera.h", + "ios/*.{m,mm,swift}", + "ios/Core/*.{m,mm,swift}", + "ios/Extensions/*.{m,mm,swift}", +@@ -47,6 +48,7 @@ Pod::Spec.new do |s| + "ios/React Utils/*.{m,mm,swift}", + "ios/Types/*.{m,mm,swift}", + "ios/CameraBridge.h", ++ "ios/RNCameraView.h", + + # Frame Processors + hasWorklets ? "ios/Frame Processor/*.{m,mm,swift}" : "", +@@ -66,9 +68,10 @@ Pod::Spec.new do |s| + "ios/**/*.h" + ] + +- s.dependency "React" +- s.dependency "React-Core" +- s.dependency "React-callinvoker" ++ s.pod_target_xcconfig = { ++ "OTHER_SWIFT_FLAGS" => "-DRCT_NEW_ARCH_ENABLED" ++ } ++ install_modules_dependencies(s) + + if hasWorklets + s.dependency "react-native-worklets-core" +diff --git a/node_modules/react-native-vision-camera/android/.editorconfig b/node_modules/react-native-vision-camera/android/.editorconfig +new file mode 100644 +index 0000000..2f08d6d +--- /dev/null ++++ b/node_modules/react-native-vision-camera/android/.editorconfig +@@ -0,0 +1,15 @@ ++[*.{kt,kts}] ++indent_style=space ++indent_size=2 ++continuation_indent_size=4 ++insert_final_newline=true ++max_line_length=140 ++ktlint_code_style=android_studio ++ktlint_standard=enabled ++ktlint_experimental=enabled ++ktlint_standard_filename=disabled # dont require PascalCase filenames ++ktlint_standard_no-wildcard-imports=disabled # allow .* imports ++ktlint_function_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than=5 ++ktlint_function_signature_body_expression_wrapping=multiline ++ij_kotlin_allow_trailing_comma_on_call_site=false ++ij_kotlin_allow_trailing_comma=false +diff --git a/node_modules/react-native-vision-camera/android/.project b/node_modules/react-native-vision-camera/android/.project +new file mode 100644 +index 0000000..0e0a1ba +--- /dev/null ++++ b/node_modules/react-native-vision-camera/android/.project +@@ -0,0 +1,17 @@ ++ ++ ++ android_ ++ Project android_ created by Buildship. ++ ++ ++ ++ ++ org.eclipse.buildship.core.gradleprojectbuilder ++ ++ ++ ++ ++ ++ org.eclipse.buildship.core.gradleprojectnature ++ ++ +diff --git a/node_modules/react-native-vision-camera/android/build.gradle b/node_modules/react-native-vision-camera/android/build.gradle +index 86e6290..eb59c56 100644 +--- a/node_modules/react-native-vision-camera/android/build.gradle ++++ b/node_modules/react-native-vision-camera/android/build.gradle +@@ -129,6 +129,12 @@ android { + sourceSets { + main { + manifest.srcFile androidManifestPath ++ ++ java { ++ if (!isNewArchitectureEnabled()) { ++ srcDirs += 'oldarch/src/main/java' ++ } ++ } + } + } + +diff --git a/node_modules/react-native-vision-camera/android/gradlew b/node_modules/react-native-vision-camera/android/gradlew +new file mode 100755 +index 0000000..1b6c787 +--- /dev/null ++++ b/node_modules/react-native-vision-camera/android/gradlew +@@ -0,0 +1,234 @@ ++#!/bin/sh ++ ++# ++# Copyright © 2015-2021 the original authors. ++# ++# Licensed under the Apache License, Version 2.0 (the "License"); ++# you may not use this file except in compliance with the License. ++# You may obtain a copy of the License at ++# ++# https://www.apache.org/licenses/LICENSE-2.0 ++# ++# Unless required by applicable law or agreed to in writing, software ++# distributed under the License is distributed on an "AS IS" BASIS, ++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++# See the License for the specific language governing permissions and ++# limitations under the License. ++# ++ ++############################################################################## ++# ++# Gradle start up script for POSIX generated by Gradle. ++# ++# Important for running: ++# ++# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is ++# noncompliant, but you have some other compliant shell such as ksh or ++# bash, then to run this script, type that shell name before the whole ++# command line, like: ++# ++# ksh Gradle ++# ++# Busybox and similar reduced shells will NOT work, because this script ++# requires all of these POSIX shell features: ++# * functions; ++# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», ++# «${var#prefix}», «${var%suffix}», and «$( cmd )»; ++# * compound commands having a testable exit status, especially «case»; ++# * various built-in commands including «command», «set», and «ulimit». ++# ++# Important for patching: ++# ++# (2) This script targets any POSIX shell, so it avoids extensions provided ++# by Bash, Ksh, etc; in particular arrays are avoided. ++# ++# The "traditional" practice of packing multiple parameters into a ++# space-separated string is a well documented source of bugs and security ++# problems, so this is (mostly) avoided, by progressively accumulating ++# options in "$@", and eventually passing that to Java. ++# ++# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, ++# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; ++# see the in-line comments for details. ++# ++# There are tweaks for specific operating systems such as AIX, CygWin, ++# Darwin, MinGW, and NonStop. ++# ++# (3) This script is generated from the Groovy template ++# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt ++# within the Gradle project. ++# ++# You can find Gradle at https://github.com/gradle/gradle/. ++# ++############################################################################## ++ ++# Attempt to set APP_HOME ++ ++# Resolve links: $0 may be a link ++app_path=$0 ++ ++# Need this for daisy-chained symlinks. ++while ++ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path ++ [ -h "$app_path" ] ++do ++ ls=$( ls -ld "$app_path" ) ++ link=${ls#*' -> '} ++ case $link in #( ++ /*) app_path=$link ;; #( ++ *) app_path=$APP_HOME$link ;; ++ esac ++done ++ ++APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit ++ ++APP_NAME="Gradle" ++APP_BASE_NAME=${0##*/} ++ ++# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. ++DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' ++ ++# Use the maximum available, or set MAX_FD != -1 to use that value. ++MAX_FD=maximum ++ ++warn () { ++ echo "$*" ++} >&2 ++ ++die () { ++ echo ++ echo "$*" ++ echo ++ exit 1 ++} >&2 ++ ++# OS specific support (must be 'true' or 'false'). ++cygwin=false ++msys=false ++darwin=false ++nonstop=false ++case "$( uname )" in #( ++ CYGWIN* ) cygwin=true ;; #( ++ Darwin* ) darwin=true ;; #( ++ MSYS* | MINGW* ) msys=true ;; #( ++ NONSTOP* ) nonstop=true ;; ++esac ++ ++CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar ++ ++ ++# Determine the Java command to use to start the JVM. ++if [ -n "$JAVA_HOME" ] ; then ++ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then ++ # IBM's JDK on AIX uses strange locations for the executables ++ JAVACMD=$JAVA_HOME/jre/sh/java ++ else ++ JAVACMD=$JAVA_HOME/bin/java ++ fi ++ if [ ! -x "$JAVACMD" ] ; then ++ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME ++ ++Please set the JAVA_HOME variable in your environment to match the ++location of your Java installation." ++ fi ++else ++ JAVACMD=java ++ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. ++ ++Please set the JAVA_HOME variable in your environment to match the ++location of your Java installation." ++fi ++ ++# Increase the maximum file descriptors if we can. ++if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then ++ case $MAX_FD in #( ++ max*) ++ MAX_FD=$( ulimit -H -n ) || ++ warn "Could not query maximum file descriptor limit" ++ esac ++ case $MAX_FD in #( ++ '' | soft) :;; #( ++ *) ++ ulimit -n "$MAX_FD" || ++ warn "Could not set maximum file descriptor limit to $MAX_FD" ++ esac ++fi ++ ++# Collect all arguments for the java command, stacking in reverse order: ++# * args from the command line ++# * the main class name ++# * -classpath ++# * -D...appname settings ++# * --module-path (only if needed) ++# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. ++ ++# For Cygwin or MSYS, switch paths to Windows format before running java ++if "$cygwin" || "$msys" ; then ++ APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) ++ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) ++ ++ JAVACMD=$( cygpath --unix "$JAVACMD" ) ++ ++ # Now convert the arguments - kludge to limit ourselves to /bin/sh ++ for arg do ++ if ++ case $arg in #( ++ -*) false ;; # don't mess with options #( ++ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath ++ [ -e "$t" ] ;; #( ++ *) false ;; ++ esac ++ then ++ arg=$( cygpath --path --ignore --mixed "$arg" ) ++ fi ++ # Roll the args list around exactly as many times as the number of ++ # args, so each arg winds up back in the position where it started, but ++ # possibly modified. ++ # ++ # NB: a `for` loop captures its iteration list before it begins, so ++ # changing the positional parameters here affects neither the number of ++ # iterations, nor the values presented in `arg`. ++ shift # remove old arg ++ set -- "$@" "$arg" # push replacement arg ++ done ++fi ++ ++# Collect all arguments for the java command; ++# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of ++# shell script including quotes and variable substitutions, so put them in ++# double quotes to make sure that they get re-expanded; and ++# * put everything else in single quotes, so that it's not re-expanded. ++ ++set -- \ ++ "-Dorg.gradle.appname=$APP_BASE_NAME" \ ++ -classpath "$CLASSPATH" \ ++ org.gradle.wrapper.GradleWrapperMain \ ++ "$@" ++ ++# Use "xargs" to parse quoted args. ++# ++# With -n1 it outputs one arg per line, with the quotes and backslashes removed. ++# ++# In Bash we could simply go: ++# ++# readarray ARGS < <( xargs -n1 <<<"$var" ) && ++# set -- "${ARGS[@]}" "$@" ++# ++# but POSIX shell has neither arrays nor command substitution, so instead we ++# post-process each arg (as a line of input to sed) to backslash-escape any ++# character that might be a shell metacharacter, then use eval to reverse ++# that process (while maintaining the separation between arguments), and wrap ++# the whole thing up as a single "set" statement. ++# ++# This will of course break if any of these variables contains a newline or ++# an unmatched quote. ++# ++ ++eval "set -- $( ++ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | ++ xargs -n1 | ++ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | ++ tr '\n' ' ' ++ )" '"$@"' ++ ++exec "$JAVACMD" "$@" +diff --git a/node_modules/react-native-vision-camera/android/gradlew.bat b/node_modules/react-native-vision-camera/android/gradlew.bat +new file mode 100644 +index 0000000..107acd3 +--- /dev/null ++++ b/node_modules/react-native-vision-camera/android/gradlew.bat +@@ -0,0 +1,89 @@ ++@rem ++@rem Copyright 2015 the original author or authors. ++@rem ++@rem Licensed under the Apache License, Version 2.0 (the "License"); ++@rem you may not use this file except in compliance with the License. ++@rem You may obtain a copy of the License at ++@rem ++@rem https://www.apache.org/licenses/LICENSE-2.0 ++@rem ++@rem Unless required by applicable law or agreed to in writing, software ++@rem distributed under the License is distributed on an "AS IS" BASIS, ++@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++@rem See the License for the specific language governing permissions and ++@rem limitations under the License. ++@rem ++ ++@if "%DEBUG%" == "" @echo off ++@rem ########################################################################## ++@rem ++@rem Gradle startup script for Windows ++@rem ++@rem ########################################################################## ++ ++@rem Set local scope for the variables with windows NT shell ++if "%OS%"=="Windows_NT" setlocal ++ ++set DIRNAME=%~dp0 ++if "%DIRNAME%" == "" set DIRNAME=. ++set APP_BASE_NAME=%~n0 ++set APP_HOME=%DIRNAME% ++ ++@rem Resolve any "." and ".." in APP_HOME to make it shorter. ++for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi ++ ++@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. ++set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" ++ ++@rem Find java.exe ++if defined JAVA_HOME goto findJavaFromJavaHome ++ ++set JAVA_EXE=java.exe ++%JAVA_EXE% -version >NUL 2>&1 ++if "%ERRORLEVEL%" == "0" goto execute ++ ++echo. ++echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. ++echo. ++echo Please set the JAVA_HOME variable in your environment to match the ++echo location of your Java installation. ++ ++goto fail ++ ++:findJavaFromJavaHome ++set JAVA_HOME=%JAVA_HOME:"=% ++set JAVA_EXE=%JAVA_HOME%/bin/java.exe ++ ++if exist "%JAVA_EXE%" goto execute ++ ++echo. ++echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% ++echo. ++echo Please set the JAVA_HOME variable in your environment to match the ++echo location of your Java installation. ++ ++goto fail ++ ++:execute ++@rem Setup the command line ++ ++set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar ++ ++ ++@rem Execute Gradle ++"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* ++ ++:end ++@rem End local scope for the variables with windows NT shell ++if "%ERRORLEVEL%"=="0" goto mainEnd ++ ++:fail ++rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of ++rem the _cmd.exe /c_ return code! ++if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 ++exit /b 1 ++ ++:mainEnd ++if "%OS%"=="Windows_NT" endlocal ++ ++:omega +diff --git a/node_modules/react-native-vision-camera/android/oldarch/src/main/java/com/facebook/react/viewmanagers/CameraViewManagerDelegate.java b/node_modules/react-native-vision-camera/android/oldarch/src/main/java/com/facebook/react/viewmanagers/CameraViewManagerDelegate.java +new file mode 100644 +index 0000000..afafa8a +--- /dev/null ++++ b/node_modules/react-native-vision-camera/android/oldarch/src/main/java/com/facebook/react/viewmanagers/CameraViewManagerDelegate.java +@@ -0,0 +1,113 @@ ++/** ++* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). ++* ++* Do not edit this file as changes may cause incorrect behavior and will be lost ++* once the code is regenerated. ++* ++* @generated by codegen project: GeneratePropsJavaDelegate.js ++*/ ++ ++package com.facebook.react.viewmanagers; ++ ++import android.view.View; ++import androidx.annotation.Nullable; ++import com.facebook.react.bridge.ReadableMap; ++import com.facebook.react.uimanager.BaseViewManagerDelegate; ++import com.facebook.react.uimanager.BaseViewManagerInterface; ++ ++public class CameraViewManagerDelegate & CameraViewManagerInterface> extends BaseViewManagerDelegate { ++ public CameraViewManagerDelegate(U viewManager) { ++ super(viewManager); ++ } ++ @Override ++ public void setProperty(T view, String propName, @Nullable Object value) { ++ switch (propName) { ++ case "enableGpuBuffers": ++ mViewManager.setEnableGpuBuffers(view, value == null ? false : (boolean) value); ++ break; ++ case "androidPreviewViewType": ++ mViewManager.setAndroidPreviewViewType(view, value == null ? null : (String) value); ++ break; ++ case "codeScannerOptions": ++ mViewManager.setCodeScannerOptions(view, (ReadableMap) value); ++ break; ++ case "cameraId": ++ mViewManager.setCameraId(view, value == null ? null : (String) value); ++ break; ++ case "enableFrameProcessor": ++ mViewManager.setEnableFrameProcessor(view, value == null ? false : (boolean) value); ++ break; ++ case "enableLocation": ++ mViewManager.setEnableLocation(view, value == null ? false : (boolean) value); ++ break; ++ case "enableBufferCompression": ++ mViewManager.setEnableBufferCompression(view, value == null ? false : (boolean) value); ++ break; ++ case "photoQualityBalance": ++ mViewManager.setPhotoQualityBalance(view, value == null ? null : (String) value); ++ break; ++ case "isActive": ++ mViewManager.setIsActive(view, value == null ? false : (boolean) value); ++ break; ++ case "photo": ++ mViewManager.setPhoto(view, value == null ? false : (boolean) value); ++ break; ++ case "video": ++ mViewManager.setVideo(view, value == null ? false : (boolean) value); ++ break; ++ case "audio": ++ mViewManager.setAudio(view, value == null ? false : (boolean) value); ++ break; ++ case "torch": ++ mViewManager.setTorch(view, value == null ? null : (String) value); ++ break; ++ case "zoom": ++ mViewManager.setZoom(view, value == null ? 0f : ((Double) value).doubleValue()); ++ break; ++ case "exposure": ++ mViewManager.setExposure(view, value == null ? 0f : ((Double) value).doubleValue()); ++ break; ++ case "enableZoomGesture": ++ mViewManager.setEnableZoomGesture(view, value == null ? false : (boolean) value); ++ break; ++ case "enableFpsGraph": ++ mViewManager.setEnableFpsGraph(view, value == null ? false : (boolean) value); ++ break; ++ case "resizeMode": ++ mViewManager.setResizeMode(view, value == null ? null : (String) value); ++ break; ++ case "format": ++ mViewManager.setFormat(view, (ReadableMap) value); ++ break; ++ case "pixelFormat": ++ mViewManager.setPixelFormat(view, value == null ? null : (String) value); ++ break; ++ case "fps": ++ mViewManager.setFps(view, value == null ? 0 : ((Double) value).intValue()); ++ break; ++ case "videoHdr": ++ mViewManager.setVideoHdr(view, value == null ? false : (boolean) value); ++ break; ++ case "photoHdr": ++ mViewManager.setPhotoHdr(view, value == null ? false : (boolean) value); ++ break; ++ case "lowLightBoost": ++ mViewManager.setLowLightBoost(view, value == null ? false : (boolean) value); ++ break; ++ case "videoStabilizationMode": ++ mViewManager.setVideoStabilizationMode(view, value == null ? null : (String) value); ++ break; ++ case "enableDepthData": ++ mViewManager.setEnableDepthData(view, value == null ? false : (boolean) value); ++ break; ++ case "enablePortraitEffectsMatteDelivery": ++ mViewManager.setEnablePortraitEffectsMatteDelivery(view, value == null ? false : (boolean) value); ++ break; ++ case "orientation": ++ mViewManager.setOrientation(view, value == null ? null : (String) value); ++ break; ++ default: ++ super.setProperty(view, propName, value); ++ } ++ } ++} +diff --git a/node_modules/react-native-vision-camera/android/oldarch/src/main/java/com/facebook/react/viewmanagers/CameraViewManagerInterface.java b/node_modules/react-native-vision-camera/android/oldarch/src/main/java/com/facebook/react/viewmanagers/CameraViewManagerInterface.java +new file mode 100644 +index 0000000..94079b2 +--- /dev/null ++++ b/node_modules/react-native-vision-camera/android/oldarch/src/main/java/com/facebook/react/viewmanagers/CameraViewManagerInterface.java +@@ -0,0 +1,45 @@ ++/** ++* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). ++* ++* Do not edit this file as changes may cause incorrect behavior and will be lost ++* once the code is regenerated. ++* ++* @generated by codegen project: GeneratePropsJavaInterface.js ++*/ ++ ++package com.facebook.react.viewmanagers; ++ ++import android.view.View; ++import androidx.annotation.Nullable; ++import com.facebook.react.bridge.ReadableMap; ++ ++public interface CameraViewManagerInterface { ++ void setEnableGpuBuffers(T view, boolean value); ++ void setAndroidPreviewViewType(T view, @Nullable String value); ++ void setCodeScannerOptions(T view, @Nullable ReadableMap value); ++ void setCameraId(T view, @Nullable String value); ++ void setEnableFrameProcessor(T view, boolean value); ++ void setEnableLocation(T view, boolean value); ++ void setEnableBufferCompression(T view, boolean value); ++ void setPhotoQualityBalance(T view, @Nullable String value); ++ void setIsActive(T view, boolean value); ++ void setPhoto(T view, boolean value); ++ void setVideo(T view, boolean value); ++ void setAudio(T view, boolean value); ++ void setTorch(T view, @Nullable String value); ++ void setZoom(T view, double value); ++ void setExposure(T view, double value); ++ void setEnableZoomGesture(T view, boolean value); ++ void setEnableFpsGraph(T view, boolean value); ++ void setResizeMode(T view, @Nullable String value); ++ void setFormat(T view, @Nullable ReadableMap value); ++ void setPixelFormat(T view, @Nullable String value); ++ void setFps(T view, int value); ++ void setVideoHdr(T view, boolean value); ++ void setPhotoHdr(T view, boolean value); ++ void setLowLightBoost(T view, boolean value); ++ void setVideoStabilizationMode(T view, @Nullable String value); ++ void setEnableDepthData(T view, boolean value); ++ void setEnablePortraitEffectsMatteDelivery(T view, boolean value); ++ void setOrientation(T view, @Nullable String value); ++} +diff --git a/node_modules/react-native-vision-camera/android/settings.gradle b/node_modules/react-native-vision-camera/android/settings.gradle +new file mode 100644 +index 0000000..56a6c3d +--- /dev/null ++++ b/node_modules/react-native-vision-camera/android/settings.gradle +@@ -0,0 +1,3 @@ ++rootProject.name = 'VisionCamera' ++ ++include ':VisionCamera' +diff --git a/node_modules/react-native-vision-camera/android/src/main/.DS_Store b/node_modules/react-native-vision-camera/android/src/main/.DS_Store +new file mode 100644 +index 0000000..63b728b +Binary files /dev/null and b/node_modules/react-native-vision-camera/android/src/main/.DS_Store differ +diff --git a/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraDevicesManager.kt b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraDevicesManager.kt +index a7c8358..a935ef6 100644 +--- a/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraDevicesManager.kt ++++ b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraDevicesManager.kt +@@ -20,7 +20,7 @@ import kotlinx.coroutines.launch + + class CameraDevicesManager(private val reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { + companion object { +- private const val TAG = "CameraDevices" ++ public const val TAG = "CameraDevices" + } + private val executor = CameraQueues.cameraExecutor + private val coroutineScope = CoroutineScope(executor.asCoroutineDispatcher()) +diff --git a/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraPackage.kt b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraPackage.kt +index 25e1f55..33b9dd3 100644 +--- a/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraPackage.kt ++++ b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraPackage.kt +@@ -1,11 +1,14 @@ + package com.mrousavy.camera + +-import com.facebook.react.ReactPackage ++import com.facebook.react.TurboReactPackage + import com.facebook.react.bridge.NativeModule + import com.facebook.react.bridge.ReactApplicationContext ++import com.facebook.react.module.model.ReactModuleInfo ++import com.facebook.react.module.model.ReactModuleInfoProvider + import com.facebook.react.uimanager.ViewManager + +-class CameraPackage : ReactPackage { ++ ++class CameraPackage : TurboReactPackage() { + override fun createNativeModules(reactContext: ReactApplicationContext): List = + listOf( + CameraViewModule(reactContext), +@@ -13,4 +16,39 @@ class CameraPackage : ReactPackage { + ) + + override fun createViewManagers(reactContext: ReactApplicationContext): List> = listOf(CameraViewManager()) ++ ++ override fun getModule(name: String, context: ReactApplicationContext): NativeModule? { ++ return when (name) { ++ CameraViewModule.TAG -> CameraViewModule(context) ++ CameraDevicesManager.TAG -> CameraDevicesManager(context) ++ else -> null ++ } ++ } ++ ++ override fun getReactModuleInfoProvider(): ReactModuleInfoProvider { ++ return ReactModuleInfoProvider { ++ val moduleInfos: MutableMap = HashMap() ++ ++ moduleInfos[CameraViewModule.TAG] = ReactModuleInfo( ++ CameraViewModule.TAG, ++ CameraViewModule.TAG, ++ false, // canOverrideExistingModule ++ true, // needsEagerInit ++ true, // hasConstants ++ false, // isCxxModule ++ false // isTurboModule ++ ) ++ ++ moduleInfos[CameraDevicesManager.TAG] = ReactModuleInfo( ++ CameraDevicesManager.TAG, ++ CameraDevicesManager.TAG, ++ false, // canOverrideExistingModule ++ true, // needsEagerInit ++ true, // hasConstants ++ false, // isCxxModule ++ false // isTurboModule ++ ) ++ moduleInfos ++ } ++ } + } +diff --git a/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraViewManager.kt b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraViewManager.kt +index f2b284c..e348e5c 100644 +--- a/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraViewManager.kt ++++ b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraViewManager.kt +@@ -4,7 +4,10 @@ import com.facebook.react.bridge.ReadableMap + import com.facebook.react.common.MapBuilder + import com.facebook.react.uimanager.ThemedReactContext + import com.facebook.react.uimanager.ViewGroupManager ++import com.facebook.react.uimanager.ViewManagerDelegate + import com.facebook.react.uimanager.annotations.ReactProp ++import com.facebook.react.viewmanagers.CameraViewManagerDelegate ++import com.facebook.react.viewmanagers.CameraViewManagerInterface + import com.mrousavy.camera.types.CameraDeviceFormat + import com.mrousavy.camera.types.CodeScannerOptions + import com.mrousavy.camera.types.Orientation +@@ -16,10 +19,19 @@ import com.mrousavy.camera.types.Torch + import com.mrousavy.camera.types.VideoStabilizationMode + + @Suppress("unused") +-class CameraViewManager : ViewGroupManager() { ++class CameraViewManager : ViewGroupManager(), CameraViewManagerInterface { + companion object { + const val TAG = "CameraView" + } ++ ++ private val mDelegate: ViewManagerDelegate ++ ++ init { ++ mDelegate = CameraViewManagerDelegate(this) ++ } ++ ++ override fun getDelegate() = mDelegate ++ + public override fun createViewInstance(context: ThemedReactContext): CameraView = CameraView(context) + + override fun onAfterUpdateTransaction(view: CameraView) { +@@ -46,37 +58,37 @@ class CameraViewManager : ViewGroupManager() { + } + + @ReactProp(name = "cameraId") +- fun setCameraId(view: CameraView, cameraId: String) { ++ override fun setCameraId(view: CameraView, cameraId: String?) { + view.cameraId = cameraId + } + + @ReactProp(name = "photo") +- fun setPhoto(view: CameraView, photo: Boolean) { ++ override fun setPhoto(view: CameraView, photo: Boolean) { + view.photo = photo + } + + @ReactProp(name = "video") +- fun setVideo(view: CameraView, video: Boolean) { ++ override fun setVideo(view: CameraView, video: Boolean) { + view.video = video + } + + @ReactProp(name = "audio") +- fun setAudio(view: CameraView, audio: Boolean) { ++ override fun setAudio(view: CameraView, audio: Boolean) { + view.audio = audio + } + + @ReactProp(name = "enableLocation") +- fun setEnableLocation(view: CameraView, enableLocation: Boolean) { ++ override fun setEnableLocation(view: CameraView, enableLocation: Boolean) { + view.enableLocation = enableLocation + } + + @ReactProp(name = "enableFrameProcessor") +- fun setEnableFrameProcessor(view: CameraView, enableFrameProcessor: Boolean) { ++ override fun setEnableFrameProcessor(view: CameraView, enableFrameProcessor: Boolean) { + view.enableFrameProcessor = enableFrameProcessor + } + + @ReactProp(name = "pixelFormat") +- fun setPixelFormat(view: CameraView, pixelFormat: String?) { ++ override fun setPixelFormat(view: CameraView, pixelFormat: String?) { + if (pixelFormat != null) { + val newPixelFormat = PixelFormat.fromUnionValue(pixelFormat) + view.pixelFormat = newPixelFormat +@@ -86,27 +98,27 @@ class CameraViewManager : ViewGroupManager() { + } + + @ReactProp(name = "enableDepthData") +- fun setEnableDepthData(view: CameraView, enableDepthData: Boolean) { ++ override fun setEnableDepthData(view: CameraView, enableDepthData: Boolean) { + view.enableDepthData = enableDepthData + } + + @ReactProp(name = "enableZoomGesture") +- fun setEnableZoomGesture(view: CameraView, enableZoomGesture: Boolean) { ++ override fun setEnableZoomGesture(view: CameraView, enableZoomGesture: Boolean) { + view.enableZoomGesture = enableZoomGesture + } + + @ReactProp(name = "enableFpsGraph") +- fun setEnableFpsGraph(view: CameraView, enableFpsGraph: Boolean) { ++ override fun setEnableFpsGraph(view: CameraView, enableFpsGraph: Boolean) { + view.enableFpsGraph = enableFpsGraph + } + + @ReactProp(name = "enableGpuBuffers") +- fun setEnableGpuBuffers(view: CameraView, enableGpuBuffers: Boolean) { ++ override fun setEnableGpuBuffers(view: CameraView, enableGpuBuffers: Boolean) { + view.enableGpuBuffers = enableGpuBuffers + } + + @ReactProp(name = "videoStabilizationMode") +- fun setVideoStabilizationMode(view: CameraView, videoStabilizationMode: String?) { ++ override fun setVideoStabilizationMode(view: CameraView, videoStabilizationMode: String?) { + if (videoStabilizationMode != null) { + val newMode = VideoStabilizationMode.fromUnionValue(videoStabilizationMode) + view.videoStabilizationMode = newMode +@@ -116,12 +128,12 @@ class CameraViewManager : ViewGroupManager() { + } + + @ReactProp(name = "enablePortraitEffectsMatteDelivery") +- fun setEnablePortraitEffectsMatteDelivery(view: CameraView, enablePortraitEffectsMatteDelivery: Boolean) { ++ override fun setEnablePortraitEffectsMatteDelivery(view: CameraView, enablePortraitEffectsMatteDelivery: Boolean) { + view.enablePortraitEffectsMatteDelivery = enablePortraitEffectsMatteDelivery + } + + @ReactProp(name = "format") +- fun setFormat(view: CameraView, format: ReadableMap?) { ++ override fun setFormat(view: CameraView, format: ReadableMap?) { + if (format != null) { + val newFormat = CameraDeviceFormat.fromJSValue(format) + view.format = newFormat +@@ -131,7 +143,7 @@ class CameraViewManager : ViewGroupManager() { + } + + @ReactProp(name = "resizeMode") +- fun setResizeMode(view: CameraView, resizeMode: String?) { ++ override fun setResizeMode(view: CameraView, resizeMode: String?) { + if (resizeMode != null) { + val newMode = ResizeMode.fromUnionValue(resizeMode) + view.resizeMode = newMode +@@ -141,7 +153,7 @@ class CameraViewManager : ViewGroupManager() { + } + + @ReactProp(name = "androidPreviewViewType") +- fun setAndroidPreviewViewType(view: CameraView, androidPreviewViewType: String?) { ++ override fun setAndroidPreviewViewType(view: CameraView, androidPreviewViewType: String?) { + if (androidPreviewViewType != null) { + val newMode = PreviewViewType.fromUnionValue(androidPreviewViewType) + view.androidPreviewViewType = newMode +@@ -154,17 +166,17 @@ class CameraViewManager : ViewGroupManager() { + // We're treating -1 as "null" here, because when I make the fps parameter + // of type "Int?" the react bridge throws an error. + @ReactProp(name = "fps", defaultInt = -1) +- fun setFps(view: CameraView, fps: Int) { ++ override fun setFps(view: CameraView, fps: Int) { + view.fps = if (fps > 0) fps else null + } + + @ReactProp(name = "photoHdr") +- fun setPhotoHdr(view: CameraView, photoHdr: Boolean) { ++ override fun setPhotoHdr(view: CameraView, photoHdr: Boolean) { + view.photoHdr = photoHdr + } + + @ReactProp(name = "photoQualityBalance") +- fun setPhotoQualityBalance(view: CameraView, photoQualityBalance: String?) { ++ override fun setPhotoQualityBalance(view: CameraView, photoQualityBalance: String?) { + if (photoQualityBalance != null) { + val newMode = QualityBalance.fromUnionValue(photoQualityBalance) + view.photoQualityBalance = newMode +@@ -174,22 +186,22 @@ class CameraViewManager : ViewGroupManager() { + } + + @ReactProp(name = "videoHdr") +- fun setVideoHdr(view: CameraView, videoHdr: Boolean) { ++ override fun setVideoHdr(view: CameraView, videoHdr: Boolean) { + view.videoHdr = videoHdr + } + + @ReactProp(name = "lowLightBoost") +- fun setLowLightBoost(view: CameraView, lowLightBoost: Boolean) { ++ override fun setLowLightBoost(view: CameraView, lowLightBoost: Boolean) { + view.lowLightBoost = lowLightBoost + } + + @ReactProp(name = "isActive") +- fun setIsActive(view: CameraView, isActive: Boolean) { ++ override fun setIsActive(view: CameraView, isActive: Boolean) { + view.isActive = isActive + } + + @ReactProp(name = "torch") +- fun setTorch(view: CameraView, torch: String?) { ++ override fun setTorch(view: CameraView, torch: String?) { + if (torch != null) { + val newMode = Torch.fromUnionValue(torch) + view.torch = newMode +@@ -199,17 +211,17 @@ class CameraViewManager : ViewGroupManager() { + } + + @ReactProp(name = "zoom") +- fun setZoom(view: CameraView, zoom: Double) { ++ override fun setZoom(view: CameraView, zoom: Double) { + view.zoom = zoom.toFloat() + } + + @ReactProp(name = "exposure") +- fun setExposure(view: CameraView, exposure: Double) { ++ override fun setExposure(view: CameraView, exposure: Double) { + view.exposure = exposure + } + + @ReactProp(name = "orientation") +- fun setOrientation(view: CameraView, orientation: String?) { ++ override fun setOrientation(view: CameraView, orientation: String?) { + if (orientation != null) { + val newMode = Orientation.fromUnionValue(orientation) + view.orientation = newMode +@@ -219,7 +231,7 @@ class CameraViewManager : ViewGroupManager() { + } + + @ReactProp(name = "codeScannerOptions") +- fun setCodeScanner(view: CameraView, codeScannerOptions: ReadableMap?) { ++ override fun setCodeScannerOptions(view: CameraView, codeScannerOptions: ReadableMap?) { + if (codeScannerOptions != null) { + val newCodeScannerOptions = CodeScannerOptions.fromJSValue(codeScannerOptions) + view.codeScannerOptions = newCodeScannerOptions +@@ -227,4 +239,8 @@ class CameraViewManager : ViewGroupManager() { + view.codeScannerOptions = null + } + } ++ ++ override fun setEnableBufferCompression(view: CameraView?, value: Boolean) { ++ // ios only ++ } + } +diff --git a/node_modules/react-native-vision-camera/ios/.swift-version b/node_modules/react-native-vision-camera/ios/.swift-version +new file mode 100644 +index 0000000..ef425ca +--- /dev/null ++++ b/node_modules/react-native-vision-camera/ios/.swift-version +@@ -0,0 +1 @@ ++5.2 +diff --git a/node_modules/react-native-vision-camera/ios/.swiftformat b/node_modules/react-native-vision-camera/ios/.swiftformat +new file mode 100644 +index 0000000..95e71c1 +--- /dev/null ++++ b/node_modules/react-native-vision-camera/ios/.swiftformat +@@ -0,0 +1,12 @@ ++--allman false ++--indent 2 ++--exclude Pods,Generated ++ ++--disable andOperator ++--disable redundantReturn ++--disable wrapMultilineStatementBraces ++--disable organizeDeclarations ++ ++--enable markTypes ++ ++--enable isEmpty +diff --git a/node_modules/react-native-vision-camera/ios/.swiftlint.yml b/node_modules/react-native-vision-camera/ios/.swiftlint.yml +new file mode 100644 +index 0000000..6999c33 +--- /dev/null ++++ b/node_modules/react-native-vision-camera/ios/.swiftlint.yml +@@ -0,0 +1,52 @@ ++disabled_rules: ++ - identifier_name ++ - trailing_comma ++ - todo ++ - type_body_length ++ - cyclomatic_complexity ++ - function_body_length ++ - for_where ++opt_in_rules: ++ - contains_over_filter_count ++ - contains_over_filter_is_empty ++ - contains_over_first_not_nil ++ - contains_over_range_nil_comparison ++ - empty_collection_literal ++ - empty_count ++ - empty_string ++ - first_where ++ - flatmap_over_map_reduce ++ - last_where ++ - reduce_boolean ++ - reduce_into ++ - yoda_condition ++ - vertical_whitespace_opening_braces ++ - vertical_whitespace_closing_braces ++ - vertical_parameter_alignment_on_call ++ - untyped_error_in_catch ++ - unowned_variable_capture ++ - unavailable_function ++ - switch_case_on_newline ++ - static_operator ++ - strict_fileprivate ++ - sorted_imports ++ - sorted_first_last ++ - required_enum_case ++ - redundant_type_annotation ++ - redundant_nil_coalescing ++ - attributes ++ - convenience_type ++analyzer_rules: ++ - explicit_self ++ - unused_declaration ++ - unused_import ++ ++excluded: # paths to ignore during linting. Takes precedence over `included`. ++ - Pods ++ ++# Adjust rule numbers ++line_length: 160 ++file_length: 500 ++ ++# reporter type (xcode, json, csv, checkstyle, codeclimate, junit, html, emoji, sonarqube, markdown, github-actions-logging) ++reporter: "xcode" +diff --git a/node_modules/react-native-vision-camera/ios/CameraView.swift b/node_modules/react-native-vision-camera/ios/CameraView.swift +index 1aca0c6..cbb4849 100644 +--- a/node_modules/react-native-vision-camera/ios/CameraView.swift ++++ b/node_modules/react-native-vision-camera/ios/CameraView.swift +@@ -23,39 +23,42 @@ import UIKit + public final class CameraView: UIView, CameraSessionDelegate { + // pragma MARK: React Properties + // props that require reconfiguring +- @objc var cameraId: NSString? +- @objc var enableDepthData = false +- @objc var enablePortraitEffectsMatteDelivery = false +- @objc var enableBufferCompression = false ++ @objc public var cameraId: NSString? ++ @objc public var enableDepthData = false ++ @objc public var enablePortraitEffectsMatteDelivery = false ++ @objc public var enableBufferCompression = false + // use cases +- @objc var photo = false +- @objc var video = false +- @objc var audio = false +- @objc var enableFrameProcessor = false +- @objc var codeScannerOptions: NSDictionary? +- @objc var pixelFormat: NSString? +- @objc var enableLocation = false ++ @objc public var photo = false ++ @objc public var video = false ++ @objc public var audio = false ++ @objc public var enableFrameProcessor = false ++ @objc public var codeScannerOptions: NSDictionary? ++ @objc public var pixelFormat: NSString? ++ @objc public var enableLocation = false + // props that require format reconfiguring +- @objc var format: NSDictionary? +- @objc var fps: NSNumber? +- @objc var videoHdr = false +- @objc var photoHdr = false +- @objc var photoQualityBalance: NSString? +- @objc var lowLightBoost = false +- @objc var orientation: NSString? ++ @objc public var format: NSDictionary? ++ @objc public var fps: NSNumber? ++ @objc public var videoHdr = false ++ @objc public var photoHdr = false ++ @objc public var photoQualityBalance: NSString? ++ @objc public var lowLightBoost = false ++ @objc public var orientation: NSString? + // other props +- @objc var isActive = false +- @objc var torch = "off" +- @objc var zoom: NSNumber = 1.0 // in "factor" +- @objc var exposure: NSNumber = 1.0 +- @objc var enableFpsGraph = false +- @objc var videoStabilizationMode: NSString? +- @objc var resizeMode: NSString = "cover" { ++ @objc public var isActive = false ++ @objc public var torch = "off" ++ @objc public var zoom: NSNumber = 1.0 // in "factor" ++ @objc public var exposure: NSNumber = 1.0 ++ @objc public var enableFpsGraph = false ++ @objc public var videoStabilizationMode: NSString? ++ @objc public var resizeMode: NSString = "cover" { + didSet { + let parsed = try? ResizeMode(jsValue: resizeMode as String) + previewView.resizeMode = parsed ?? .cover + } + } ++#if RCT_NEW_ARCH_ENABLED ++ @objc public var delegate: RNCameraViewDirectEventDelegate? ++#else + + // events + @objc var onInitialized: RCTDirectEventBlock? +@@ -65,8 +68,9 @@ public final class CameraView: UIView, CameraSessionDelegate { + @objc var onShutter: RCTDirectEventBlock? + @objc var onViewReady: RCTDirectEventBlock? + @objc var onCodeScanned: RCTDirectEventBlock? ++#endif + // zoom +- @objc var enableZoomGesture = false { ++ @objc public var enableZoomGesture = false { + didSet { + if enableZoomGesture { + addPinchGestureRecognizer() +@@ -117,7 +121,14 @@ public final class CameraView: UIView, CameraSessionDelegate { + if newSuperview != nil { + if !isMounted { + isMounted = true +- onViewReady?(nil) ++#if RCT_NEW_ARCH_ENABLED ++ guard let delegate = delegate else { ++ return ++ } ++ delegate.onViewReady() ++#else ++ onViewReady?(nil) ++#endif + } + } + } +@@ -287,10 +298,6 @@ public final class CameraView: UIView, CameraSessionDelegate { + + func onError(_ error: CameraError) { + ReactLogger.log(level: .error, message: "Invoking onError(): \(error.message)") +- guard let onError = onError else { +- return +- } +- + var causeDictionary: [String: Any]? + if case let .unknown(_, cause) = error, + let cause = cause { +@@ -301,44 +308,86 @@ public final class CameraView: UIView, CameraSessionDelegate { + "details": cause.userInfo, + ] + } ++#if RCT_NEW_ARCH_ENABLED ++ guard let delegate = delegate else { ++ return ++ } ++ delegate.onError(error:[ ++ "code": error.code, ++ "message": error.message, ++ "cause": causeDictionary ?? NSNull(), ++ ]) ++#else ++guard let onError = onError else { return } + onError([ + "code": error.code, + "message": error.message, + "cause": causeDictionary ?? NSNull(), + ]) ++#endif + } + + func onSessionInitialized() { + ReactLogger.log(level: .info, message: "Camera initialized!") ++#if RCT_NEW_ARCH_ENABLED ++ guard let delegate = delegate else { ++ return ++ } ++ delegate.onInitialized() ++#else + guard let onInitialized = onInitialized else { + return + } + onInitialized([:]) ++#endif + } + + func onCameraStarted() { + ReactLogger.log(level: .info, message: "Camera started!") ++#if RCT_NEW_ARCH_ENABLED ++ guard let delegate = delegate else { ++ return ++ } ++ delegate.onStarted() ++#else + guard let onStarted = onStarted else { + return + } + onStarted([:]) ++#endif + } + + func onCameraStopped() { + ReactLogger.log(level: .info, message: "Camera stopped!") ++#if RCT_NEW_ARCH_ENABLED ++ guard let delegate = delegate else { ++ return ++ } ++ delegate.onStopped() ++#else + guard let onStopped = onStopped else { + return + } + onStopped([:]) ++#endif + } + + func onCaptureShutter(shutterType: ShutterType) { ++#if RCT_NEW_ARCH_ENABLED ++ guard let delegate = delegate else { ++ return ++ } ++ delegate.onShutter(message:[ ++ "type": shutterType.jsValue, ++ ]) ++#else + guard let onShutter = onShutter else { + return + } + onShutter([ + "type": shutterType.jsValue, + ]) ++#endif + } + + func onFrame(sampleBuffer: CMSampleBuffer) { +@@ -365,6 +414,15 @@ public final class CameraView: UIView, CameraSessionDelegate { + } + + func onCodeScanned(codes: [CameraSession.Code], scannerFrame: CameraSession.CodeScannerFrame) { ++#if RCT_NEW_ARCH_ENABLED ++ guard let delegate = delegate else { ++ return ++ } ++ delegate.onCodeScanned(message:[ ++ "codes": codes.map { $0.toJSValue() }, ++ "frame": scannerFrame.toJSValue(), ++ ]) ++#else + guard let onCodeScanned = onCodeScanned else { + return + } +@@ -372,6 +430,7 @@ public final class CameraView: UIView, CameraSessionDelegate { + "codes": codes.map { $0.toJSValue() }, + "frame": scannerFrame.toJSValue(), + ]) ++#endif + } + + /** +@@ -396,3 +455,13 @@ public final class CameraView: UIView, CameraSessionDelegate { + } + } + } ++ ++@objc public protocol RNCameraViewDirectEventDelegate: AnyObject { //TODO: Move to a separate file ++ func onInitialized() ++ func onError(error: NSDictionary) ++ func onViewReady() ++ func onStarted() ++ func onStopped() ++ func onShutter(message: NSDictionary) ++ func onCodeScanned(message: NSDictionary) ++} +diff --git a/node_modules/react-native-vision-camera/ios/CameraViewManager.swift b/node_modules/react-native-vision-camera/ios/CameraViewManager.swift +index ecfcf3d..4b2c201 100644 +--- a/node_modules/react-native-vision-camera/ios/CameraViewManager.swift ++++ b/node_modules/react-native-vision-camera/ios/CameraViewManager.swift +@@ -141,7 +141,8 @@ final class CameraViewManager: RCTViewManager { + + private func getCameraView(withTag tag: NSNumber) -> CameraView { + // swiftlint:disable force_cast +- return bridge.uiManager.view(forReactTag: tag) as! CameraView ++ let cameraView = bridge.uiManager.view(forReactTag: tag) ++ return ((cameraView?.isKind(of: CameraView.self))! ? cameraView : cameraView?.value(forKey: "contentView") as? UIView) as! CameraView + // swiftlint:enable force_cast + } + } +diff --git a/node_modules/react-native-vision-camera/ios/RNCameraView.h b/node_modules/react-native-vision-camera/ios/RNCameraView.h +new file mode 100644 +index 0000000..46c2c2c +--- /dev/null ++++ b/node_modules/react-native-vision-camera/ios/RNCameraView.h +@@ -0,0 +1,14 @@ ++// This guard prevent this file to be compiled in the old architecture. ++#ifdef RCT_NEW_ARCH_ENABLED ++#import ++#import ++ ++ ++NS_ASSUME_NONNULL_BEGIN ++ ++@interface RNCameraView : RCTViewComponentView ++@end ++ ++NS_ASSUME_NONNULL_END ++ ++#endif /* RCT_NEW_ARCH_ENABLED */ +diff --git a/node_modules/react-native-vision-camera/ios/RNCameraView.mm b/node_modules/react-native-vision-camera/ios/RNCameraView.mm +new file mode 100644 +index 0000000..63fb00f +--- /dev/null ++++ b/node_modules/react-native-vision-camera/ios/RNCameraView.mm +@@ -0,0 +1,373 @@ ++// This guard prevent the code from being compiled in the old architecture ++#ifdef RCT_NEW_ARCH_ENABLED ++//#import "RNCameraView.h" ++#import ++ ++#import ++#import ++#import ++#import ++ ++#import "RCTFabricComponentsPlugins.h" ++#import ++#import ++#import ++#import ++#import "VisionCamera-Swift.h" ++ ++@interface RNCameraView : RCTViewComponentView ++@end ++ ++ ++using namespace facebook::react; ++ ++@implementation RNCameraView { ++ CameraView * _view; ++} ++ +++ (ComponentDescriptorProvider)componentDescriptorProvider ++{ ++ return concreteComponentDescriptorProvider(); ++} ++ ++- (instancetype)initWithFrame:(CGRect)frame ++{ ++ self = [super initWithFrame:frame]; ++if (self) { ++ static const auto defaultProps = std::make_shared(); ++ _props = defaultProps; ++ ++ //The remaining part of the initializer is standard Objective-C code to create views and layout them with AutoLayout. Here we can change whatever we want to. ++ _view = [[CameraView alloc] init]; ++ _view.delegate = self; ++ ++ self.contentView = _view; ++} ++ ++return self; ++} ++ ++// why we need this func -> https://reactnative.dev/docs/next/the-new-architecture/pillars-fabric-components#write-the-native-ios-code ++- (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const &)oldProps ++{ ++ const auto &newViewProps = *std::static_pointer_cast(props); ++ const auto &oldViewProps = *std::static_pointer_cast(_props); ++ ++ NSMutableArray* changedProps = [[NSMutableArray alloc] init]; ++ ++ if(oldViewProps.isActive != newViewProps.isActive){ ++ _view.isActive = newViewProps.isActive; ++ [changedProps addObject:@"isActive"]; ++ } ++ if(oldViewProps.cameraId != newViewProps.cameraId){ ++ _view.cameraId = RCTNSStringFromString(newViewProps.cameraId); ++ [changedProps addObject:@"cameraId"]; ++ } ++ if(oldViewProps.photoQualityBalance != newViewProps.photoQualityBalance){ ++ _view.photoQualityBalance = RCTNSStringFromString(newViewProps.photoQualityBalance); ++ [changedProps addObject:@"photoQualityBalance"]; ++ } ++ if(oldViewProps.enableDepthData != newViewProps.enableDepthData){ ++ _view.enableDepthData = newViewProps.enableDepthData; ++ [changedProps addObject:@"enableDepthData"]; ++ } ++ if(oldViewProps.enablePortraitEffectsMatteDelivery != newViewProps.enablePortraitEffectsMatteDelivery){ ++ _view.enablePortraitEffectsMatteDelivery = newViewProps.enablePortraitEffectsMatteDelivery; ++ [changedProps addObject:@"enablePortraitEffectsMatteDelivery"]; ++ } ++ if(oldViewProps.photo != newViewProps.photo){ ++ _view.photo = [NSNumber numberWithBool:newViewProps.photo]; ++ [changedProps addObject:@"photo"]; ++ } ++ if(oldViewProps.video != newViewProps.video){ ++ _view.video = [NSNumber numberWithBool:newViewProps.video]; ++ [changedProps addObject:@"video"]; ++ } ++ if(oldViewProps.audio != newViewProps.audio){ ++ _view.audio = [NSNumber numberWithBool:newViewProps.audio]; ++ [changedProps addObject:@"audio"]; ++ } ++ if(oldViewProps.enableFrameProcessor != newViewProps.enableFrameProcessor){ ++ _view.enableFrameProcessor = newViewProps.enableFrameProcessor; ++ [changedProps addObject:@"enableFrameProcessor"]; ++ } ++ if(oldViewProps.enableLocation != newViewProps.enableLocation){ ++ _view.enableLocation = newViewProps.enableLocation; ++ [changedProps addObject:@"enableLocation"]; ++ } ++ if(oldViewProps.enableBufferCompression != newViewProps.enableBufferCompression){ ++ _view.enableBufferCompression = newViewProps.enableBufferCompression; ++ [changedProps addObject:@"enableBufferCompression"]; ++ } ++ if(oldViewProps.fps != newViewProps.fps){ ++ _view.fps = [NSNumber numberWithInt:newViewProps.fps]; ++ [changedProps addObject:@"fps"]; ++ } ++ if(oldViewProps.videoHdr != newViewProps.videoHdr){ ++ _view.videoHdr = newViewProps.videoHdr; ++ [changedProps addObject:@"videoHdr"]; ++ } ++ if(oldViewProps.photoHdr != newViewProps.photoHdr){ ++ _view.photoHdr = newViewProps.photoHdr; ++ [changedProps addObject:@"photoHdr"]; ++ } ++ if(oldViewProps.lowLightBoost != newViewProps.lowLightBoost){ ++ _view.lowLightBoost = newViewProps.lowLightBoost; ++ [changedProps addObject:@"lowLightBoost"]; ++ } ++ if(oldViewProps.videoStabilizationMode != newViewProps.videoStabilizationMode){ ++ _view.videoStabilizationMode = RCTNSStringFromString(newViewProps.videoStabilizationMode); ++ [changedProps addObject:@"videoStabilizationMode"]; ++ } ++ if(oldViewProps.torch != newViewProps.torch){ ++ _view.torch = RCTNSStringFromString(newViewProps.torch); ++ [changedProps addObject:@"torch"]; ++ } ++ if(oldViewProps.orientation != newViewProps.orientation){ ++ _view.orientation = RCTNSStringFromString(newViewProps.orientation); ++ [changedProps addObject:@"orientation"]; ++ } ++ if(oldViewProps.resizeMode != newViewProps.resizeMode){ ++ _view.resizeMode = RCTNSStringFromString(newViewProps.resizeMode); ++ [changedProps addObject:@"resizeMode"]; ++ } ++ if(oldViewProps.pixelFormat != newViewProps.pixelFormat){ ++ _view.pixelFormat = RCTNSStringFromString(newViewProps.pixelFormat); ++ [changedProps addObject:@"pixelFormat"]; ++ } ++ if(oldViewProps.zoom != newViewProps.zoom){ ++ _view.zoom = [NSNumber numberWithDouble:newViewProps.zoom]; ++ [changedProps addObject:@"zoom"]; ++ } ++ if(oldViewProps.exposure != newViewProps.exposure){ ++ _view.exposure = [NSNumber numberWithDouble:newViewProps.exposure]; ++ [changedProps addObject:@"exposure"]; ++ } ++ if(oldViewProps.enableZoomGesture != newViewProps.enableZoomGesture){ ++ _view.enableZoomGesture = newViewProps.enableZoomGesture; ++ [changedProps addObject:@"enableZoomGesture"]; ++ } ++ if(oldViewProps.enableFpsGraph != newViewProps.enableFpsGraph){ ++ _view.enableFpsGraph = newViewProps.enableFpsGraph; ++ [changedProps addObject:@"enableFpsGraph"]; ++ } ++ ++ ++ if(_view.format == nil){ ++ _view.format =[ [NSMutableDictionary alloc] init]; ++ } ++ ++ ++ //Checking format props, TODO: find cleaner way to do it ++ if(oldViewProps.format.supportsDepthCapture != newViewProps.format.supportsDepthCapture){ ++ NSNumber* supportsDepthCapture = newViewProps.format.supportsDepthCapture ? @1 : @0; ++ [_view.format setValue:supportsDepthCapture forKey:@"supportsDepthCapture"]; ++ [changedProps addObject:@"format"]; ++ } ++ if(oldViewProps.format.autoFocusSystem != newViewProps.format.autoFocusSystem){ ++ [_view.format setValue:RCTNSStringFromString(newViewProps.format.autoFocusSystem) forKey:@"autoFocusSystem"]; ++ [changedProps addObject:@"format"]; ++ } ++ if(oldViewProps.format.pixelFormats.size() != newViewProps.format.pixelFormats.size()){ ++ NSMutableArray* newPixelFormats = [[NSMutableArray alloc] init]; ++ for(int i = 0; i < newViewProps.format.pixelFormats.size(); i++){ ++ [newPixelFormats addObject:RCTNSStringFromString(newViewProps.format.pixelFormats.at(i))]; ++ } ++ [_view.format setValue:newPixelFormats forKey:@"pixelFormats"]; ++ [changedProps addObject:@"format"]; ++ } ++ ++ if(oldViewProps.format.videoStabilizationModes.size() != newViewProps.format.videoStabilizationModes.size()){ ++ NSMutableArray* newVideoStabilizationModes = [[NSMutableArray alloc] init]; ++ for(int i = 0; i < newViewProps.format.videoStabilizationModes.size(); i++){ ++ [newVideoStabilizationModes addObject:RCTNSStringFromString(newViewProps.format.videoStabilizationModes.at(i))]; ++ } ++ [_view.format setValue:newVideoStabilizationModes forKey:@"videoStabilizationModes"]; ++ [changedProps addObject:@"format"]; ++ } ++ ++ if(oldViewProps.format.photoHeight != newViewProps.format.photoHeight){ ++ [_view.format setValue:[NSNumber numberWithDouble:newViewProps.format.photoHeight] forKey:@"photoHeight"]; ++ [changedProps addObject:@"format"]; ++ } ++ if(oldViewProps.format.photoWidth != newViewProps.format.photoWidth){ ++ [_view.format setValue:[NSNumber numberWithDouble:newViewProps.format.photoWidth] forKey:@"photoWidth"]; ++ [changedProps addObject:@"format"]; ++ } ++ if(oldViewProps.format.videoHeight != newViewProps.format.videoHeight){ ++ [_view.format setValue:[NSNumber numberWithDouble:newViewProps.format.videoHeight] forKey:@"videoHeight"]; ++ [changedProps addObject:@"format"]; ++ } ++ if(oldViewProps.format.videoWidth != newViewProps.format.videoWidth){ ++ [_view.format setValue:[NSNumber numberWithDouble:newViewProps.format.videoWidth] forKey:@"videoWidth"]; ++ [changedProps addObject:@"format"]; ++ } ++ if(oldViewProps.format.maxISO != newViewProps.format.maxISO){ ++ [_view.format setValue:[NSNumber numberWithDouble:newViewProps.format.maxISO] forKey:@"maxISO"]; ++ [changedProps addObject:@"format"]; ++ } ++ if(oldViewProps.format.minISO != newViewProps.format.minISO){ ++ [_view.format setValue:[NSNumber numberWithDouble:newViewProps.format.minISO] forKey:@"minISO"]; ++ [changedProps addObject:@"format"]; ++ } ++ if(oldViewProps.format.maxFps != newViewProps.format.maxFps){ ++ [_view.format setValue:[NSNumber numberWithDouble:newViewProps.format.maxFps] forKey:@"maxFps"]; ++ [changedProps addObject:@"format"]; ++ } ++ if(oldViewProps.format.minFps != newViewProps.format.minFps){ ++ [_view.format setValue:[NSNumber numberWithDouble:newViewProps.format.minFps] forKey:@"minFps"]; ++ [changedProps addObject:@"format"]; ++ } ++ if(oldViewProps.format.fieldOfView != newViewProps.format.fieldOfView){ ++ [_view.format setValue:[NSNumber numberWithDouble:newViewProps.format.fieldOfView] forKey:@"fieldOfView"]; ++ [changedProps addObject:@"format"]; ++ } ++ ++ if(oldViewProps.format.supportsVideoHDR != newViewProps.format.supportsVideoHDR){ ++ NSNumber* supportsVideoHDR = newViewProps.format.supportsVideoHDR ? @1 : @0; ++ [_view.format setValue:supportsVideoHDR forKey:@"supportsVideoHDR"]; ++ [changedProps addObject:@"format"]; ++ } ++ if(oldViewProps.format.supportsPhotoHDR != newViewProps.format.supportsPhotoHDR){ ++ NSNumber* supportsPhotoHDR = newViewProps.format.supportsPhotoHDR ? @1 : @0; ++ [_view.format setValue:supportsPhotoHDR forKey:@"supportsPhotoHDR"]; ++ [changedProps addObject:@"format"]; ++ } ++ ++ if (_view.format.count == 0) { ++ _view.format = nil; ++ } ++ ++ if(_view.codeScannerOptions == nil){ ++ _view.codeScannerOptions =[[NSMutableDictionary alloc] init]; ++ } ++ ++ if(oldViewProps.codeScannerOptions.codeTypes.size() != newViewProps.codeScannerOptions.codeTypes.size()){ ++ NSMutableArray* newCodeTypes = [[NSMutableArray alloc] init]; ++ for(int i = 0; i < newViewProps.codeScannerOptions.codeTypes.size(); i++){ ++ [newCodeTypes addObject:RCTNSStringFromString(newViewProps.codeScannerOptions.codeTypes.at(i))]; ++ } ++ [_view.codeScannerOptions setValue:newCodeTypes forKey:@"codeTypes"]; ++ [changedProps addObject:@"codeScannerOptions"]; ++ } ++ ++ if(oldViewProps.codeScannerOptions.interval != newViewProps.codeScannerOptions.interval){ ++ [_view.codeScannerOptions setValue:[NSNumber numberWithDouble:newViewProps.codeScannerOptions.interval] forKey:@"interval"]; ++ [changedProps addObject:@"codeScannerOptions"]; ++ } ++ ++ if( ++ oldViewProps.codeScannerOptions.regionOfInterest.x != newViewProps.codeScannerOptions.regionOfInterest.x || ++ oldViewProps.codeScannerOptions.regionOfInterest.y != newViewProps.codeScannerOptions.regionOfInterest.y || ++ oldViewProps.codeScannerOptions.regionOfInterest.width != newViewProps.codeScannerOptions.regionOfInterest.width || ++ oldViewProps.codeScannerOptions.regionOfInterest.height != newViewProps.codeScannerOptions.regionOfInterest.height ++ ){ ++ NSDictionary *newRegionOfInterest = @{ ++ @"x": @(newViewProps.codeScannerOptions.regionOfInterest.x), ++ @"y": @(newViewProps.codeScannerOptions.regionOfInterest.y), ++ @"width": @(newViewProps.codeScannerOptions.regionOfInterest.width), ++ @"height": @(newViewProps.codeScannerOptions.regionOfInterest.height), ++ }; ++ [_view.codeScannerOptions setValue:newRegionOfInterest forKey:@"regionOfInterest"]; ++ [changedProps addObject:@"codeScannerOptions"]; ++ } ++ ++ if (_view.codeScannerOptions.count == 0) { ++ _view.codeScannerOptions = nil; ++ } ++ ++ [_view didSetProps:changedProps]; ++ ++ [super updateProps:props oldProps:oldProps]; ++} ++ ++- (void)onViewReady{ ++ if(_eventEmitter){ ++ std::dynamic_pointer_cast(_eventEmitter) ++ ->onViewReady( CameraViewEventEmitter::OnViewReady{}); ++ } ++} ++ ++- (void)onErrorWithError:(NSDictionary *)error{ ++ if(_eventEmitter){ ++ std::dynamic_pointer_cast(_eventEmitter) ++ ->onError( CameraViewEventEmitter::OnError{ ++ .code = std::string([(error != nil ? [error objectForKey:@"code"] : @"") UTF8String]), ++ .message = std::string([(error != nil ? [error objectForKey:@"message"] : @"") UTF8String]), ++ .cause = { ++ .code = std::string([(error != nil ? [[error objectForKey:@"cause"] objectForKey:@"code"] : @"") UTF8String]), // TODO: Further secure type safety to prevent crashes ++ .domain = std::string([(error != nil ? [[error objectForKey:@"cause"] objectForKey:@"domain"] : @"") UTF8String]), ++ .message = std::string([(error != nil ? [[error objectForKey:@"cause"] objectForKey:@"message"] : @"") UTF8String]), ++ .details = std::string([(error != nil ? [[error objectForKey:@"cause"] objectForKey:@"details"] : @"") UTF8String]) ++ } ++ }); ++ } ++} ++ ++- (void)onInitialized{ ++ if(_eventEmitter){ ++ std::dynamic_pointer_cast(_eventEmitter) ++ ->onInitialized( CameraViewEventEmitter::OnInitialized{}); ++ } ++} ++ ++- (void)onCodeScannedWithMessage:(NSDictionary *)message { ++ if(_eventEmitter){ ++ std::dynamic_pointer_cast(_eventEmitter) ++ ->onCodeScanned( CameraViewEventEmitter::OnCodeScanned{ ++ .codes = { ++ .type = std::string([(message != nil ? [[message objectForKey:@"codes"] objectForKey:@"type"] : @"") UTF8String]), ++ .value = std::string([(message != nil ? [[message objectForKey:@"codes"] objectForKey:@"value"] : @"") UTF8String]), ++ .frame = { ++ .x = [(message != nil ? [[[message objectForKey:@"codes"] objectForKey:@"frame"] objectForKey:@"x"] : @0) doubleValue], ++ .y = [(message != nil ? [[[message objectForKey:@"codes"] objectForKey:@"frame"] objectForKey:@"y"] : @0) doubleValue], ++ .width = [(message != nil ? [[[message objectForKey:@"codes"] objectForKey:@"frame"] objectForKey:@"width"] : @0) doubleValue], ++ .height = [(message != nil ? [[[message objectForKey:@"codes"] objectForKey:@"frame"] objectForKey:@"height"] : @0) doubleValue], ++ }, ++ }, ++ .frame = { ++ .width = [(message != nil ? [[message objectForKey:@"frame"] objectForKey:@"width"] : @0) intValue], ++ .height = [(message != nil ? [[message objectForKey:@"frame"] objectForKey:@"height"] : @0) intValue], ++ }, ++ // nothing is sent here from CameraView ++ .corners = { ++ .x = [(message != nil ? [[message objectForKey:@"corners"] objectForKey:@"x"] : @0) doubleValue], ++ .y = [(message != nil ? [[message objectForKey:@"corners"] objectForKey:@"y"] : @0) doubleValue], ++ } ++ }); ++ } ++} ++ ++ ++- (void)onShutterWithMessage:(NSDictionary *)message { ++ if(_eventEmitter){ ++ std::dynamic_pointer_cast(_eventEmitter) ++ ->onShutter( CameraViewEventEmitter::OnShutter{ ++ .type = std::string([(message != nil ? [message objectForKey:@"type"] : @"") UTF8String]), ++ }); ++ } ++} ++ ++ ++- (void)onStarted { ++ if(_eventEmitter){ ++ std::dynamic_pointer_cast(_eventEmitter) ++ ->onStarted( CameraViewEventEmitter::OnStarted{}); ++ } ++} ++ ++ ++- (void)onStopped { ++ if(_eventEmitter){ ++ std::dynamic_pointer_cast(_eventEmitter) ++ ->onViewReady( CameraViewEventEmitter::OnViewReady{}); ++ } ++} ++ ++Class CameraViewCls(void) ++{ ++ return RNCameraView.class; ++} ++ ++@end ++#endif +diff --git a/node_modules/react-native-vision-camera/lib/commonjs/Camera.js b/node_modules/react-native-vision-camera/lib/commonjs/Camera.js +index ac08791..6e691b9 100644 +--- a/node_modules/react-native-vision-camera/lib/commonjs/Camera.js ++++ b/node_modules/react-native-vision-camera/lib/commonjs/Camera.js +@@ -10,8 +10,11 @@ var _CameraError = require("./CameraError"); + var _NativeCameraModule = require("./NativeCameraModule"); + var _FrameProcessorPlugins = require("./FrameProcessorPlugins"); + var _CameraDevices = require("./CameraDevices"); ++var _CameraViewNativeComponent = _interopRequireDefault(require("./specs/CameraViewNativeComponent")); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } ++const NativeCameraView = _CameraViewNativeComponent.default; ++ + //#region Types + + //#endregion +@@ -552,10 +555,5 @@ class Camera extends _react.default.PureComponent { + } + } + //#endregion +- +-// requireNativeComponent automatically resolves 'CameraView' to 'CameraViewManager' + exports.Camera = Camera; +-const NativeCameraView = (0, _reactNative.requireNativeComponent)('CameraView', +-// @ts-expect-error because the type declarations are kinda wrong, no? +-Camera); + //# sourceMappingURL=Camera.js.map +\ No newline at end of file +diff --git a/node_modules/react-native-vision-camera/lib/commonjs/Camera.js.map b/node_modules/react-native-vision-camera/lib/commonjs/Camera.js.map +index 808f69a..02a8590 100644 +--- a/node_modules/react-native-vision-camera/lib/commonjs/Camera.js.map ++++ b/node_modules/react-native-vision-camera/lib/commonjs/Camera.js.map +@@ -1 +1 @@ +-{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_CameraError","_NativeCameraModule","_FrameProcessorPlugins","_CameraDevices","obj","__esModule","default","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","Camera","React","PureComponent","displayName","isNativeViewMounted","constructor","props","onViewReady","onInitialized","onStarted","onStopped","onShutter","onError","onCodeScanned","ref","createRef","lastFrameProcessor","undefined","state","isRecordingWithFlash","handle","nodeHandle","findNodeHandle","current","CameraRuntimeError","takePhoto","options","CameraModule","e","tryParseNativeCameraError","takeSnapshot","getBitRateMultiplier","bitRate","startRecording","onRecordingError","onRecordingFinished","videoBitRate","passThruOptions","flash","setState","nativeOptions","videoBitRateOverride","videoBitRateMultiplier","onRecordCallback","video","error","pauseRecording","resumeRecording","stopRecording","cancelRecording","focus","point","getAvailableCameraDevices","CameraDevices","addCameraDevicesChangedListener","listener","getCameraPermissionStatus","getMicrophonePermissionStatus","getLocationPermissionStatus","requestCameraPermission","requestMicrophonePermission","requestLocationPermission","event","nativeEvent","cause","isErrorWithCause","cameraError","code","message","console","_this$props$onInitial","_this$props","_this$props$onStarted","_this$props2","_this$props$onStopped","_this$props3","_this$props$onShutter","_this$props4","codeScanner","codes","frame","setFrameProcessor","frameProcessor","VisionCameraProxy","unsetFrameProcessor","removeFrameProcessor","componentDidUpdate","render","device","shouldEnableBufferCompression","pixelFormat","torch","createElement","NativeCameraView","cameraId","id","codeScannerOptions","enableFrameProcessor","enableBufferCompression","enableFpsGraph","exports","requireNativeComponent"],"sourceRoot":"../../src","sources":["Camera.tsx"],"mappings":"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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAaqB,eAAeA,CAAA,EAAkB;IAC5C,IAAI;MACF,OAAO,MAAMtB,gCAAY,CAACsB,eAAe,CAAC,IAAI,CAAC7B,MAAM,CAAC;IACxD,CAAC,CAAC,OAAOQ,CAAC,EAAE;MACV,MAAM,IAAAC,sCAAyB,EAACD,CAAC,CAAC;IACpC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAasB,KAAKA,CAACC,KAAY,EAAiB;IAC9C,IAAI;MACF,OAAO,MAAMxB,gCAAY,CAACuB,KAAK,CAAC,IAAI,CAAC9B,MAAM,EAAE+B,KAAK,CAAC;IACrD,CAAC,CAAC,OAAOvB,CAAC,EAAE;MACV,MAAM,IAAAC,sCAAyB,EAACD,CAAC,CAAC;IACpC;EACF;EACA;;EAEA;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAcwB,yBAAyBA,CAAA,EAAmB;IACxD,OAAOC,4BAAa,CAACD,yBAAyB,CAAC,CAAC;EAClD;EACA;AACF;AACA;AACA;AACA;AACA;EACE,OAAcE,+BAA+BA,CAACC,QAA8C,EAAuB;IACjH,OAAOF,4BAAa,CAACC,+BAA+B,CAACC,QAAQ,CAAC;EAChE;EACA;AACF;AACA;AACA;AACA;AACA;EACE,OAAcC,yBAAyBA,CAAA,EAA2B;IAChE,OAAO7B,gCAAY,CAAC6B,yBAAyB,CAAC,CAAC;EACjD;EACA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAcC,6BAA6BA,CAAA,EAA2B;IACpE,OAAO9B,gCAAY,CAAC8B,6BAA6B,CAAC,CAAC;EACrD;EACA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAcC,2BAA2BA,CAAA,EAA2B;IAClE,OAAO/B,gCAAY,CAAC+B,2BAA2B,CAAC,CAAC;EACnD;EACA;AACF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"} +\ No newline at end of file ++{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_CameraError","_NativeCameraModule","_FrameProcessorPlugins","_CameraDevices","_CameraViewNativeComponent","obj","__esModule","default","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","NativeCameraView","NativeCameraViewCodegen","Camera","React","PureComponent","displayName","isNativeViewMounted","constructor","props","onViewReady","onInitialized","onStarted","onStopped","onShutter","onError","onCodeScanned","ref","createRef","lastFrameProcessor","undefined","state","isRecordingWithFlash","handle","nodeHandle","findNodeHandle","current","CameraRuntimeError","takePhoto","options","CameraModule","e","tryParseNativeCameraError","takeSnapshot","getBitRateMultiplier","bitRate","startRecording","onRecordingError","onRecordingFinished","videoBitRate","passThruOptions","flash","setState","nativeOptions","videoBitRateOverride","videoBitRateMultiplier","onRecordCallback","video","error","pauseRecording","resumeRecording","stopRecording","cancelRecording","focus","point","getAvailableCameraDevices","CameraDevices","addCameraDevicesChangedListener","listener","getCameraPermissionStatus","getMicrophonePermissionStatus","getLocationPermissionStatus","requestCameraPermission","requestMicrophonePermission","requestLocationPermission","event","nativeEvent","cause","isErrorWithCause","cameraError","code","message","console","_this$props$onInitial","_this$props","_this$props$onStarted","_this$props2","_this$props$onStopped","_this$props3","_this$props$onShutter","_this$props4","codeScanner","codes","frame","setFrameProcessor","frameProcessor","VisionCameraProxy","unsetFrameProcessor","removeFrameProcessor","componentDidUpdate","render","device","shouldEnableBufferCompression","pixelFormat","torch","createElement","cameraId","id","codeScannerOptions","enableFrameProcessor","enableBufferCompression","enableFpsGraph","exports"],"sourceRoot":"../../src","sources":["Camera.tsx"],"mappings":"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B,EAACD,CAAC,CAAC;IACpC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAaqB,eAAeA,CAAA,EAAkB;IAC5C,IAAI;MACF,OAAO,MAAMtB,gCAAY,CAACsB,eAAe,CAAC,IAAI,CAAC7B,MAAM,CAAC;IACxD,CAAC,CAAC,OAAOQ,CAAC,EAAE;MACV,MAAM,IAAAC,sCAAyB,EAACD,CAAC,CAAC;IACpC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAasB,KAAKA,CAACC,KAAY,EAAiB;IAC9C,IAAI;MACF,OAAO,MAAMxB,gCAAY,CAACuB,KAAK,CAAC,IAAI,CAAC9B,MAAM,EAAE+B,KAAK,CAAC;IACrD,CAAC,CAAC,OAAOvB,CAAC,EAAE;MACV,MAAM,IAAAC,sCAAyB,EAACD,CAAC,CAAC;IACpC;EACF;EACA;;EAEA;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAcwB,yBAAyBA,CAAA,EAAmB;IACxD,OAAOC,4BAAa,CAACD,yBAAyB,CAAC,CAAC;EAClD;EACA;AACF;AACA;AACA;AACA;AACA;EACE,OAAcE,+BAA+BA,CAACC,QAA8C,EAAuB;IACjH,OAAOF,4BAAa,CAACC,+BAA+B,CAACC,QAAQ,CAAC;EAChE;EACA;AACF;AACA;AACA;AACA;AACA;EACE,OAAcC,yBAAyBA,CAAA,EAA2B;IAChE,OAAO7B,gCAAY,CAAC6B,yBAAyB,CAAC,CAAC;EACjD;EACA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAcC,6BAA6BA,CAAA,EAA2B;IACpE,OAAO9B,gCAAY,CAAC8B,6BAA6B,CAAC,CAAC;EACrD;EACA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAcC,2BAA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"} +\ No newline at end of file +diff --git a/node_modules/react-native-vision-camera/lib/commonjs/FrameProcessorPlugins.js b/node_modules/react-native-vision-camera/lib/commonjs/FrameProcessorPlugins.js +index cc2179c..3581e20 100644 +--- a/node_modules/react-native-vision-camera/lib/commonjs/FrameProcessorPlugins.js ++++ b/node_modules/react-native-vision-camera/lib/commonjs/FrameProcessorPlugins.js +@@ -70,7 +70,7 @@ try { + isAsyncContextBusy.value = false; + } + }, asyncContext); +- hasWorklets = true; ++ // hasWorklets = true + } catch (e) { + // Worklets are not installed, so Frame Processors are disabled. + } +diff --git a/node_modules/react-native-vision-camera/lib/commonjs/FrameProcessorPlugins.js.map b/node_modules/react-native-vision-camera/lib/commonjs/FrameProcessorPlugins.js.map +index cab0ad6..4e34f24 100644 +--- a/node_modules/react-native-vision-camera/lib/commonjs/FrameProcessorPlugins.js.map ++++ b/node_modules/react-native-vision-camera/lib/commonjs/FrameProcessorPlugins.js.map +@@ -1 +1 @@ +-{"version":3,"names":["_CameraError","require","_NativeCameraModule","_JSIHelper","errorMessage","hasWorklets","isAsyncContextBusy","value","runOnAsyncContext","_frame","_func","CameraRuntimeError","throwJSError","error","assertJSIAvailable","Worklets","throwErrorOnJS","createRunInJsFn","message","stack","Error","name","jsEngine","global","ErrorUtils","reportFatalError","safeError","createSharedValue","asyncContext","createContext","createRunInContextFn","frame","func","e","internal","decrementRefCount","proxy","initFrameProcessorPlugin","removeFrameProcessor","setFrameProcessor","result","CameraModule","installFrameProcessorBindings","VisionCameraProxy","exports","getFrameProcessorPlugin","options","console","warn","getLastFrameProcessorCall","frameProcessorFuncId","_global$__frameProces","__frameProcessorRunAtTargetFpsMap","setLastFrameProcessorCall","runAtTargetFps","fps","funcId","__workletHash","targetIntervalMs","now","performance","diffToLastCall","undefined","runAsync","incrementRefCount"],"sourceRoot":"../../src","sources":["FrameProcessorPlugins.ts"],"mappings":"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"} +\ No newline at end of file ++{"version":3,"names":["_CameraError","require","_NativeCameraModule","_JSIHelper","errorMessage","hasWorklets","isAsyncContextBusy","value","runOnAsyncContext","_frame","_func","CameraRuntimeError","throwJSError","error","assertJSIAvailable","Worklets","throwErrorOnJS","createRunInJsFn","message","stack","Error","name","jsEngine","global","ErrorUtils","reportFatalError","safeError","createSharedValue","asyncContext","createContext","createRunInContextFn","frame","func","e","internal","decrementRefCount","proxy","initFrameProcessorPlugin","removeFrameProcessor","setFrameProcessor","result","CameraModule","installFrameProcessorBindings","VisionCameraProxy","exports","getFrameProcessorPlugin","options","console","warn","getLastFrameProcessorCall","frameProcessorFuncId","_global$__frameProces","__frameProcessorRunAtTargetFpsMap","setLastFrameProcessorCall","runAtTargetFps","fps","funcId","__workletHash","targetIntervalMs","now","performance","diffToLastCall","undefined","runAsync","incrementRefCount"],"sourceRoot":"../../src","sources":["FrameProcessorPlugins.ts"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/react-native-vision-camera/lib/commonjs/specs/CameraViewNativeComponent.js b/node_modules/react-native-vision-camera/lib/commonjs/specs/CameraViewNativeComponent.js +new file mode 100644 +index 0000000..7008471 +--- /dev/null ++++ b/node_modules/react-native-vision-camera/lib/commonjs/specs/CameraViewNativeComponent.js +@@ -0,0 +1,11 @@ ++"use strict"; ++ ++Object.defineProperty(exports, "__esModule", { ++ value: true ++}); ++exports.default = void 0; ++var _codegenNativeComponent = _interopRequireDefault(require("react-native/Libraries/Utilities/codegenNativeComponent")); ++function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } ++/* eslint-disable @typescript-eslint/ban-types */ ++var _default = exports.default = (0, _codegenNativeComponent.default)('CameraView'); ++//# sourceMappingURL=CameraViewNativeComponent.js.map +\ No newline at end of file +diff --git a/node_modules/react-native-vision-camera/lib/commonjs/specs/CameraViewNativeComponent.js.map b/node_modules/react-native-vision-camera/lib/commonjs/specs/CameraViewNativeComponent.js.map +new file mode 100644 +index 0000000..d1b3d81 +--- /dev/null ++++ b/node_modules/react-native-vision-camera/lib/commonjs/specs/CameraViewNativeComponent.js.map +@@ -0,0 +1 @@ ++{"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","obj","__esModule","default","_default","exports","codegenNativeComponent"],"sourceRoot":"../../../src","sources":["specs/CameraViewNativeComponent.ts"],"mappings":";;;;;;AAGA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAH7F;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GA0Fe,IAAAG,+BAAsB,EAAc,YAAY,CAAC"} +\ No newline at end of file +diff --git a/node_modules/react-native-vision-camera/lib/module/Camera.js b/node_modules/react-native-vision-camera/lib/module/Camera.js +index b5bbf8b..3f44fdd 100644 +--- a/node_modules/react-native-vision-camera/lib/module/Camera.js ++++ b/node_modules/react-native-vision-camera/lib/module/Camera.js +@@ -1,10 +1,12 @@ + function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } + import React from 'react'; +-import { requireNativeComponent, findNodeHandle } from 'react-native'; ++import { findNodeHandle } from 'react-native'; + import { CameraRuntimeError, tryParseNativeCameraError, isErrorWithCause } from './CameraError'; + import { CameraModule } from './NativeCameraModule'; + import { VisionCameraProxy } from './FrameProcessorPlugins'; + import { CameraDevices } from './CameraDevices'; ++import NativeCameraViewCodegen from './specs/CameraViewNativeComponent'; ++const NativeCameraView = NativeCameraViewCodegen; + + //#region Types + +@@ -546,9 +548,4 @@ export class Camera extends React.PureComponent { + } + } + //#endregion +- +-// requireNativeComponent automatically resolves 'CameraView' to 'CameraViewManager' +-const NativeCameraView = requireNativeComponent('CameraView', +-// @ts-expect-error because the type declarations are kinda wrong, no? +-Camera); + //# sourceMappingURL=Camera.js.map +\ No newline at end of file +diff --git a/node_modules/react-native-vision-camera/lib/module/Camera.js.map b/node_modules/react-native-vision-camera/lib/module/Camera.js.map +index 42aa7ea..0205781 100644 +--- a/node_modules/react-native-vision-camera/lib/module/Camera.js.map ++++ b/node_modules/react-native-vision-camera/lib/module/Camera.js.map +@@ -1 +1 @@ +-{"version":3,"names":["React","requireNativeComponent","findNodeHandle","CameraRuntimeError","tryParseNativeCameraError","isErrorWithCause","CameraModule","VisionCameraProxy","CameraDevices","Camera","PureComponent","displayName","isNativeViewMounted","constructor","props","onViewReady","bind","onInitialized","onStarted","onStopped","onShutter","onError","onCodeScanned","ref","createRef","lastFrameProcessor","undefined","state","isRecordingWithFlash","handle","nodeHandle","current","takePhoto","options","e","takeSnapshot","getBitRateMultiplier","bitRate","startRecording","onRecordingError","onRecordingFinished","videoBitRate","passThruOptions","flash","setState","nativeOptions","videoBitRateOverride","videoBitRateMultiplier","onRecordCallback","video","error","pauseRecording","resumeRecording","stopRecording","cancelRecording","focus","point","getAvailableCameraDevices","addCameraDevicesChangedListener","listener","getCameraPermissionStatus","getMicrophonePermissionStatus","getLocationPermissionStatus","requestCameraPermission","requestMicrophonePermission","requestLocationPermission","event","nativeEvent","cause","cameraError","code","message","console","_this$props$onInitial","_this$props","call","_this$props$onStarted","_this$props2","_this$props$onStopped","_this$props3","_this$props$onShutter","_this$props4","codeScanner","codes","frame","setFrameProcessor","frameProcessor","unsetFrameProcessor","removeFrameProcessor","componentDidUpdate","render","device","shouldEnableBufferCompression","pixelFormat","torch","createElement","NativeCameraView","_extends","cameraId","id","codeScannerOptions","enableFrameProcessor","enableBufferCompression","enableFpsGraph"],"sourceRoot":"../../src","sources":["Camera.tsx"],"mappings":"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3C,IAAI;MACF,OAAO,MAAM7C,YAAY,CAAC6C,cAAc,CAAC,IAAI,CAACtB,MAAM,CAAC;IACvD,CAAC,CAAC,OAAOK,CAAC,EAAE;MACV,MAAM9B,yBAAyB,CAAC8B,CAAC,CAAC;IACpC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAakB,eAAeA,CAAA,EAAkB;IAC5C,IAAI;MACF,OAAO,MAAM9C,YAAY,CAAC8C,eAAe,CAAC,IAAI,CAACvB,MAAM,CAAC;IACxD,CAAC,CAAC,OAAOK,CAAC,EAAE;MACV,MAAM9B,yBAAyB,CAAC8B,CAAC,CAAC;IACpC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAamB,aAAaA,CAAA,EAAkB;IAC1C,IAAI;MACF,OAAO,MAAM/C,YAAY,CAAC+C,aAAa,CAAC,IAAI,CAACxB,MAAM,CAAC;IACtD,CAAC,CAAC,OAAOK,CAAC,EAAE;MACV,MAAM9B,yBAAyB,CAAC8B,CAAC,CAAC;IACpC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAaoB,eAAeA,CAAA,EAAkB;IAC5C,IAAI;MACF,OAAO,MAAMhD,YAAY,CAACgD,eAAe,CAAC,IAAI,CAACzB,MAAM,CAAC;IACxD,CAAC,CAAC,OAAOK,CAAC,EAAE;MACV,MAAM9B,yBAAyB,CAAC8B,CAAC,CAAC;IACpC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAaqB,KAAKA,CAACC,KAAY,EAAiB;IAC9C,IAAI;MACF,OAAO,MAAMlD,YAAY,CAACiD,KAAK,CAAC,IAA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"} +\ No newline at end of file ++{"version":3,"names":["React","findNodeHandle","CameraRuntimeError","tryParseNativeCameraError","isErrorWithCause","CameraModule","VisionCameraProxy","CameraDevices","NativeCameraViewCodegen","NativeCameraView","Camera","PureComponent","displayName","isNativeViewMounted","constructor","props","onViewReady","bind","onInitialized","onStarted","onStopped","onShutter","onError","onCodeScanned","ref","createRef","lastFrameProcessor","undefined","state","isRecordingWithFlash","handle","nodeHandle","current","takePhoto","options","e","takeSnapshot","getBitRateMultiplier","bitRate","startRecording","onRecordingError","onRecordingFinished","videoBitRate","passThruOptions","flash","setState","nativeOptions","videoBitRateOverride","videoBitRateMultiplier","onRecordCallback","video","error","pauseRecording","resumeRecording","stopRecording","cancelRecording","focus","point","getAvailableCameraDevices","addCameraDevicesChangedListener","listener","getCameraPermissionStatus","getMicrophonePermissionStatus","getLocationPermissionStatus","requestCameraPermission","requestMicrophonePermission","requestLocationPermission","event","nativeEvent","cause","cameraError","code","message","console","_this$props$onInitial","_this$props","call","_this$props$onStarted","_this$props2","_this$props$onStopped","_this$props3","_this$props$onShutter","_this$props4","codeScanner","codes","frame","setFrameProcessor","frameProcessor","unsetFrameProcessor","removeFrameProcessor","componentDidUpdate","render","device","shouldEnableBufferCompression","pixelFormat","torch","createElement","_extends","cameraId","id","codeScannerOptions","enableFrameProcessor","enableBufferCompression","enableFpsGraph"],"sourceRoot":"../../src","sources":["Camera.tsx"],"mappings":"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CA;AACA;AACA;AACA;EACE,MAAaiB,cAAcA,CAAA,EAAkB;IAC3C,IAAI;MACF,OAAO,MAAM/C,YAAY,CAAC+C,cAAc,CAAC,IAAI,CAACtB,MAAM,CAAC;IACvD,CAAC,CAAC,OAAOK,CAAC,EAAE;MACV,MAAMhC,yBAAyB,CAACgC,CAAC,CAAC;IACpC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAakB,eAAeA,CAAA,EAAkB;IAC5C,IAAI;MACF,OAAO,MAAMhD,YAAY,CAACgD,eAAe,CAAC,IAAI,CAACvB,MAAM,CAAC;IACxD,CAAC,CAAC,OAAOK,CAAC,EAAE;MACV,MAAMhC,yBAAyB,CAACgC,CAAC,CAAC;IACpC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAamB,aAAaA,CAAA,EAAkB;IAC1C,IAAI;MACF,OAAO,MAAMjD,YAAY,CAACiD,aAAa,CAAC,IAAI,CAACxB,MAAM,CAAC;IACtD,CAAC,CAAC,OAAOK,CAAC,EAAE;MACV,MAAMhC,yBAAyB,CAACgC,CAAC,CAAC;IACpC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAaoB,eAAeA,CAAA,EAAkB;IAC5C,IAAI;MACF,OAAO,MAAMlD,YAAY,CAACkD,eAAe,CAAC,IAAI,CAACzB,MAAM,CAAC;IACxD,CAAC,CAAC,OAAOK,CAAC,EAAE;MACV,MAAMhC,yBAAyB,CAACgC,CAAC,CAAC;IACpC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAaqB,KAAKA,CAACC,KAAY,EAAiB;IAC9C,IAAI;MACF,OAAO,MAAMpD,YAAY,CAACmD,KAAK,CAAC,IAAI,CAAC1B,MAAM,EAAE2B,KAAK,CAAC;IACrD,CAAC,CAAC,OAAOtB,CAAC,EAAE;MACV,MAAMhC,yBAAyB,CAACgC,CAAC,CAAC;IACpC;EACF;EACA;;EAEA;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAcuB,yBAAyBA,CAAA,EAAmB;IACxD,OAAOnD,aAAa,CAACmD,yBAAyB,CAAC,CAAC;EAClD;EACA;AACF;AACA;AACA;AACA;AACA;EACE,OAAcC,+BAA+BA,CAACC,QAA8C,EAAuB;IACjH,OAAOrD,aAAa,CAACoD,+BAA+B,CAACC,QAAQ,CAAC;EAChE;EACA;AACF;AACA;AACA;AACA;AACA;EACE,OAAcC,yBAAyBA,CAAA,EAA2B;IAChE,OAAOxD,YAAY,CAACwD,yBAAyB,CAAC,CAAC;EACjD;EACA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAcC,6BAA6BA,CAAA,EAA2B;IACpE,OAAOzD,YAAY,CAACyD,6BAA6B,CAAC,CAAC;EACrD;EACA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAcC,2BAA2BA,CAAA,EAA2B;IAClE,OAAO1D,YAAY,CAAC0D,2BAA2B,CAAC,CAAC;EACnD;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,aAAoBC,uBAAuBA,CAAA,EAA2C;IACpF,IAAI;MACF,OAAO,MAAM3D,YAAY,CAAC2D,uBAAuB,CAAC,CAAC;IACrD,CAAC,CAAC,OAAO7B,CAAC,EAAE;MACV,MAAMhC,yBAAyB,CAACgC,CAAC,CAAC;IACpC;EACF;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,aAAoB8B,2BAA2BA,CAAA,EAA2C;IACxF,IAAI;MACF,OAAO,MAAM5D,YAAY,CAAC4D,2BAA2B,CAAC,CAAC;IACzD,CAAC,CAAC,OAAO9B,CAAC,EAAE;MACV,MAAMhC,yBAAyB,CAACgC,CAAC,CAAC;IACpC;EACF;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,aAAoB+B,yBAAyBA,CAAA,EAA2C;IACtF,IAAI;MACF,OAAO,MAAM7D,YAAY,CAAC6D,yBAAyB,CAAC,CAAC;IACvD,CAAC,CAAC,OAAO/B,CAAC,EAAE;MACV,MAAMhC,yBAAyB,CAACgC,CAAC,CAAC;IACpC;EACF;EACA;;EAEA;EACQb,OAAOA,CAAC6C,KAAyC,EAAQ;IAC/D,MAAMhB,KAAK,GAAGgB,KAAK,CAACC,WAAW;IAC/B,MAAMC,KAAK,GAAGjE,gBAAgB,CAAC+C,KAAK,CAACkB,KAAK,CAAC,GAAGlB,KAAK,CAACkB,KAAK,GAAG1C,SAAS;IACrE;IACA,MAAM2C,WAAW,GAAG,IAAIpE,kBAAkB,CAACiD,KAAK,CAACoB,IAAI,EAAEpB,KAAK,CAACqB,OAAO,EAAEH,KAAK,CAAC;IAE5E,IAAI,IAAI,CAACtD,KAAK,CAACO,OAAO,IAAI,IAAI,EAAE;MAC9B,IAAI,CAACP,KAAK,CAACO,OAAO,CAACgD,WAAW,CAAC;IACjC,CAAC,MAAM;MACL;MACAG,OAAO,CAACtB,KAAK,CAAE,kBAAiBmB,WAAW,CAACC,IAAK,MAAKD,WAAW,CAACE,OAAQ,EAAC,EAAEF,WAAW,CAAC;IAC3F;EACF;EAEQpD,aAAaA,CAAA,EAAS;IAAA,IAAAwD,qBAAA,EAAAC,WAAA;IAC5B,CAAAD,qBAAA,IAAAC,WAAA,OAAI,CAAC5D,KAAK,EAACG,aAAa,cAAAwD,qBAAA,eAAxBA,qBAAA,CAAAE,IAAA,CAAAD,WAA2B,CAAC;EAC9B;EAEQxD,SAASA,CAAA,EAAS;IAAA,IAAA0D,qBAAA,EAAAC,YAAA;IACxB,CAAAD,qBAAA,IAAAC,YAAA,OAAI,CAAC/D,KAAK,EAACI,SAAS,cAAA0D,qBAAA,eAApBA,qBAAA,CAAAD,IAAA,CAAAE,YAAuB,CAAC;EAC1B;EAEQ1D,SAASA,CAAA,EAAS;IAAA,IAAA2D,qBAAA,EAAAC,YAAA;IACxB,CAAAD,qBAAA,IAAAC,YAAA,OAAI,CAACjE,KAAK,EAACK,SAAS,cAAA2D,qBAAA,eAApBA,qBAAA,CAAAH,IAAA,CAAAI,YAAuB,CAAC;EAC1B;EAEQ3D,SAASA,CAAC8C,KAA2C,EAAQ;IAAA,IAAAc,qBAAA,EAAAC,YAAA;IACnE,CAAAD,qBAAA,IAAAC,YAAA,OAAI,CAACnE,KAAK,EAACM,SAAS,cAAA4D,qBAAA,eAApBA,qBAAA,CAAAL,IAAA,CAAAM,YAAA,EAAuBf,KAAK,CAACC,WAAW,CAAC;EAC3C;EACA;;EAEQ7C,aAAaA,CAAC4C,KAA+C,EAAQ;IAC3E,MAAMgB,WAAW,GAAG,IAAI,CAACpE,KAAK,CAACoE,WAAW;IAC1C,IAAIA,WAAW,IAAI,IAAI,EAAE;IAEzBA,WAAW,CAAC5D,aAAa,CAAC4C,KAAK,CAACC,WAAW,CAACgB,KAAK,EAAEjB,KAAK,CAACC,WAAW,CAACiB,KAAK,CAAC;EAC7E;;EAEA;EACQC,iBAAiBA,CAACC,cAA8B,EAAQ;IAC9DjF,iBAAiB,CAACgF,iBAAiB,CAAC,IAAI,CAACxD,MAAM,EAAEyD,cAAc,CAAC;EAClE;EAEQC,mBAAmBA,CAAA,EAAS;IAClClF,iBAAiB,CAACmF,oBAAoB,CAAC,IAAI,CAAC3D,MAAM,CAAC;EACrD;EAEQd,WAAWA,CAAA,EAAS;IAC1B,IAAI,CAACH,mBAAmB,GAAG,IAAI;IAC/B,IAAI,IAAI,CAACE,KAAK,CAACwE,cAAc,IAAI,IAAI,EAAE;MACrC;MACA,IAAI,CAACD,iBAAiB,CAAC,IAAI,CAACvE,KAAK,CAACwE,cAAc,CAAC;MACjD,IAAI,CAAC7D,kBAAkB,GAAG,IAAI,CAACX,KAAK,CAACwE,cAAc;IACrD;EACF;;EAEA;EACAG,kBAAkBA,CAAA,EAAS;IACzB,IAAI,CAAC,IAAI,CAAC7E,mBAAmB,EAAE;IAC/B,MAAM0E,cAAc,GAAG,IAAI,CAACxE,KAAK,CAACwE,cAAc;IAChD,IAAIA,cAAc,KAAK,IAAI,CAAC7D,kBAAkB,EAAE;MAC9C;MACA,IAAI6D,cAAc,IAAI,IAAI,EAAE,IAAI,CAACD,iBAAiB,CAACC,cAAc,CAAC,MAC7D,IAAI,CAACC,mBAAmB,CAAC,CAAC;MAE/B,IAAI,CAAC9D,kBAAkB,GAAG6D,cAAc;IAC1C;EACF;EACA;;EAEA;EACOI,MAAMA,CAAA,EAAoB;IAC/B;IACA,MAAM;MAAEC,MAAM;MAAEL,cAAc;MAAEJ,WAAW;MAAE,GAAGpE;IAAM,CAAC,GAAG,IAAI,CAACA,KAAK;;IAEpE;IACA,IAAI6E,MAAM,IAAI,IAAI,EAAE;MAClB,MAAM,IAAI1F,kBAAkB,CAC1B,kBAAkB,EAClB,kIACF,CAAC;IACH;IAEA,MAAM2F,6BAA6B,GAAG9E,KAAK,CAACmC,KAAK,KAAK,IAAI,IAAIqC,cAAc,IAAI,IAAI;IACpF,MAAMO,WAAW,GAAG/E,KAAK,CAAC+E,WAAW,KAAKP,cAAc,IAAI,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAC;IACpF,MAAMQ,KAAK,GAAG,IAAI,CAACnE,KAAK,CAACC,oBAAoB,GAAG,IAAI,GAAGd,KAAK,CAACgF,KAAK;IAElE,oBACE/F,KAAA,CAAAgG,aAAA,CAACvF,gBAAgB,EAAAwF,QAAA,KACXlF,KAAK;MACTmF,QAAQ,EAAEN,MAAM,CAACO,EAAG;MACpB3E,GAAG,EAAE,IAAI,CAACA,GAAI;MACduE,KAAK,EAAEA,KAAM;MACb/E,WAAW,EAAE,IAAI,CAACA,WAAY;MAC9BE,aAAa,EAAE,IAAI,CAACA,aAAc;MAClCK,aAAa,EAAE,IAAI,CAACA,aAAc;MAClCJ,SAAS,EAAE,IAAI,CAACA,SAAU;MAC1BC,SAAS,EAAE,IAAI,CAACA,SAAU;MAC1BC,SAAS,EAAE,IAAI,CAACA,SAAU;MAC1BC,OAAO,EAAE,IAAI,CAACA,OAAQ;MACtB8E,kBAAkB,EAAEjB,WAAY;MAChCkB,oBAAoB,EAAEd,cAAc,IAAI,IAAK;MAC7Ce,uBAAuB,EAAEvF,KAAK,CAACuF,uBAAuB,IAAIT,6BAA8B;MACxFC,WAAW,EAAEA,WAAY;MACzBS,cAAc,EAAEhB,cAAc,IAAI,IAAI,IAAIxE,KAAK,CAACwF;IAAe,EAChE,CAAC;EAEN;AACF;AACA"} +\ No newline at end of file +diff --git a/node_modules/react-native-vision-camera/lib/module/FrameProcessorPlugins.js b/node_modules/react-native-vision-camera/lib/module/FrameProcessorPlugins.js +index a0ee374..f1f08c1 100644 +--- a/node_modules/react-native-vision-camera/lib/module/FrameProcessorPlugins.js ++++ b/node_modules/react-native-vision-camera/lib/module/FrameProcessorPlugins.js +@@ -64,7 +64,7 @@ try { + isAsyncContextBusy.value = false; + } + }, asyncContext); +- hasWorklets = true; ++ // hasWorklets = true + } catch (e) { + // Worklets are not installed, so Frame Processors are disabled. + } +diff --git a/node_modules/react-native-vision-camera/lib/module/FrameProcessorPlugins.js.map b/node_modules/react-native-vision-camera/lib/module/FrameProcessorPlugins.js.map +index baf8705..1b73944 100644 +--- a/node_modules/react-native-vision-camera/lib/module/FrameProcessorPlugins.js.map ++++ b/node_modules/react-native-vision-camera/lib/module/FrameProcessorPlugins.js.map +@@ -1 +1 @@ +-{"version":3,"names":["CameraRuntimeError","CameraModule","assertJSIAvailable","errorMessage","hasWorklets","isAsyncContextBusy","value","runOnAsyncContext","_frame","_func","throwJSError","error","Worklets","require","throwErrorOnJS","createRunInJsFn","message","stack","Error","name","jsEngine","global","ErrorUtils","reportFatalError","safeError","createSharedValue","asyncContext","createContext","createRunInContextFn","frame","func","e","internal","decrementRefCount","proxy","initFrameProcessorPlugin","removeFrameProcessor","setFrameProcessor","result","installFrameProcessorBindings","VisionCameraProxy","getFrameProcessorPlugin","options","console","warn","getLastFrameProcessorCall","frameProcessorFuncId","_global$__frameProces","__frameProcessorRunAtTargetFpsMap","setLastFrameProcessorCall","runAtTargetFps","fps","funcId","__workletHash","targetIntervalMs","now","performance","diffToLastCall","undefined","runAsync","incrementRefCount"],"sourceRoot":"../../src","sources":["FrameProcessorPlugins.ts"],"mappings":"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"} +\ No newline at end of file ++{"version":3,"names":["CameraRuntimeError","CameraModule","assertJSIAvailable","errorMessage","hasWorklets","isAsyncContextBusy","value","runOnAsyncContext","_frame","_func","throwJSError","error","Worklets","require","throwErrorOnJS","createRunInJsFn","message","stack","Error","name","jsEngine","global","ErrorUtils","reportFatalError","safeError","createSharedValue","asyncContext","createContext","createRunInContextFn","frame","func","e","internal","decrementRefCount","proxy","initFrameProcessorPlugin","removeFrameProcessor","setFrameProcessor","result","installFrameProcessorBindings","VisionCameraProxy","getFrameProcessorPlugin","options","console","warn","getLastFrameProcessorCall","frameProcessorFuncId","_global$__frameProces","__frameProcessorRunAtTargetFpsMap","setLastFrameProcessorCall","runAtTargetFps","fps","funcId","__workletHash","targetIntervalMs","now","performance","diffToLastCall","undefined","runAsync","incrementRefCount"],"sourceRoot":"../../src","sources":["FrameProcessorPlugins.ts"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/react-native-vision-camera/lib/module/specs/CameraViewNativeComponent.js b/node_modules/react-native-vision-camera/lib/module/specs/CameraViewNativeComponent.js +new file mode 100644 +index 0000000..9a7c100 +--- /dev/null ++++ b/node_modules/react-native-vision-camera/lib/module/specs/CameraViewNativeComponent.js +@@ -0,0 +1,5 @@ ++/* eslint-disable @typescript-eslint/ban-types */ ++ ++import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent'; ++export default codegenNativeComponent('CameraView'); ++//# sourceMappingURL=CameraViewNativeComponent.js.map +\ No newline at end of file +diff --git a/node_modules/react-native-vision-camera/lib/module/specs/CameraViewNativeComponent.js.map b/node_modules/react-native-vision-camera/lib/module/specs/CameraViewNativeComponent.js.map +new file mode 100644 +index 0000000..4052494 +--- /dev/null ++++ b/node_modules/react-native-vision-camera/lib/module/specs/CameraViewNativeComponent.js.map +@@ -0,0 +1 @@ ++{"version":3,"names":["codegenNativeComponent"],"sourceRoot":"../../../src","sources":["specs/CameraViewNativeComponent.ts"],"mappings":"AAAA;;AAGA,OAAOA,sBAAsB,MAAM,yDAAyD;AAuF5F,eAAeA,sBAAsB,CAAc,YAAY,CAAC"} +\ No newline at end of file +diff --git a/node_modules/react-native-vision-camera/lib/typescript/Camera.d.ts.map b/node_modules/react-native-vision-camera/lib/typescript/Camera.d.ts.map +index 71cc59b..d6ebc1c 100644 +--- a/node_modules/react-native-vision-camera/lib/typescript/Camera.d.ts.map ++++ b/node_modules/react-native-vision-camera/lib/typescript/Camera.d.ts.map +@@ -1 +1 @@ +-{"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../src/Camera.tsx"],"names":[],"mappings":"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"} +\ No newline at end of file ++{"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../src/Camera.tsx"],"names":[],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/react-native-vision-camera/lib/typescript/specs/CameraViewNativeComponent.d.ts b/node_modules/react-native-vision-camera/lib/typescript/specs/CameraViewNativeComponent.d.ts +new file mode 100644 +index 0000000..e7717c6 +--- /dev/null ++++ b/node_modules/react-native-vision-camera/lib/typescript/specs/CameraViewNativeComponent.d.ts +@@ -0,0 +1,100 @@ ++/// ++/// ++import type { HostComponent, ViewProps } from 'react-native'; ++import type { DirectEventHandler, Double, Int32 } from 'react-native/Libraries/Types/CodegenTypes'; ++export type VisionCameraComponentType = HostComponent; ++export interface NativeProps extends ViewProps { ++ enableGpuBuffers: boolean; ++ androidPreviewViewType?: string; ++ cameraId: string; ++ enableFrameProcessor: boolean; ++ enableLocation: boolean; ++ enableBufferCompression: boolean; ++ photoQualityBalance: string; ++ isActive: boolean; ++ photo?: boolean; ++ video?: boolean; ++ audio?: boolean; ++ torch?: string; ++ zoom?: Double; ++ exposure?: Double; ++ enableZoomGesture?: boolean; ++ enableFpsGraph?: boolean; ++ resizeMode?: string; ++ format?: Readonly<{ ++ supportsDepthCapture?: boolean; ++ photoHeight: Double; ++ photoWidth: Double; ++ videoHeight: Double; ++ videoWidth: Double; ++ maxISO: Double; ++ minISO: Double; ++ maxFps: Double; ++ minFps: Double; ++ fieldOfView: Double; ++ supportsVideoHDR: boolean; ++ supportsPhotoHDR: boolean; ++ autoFocusSystem: string; ++ videoStabilizationModes: string[]; ++ pixelFormats: string[]; ++ }>; ++ pixelFormat: string; ++ fps?: Int32; ++ videoHdr?: boolean; ++ photoHdr?: boolean; ++ lowLightBoost?: boolean; ++ videoStabilizationMode?: string; ++ enableDepthData?: boolean; ++ enablePortraitEffectsMatteDelivery?: boolean; ++ orientation?: string; ++ codeScannerOptions?: Readonly<{ ++ codeTypes?: string[]; ++ interval?: Double; ++ regionOfInterest?: Readonly<{ ++ x?: Double; ++ y?: Double; ++ width?: Double; ++ height?: Double; ++ }>; ++ }>; ++ onCodeScanned?: DirectEventHandler; ++ }>; ++ frame?: Readonly<{ ++ width: Int32; ++ height: Int32; ++ }>; ++ corners?: Readonly<{ ++ x: Double; ++ y: Double; ++ }>; ++ }>>; ++ onShutter?: DirectEventHandler>; ++ onStarted?: DirectEventHandler>; ++ onStopped?: DirectEventHandler>; ++ onInitialized?: DirectEventHandler>; ++ onError?: DirectEventHandler; ++ }>>; ++ onViewReady: DirectEventHandler>; ++} ++declare const _default: import("react-native/Libraries/Utilities/codegenNativeComponent").NativeComponentType; ++export default _default; ++//# sourceMappingURL=CameraViewNativeComponent.d.ts.map +\ No newline at end of file +diff --git a/node_modules/react-native-vision-camera/lib/typescript/specs/CameraViewNativeComponent.d.ts.map b/node_modules/react-native-vision-camera/lib/typescript/specs/CameraViewNativeComponent.d.ts.map +new file mode 100644 +index 0000000..e47e42f +--- /dev/null ++++ b/node_modules/react-native-vision-camera/lib/typescript/specs/CameraViewNativeComponent.d.ts.map +@@ -0,0 +1 @@ ++{"version":3,"file":"CameraViewNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/specs/CameraViewNativeComponent.ts"],"names":[],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/react-native-vision-camera/package.json b/node_modules/react-native-vision-camera/package.json +index 86352fa..7af9577 100644 +--- a/node_modules/react-native-vision-camera/package.json ++++ b/node_modules/react-native-vision-camera/package.json +@@ -166,5 +166,13 @@ + ] + ] + }, +- "packageManager": "yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447" ++ "codegenConfig": { ++ "name": "RNVisioncameraSpec", ++ "type": "all", ++ "jsSrcsDir": "./src/specs", ++ "android": { ++ "javaPackageName": "com.mrousavy.camera" ++ } ++ }, ++ "packageManager": "yarn@1.22.19" + } +diff --git a/node_modules/react-native-vision-camera/src/Camera.tsx b/node_modules/react-native-vision-camera/src/Camera.tsx +index 18733ba..1668322 100644 +--- a/node_modules/react-native-vision-camera/src/Camera.tsx ++++ b/node_modules/react-native-vision-camera/src/Camera.tsx +@@ -1,5 +1,5 @@ + import React from 'react' +-import { requireNativeComponent, NativeSyntheticEvent, findNodeHandle, NativeMethods } from 'react-native' ++import { NativeSyntheticEvent, findNodeHandle, NativeMethods } from 'react-native' + import type { CameraDevice } from './CameraDevice' + import type { ErrorWithCause } from './CameraError' + import { CameraCaptureError, CameraRuntimeError, tryParseNativeCameraError, isErrorWithCause } from './CameraError' +@@ -10,9 +10,12 @@ import type { Point } from './Point' + import type { RecordVideoOptions, VideoFile } from './VideoFile' + import { VisionCameraProxy } from './FrameProcessorPlugins' + import { CameraDevices } from './CameraDevices' +-import type { EmitterSubscription } from 'react-native' ++import type { EmitterSubscription, requireNativeComponent } from 'react-native' + import type { Code, CodeScanner, CodeScannerFrame } from './CodeScanner' + import { TakeSnapshotOptions } from './Snapshot' ++import NativeCameraViewCodegen from './specs/CameraViewNativeComponent' ++ ++const NativeCameraView = NativeCameraViewCodegen as unknown as ReturnType> + + //#region Types + export type CameraPermissionStatus = 'granted' | 'not-determined' | 'denied' | 'restricted' +@@ -604,10 +607,3 @@ export class Camera extends React.PureComponent { + } + } + //#endregion +- +-// requireNativeComponent automatically resolves 'CameraView' to 'CameraViewManager' +-const NativeCameraView = requireNativeComponent( +- 'CameraView', +- // @ts-expect-error because the type declarations are kinda wrong, no? +- Camera, +-) +diff --git a/node_modules/react-native-vision-camera/src/FrameProcessorPlugins.ts b/node_modules/react-native-vision-camera/src/FrameProcessorPlugins.ts +index aa9d5ee..e7a3fa8 100644 +--- a/node_modules/react-native-vision-camera/src/FrameProcessorPlugins.ts ++++ b/node_modules/react-native-vision-camera/src/FrameProcessorPlugins.ts +@@ -98,7 +98,7 @@ try { + isAsyncContextBusy.value = false + } + }, asyncContext) +- hasWorklets = true ++ // hasWorklets = true + } catch (e) { + // Worklets are not installed, so Frame Processors are disabled. + } +diff --git a/node_modules/react-native-vision-camera/src/specs/CameraViewNativeComponent.ts b/node_modules/react-native-vision-camera/src/specs/CameraViewNativeComponent.ts +new file mode 100644 +index 0000000..70f4572 +--- /dev/null ++++ b/node_modules/react-native-vision-camera/src/specs/CameraViewNativeComponent.ts +@@ -0,0 +1,91 @@ ++/* eslint-disable @typescript-eslint/ban-types */ ++import type { HostComponent, ViewProps } from 'react-native'; ++import type { DirectEventHandler, Double, Int32 } from 'react-native/Libraries/Types/CodegenTypes'; ++import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent'; ++ ++export type VisionCameraComponentType = HostComponent; ++ ++export interface NativeProps extends ViewProps { ++ enableGpuBuffers: boolean; ++ androidPreviewViewType?: string; ++ cameraId: string; ++ enableFrameProcessor: boolean; ++ enableLocation: boolean; ++ enableBufferCompression: boolean; ++ photoQualityBalance: string; ++ isActive: boolean; ++ photo?: boolean; ++ video?: boolean; ++ audio?: boolean; ++ torch?: string; ++ zoom?: Double; ++ exposure?: Double; ++ enableZoomGesture?: boolean; ++ enableFpsGraph?: boolean; ++ resizeMode?: string; ++ format?: Readonly<{ ++ supportsDepthCapture?: boolean; ++ photoHeight: Double; ++ photoWidth: Double; ++ videoHeight: Double; ++ videoWidth: Double; ++ maxISO: Double; ++ minISO: Double; ++ maxFps: Double; ++ minFps: Double; ++ fieldOfView: Double; ++ supportsVideoHDR: boolean; ++ supportsPhotoHDR: boolean; ++ autoFocusSystem: string; ++ videoStabilizationModes: string[]; ++ pixelFormats: string[]; ++ }>; ++ pixelFormat: string; ++ fps?: Int32; ++ videoHdr?: boolean; // not sure why was int on native side ++ photoHdr?: boolean; // not sure why was int on native side ++ lowLightBoost?: boolean; // same ++ videoStabilizationMode?: string; ++ enableDepthData?: boolean; ++ enablePortraitEffectsMatteDelivery?: boolean; ++ orientation?: string; ++ codeScannerOptions?: Readonly<{ ++ codeTypes?: string[]; ++ interval?: Double; ++ regionOfInterest?: Readonly<{ ++ x?: Double, ++ y?: Double, ++ width?: Double, ++ height?: Double, ++ }>; ++ }>; ++ onCodeScanned?: DirectEventHandler< ++ Readonly<{ ++ codes?: Readonly<{ ++ type?: string; ++ value?: string; ++ frame?: Readonly<{ x: Double, y: Double, width: Double, height: Double}>; ++ }>; ++ frame?: Readonly<{ width: Int32, height: Int32 }>; ++ corners?: Readonly<{ x: Double, y: Double }>; ++ }> ++ >; ++ onShutter?: DirectEventHandler< ++ Readonly<{ ++ type: string; ++ }> ++ >; ++ onStarted?: DirectEventHandler>; ++ onStopped?: DirectEventHandler>; ++ onInitialized?: DirectEventHandler>; ++ onError?: DirectEventHandler< ++ Readonly<{ ++ code: string; ++ message: string; ++ cause: Readonly<{ code: string; domain: string; message: string; details: string }>; ++ }> ++ >; ++ onViewReady: DirectEventHandler>; ++} ++ ++export default codegenNativeComponent('CameraView'); diff --git a/patches/react-native-webview+13.6.4.patch b/patches/react-native-webview+13.6.4.patch new file mode 100644 index 000000000000..ce035fd01852 --- /dev/null +++ b/patches/react-native-webview+13.6.4.patch @@ -0,0 +1,55 @@ +diff --git a/node_modules/react-native-webview/apple/RNCWebView.mm b/node_modules/react-native-webview/apple/RNCWebView.mm +index 70d5ee4..6c3467d 100644 +--- a/node_modules/react-native-webview/apple/RNCWebView.mm ++++ b/node_modules/react-native-webview/apple/RNCWebView.mm +@@ -313,24 +313,28 @@ - (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const & + + if (oldViewProps.dataDetectorTypes != newViewProps.dataDetectorTypes) { + WKDataDetectorTypes dataDetectorTypes = WKDataDetectorTypeNone; +- if (dataDetectorTypes & RNCWebViewDataDetectorTypes::Address) { ++ for (const auto& type : newViewProps.dataDetectorTypes) { ++ if (type == "address") { + dataDetectorTypes |= WKDataDetectorTypeAddress; +- } else if (dataDetectorTypes & RNCWebViewDataDetectorTypes::Link) { ++ } else if (type == "link") { + dataDetectorTypes |= WKDataDetectorTypeLink; +- } else if (dataDetectorTypes & RNCWebViewDataDetectorTypes::CalendarEvent) { ++ } else if (type == "calendarEvent") { + dataDetectorTypes |= WKDataDetectorTypeCalendarEvent; +- } else if (dataDetectorTypes & RNCWebViewDataDetectorTypes::TrackingNumber) { ++ } else if (type == "trackingNumber") { + dataDetectorTypes |= WKDataDetectorTypeTrackingNumber; +- } else if (dataDetectorTypes & RNCWebViewDataDetectorTypes::FlightNumber) { ++ } else if (type == "flightNumber") { + dataDetectorTypes |= WKDataDetectorTypeFlightNumber; +- } else if (dataDetectorTypes & RNCWebViewDataDetectorTypes::LookupSuggestion) { ++ } else if (type == "lookupSuggestion") { + dataDetectorTypes |= WKDataDetectorTypeLookupSuggestion; +- } else if (dataDetectorTypes & RNCWebViewDataDetectorTypes::PhoneNumber) { ++ } else if (type == "phoneNumber") { + dataDetectorTypes |= WKDataDetectorTypePhoneNumber; +- } else if (dataDetectorTypes & RNCWebViewDataDetectorTypes::All) { ++ } else if (type == "all") { + dataDetectorTypes |= WKDataDetectorTypeAll; +- } else if (dataDetectorTypes & RNCWebViewDataDetectorTypes::None) { ++ break; ++ } else if (type == "none") { + dataDetectorTypes = WKDataDetectorTypeNone; ++ break; ++ } + } + [_view setDataDetectorTypes:dataDetectorTypes]; + } +diff --git a/node_modules/react-native-webview/src/RNCWebViewNativeComponent.ts b/node_modules/react-native-webview/src/RNCWebViewNativeComponent.ts +index ae52bc8..d035207 100644 +--- a/node_modules/react-native-webview/src/RNCWebViewNativeComponent.ts ++++ b/node_modules/react-native-webview/src/RNCWebViewNativeComponent.ts +@@ -187,7 +187,7 @@ export interface NativeProps extends ViewProps { + contentMode?: WithDefault<'recommended' | 'mobile' | 'desktop', 'recommended'>; + dataDetectorTypes?: WithDefault< + // eslint-disable-next-line @typescript-eslint/array-type +- ReadonlyArray<'address' | 'link' | 'calendarEvent' | 'trackingNumber' | 'flightNumber' | 'lookupSuggestion' | 'phoneNumber' | 'all' | 'none'>, ++ ReadonlyArray, + 'phoneNumber' + >; + decelerationRate?: Double; diff --git a/src/App.tsx b/src/App.tsx index 61874dc72fb0..a3a9f7a3f3b6 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -16,7 +16,6 @@ import HTMLEngineProvider from './components/HTMLEngineProvider'; import InitialURLContextProvider from './components/InitialURLContextProvider'; import {LocaleContextProvider} from './components/LocaleContextProvider'; import OnyxProvider from './components/OnyxProvider'; -import OptionsListContextProvider from './components/OptionListContextProvider'; import PopoverContextProvider from './components/PopoverProvider'; import SafeArea from './components/SafeArea'; import ScrollOffsetContextProvider from './components/ScrollOffsetContextProvider'; @@ -83,7 +82,6 @@ function App({url}: AppProps) { FullScreenContextProvider, VolumeContextProvider, VideoPopoverMenuContextProvider, - OptionsListContextProvider, ]} > diff --git a/src/CONST.ts b/src/CONST.ts index 6d1195ff5c79..4bef4022af62 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -864,11 +864,17 @@ const CONST = { RIGHT: 'right', }, POPOVER_MENU_PADDING: 8, + RESTORE_FOCUS_TYPE: { + DEFAULT: 'default', + DELETE: 'delete', + PRESERVE: 'preserve', + }, }, TIMING: { CALCULATE_MOST_RECENT_LAST_MODIFIED_ACTION: 'calc_most_recent_last_modified_action', SEARCH_RENDER: 'search_render', CHAT_RENDER: 'chat_render', + OPEN_REPORT: 'open_report', HOMEPAGE_INITIAL_RENDER: 'homepage_initial_render', REPORT_INITIAL_RENDER: 'report_initial_render', SWITCH_REPORT: 'switch_report', @@ -1564,6 +1570,28 @@ const CONST = { AUTOREPORTING_OFFSET: 'autoReportingOffset', GENERAL_SETTINGS: 'generalSettings', }, + CONNECTIONS: { + SYNC_STATUS: { + STARTING: 'starting', + FINISHED: 'finished', + PROGRESS: 'progress', + }, + NAME: { + // Here we will add other connections names when we add support for them + QBO: 'quickbooksOnline', + }, + SYNC_STAGE_NAME: { + STARTING_IMPORT: 'startingImport', + QBO_CUSTOMERS: 'quickbooksOnlineImportCustomers', + QBO_EMPLOYEES: 'quickbooksOnlineImportEmployees', + QBO_ACCOUNTS: 'quickbooksOnlineImportAccounts', + QBO_CLASSES: 'quickbooksOnlineImportClasses', + QBO_LOCATIONS: 'quickbooksOnlineImportLocations', + QBO_PROCESSING: 'quickbooksOnlineImportProcessing', + QBO_PAYMENTS: 'quickbooksOnlineSyncBillPayments', + QBO_TAX_CODES: 'quickbooksOnlineSyncTaxCodes', + }, + }, }, CUSTOM_UNITS: { diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts index 0a21cb17df7e..506f969b9ad1 100755 --- a/src/ONYXKEYS.ts +++ b/src/ONYXKEYS.ts @@ -349,6 +349,8 @@ const ONYXKEYS = { /** This is deprecated, but needed for a migration, so we still need to include it here so that it will be initialized in Onyx.init */ DEPRECATED_POLICY_MEMBER_LIST: 'policyMemberList_', + + POLICY_CONNECTION_SYNC_PROGRESS: 'policyConnectionSyncProgress_', }, /** List of Form ids */ @@ -545,6 +547,7 @@ type OnyxCollectionValuesMapping = { [ONYXKEYS.COLLECTION.PRIVATE_NOTES_DRAFT]: string; [ONYXKEYS.COLLECTION.NEXT_STEP]: OnyxTypes.ReportNextStep; [ONYXKEYS.COLLECTION.POLICY_JOIN_MEMBER]: OnyxTypes.PolicyJoinMember; + [ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS]: OnyxTypes.PolicyConnectionSyncProgress; }; type OnyxValuesMapping = { diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 7efc1f676f26..25a84c4480e3 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -181,6 +181,8 @@ const ROUTES = { getRoute: (backTo?: string) => getUrlWithBackToParam('settings/exit-survey/confirm', backTo), }, + SETTINGS_SAVE_THE_WORLD: 'settings/teachersunite', + KEYBOARD_SHORTCUTS: 'keyboard-shortcuts', NEW: 'new', @@ -324,14 +326,14 @@ const ROUTES = { getUrlWithBackToParam(`${action}/${iouType}/amount/${transactionID}/${reportID}`, backTo), }, MONEY_REQUEST_STEP_TAX_RATE: { - route: 'create/:iouType/taxRate/:transactionID/:reportID?', - getRoute: (iouType: ValueOf, transactionID: string, reportID: string, backTo: string) => - getUrlWithBackToParam(`create/${iouType}/taxRate/${transactionID}/${reportID}`, backTo), + route: ':action/:iouType/taxRate/:transactionID/:reportID?', + getRoute: (action: ValueOf, iouType: ValueOf, transactionID: string, reportID: string, backTo = '') => + getUrlWithBackToParam(`${action}/${iouType}/taxRate/${transactionID}/${reportID}`, backTo), }, MONEY_REQUEST_STEP_TAX_AMOUNT: { - route: 'create/:iouType/taxAmount/:transactionID/:reportID?', - getRoute: (iouType: ValueOf, transactionID: string, reportID: string, backTo: string) => - getUrlWithBackToParam(`create/${iouType}/taxAmount/${transactionID}/${reportID}`, backTo), + route: ':action/:iouType/taxAmount/:transactionID/:reportID?', + getRoute: (action: ValueOf, iouType: ValueOf, transactionID: string, reportID: string, backTo = '') => + getUrlWithBackToParam(`${action}/${iouType}/taxAmount/${transactionID}/${reportID}`, backTo), }, MONEY_REQUEST_STEP_CATEGORY: { route: ':action/:iouType/category/:transactionID/:reportID/:reportActionID?', @@ -439,10 +441,10 @@ const ROUTES = { ONBOARD_MANAGE_EXPENSES: 'onboard/manage-expenses', ONBOARD_EXPENSIFY_CLASSIC: 'onboard/expensify-classic', - TEACHERS_UNITE: 'teachersunite', - I_KNOW_A_TEACHER: 'teachersunite/i-know-a-teacher', - I_AM_A_TEACHER: 'teachersunite/i-am-a-teacher', - INTRO_SCHOOL_PRINCIPAL: 'teachersunite/intro-school-principal', + TEACHERS_UNITE: 'settings/teachersunite', + I_KNOW_A_TEACHER: 'settings/teachersunite/i-know-a-teacher', + I_AM_A_TEACHER: 'settings/teachersunite/i-am-a-teacher', + INTRO_SCHOOL_PRINCIPAL: 'settings/teachersunite/intro-school-principal', ERECEIPT: { route: 'eReceipt/:transactionID', @@ -551,6 +553,10 @@ const ROUTES = { route: 'settings/workspaces/:policyID/members', getRoute: (policyID: string) => `settings/workspaces/${policyID}/members` as const, }, + WORKSPACE_ACCOUNTING: { + route: 'settings/workspaces/:policyID/accounting', + getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting` as const, + }, WORKSPACE_CATEGORIES: { route: 'settings/workspaces/:policyID/categories', getRoute: (policyID: string) => `settings/workspaces/${policyID}/categories` as const, @@ -621,11 +627,11 @@ const ROUTES = { }, WORKSPACE_MEMBER_DETAILS: { route: 'settings/workspaces/:policyID/members/:accountID', - getRoute: (policyID: string, accountID: number, backTo?: string) => getUrlWithBackToParam(`settings/workspaces/${policyID}/members/${accountID}`, backTo), + getRoute: (policyID: string, accountID: number) => `settings/workspaces/${policyID}/members/${accountID}` as const, }, WORKSPACE_MEMBER_ROLE_SELECTION: { route: 'settings/workspaces/:policyID/members/:accountID/role-selection', - getRoute: (policyID: string, accountID: number, backTo?: string) => getUrlWithBackToParam(`settings/workspaces/${policyID}/members/${accountID}/role-selection`, backTo), + getRoute: (policyID: string, accountID: number) => `settings/workspaces/${policyID}/members/${accountID}/role-selection` as const, }, WORKSPACE_OWNER_CHANGE_SUCCESS: { route: 'settings/workspaces/:policyID/change-owner/:accountID/success', @@ -646,15 +652,15 @@ const ROUTES = { }, WORKSPACE_TAX_EDIT: { route: 'settings/workspaces/:policyID/tax/:taxID', - getRoute: (policyID: string, taxID: string) => `settings/workspaces/${policyID}/tax/${encodeURI(taxID)}` as const, + getRoute: (policyID: string, taxID: string) => `settings/workspaces/${policyID}/tax/${encodeURIComponent(taxID)}` as const, }, WORKSPACE_TAX_NAME: { route: 'settings/workspaces/:policyID/tax/:taxID/name', - getRoute: (policyID: string, taxID: string) => `settings/workspaces/${policyID}/tax/${encodeURI(taxID)}/name` as const, + getRoute: (policyID: string, taxID: string) => `settings/workspaces/${policyID}/tax/${encodeURIComponent(taxID)}/name` as const, }, WORKSPACE_TAX_VALUE: { route: 'settings/workspaces/:policyID/tax/:taxID/value', - getRoute: (policyID: string, taxID: string) => `settings/workspaces/${policyID}/tax/${encodeURI(taxID)}/value` as const, + getRoute: (policyID: string, taxID: string) => `settings/workspaces/${policyID}/tax/${encodeURIComponent(taxID)}/value` as const, }, WORKSPACE_DISTANCE_RATES: { route: 'settings/workspaces/:policyID/distance-rates', diff --git a/src/SCREENS.ts b/src/SCREENS.ts index fe1b1eac510f..e7cd76a1907b 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -29,6 +29,7 @@ const SCREENS = { WORKSPACES: 'Settings_Workspaces', SECURITY: 'Settings_Security', ABOUT: 'Settings_About', + SAVE_THE_WORLD: 'Settings_TeachersUnite', APP_DOWNLOAD_LINKS: 'Settings_App_Download_Links', ADD_DEBIT_CARD: 'Settings_Add_Debit_Card', ADD_BANK_ACCOUNT: 'Settings_Add_Bank_Account', @@ -212,6 +213,7 @@ const SCREENS = { INVOICES: 'Workspace_Invoices', TRAVEL: 'Workspace_Travel', MEMBERS: 'Workspace_Members', + ACCOUNTING: 'Workspace_Accounting', INVITE: 'Workspace_Invite', INVITE_MESSAGE: 'Workspace_Invite_Message', CATEGORIES: 'Workspace_Categories', @@ -245,7 +247,6 @@ const SCREENS = { CATEGORIES_SETTINGS: 'Categories_Settings', MORE_FEATURES: 'Workspace_More_Features', MEMBER_DETAILS: 'Workspace_Member_Details', - MEMBER_DETAILS_ROLE_SELECTION: 'Workspace_Member_Details_Role_Selection', OWNER_CHANGE_CHECK: 'Workspace_Owner_Change_Check', OWNER_CHANGE_SUCCESS: 'Workspace_Owner_Change_Success', OWNER_CHANGE_ERROR: 'Workspace_Owner_Change_Error', diff --git a/src/components/AddressForm.tsx b/src/components/AddressForm.tsx index 362ba88440a0..9ad4643e834a 100644 --- a/src/components/AddressForm.tsx +++ b/src/components/AddressForm.tsx @@ -159,7 +159,7 @@ function AddressForm({ city: INPUT_IDS.CITY, state: INPUT_IDS.STATE, zipCode: INPUT_IDS.ZIP_POST_CODE, - country: INPUT_IDS.COUNTRY, + country: INPUT_IDS.COUNTRY as Country, }} maxInputLength={CONST.FORM_CHARACTER_LIMIT} shouldSaveDraft={shouldSaveDraft} diff --git a/src/components/AddressSearch/index.tsx b/src/components/AddressSearch/index.tsx index d0aa2e206eb2..31ccfc954513 100644 --- a/src/components/AddressSearch/index.tsx +++ b/src/components/AddressSearch/index.tsx @@ -20,9 +20,10 @@ import type {GeolocationErrorCodeType} from '@libs/getCurrentPosition/getCurrent import * as GooglePlacesUtils from '@libs/GooglePlacesUtils'; import variables from '@styles/variables'; import CONST from '@src/CONST'; +import type {Address} from '@src/types/onyx/PrivatePersonalDetails'; import CurrentLocationButton from './CurrentLocationButton'; import isCurrentTargetInsideContainer from './isCurrentTargetInsideContainer'; -import type {AddressSearchProps, RenamedInputKeysProps} from './types'; +import type {AddressSearchProps} from './types'; // The error that's being thrown below will be ignored until we fork the // react-native-google-places-autocomplete repo and replace the @@ -213,7 +214,7 @@ function AddressSearch( if (inputID) { Object.entries(values).forEach(([key, inputValue]) => { - const inputKey = renamedInputKeys?.[key as keyof RenamedInputKeysProps] ?? key; + const inputKey = renamedInputKeys?.[key as keyof Address] ?? key; if (!inputKey) { return; } diff --git a/src/components/AddressSearch/types.ts b/src/components/AddressSearch/types.ts index efbcc6374341..bc7acf3f7e40 100644 --- a/src/components/AddressSearch/types.ts +++ b/src/components/AddressSearch/types.ts @@ -3,6 +3,7 @@ import type {NativeSyntheticEvent, StyleProp, TextInputFocusEventData, View, Vie import type {Place} from 'react-native-google-places-autocomplete'; import type {MaybePhraseKey} from '@libs/Localize'; import type Locale from '@src/types/onyx/Locale'; +import type {Address} from '@src/types/onyx/PrivatePersonalDetails'; type CurrentLocationButtonProps = { /** Callback that is called when the button is clicked */ @@ -12,18 +13,6 @@ type CurrentLocationButtonProps = { isDisabled?: boolean; }; -type RenamedInputKeysProps = { - street: string; - street2: string; - city: string; - state: string; - lat?: string; - lng?: string; - zipCode: string; - address?: string; - country?: string; -}; - type OnPressProps = { address: string; lat: number; @@ -61,7 +50,7 @@ type AddressSearchProps = { defaultValue?: string; /** A callback function when the value of this field has changed */ - onInputChange?: (value: string | number | RenamedInputKeysProps | StreetValue, key?: string) => void; + onInputChange?: (value: string | number | Address | StreetValue, key?: string) => void; /** A callback function when an address has been auto-selected */ onPress?: (props: OnPressProps) => void; @@ -79,7 +68,7 @@ type AddressSearchProps = { predefinedPlaces?: Place[] | null; /** A map of inputID key names */ - renamedInputKeys?: RenamedInputKeysProps; + renamedInputKeys?: Address; /** Maximum number of characters allowed in search input */ maxInputLength?: number; @@ -96,4 +85,4 @@ type AddressSearchProps = { type IsCurrentTargetInsideContainerType = (event: FocusEvent | NativeSyntheticEvent, containerRef: RefObject) => boolean; -export type {CurrentLocationButtonProps, AddressSearchProps, RenamedInputKeysProps, IsCurrentTargetInsideContainerType, StreetValue}; +export type {CurrentLocationButtonProps, AddressSearchProps, IsCurrentTargetInsideContainerType, StreetValue}; diff --git a/src/components/AmountForm.tsx b/src/components/AmountForm.tsx index e947c74f7c60..3c255bb5f482 100644 --- a/src/components/AmountForm.tsx +++ b/src/components/AmountForm.tsx @@ -84,7 +84,13 @@ function AmountForm( if (!ids.includes(relatedTargetId)) { return; } + event.preventDefault(); + setSelection({ + start: selection.end, + end: selection.end, + }); + if (!textInput.current) { return; } diff --git a/src/components/ArrowKeyFocusManager.js b/src/components/ArrowKeyFocusManager.js index 19dc3a7ac614..2532e52156df 100644 --- a/src/components/ArrowKeyFocusManager.js +++ b/src/components/ArrowKeyFocusManager.js @@ -1,5 +1,6 @@ +import {useIsFocused} from '@react-navigation/native'; import PropTypes from 'prop-types'; -import {Component} from 'react'; +import React, {Component} from 'react'; import KeyboardShortcut from '@libs/KeyboardShortcut'; import CONST from '@src/CONST'; @@ -16,6 +17,9 @@ const propTypes = { /** The maximum index – provided so that the focus can be sent back to the beginning of the list when the end is reached. */ maxIndex: PropTypes.number.isRequired, + /** Whether navigation is focused */ + isFocused: PropTypes.bool.isRequired, + /** A callback executed when the focused input changes. */ onFocusedIndexChanged: PropTypes.func.isRequired, @@ -32,7 +36,7 @@ const defaultProps = { shouldResetIndexOnEndReached: true, }; -class ArrowKeyFocusManager extends Component { +class BaseArrowKeyFocusManager extends Component { componentDidMount() { const arrowUpConfig = CONST.KEYBOARD_SHORTCUTS.ARROW_UP; const arrowDownConfig = CONST.KEYBOARD_SHORTCUTS.ARROW_DOWN; @@ -77,7 +81,7 @@ class ArrowKeyFocusManager extends Component { } onArrowUpKey() { - if (this.props.maxIndex < 0) { + if (this.props.maxIndex < 0 || !this.props.isFocused) { return; } @@ -96,7 +100,7 @@ class ArrowKeyFocusManager extends Component { } onArrowDownKey() { - if (this.props.maxIndex < 0) { + if (this.props.maxIndex < 0 || !this.props.isFocused) { return; } @@ -119,7 +123,20 @@ class ArrowKeyFocusManager extends Component { } } -ArrowKeyFocusManager.propTypes = propTypes; -ArrowKeyFocusManager.defaultProps = defaultProps; +function ArrowKeyFocusManager(props) { + const isFocused = useIsFocused(); + + return ( + + ); +} + +BaseArrowKeyFocusManager.propTypes = propTypes; +BaseArrowKeyFocusManager.defaultProps = defaultProps; +ArrowKeyFocusManager.displayName = 'ArrowKeyFocusManager'; export default ArrowKeyFocusManager; diff --git a/src/components/AttachmentModal.tsx b/src/components/AttachmentModal.tsx old mode 100755 new mode 100644 index c915b2f227aa..7d13524b78df --- a/src/components/AttachmentModal.tsx +++ b/src/components/AttachmentModal.tsx @@ -614,6 +614,7 @@ export default withOnyx({ const transactionID = parentReportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.IOU ? parentReportAction?.originalMessage.IOUTransactionID ?? '0' : '0'; return `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`; }, + initWithStoredValues: false, }, parentReport: { key: ({report}) => `${ONYXKEYS.COLLECTION.REPORT}${report ? report.parentReportID : '0'}`, diff --git a/src/components/Attachments/AttachmentCarousel/extractAttachmentsFromReport.ts b/src/components/Attachments/AttachmentCarousel/extractAttachmentsFromReport.ts index 342afa1d5366..d1185f88ccd5 100644 --- a/src/components/Attachments/AttachmentCarousel/extractAttachmentsFromReport.ts +++ b/src/components/Attachments/AttachmentCarousel/extractAttachmentsFromReport.ts @@ -76,9 +76,9 @@ function extractAttachmentsFromReport(parentReportAction?: OnyxEntry', `data-flagged="${hasBeenFlagged}" data-id="${action.reportActionID}"/>`); + const html = (action?.message?.[0]?.html ?? '').replace('/>', `data-flagged="${hasBeenFlagged}" data-id="${action.reportActionID}"/>`); htmlParser.write(html); }); htmlParser.end(); diff --git a/src/components/Avatar.tsx b/src/components/Avatar.tsx index 2b2d0a60f657..358f5333bfba 100644 --- a/src/components/Avatar.tsx +++ b/src/components/Avatar.tsx @@ -74,21 +74,26 @@ function Avatar({ setImageError(false); }, [source]); - if (!source) { - return null; - } - const isWorkspace = type === CONST.ICON_TYPE_WORKSPACE; const iconSize = StyleUtils.getAvatarSize(size); const imageStyle: StyleProp = [StyleUtils.getAvatarStyle(size), imageStyles, styles.noBorderRadius]; const iconStyle = imageStyles ? [StyleUtils.getAvatarStyle(size), styles.bgTransparent, imageStyles] : undefined; - const iconFillColor = isWorkspace ? StyleUtils.getDefaultWorkspaceAvatarColor(name).fill : fill; + // We pass the color styles down to the SVG for the workspace and fallback avatar. + const useFallBackAvatar = imageError || source === Expensicons.FallbackAvatar || !source; const fallbackAvatar = isWorkspace ? ReportUtils.getDefaultWorkspaceAvatar(name) : fallbackIcon || Expensicons.FallbackAvatar; const fallbackAvatarTestID = isWorkspace ? ReportUtils.getDefaultWorkspaceAvatarTestID(name) : fallbackIconTestID || 'SvgFallbackAvatar Icon'; - - const avatarSource = imageError ? fallbackAvatar : source; + const avatarSource = useFallBackAvatar ? fallbackAvatar : source; + + let iconColors; + if (isWorkspace) { + iconColors = StyleUtils.getDefaultWorkspaceAvatarColor(name); + } else if (useFallBackAvatar) { + iconColors = StyleUtils.getBackgroundColorAndFill(theme.border, theme.icon); + } else { + iconColors = null; + } return ( @@ -107,13 +112,8 @@ function Avatar({ src={avatarSource} height={iconSize} width={iconSize} - fill={imageError ? theme.offline : iconFillColor} - additionalStyles={[ - StyleUtils.getAvatarBorderStyle(size, type), - isWorkspace && StyleUtils.getDefaultWorkspaceAvatarColor(name), - imageError && StyleUtils.getBackgroundColorStyle(theme.fallbackIconColor), - iconAdditionalStyles, - ]} + fill={imageError ? iconColors?.fill ?? theme.offline : iconColors?.fill ?? fill} + additionalStyles={[StyleUtils.getAvatarBorderStyle(size, type), iconColors, iconAdditionalStyles]} /> )} diff --git a/src/components/CardPreview.tsx b/src/components/CardPreview.tsx index 3ac56d6b26a8..acdf8a92fb5e 100644 --- a/src/components/CardPreview.tsx +++ b/src/components/CardPreview.tsx @@ -3,7 +3,6 @@ import {View} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; import {withOnyx} from 'react-native-onyx'; import ExpensifyCardImage from '@assets/images/expensify-card.svg'; -import usePrivatePersonalDetails from '@hooks/usePrivatePersonalDetails'; import useThemeStyles from '@hooks/useThemeStyles'; import variables from '@styles/variables'; import ONYXKEYS from '@src/ONYXKEYS'; @@ -22,7 +21,6 @@ type CardPreviewProps = CardPreviewOnyxProps; function CardPreview({privatePersonalDetails, session}: CardPreviewProps) { const styles = useThemeStyles(); - usePrivatePersonalDetails(); const {legalFirstName, legalLastName} = privatePersonalDetails ?? {}; const cardHolder = legalFirstName && legalLastName ? `${legalFirstName} ${legalLastName}` : session?.email ?? ''; diff --git a/src/components/Composer/index.tsx b/src/components/Composer/index.tsx index 5d01b05bb51f..69cc6b208652 100755 --- a/src/components/Composer/index.tsx +++ b/src/components/Composer/index.tsx @@ -388,13 +388,20 @@ function Composer( disabled={isDisabled} onKeyPress={handleKeyPress} onFocus={(e) => { - ReportActionComposeFocusManager.onComposerFocus(() => { - if (!textInput.current) { - return; - } - - textInput.current.focus(); - }); + if (isReportActionCompose) { + ReportActionComposeFocusManager.onComposerFocus(null); + } else { + // While a user edits a comment, if they open the LHN menu, we want to ensure that + // the focus returns to the message edit composer after they click on a menu item (e.g. mark as read). + // To achieve this, we re-assign the focus callback here. + ReportActionComposeFocusManager.onComposerFocus(() => { + if (!textInput.current) { + return; + } + + textInput.current.focus(); + }); + } props.onFocus?.(e); }} diff --git a/src/components/DatePicker/index.tsx b/src/components/DatePicker/index.tsx index 96047d4f5578..3ca60c8a6edb 100644 --- a/src/components/DatePicker/index.tsx +++ b/src/components/DatePicker/index.tsx @@ -112,7 +112,10 @@ function DatePicker( readOnly /> - + {uniqueMessages.map((message, i) => isReceiptError(message) ? ( - { - fileDownload(message.source, message.filename); - }} + style={styles.offlineFeedback.text} > - {Localize.translateLocal('iou.error.receiptFailureMessage')} + { + fileDownload(message.source, message.filename); + }} > - {Localize.translateLocal('iou.error.receiptFailureMessage')} - {Localize.translateLocal('iou.error.saveFileMessage')} - {Localize.translateLocal('iou.error.loseFileMessage')} - - + {Localize.translateLocal('iou.error.saveFileMessage')} + + + {Localize.translateLocal('iou.error.loseFileMessage')} + ) : ( void; /** The emojis consisting emoji code and indices that the icons should link to */ - headerEmojis: PropTypes.arrayOf( - PropTypes.shape({ - code: PropTypes.string.isRequired, - index: PropTypes.number.isRequired, - icon: sourcePropTypes.isRequired, - }), - ).isRequired, + headerEmojis: HeaderIndice[]; }; -function CategoryShortcutBar(props) { +function CategoryShortcutBar({onPress, headerEmojis}: CategoryShortcutBarProps) { const styles = useThemeStyles(); return ( - {_.map(props.headerEmojis, (headerEmoji, i) => ( + {headerEmojis.map((headerEmoji) => ( props.onPress(headerEmoji.index)} - key={`categoryShortcut${i}`} + onPress={() => onPress(headerEmoji.index)} + key={`categoryShortcut${headerEmoji.index}`} code={headerEmoji.code} /> ))} @@ -36,7 +28,6 @@ function CategoryShortcutBar(props) { ); } -CategoryShortcutBar.propTypes = propTypes; CategoryShortcutBar.displayName = 'CategoryShortcutBar'; export default CategoryShortcutBar; diff --git a/src/components/EmojiPicker/CategoryShortcutButton.js b/src/components/EmojiPicker/CategoryShortcutButton.tsx similarity index 76% rename from src/components/EmojiPicker/CategoryShortcutButton.js rename to src/components/EmojiPicker/CategoryShortcutButton.tsx index e7db8161cea1..7ffff218d1fe 100644 --- a/src/components/EmojiPicker/CategoryShortcutButton.js +++ b/src/components/EmojiPicker/CategoryShortcutButton.tsx @@ -1,7 +1,5 @@ -import PropTypes from 'prop-types'; import React, {useState} from 'react'; import Icon from '@components/Icon'; -import sourcePropTypes from '@components/Image/sourcePropTypes'; import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback'; import Tooltip from '@components/Tooltip'; import useLocalize from '@hooks/useLocalize'; @@ -11,19 +9,21 @@ import useThemeStyles from '@hooks/useThemeStyles'; import getButtonState from '@libs/getButtonState'; import variables from '@styles/variables'; import CONST from '@src/CONST'; +import type {TranslationPaths} from '@src/languages/types'; +import type IconAsset from '@src/types/utils/IconAsset'; -const propTypes = { +type CategoryShortcutButtonProps = { /** The emoji code of the category header */ - code: PropTypes.string.isRequired, + code: string; /** The icon representation of the category that this button links to */ - icon: sourcePropTypes.isRequired, + icon: IconAsset; /** The function to call when an emoji is selected */ - onPress: PropTypes.func.isRequired, + onPress: () => void; }; -function CategoryShortcutButton(props) { +function CategoryShortcutButton({code, icon, onPress}: CategoryShortcutButtonProps) { const theme = useTheme(); const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); @@ -32,21 +32,21 @@ function CategoryShortcutButton(props) { return ( setIsHighlighted(true)} onHoverOut={() => setIsHighlighted(false)} style={({pressed}) => [StyleUtils.getButtonBackgroundColorStyle(getButtonState(false, pressed)), styles.categoryShortcutButton, isHighlighted && styles.emojiItemHighlighted]} - accessibilityLabel={`emojiPicker.headers.${props.code}`} + accessibilityLabel={`emojiPicker.headers.${code}`} role={CONST.ROLE.BUTTON} > @@ -54,6 +54,6 @@ function CategoryShortcutButton(props) { ); } -CategoryShortcutButton.propTypes = propTypes; + CategoryShortcutButton.displayName = 'CategoryShortcutButton'; export default React.memo(CategoryShortcutButton); diff --git a/src/components/EmojiPicker/EmojiPicker.js b/src/components/EmojiPicker/EmojiPicker.tsx similarity index 71% rename from src/components/EmojiPicker/EmojiPicker.js rename to src/components/EmojiPicker/EmojiPicker.tsx index fbfa4563d70e..8c7b4df3264f 100644 --- a/src/components/EmojiPicker/EmojiPicker.js +++ b/src/components/EmojiPicker/EmojiPicker.tsx @@ -1,12 +1,15 @@ -import PropTypes from 'prop-types'; import React, {forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState} from 'react'; +import type {ForwardedRef, RefObject} from 'react'; import {Dimensions} from 'react-native'; -import _ from 'underscore'; +import type {View} from 'react-native'; +import type {Emoji} from '@assets/emojis/types'; import PopoverWithMeasuredContent from '@components/PopoverWithMeasuredContent'; +import type {BaseTextInputRef} from '@components/TextInput/BaseTextInput/types'; import withViewportOffsetTop from '@components/withViewportOffsetTop'; import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; import useWindowDimensions from '@hooks/useWindowDimensions'; +import type {AnchorOrigin, EmojiPickerRef, EmojiPopoverAnchor, OnEmojiSelected, OnModalHideValue, OnWillShowPicker} from '@libs/actions/EmojiPickerAction'; import * as Browser from '@libs/Browser'; import calculateAnchorPosition from '@libs/calculateAnchorPosition'; import CONST from '@src/CONST'; @@ -17,11 +20,11 @@ const DEFAULT_ANCHOR_ORIGIN = { vertical: CONST.MODAL.ANCHOR_ORIGIN_VERTICAL.BOTTOM, }; -const propTypes = { - viewportOffsetTop: PropTypes.number.isRequired, +type EmojiPickerProps = { + viewportOffsetTop: number; }; -const EmojiPicker = forwardRef((props, ref) => { +function EmojiPicker({viewportOffsetTop}: EmojiPickerProps, ref: ForwardedRef) { const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); const [isEmojiPickerVisible, setIsEmojiPickerVisible] = useState(false); @@ -29,17 +32,17 @@ const EmojiPicker = forwardRef((props, ref) => { horizontal: 0, vertical: 0, }); - const [emojiPopoverAnchorOrigin, setEmojiPopoverAnchorOrigin] = useState(DEFAULT_ANCHOR_ORIGIN); - const [activeID, setActiveID] = useState(); - const emojiPopoverAnchorRef = useRef(null); + const [emojiPopoverAnchorOrigin, setEmojiPopoverAnchorOrigin] = useState(DEFAULT_ANCHOR_ORIGIN); + const [activeID, setActiveID] = useState(); + const emojiPopoverAnchorRef = useRef(null); const emojiAnchorDimension = useRef({ width: 0, height: 0, }); const onModalHide = useRef(() => {}); - const onEmojiSelected = useRef(() => {}); - const activeEmoji = useRef(); - const emojiSearchInput = useRef(); + const onEmojiSelected = useRef(() => {}); + const activeEmoji = useRef(); + const emojiSearchInput = useRef(); const {isSmallScreenWidth, windowHeight} = useWindowDimensions(); /** @@ -50,34 +53,39 @@ const EmojiPicker = forwardRef((props, ref) => { * * Don't directly get the ref from emojiPopoverAnchorRef, instead use getEmojiPopoverAnchor() */ - const getEmojiPopoverAnchor = useCallback(() => emojiPopoverAnchorRef.current || emojiPopoverAnchorRef, []); + const getEmojiPopoverAnchor = useCallback(() => emojiPopoverAnchorRef.current ?? emojiPopoverAnchorRef?.current, []); /** * Show the emoji picker menu. * - * @param {Function} [onModalHideValue=() => {}] - Run a callback when Modal hides. - * @param {Function} [onEmojiSelectedValue=() => {}] - Run a callback when Emoji selected. - * @param {React.MutableRefObject} emojiPopoverAnchorValue - Element to which Popover is anchored - * @param {Object} [anchorOrigin=DEFAULT_ANCHOR_ORIGIN] - Anchor origin for Popover - * @param {Function} [onWillShow] - Run a callback when Popover will show - * @param {String} id - Unique id for EmojiPicker - * @param {String} activeEmojiValue - Selected emoji to be highlighted + * @param [onModalHideValue=() => {}] - Run a callback when Modal hides. + * @param [onEmojiSelectedValue=() => {}] - Run a callback when Emoji selected. + * @param emojiPopoverAnchorValue - Element to which Popover is anchored + * @param [anchorOrigin=DEFAULT_ANCHOR_ORIGIN] - Anchor origin for Popover + * @param [onWillShow] - Run a callback when Popover will show + * @param id - Unique id for EmojiPicker + * @param activeEmojiValue - Selected emoji to be highlighted */ - const showEmojiPicker = (onModalHideValue, onEmojiSelectedValue, emojiPopoverAnchorValue, anchorOrigin, onWillShow, id, activeEmojiValue) => { + const showEmojiPicker = ( + onModalHideValue: OnModalHideValue, + onEmojiSelectedValue: OnEmojiSelected, + emojiPopoverAnchorValue: EmojiPopoverAnchor, + anchorOrigin?: AnchorOrigin, + onWillShow?: OnWillShowPicker, + id?: string, + activeEmojiValue?: string, + ) => { onModalHide.current = onModalHideValue; onEmojiSelected.current = onEmojiSelectedValue; activeEmoji.current = activeEmojiValue; emojiPopoverAnchorRef.current = emojiPopoverAnchorValue; const emojiPopoverAnchor = getEmojiPopoverAnchor(); - if (emojiPopoverAnchor.current && emojiPopoverAnchor.current.blur) { - // Drop focus to avoid blue focus ring. - emojiPopoverAnchor.current.blur(); - } + // Drop focus to avoid blue focus ring. + emojiPopoverAnchor?.current?.blur(); - const anchorOriginValue = anchorOrigin || DEFAULT_ANCHOR_ORIGIN; + const anchorOriginValue = anchorOrigin ?? DEFAULT_ANCHOR_ORIGIN; - calculateAnchorPosition(emojiPopoverAnchor.current, anchorOriginValue).then((value) => { - // eslint-disable-next-line es/no-optional-chaining + calculateAnchorPosition(emojiPopoverAnchor?.current, anchorOriginValue).then((value) => { onWillShow?.(); setIsEmojiPickerVisible(true); setEmojiPopoverAnchorPosition({ @@ -95,10 +103,8 @@ const EmojiPicker = forwardRef((props, ref) => { /** * Hide the emoji picker menu. - * - * @param {Boolean} isNavigating */ - const hideEmojiPicker = (isNavigating) => { + const hideEmojiPicker = (isNavigating?: boolean) => { if (isNavigating) { onModalHide.current = () => {}; } @@ -124,11 +130,8 @@ const EmojiPicker = forwardRef((props, ref) => { /** * Callback for the emoji picker to add whatever emoji is chosen into the main input - * - * @param {String} emoji - * @param {Object} emojiObject */ - const selectEmoji = (emoji, emojiObject) => { + const selectEmoji = (emoji: string, emojiObject: Emoji) => { // Prevent fast click / multiple emoji selection; // The first click will hide the emoji picker by calling the hideEmojiPicker() function if (!isEmojiPickerVisible) { @@ -136,18 +139,15 @@ const EmojiPicker = forwardRef((props, ref) => { } hideEmojiPicker(false); - if (_.isFunction(onEmojiSelected.current)) { + if (typeof onEmojiSelected.current === 'function') { onEmojiSelected.current(emoji, emojiObject); } }; /** * Whether emoji picker is active for the given id. - * - * @param {String} id - * @return {Boolean} */ - const isActive = (id) => Boolean(id) && id === activeID; + const isActive = (id: string) => !!id && id === activeID; const clearActive = () => setActiveID(null); @@ -158,14 +158,14 @@ const EmojiPicker = forwardRef((props, ref) => { useEffect(() => { const emojiPopoverDimensionListener = Dimensions.addEventListener('change', () => { const emojiPopoverAnchor = getEmojiPopoverAnchor(); - if (!emojiPopoverAnchor.current) { + if (!emojiPopoverAnchor?.current) { // In small screen width, the window size change might be due to keyboard open/hide, we should avoid hide EmojiPicker in those cases if (isEmojiPickerVisible && !isSmallScreenWidth) { hideEmojiPicker(); } return; } - calculateAnchorPosition(emojiPopoverAnchor.current, emojiPopoverAnchorOrigin).then((value) => { + calculateAnchorPosition(emojiPopoverAnchor?.current, emojiPopoverAnchorOrigin).then((value) => { setEmojiPopoverAnchorPosition({ horizontal: value.horizontal, vertical: value.vertical, @@ -201,18 +201,20 @@ const EmojiPicker = forwardRef((props, ref) => { vertical: emojiPopoverAnchorPosition.vertical, horizontal: emojiPopoverAnchorPosition.horizontal, }} - anchorRef={getEmojiPopoverAnchor()} + anchorRef={getEmojiPopoverAnchor() as RefObject} withoutOverlay popoverDimensions={{ width: CONST.EMOJI_PICKER_SIZE.WIDTH, height: CONST.EMOJI_PICKER_SIZE.HEIGHT, }} anchorAlignment={emojiPopoverAnchorOrigin} - outerStyle={StyleUtils.getOuterModalStyle(windowHeight, props.viewportOffsetTop)} + outerStyle={StyleUtils.getOuterModalStyle(windowHeight, viewportOffsetTop)} innerContainerStyle={styles.popoverInnerContainer} anchorDimensions={emojiAnchorDimension.current} avoidKeyboard shoudSwitchPositionIfOverflow + shouldEnableNewFocusManagement + restoreFocusType={CONST.MODAL.RESTORE_FOCUS_TYPE.DELETE} > { /> ); -}); +} -EmojiPicker.propTypes = propTypes; EmojiPicker.displayName = 'EmojiPicker'; -export default withViewportOffsetTop(EmojiPicker); +export default withViewportOffsetTop(forwardRef(EmojiPicker)); diff --git a/src/components/EmojiPicker/EmojiPickerButton.js b/src/components/EmojiPicker/EmojiPickerButton.tsx similarity index 63% rename from src/components/EmojiPicker/EmojiPickerButton.js rename to src/components/EmojiPicker/EmojiPickerButton.tsx index 438deb7e53d9..6e0944e5a913 100644 --- a/src/components/EmojiPicker/EmojiPickerButton.js +++ b/src/components/EmojiPicker/EmojiPickerButton.tsx @@ -1,77 +1,72 @@ -import PropTypes from 'prop-types'; +import {useIsFocused} from '@react-navigation/native'; import React, {memo, useEffect, useRef} from 'react'; import Icon from '@components/Icon'; import * as Expensicons from '@components/Icon/Expensicons'; import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback'; import Tooltip from '@components/Tooltip/PopoverAnchorTooltip'; -import withLocalize, {withLocalizePropTypes} from '@components/withLocalize'; -import withNavigationFocus from '@components/withNavigationFocus'; +import useLocalize from '@hooks/useLocalize'; import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; -import compose from '@libs/compose'; import getButtonState from '@libs/getButtonState'; import * as EmojiPickerAction from '@userActions/EmojiPickerAction'; import CONST from '@src/CONST'; -const propTypes = { +type EmojiPickerButtonProps = { /** Flag to disable the emoji picker button */ - isDisabled: PropTypes.bool, + isDisabled?: boolean; /** Id to use for the emoji picker button */ - id: PropTypes.string, + id?: string; /** Unique id for emoji picker */ - emojiPickerID: PropTypes.string, + emojiPickerID?: string; /** Emoji popup anchor offset shift vertical */ - shiftVertical: PropTypes.number, + shiftVertical?: number; - ...withLocalizePropTypes, -}; + onModalHide: EmojiPickerAction.OnModalHideValue; -const defaultProps = { - isDisabled: false, - id: '', - emojiPickerID: '', - shiftVertical: 0, + onEmojiSelected: EmojiPickerAction.OnEmojiSelected; }; -function EmojiPickerButton(props) { +function EmojiPickerButton({isDisabled = false, id = '', emojiPickerID = '', shiftVertical = 0, onModalHide, onEmojiSelected}: EmojiPickerButtonProps) { const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); const emojiPopoverAnchor = useRef(null); + const {translate} = useLocalize(); + const isFocused = useIsFocused(); useEffect(() => EmojiPickerAction.resetEmojiPopoverAnchor, []); return ( - + [styles.chatItemEmojiButton, StyleUtils.getButtonBackgroundColorStyle(getButtonState(hovered, pressed))]} - disabled={props.isDisabled} + disabled={isDisabled} onPress={() => { - if (!props.isFocused) { + if (!isFocused) { return; } - if (!EmojiPickerAction.emojiPickerRef.current.isEmojiPickerVisible) { + if (!EmojiPickerAction.emojiPickerRef?.current?.isEmojiPickerVisible) { EmojiPickerAction.showEmojiPicker( - props.onModalHide, - props.onEmojiSelected, + onModalHide, + onEmojiSelected, emojiPopoverAnchor, { horizontal: CONST.MODAL.ANCHOR_ORIGIN_HORIZONTAL.RIGHT, vertical: CONST.MODAL.ANCHOR_ORIGIN_VERTICAL.BOTTOM, - shiftVertical: props.shiftVertical, + shiftVertical, }, () => {}, - props.emojiPickerID, + emojiPickerID, ); } else { EmojiPickerAction.emojiPickerRef.current.hideEmojiPicker(); } }} - id={props.id} - accessibilityLabel={props.translate('reportActionCompose.emoji')} + id={id} + accessibilityLabel={translate('reportActionCompose.emoji')} > {({hovered, pressed}) => ( void; + value?: string; + disabled?: boolean; + style: StyleProp; }; -function EmojiPickerButtonDropdown(props) { +function EmojiPickerButtonDropdown( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + {isDisabled = false, onModalHide, onInputChange, value, disabled, style, ...otherProps}: EmojiPickerButtonDropdownProps, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + ref: ForwardedRef, +) { const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); const emojiPopoverAnchor = useRef(null); + const {translate} = useLocalize(); + useEffect(() => EmojiPickerAction.resetEmojiPopoverAnchor, []); const onPress = () => { if (EmojiPickerAction.isEmojiPickerVisible()) { @@ -36,8 +46,8 @@ function EmojiPickerButtonDropdown(props) { } EmojiPickerAction.showEmojiPicker( - props.onModalHide, - (emoji) => props.onInputChange(emoji), + onModalHide, + (emoji) => onInputChange(emoji), emojiPopoverAnchor, { horizontal: CONST.MODAL.ANCHOR_ORIGIN_HORIZONTAL.LEFT, @@ -46,16 +56,16 @@ function EmojiPickerButtonDropdown(props) { }, () => {}, undefined, - props.value, + value, ); }; return ( - + - {props.value || ( - - )} + { + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + value || ( + + ) + } - + ( - -)); - -EmojiPickerButtonDropdownWithRef.displayName = 'EmojiPickerButtonDropdownWithRef'; - -export default withLocalize(EmojiPickerButtonDropdownWithRef); +export default React.forwardRef(EmojiPickerButtonDropdown); diff --git a/src/components/EmojiPicker/EmojiPickerMenu/BaseEmojiPickerMenu.js b/src/components/EmojiPicker/EmojiPickerMenu/BaseEmojiPickerMenu.tsx similarity index 62% rename from src/components/EmojiPicker/EmojiPickerMenu/BaseEmojiPickerMenu.js rename to src/components/EmojiPicker/EmojiPickerMenu/BaseEmojiPickerMenu.tsx index a9bc1eeac8b6..8e1112e7844c 100644 --- a/src/components/EmojiPicker/EmojiPickerMenu/BaseEmojiPickerMenu.js +++ b/src/components/EmojiPicker/EmojiPickerMenu/BaseEmojiPickerMenu.tsx @@ -1,87 +1,61 @@ import {FlashList} from '@shopify/flash-list'; -import PropTypes from 'prop-types'; +import type {ListRenderItem} from '@shopify/flash-list'; import React, {useMemo} from 'react'; +import type {ForwardedRef} from 'react'; import {StyleSheet, View} from 'react-native'; +import type {StyleProp, ViewStyle} from 'react-native'; +import type {OnyxEntry} from 'react-native-onyx'; import CategoryShortcutBar from '@components/EmojiPicker/CategoryShortcutBar'; import EmojiSkinToneList from '@components/EmojiPicker/EmojiSkinToneList'; -import refPropTypes from '@components/refPropTypes'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import useWindowDimensions from '@hooks/useWindowDimensions'; -import stylePropTypes from '@styles/stylePropTypes'; +import type {EmojiPickerList, EmojiPickerListItem, HeaderIndice} from '@libs/EmojiUtils'; import CONST from '@src/CONST'; -const emojiPropTypes = { - /** The code of the item */ - code: PropTypes.string.isRequired, - - /** Whether the item is a header or not */ - header: PropTypes.bool, - - /** Whether the item is a spacer or not */ - spacer: PropTypes.bool, - - /** Types of an emoji - e.g. different skin types */ - types: PropTypes.arrayOf(PropTypes.string), -}; - -const propTypes = { +type BaseEmojiPickerMenuProps = { /** Indicates if the emoji list is filtered or not */ - isFiltered: PropTypes.bool.isRequired, + isFiltered: boolean; /** Array of header emojis */ - headerEmojis: PropTypes.arrayOf(PropTypes.shape(emojiPropTypes)).isRequired, + headerEmojis: HeaderIndice[]; /** Function to scroll to a specific header in the emoji list */ - scrollToHeader: PropTypes.func.isRequired, + scrollToHeader: (headerIndex: number) => void; /** Style to be applied to the list wrapper */ - listWrapperStyle: stylePropTypes, - - /** Reference to the emoji list */ - forwardedRef: refPropTypes, + listWrapperStyle?: StyleProp; /** The data for the emoji list */ - data: PropTypes.arrayOf(PropTypes.shape(emojiPropTypes)).isRequired, + data: EmojiPickerList; /** Function to render each item in the list */ - renderItem: PropTypes.func.isRequired, + renderItem: ListRenderItem; /** Extra data to be passed to the list for re-rendering */ - // eslint-disable-next-line react/forbid-prop-types - extraData: PropTypes.any, + extraData?: Array | ((skinTone: number) => void)>; /** Array of indices for the sticky headers */ - stickyHeaderIndices: PropTypes.arrayOf(PropTypes.number), + stickyHeaderIndices?: number[]; /** Whether the list should always bounce vertically */ - alwaysBounceVertical: PropTypes.bool, -}; - -const defaultProps = { - listWrapperStyle: [], - forwardedRef: () => {}, - extraData: [], - stickyHeaderIndices: [], - alwaysBounceVertical: false, + alwaysBounceVertical?: boolean; }; /** * Improves FlashList's recycling when there are different types of items - * @param {Object} item - * @returns {String} */ -const getItemType = (item) => { +const getItemType = (item: EmojiPickerListItem): string | undefined => { // item is undefined only when list is empty if (!item) { return; } - if (item.name) { + if ('name' in item && item.name) { return CONST.EMOJI_PICKER_ITEM_TYPES.EMOJI; } - if (item.header) { + if ('header' in item && item.header) { return CONST.EMOJI_PICKER_ITEM_TYPES.HEADER; } @@ -91,15 +65,11 @@ const getItemType = (item) => { /** * Return a unique key for each emoji item * - * @param {Object} item - * @param {Number} index - * @returns {String} */ -const keyExtractor = (item, index) => `emoji_picker_${item.code}_${index}`; +const keyExtractor = (item: EmojiPickerListItem, index: number): string => `emoji_picker_${item.code}_${index}`; /** * Renders the list empty component - * @returns {React.Component} */ function ListEmptyComponent() { const styles = useThemeStyles(); @@ -108,7 +78,10 @@ function ListEmptyComponent() { return {translate('common.noResultsFound')}; } -function BaseEmojiPickerMenu({headerEmojis, scrollToHeader, isFiltered, listWrapperStyle, forwardedRef, data, renderItem, stickyHeaderIndices, extraData, alwaysBounceVertical}) { +function BaseEmojiPickerMenu( + {headerEmojis, scrollToHeader, isFiltered, listWrapperStyle = [], data, renderItem, stickyHeaderIndices = [], extraData = [], alwaysBounceVertical = false}: BaseEmojiPickerMenuProps, + ref: ForwardedRef>, +) { const styles = useThemeStyles(); const {windowWidth, isSmallScreenWidth} = useWindowDimensions(); @@ -128,7 +101,7 @@ function BaseEmojiPickerMenu({headerEmojis, scrollToHeader, isFiltered, listWrap )} ( - -)); - -BaseEmojiPickerMenuWithRef.displayName = 'BaseEmojiPickerMenuWithRef'; - -export default BaseEmojiPickerMenuWithRef; +export default React.forwardRef(BaseEmojiPickerMenu); diff --git a/src/components/EmojiPicker/EmojiPickerMenu/emojiPickerMenuPropTypes.js b/src/components/EmojiPicker/EmojiPickerMenu/emojiPickerMenuPropTypes.js deleted file mode 100644 index ae345f6fcf56..000000000000 --- a/src/components/EmojiPicker/EmojiPickerMenu/emojiPickerMenuPropTypes.js +++ /dev/null @@ -1,8 +0,0 @@ -import PropTypes from 'prop-types'; - -const emojiPickerMenuPropTypes = { - /** Function to add the selected emoji to the main compose text input */ - onEmojiSelected: PropTypes.func.isRequired, -}; - -export default emojiPickerMenuPropTypes; diff --git a/src/components/EmojiPicker/EmojiPickerMenu/index.native.js b/src/components/EmojiPicker/EmojiPickerMenu/index.native.tsx similarity index 72% rename from src/components/EmojiPicker/EmojiPickerMenu/index.native.js rename to src/components/EmojiPicker/EmojiPickerMenu/index.native.tsx index 67f0542fb82c..5b7dda1c7ab1 100644 --- a/src/components/EmojiPicker/EmojiPickerMenu/index.native.js +++ b/src/components/EmojiPicker/EmojiPickerMenu/index.native.tsx @@ -1,10 +1,13 @@ +import type {ListRenderItem} from '@shopify/flash-list'; +import lodashDebounce from 'lodash/debounce'; import React, {useCallback} from 'react'; +import type {ForwardedRef} from 'react'; import {View} from 'react-native'; import {runOnUI, scrollTo} from 'react-native-reanimated'; -import _ from 'underscore'; import EmojiPickerMenuItem from '@components/EmojiPicker/EmojiPickerMenuItem'; import Text from '@components/Text'; import TextInput from '@components/TextInput'; +import type {BaseTextInputRef} from '@components/TextInput/BaseTextInput/types'; import useLocalize from '@hooks/useLocalize'; import useSingleExecution from '@hooks/useSingleExecution'; import useStyleUtils from '@hooks/useStyleUtils'; @@ -12,13 +15,13 @@ import useThemeStyles from '@hooks/useThemeStyles'; import useWindowDimensions from '@hooks/useWindowDimensions'; import * as EmojiUtils from '@libs/EmojiUtils'; import CONST from '@src/CONST'; +import type {TranslationPaths} from '@src/languages/types'; import BaseEmojiPickerMenu from './BaseEmojiPickerMenu'; -import emojiPickerMenuPropTypes from './emojiPickerMenuPropTypes'; +import type EmojiPickerMenuProps from './types'; import useEmojiPickerMenu from './useEmojiPickerMenu'; -const propTypes = emojiPickerMenuPropTypes; - -function EmojiPickerMenu({onEmojiSelected, activeEmoji}) { +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function EmojiPickerMenu({onEmojiSelected, activeEmoji}: EmojiPickerMenuProps, ref: ForwardedRef) { const styles = useThemeStyles(); const {windowWidth, isSmallScreenWidth} = useWindowDimensions(); const {translate} = useLocalize(); @@ -41,10 +44,8 @@ function EmojiPickerMenu({onEmojiSelected, activeEmoji}) { /** * Filter the entire list of emojis to only emojis that have the search term in their keywords - * - * @param {String} searchTerm */ - const filterEmojis = _.debounce((searchTerm) => { + const filterEmojis = lodashDebounce((searchTerm: string) => { const [normalizedSearchTerm, newFilteredEmojiList] = suggestEmojis(searchTerm); if (emojiListRef.current) { @@ -58,11 +59,11 @@ function EmojiPickerMenu({onEmojiSelected, activeEmoji}) { return; } - setFilteredEmojis(newFilteredEmojiList); + setFilteredEmojis(newFilteredEmojiList ?? []); setHeaderIndices([]); }, 300); - const scrollToHeader = (headerIndex) => { + const scrollToHeader = (headerIndex: number) => { const calculatedOffset = Math.floor(headerIndex / CONST.EMOJI_NUM_PER_ROW) * CONST.EMOJI_PICKER_HEADER_HEIGHT; runOnUI(() => { 'worklet'; @@ -75,31 +76,35 @@ function EmojiPickerMenu({onEmojiSelected, activeEmoji}) { * Given an emoji item object, render a component based on its type. * Items with the code "SPACER" return nothing and are used to fill rows up to 8 * so that the sticky headers function properly. - * - * @param {Object} item - * @returns {*} */ - const renderItem = useCallback( + const renderItem: ListRenderItem = useCallback( ({item, target}) => { - const {code, types} = item; - if (item.spacer) { + const code = item.code; + const types = 'types' in item ? item.types : undefined; + + if ('spacer' in item && item.spacer) { return null; } - if (item.header) { + if ('header' in item && item.header) { return ( - {translate(`emojiPicker.headers.${code}`)} + {translate(`emojiPicker.headers.${code}` as TranslationPaths)} ); } - const emojiCode = types && types[preferredSkinTone] ? types[preferredSkinTone] : code; - const shouldEmojiBeHighlighted = Boolean(activeEmoji) && EmojiUtils.getRemovedSkinToneEmoji(emojiCode) === EmojiUtils.getRemovedSkinToneEmoji(activeEmoji); + const emojiCode = typeof preferredSkinTone === 'number' && types?.[preferredSkinTone] ? types?.[preferredSkinTone] : code; + const shouldEmojiBeHighlighted = !!activeEmoji && EmojiUtils.getRemovedSkinToneEmoji(emojiCode) === EmojiUtils.getRemovedSkinToneEmoji(activeEmoji); return ( onEmojiSelected(emoji, item))} + onPress={singleExecution((emoji) => { + if (!('name' in item)) { + return; + } + onEmojiSelected(emoji, item); + })} emoji={emojiCode} isHighlighted={shouldEmojiBeHighlighted} /> @@ -141,16 +146,4 @@ function EmojiPickerMenu({onEmojiSelected, activeEmoji}) { } EmojiPickerMenu.displayName = 'EmojiPickerMenu'; -EmojiPickerMenu.propTypes = propTypes; - -const EmojiPickerMenuWithRef = React.forwardRef((props, ref) => ( - -)); - -EmojiPickerMenuWithRef.displayName = 'EmojiPickerMenuWithRef'; - -export default EmojiPickerMenuWithRef; +export default React.forwardRef(EmojiPickerMenu); diff --git a/src/components/EmojiPicker/EmojiPickerMenu/index.js b/src/components/EmojiPicker/EmojiPickerMenu/index.tsx similarity index 84% rename from src/components/EmojiPicker/EmojiPickerMenu/index.js rename to src/components/EmojiPicker/EmojiPickerMenu/index.tsx index 926903be18d1..b8c31a61ecbf 100755 --- a/src/components/EmojiPicker/EmojiPickerMenu/index.js +++ b/src/components/EmojiPicker/EmojiPickerMenu/index.tsx @@ -1,12 +1,13 @@ -import lodashGet from 'lodash/get'; -import PropTypes from 'prop-types'; +import type {ListRenderItem} from '@shopify/flash-list'; +import throttle from 'lodash/throttle'; import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'; +import type {ForwardedRef} from 'react'; import {View} from 'react-native'; import {scrollTo} from 'react-native-reanimated'; -import _ from 'underscore'; import EmojiPickerMenuItem from '@components/EmojiPicker/EmojiPickerMenuItem'; import Text from '@components/Text'; import TextInput from '@components/TextInput'; +import type {BaseTextInputRef} from '@components/TextInput/BaseTextInput/types'; import useArrowKeyFocusManager from '@hooks/useArrowKeyFocusManager'; import useLocalize from '@hooks/useLocalize'; import useSingleExecution from '@hooks/useSingleExecution'; @@ -19,23 +20,14 @@ import * as EmojiUtils from '@libs/EmojiUtils'; import isEnterWhileComposition from '@libs/KeyboardShortcut/isEnterWhileComposition'; import * as ReportUtils from '@libs/ReportUtils'; import CONST from '@src/CONST'; +import type {TranslationPaths} from '@src/languages/types'; import BaseEmojiPickerMenu from './BaseEmojiPickerMenu'; -import emojiPickerMenuPropTypes from './emojiPickerMenuPropTypes'; +import type EmojiPickerMenuProps from './types'; import useEmojiPickerMenu from './useEmojiPickerMenu'; -const propTypes = { - /** The ref to the search input (may be null on small screen widths) */ - forwardedRef: PropTypes.func, - ...emojiPickerMenuPropTypes, -}; - -const defaultProps = { - forwardedRef: () => {}, -}; - const throttleTime = Browser.isMobile() ? 200 : 50; -function EmojiPickerMenu({forwardedRef, onEmojiSelected, activeEmoji}) { +function EmojiPickerMenu({onEmojiSelected, activeEmoji}: EmojiPickerMenuProps, ref: ForwardedRef) { const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); const {isSmallScreenWidth, windowWidth} = useWindowDimensions(); @@ -58,7 +50,7 @@ function EmojiPickerMenu({forwardedRef, onEmojiSelected, activeEmoji}) { } = useEmojiPickerMenu(); // Ref for the emoji search input - const searchInputRef = useRef(null); + const searchInputRef = useRef(null); // We want consistent auto focus behavior on input between native and mWeb so we have some auto focus management code that will // prevent auto focus when open picker for mobile device @@ -78,7 +70,7 @@ function EmojiPickerMenu({forwardedRef, onEmojiSelected, activeEmoji}) { }, [arePointerEventsDisabled]); const onFocusedIndexChange = useCallback( - (newIndex) => { + (newIndex: number) => { if (filteredEmojis.length === 0) { return; } @@ -92,8 +84,8 @@ function EmojiPickerMenu({forwardedRef, onEmojiSelected, activeEmoji}) { } // If the input is not focused and the new index is out of range, focus the input - if (newIndex < 0 && !searchInputRef.current.isFocused() && shouldFocusInputOnScreenFocus) { - searchInputRef.current.focus(); + if (newIndex < 0 && !searchInputRef.current?.isFocused() && shouldFocusInputOnScreenFocus) { + searchInputRef.current?.focus(); } }, [filteredEmojis.length, highlightFirstEmoji, isUsingKeyboardMovement, shouldFocusInputOnScreenFocus], @@ -115,7 +107,7 @@ function EmojiPickerMenu({forwardedRef, onEmojiSelected, activeEmoji}) { allowNegativeIndexes: true, }); - const filterEmojis = _.throttle((searchTerm) => { + const filterEmojis = throttle((searchTerm: string) => { const [normalizedSearchTerm, newFilteredEmojiList] = suggestEmojis(searchTerm); if (emojiListRef.current) { @@ -130,14 +122,14 @@ function EmojiPickerMenu({forwardedRef, onEmojiSelected, activeEmoji}) { return; } // Remove sticky header indices. There are no headers while searching and we don't want to make emojis sticky - setFilteredEmojis(newFilteredEmojiList); + setFilteredEmojis(newFilteredEmojiList ?? []); setHeaderIndices([]); setHighlightFirstEmoji(true); setIsUsingKeyboardMovement(false); }, throttleTime); const keyDownHandler = useCallback( - (keyBoardEvent) => { + (keyBoardEvent: KeyboardEvent) => { if (keyBoardEvent.key.startsWith('Arrow')) { if (!isFocused || keyBoardEvent.key === 'ArrowUp' || keyBoardEvent.key === 'ArrowDown') { keyBoardEvent.preventDefault(); @@ -157,8 +149,10 @@ function EmojiPickerMenu({forwardedRef, onEmojiSelected, activeEmoji}) { if (!item) { return; } - const emoji = lodashGet(item, ['types', preferredSkinTone], item.code); - onEmojiSelected(emoji, item); + if ('types' in item || 'name' in item) { + const emoji = typeof preferredSkinTone === 'number' && item?.types?.[preferredSkinTone] ? item?.types?.[preferredSkinTone] : item.code; + onEmojiSelected(emoji, item); + } // On web, avoid this Enter default input action; otherwise, it will add a new line in the subsequently focused composer. keyBoardEvent.preventDefault(); // On mWeb, avoid propagating this Enter keystroke to Pressable child component; otherwise, it will trigger the onEmojiSelected callback again. @@ -214,8 +208,8 @@ function EmojiPickerMenu({forwardedRef, onEmojiSelected, activeEmoji}) { // get a ref to the inner textInput element e.g. if we do // this.textInput = el} /> this will not // return a ref to the component, but rather the HTML element by default - if (shouldFocusInputOnScreenFocus && forwardedRef && _.isFunction(forwardedRef)) { - forwardedRef(searchInputRef.current); + if (shouldFocusInputOnScreenFocus && ref && typeof ref === 'function') { + ref(searchInputRef.current); } setupEventHandlers(); @@ -223,10 +217,10 @@ function EmojiPickerMenu({forwardedRef, onEmojiSelected, activeEmoji}) { return () => { cleanupEventHandlers(); }; - }, [forwardedRef, shouldFocusInputOnScreenFocus, cleanupEventHandlers, setupEventHandlers]); + }, [ref, shouldFocusInputOnScreenFocus, cleanupEventHandlers, setupEventHandlers]); const scrollToHeader = useCallback( - (headerIndex) => { + (headerIndex: number) => { if (!emojiListRef.current) { return; } @@ -242,35 +236,39 @@ function EmojiPickerMenu({forwardedRef, onEmojiSelected, activeEmoji}) { * Items with the code "SPACER" return nothing and are used to fill rows up to 8 * so that the sticky headers function properly. * - * @param {Object} item - * @param {Number} index - * @returns {*} */ - const renderItem = useCallback( + const renderItem: ListRenderItem = useCallback( ({item, index, target}) => { - const {code, types} = item; - if (item.spacer) { + const code = item.code; + const types = 'types' in item ? item.types : undefined; + + if ('spacer' in item && item.spacer) { return null; } - if (item.header) { + if ('header' in item && item.header) { return ( - {translate(`emojiPicker.headers.${code}`)} + {translate(`emojiPicker.headers.${code}` as TranslationPaths)} ); } - const emojiCode = types && types[preferredSkinTone] ? types[preferredSkinTone] : code; + const emojiCode = typeof preferredSkinTone === 'number' && types?.[preferredSkinTone] ? types[preferredSkinTone] : code; const isEmojiFocused = index === focusedIndex && isUsingKeyboardMovement; const shouldEmojiBeHighlighted = - (index === focusedIndex && highlightEmoji) || (Boolean(activeEmoji) && EmojiUtils.getRemovedSkinToneEmoji(emojiCode) === EmojiUtils.getRemovedSkinToneEmoji(activeEmoji)); + (index === focusedIndex && highlightEmoji) || (!!activeEmoji && EmojiUtils.getRemovedSkinToneEmoji(emojiCode) === EmojiUtils.getRemovedSkinToneEmoji(activeEmoji)); const shouldFirstEmojiBeHighlighted = index === 0 && highlightFirstEmoji; return ( onEmojiSelected(emoji, item))} + onPress={singleExecution((emoji) => { + if (!('name' in item)) { + return; + } + onEmojiSelected(emoji, item); + })} onHoverIn={() => { setHighlightEmoji(false); setHighlightFirstEmoji(false); @@ -347,17 +345,4 @@ function EmojiPickerMenu({forwardedRef, onEmojiSelected, activeEmoji}) { } EmojiPickerMenu.displayName = 'EmojiPickerMenu'; -EmojiPickerMenu.propTypes = propTypes; -EmojiPickerMenu.defaultProps = defaultProps; - -const EmojiPickerMenuWithRef = React.forwardRef((props, ref) => ( - -)); - -EmojiPickerMenuWithRef.displayName = 'EmojiPickerMenuWithRef'; - -export default EmojiPickerMenuWithRef; +export default React.forwardRef(EmojiPickerMenu); diff --git a/src/components/EmojiPicker/EmojiPickerMenu/types.ts b/src/components/EmojiPicker/EmojiPickerMenu/types.ts new file mode 100644 index 000000000000..b821cc89aeea --- /dev/null +++ b/src/components/EmojiPicker/EmojiPickerMenu/types.ts @@ -0,0 +1,10 @@ +import type {Emoji} from '@assets/emojis/types'; + +type EmojiPickerMenuProps = { + /** Function to add the selected emoji to the main compose text input */ + onEmojiSelected: (emoji: string, emojiObject: Emoji) => void; + + activeEmoji?: string; +}; + +export default EmojiPickerMenuProps; diff --git a/src/components/EmojiPicker/EmojiPickerMenu/useEmojiPickerMenu.js b/src/components/EmojiPicker/EmojiPickerMenu/useEmojiPickerMenu.ts similarity index 85% rename from src/components/EmojiPicker/EmojiPickerMenu/useEmojiPickerMenu.js rename to src/components/EmojiPicker/EmojiPickerMenu/useEmojiPickerMenu.ts index c6f9f601f4df..7cbfc4f1e2bc 100644 --- a/src/components/EmojiPicker/EmojiPickerMenu/useEmojiPickerMenu.js +++ b/src/components/EmojiPicker/EmojiPickerMenu/useEmojiPickerMenu.ts @@ -1,6 +1,6 @@ +import type {FlashList} from '@shopify/flash-list'; import {useCallback, useEffect, useMemo, useState} from 'react'; import {useAnimatedRef} from 'react-native-reanimated'; -import _ from 'underscore'; import emojis from '@assets/emojis'; import {useFrequentlyUsedEmojis} from '@components/OnyxProvider'; import useLocalize from '@hooks/useLocalize'; @@ -10,14 +10,14 @@ import useWindowDimensions from '@hooks/useWindowDimensions'; import * as EmojiUtils from '@libs/EmojiUtils'; const useEmojiPickerMenu = () => { - const emojiListRef = useAnimatedRef(); + const emojiListRef = useAnimatedRef>(); const frequentlyUsedEmojis = useFrequentlyUsedEmojis(); // eslint-disable-next-line react-hooks/exhaustive-deps const allEmojis = useMemo(() => EmojiUtils.mergeEmojisWithFrequentlyUsedEmojis(emojis), [frequentlyUsedEmojis]); const headerEmojis = useMemo(() => EmojiUtils.getHeaderEmojis(allEmojis), [allEmojis]); - const headerRowIndices = useMemo(() => _.map(headerEmojis, (headerEmoji) => headerEmoji.index), [headerEmojis]); + const headerRowIndices = useMemo(() => headerEmojis.map((headerEmoji) => headerEmoji.index), [headerEmojis]); const spacersIndexes = useMemo(() => EmojiUtils.getSpacersIndexes(allEmojis), [allEmojis]); - const [filteredEmojis, setFilteredEmojis] = useState(allEmojis); + const [filteredEmojis, setFilteredEmojis] = useState(allEmojis); const [headerIndices, setHeaderIndices] = useState(headerRowIndices); const isListFiltered = allEmojis.length !== filteredEmojis.length; const {preferredLocale} = useLocalize(); @@ -41,15 +41,13 @@ const useEmojiPickerMenu = () => { /** * Suggest emojis based on the search term - * @param {String} searchTerm - * @returns {[String, Array]} */ const suggestEmojis = useCallback( - (searchTerm) => { + (searchTerm: string) => { const normalizedSearchTerm = searchTerm.toLowerCase().trim().replaceAll(':', ''); const emojisSuggestions = EmojiUtils.suggestEmojis(`:${normalizedSearchTerm}`, preferredLocale, allEmojis.length); - return [normalizedSearchTerm, emojisSuggestions]; + return [normalizedSearchTerm, emojisSuggestions] as const; }, [allEmojis, preferredLocale], ); diff --git a/src/components/EmojiPicker/EmojiPickerMenuItem/index.js b/src/components/EmojiPicker/EmojiPickerMenuItem/index.js deleted file mode 100644 index 52d4a0db8812..000000000000 --- a/src/components/EmojiPicker/EmojiPickerMenuItem/index.js +++ /dev/null @@ -1,133 +0,0 @@ -import PropTypes from 'prop-types'; -import React, {PureComponent} from 'react'; -import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback'; -import Text from '@components/Text'; -import withStyleUtils, {withStyleUtilsPropTypes} from '@components/withStyleUtils'; -import withThemeStyles, {withThemeStylesPropTypes} from '@components/withThemeStyles'; -import * as Browser from '@libs/Browser'; -import getButtonState from '@libs/getButtonState'; -import CONST from '@src/CONST'; - -const propTypes = { - /** The unicode that is used to display the emoji */ - emoji: PropTypes.string.isRequired, - - /** The function to call when an emoji is selected */ - onPress: PropTypes.func.isRequired, - - /** Handles what to do when we hover over this item with our cursor */ - onHoverIn: PropTypes.func, - - /** Handles what to do when the hover is out */ - onHoverOut: PropTypes.func, - - /** Handles what to do when the pressable is focused */ - onFocus: PropTypes.func, - - /** Handles what to do when the pressable is blurred */ - onBlur: PropTypes.func, - - /** Whether this menu item is currently focused or not */ - isFocused: PropTypes.bool, - - /** Whether the menu item should be highlighted or not */ - isHighlighted: PropTypes.bool, - - ...withThemeStylesPropTypes, - ...withStyleUtilsPropTypes, -}; - -class EmojiPickerMenuItem extends PureComponent { - constructor(props) { - super(props); - - this.ref = null; - this.focusAndScroll = this.focusAndScroll.bind(this); - this.state = { - isHovered: false, - }; - } - - componentDidMount() { - if (!this.props.isFocused) { - return; - } - this.focusAndScroll(); - } - - componentDidUpdate(prevProps) { - if (prevProps.isFocused === this.props.isFocused) { - return; - } - if (!this.props.isFocused) { - return; - } - - this.focusAndScroll(); - } - - focusAndScroll() { - this.ref.focus({preventScroll: true}); - this.ref.scrollIntoView({block: 'nearest'}); - } - - render() { - return ( - this.props.onPress(this.props.emoji)} - // In order to prevent haptic feedback, pass empty callback as onLongPress props. Please refer https://github.com/necolas/react-native-web/issues/2349#issuecomment-1195564240 - onLongPress={Browser.isMobileChrome() ? () => {} : undefined} - onPressOut={Browser.isMobile() ? this.props.onHoverOut : undefined} - onHoverIn={() => { - if (this.props.onHoverIn) { - this.props.onHoverIn(); - } - - this.setState({isHovered: true}); - }} - onHoverOut={() => { - if (this.props.onHoverOut) { - this.props.onHoverOut(); - } - - this.setState({isHovered: false}); - }} - onFocus={this.props.onFocus} - onBlur={this.props.onBlur} - ref={(ref) => (this.ref = ref)} - style={({pressed}) => [ - this.props.isFocused ? this.props.themeStyles.emojiItemKeyboardHighlighted : {}, - this.state.isHovered || this.props.isHighlighted ? this.props.themeStyles.emojiItemHighlighted : {}, - Browser.isMobile() && this.props.StyleUtils.getButtonBackgroundColorStyle(getButtonState(false, pressed)), - this.props.themeStyles.emojiItem, - ]} - accessibilityLabel={this.props.emoji} - role={CONST.ROLE.BUTTON} - > - {this.props.emoji} - - ); - } -} - -EmojiPickerMenuItem.propTypes = propTypes; -EmojiPickerMenuItem.defaultProps = { - isFocused: false, - isHighlighted: false, - onHoverIn: () => {}, - onHoverOut: () => {}, - onFocus: () => {}, - onBlur: () => {}, -}; - -// Significantly speeds up re-renders of the EmojiPickerMenu's FlatList -// by only re-rendering at most two EmojiPickerMenuItems that are highlighted/un-highlighted per user action. -export default withThemeStyles( - withStyleUtils( - React.memo( - EmojiPickerMenuItem, - (prevProps, nextProps) => prevProps.isFocused === nextProps.isFocused && prevProps.isHighlighted === nextProps.isHighlighted && prevProps.emoji === nextProps.emoji, - ), - ), -); diff --git a/src/components/EmojiPicker/EmojiPickerMenuItem/index.native.js b/src/components/EmojiPicker/EmojiPickerMenuItem/index.native.js deleted file mode 100644 index 1726ff5b6543..000000000000 --- a/src/components/EmojiPicker/EmojiPickerMenuItem/index.native.js +++ /dev/null @@ -1,112 +0,0 @@ -import PropTypes from 'prop-types'; -import React, {PureComponent} from 'react'; -import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback'; -import Text from '@components/Text'; -import withStyleUtils, {withStyleUtilsPropTypes} from '@components/withStyleUtils'; -import withThemeStyles, {withThemeStylesPropTypes} from '@components/withThemeStyles'; -import getButtonState from '@libs/getButtonState'; -import CONST from '@src/CONST'; - -const propTypes = { - /** The unicode that is used to display the emoji */ - emoji: PropTypes.string.isRequired, - - /** The function to call when an emoji is selected */ - onPress: PropTypes.func.isRequired, - - /** Handles what to do when we hover over this item with our cursor */ - onHoverIn: PropTypes.func, - - /** Handles what to do when the hover is out */ - onHoverOut: PropTypes.func, - - /** Handles what to do when the pressable is focused */ - onFocus: PropTypes.func, - - /** Handles what to do when the pressable is blurred */ - onBlur: PropTypes.func, - - /** Whether this menu item is currently highlighted or not */ - isHighlighted: PropTypes.bool, - - /** Whether this menu item is currently focused or not */ - isFocused: PropTypes.bool, - - /** Whether the emoji is highlighted by the keyboard/mouse */ - isUsingKeyboardMovement: PropTypes.bool, - - ...withThemeStylesPropTypes, - ...withStyleUtilsPropTypes, -}; - -class EmojiPickerMenuItem extends PureComponent { - constructor(props) { - super(props); - - this.ref = null; - } - - componentDidMount() { - if (!this.props.isFocused) { - return; - } - this.ref.focus(); - } - - componentDidUpdate(prevProps) { - if (prevProps.isFocused === this.props.isFocused) { - return; - } - if (!this.props.isFocused) { - return; - } - this.ref.focus(); - } - - render() { - return ( - this.props.onPress(this.props.emoji)} - onHoverIn={this.props.onHoverIn} - onHoverOut={this.props.onHoverOut} - onFocus={this.props.onFocus} - onBlur={this.props.onBlur} - ref={(ref) => (this.ref = ref)} - style={({pressed}) => [ - this.props.StyleUtils.getButtonBackgroundColorStyle(getButtonState(false, pressed)), - this.props.isHighlighted && this.props.isUsingKeyboardMovement ? this.props.themeStyles.emojiItemKeyboardHighlighted : {}, - this.props.isHighlighted && !this.props.isUsingKeyboardMovement ? this.props.themeStyles.emojiItemHighlighted : {}, - this.props.themeStyles.emojiItem, - ]} - accessibilityLabel={this.props.emoji} - role={CONST.ROLE.BUTTON} - > - {this.props.emoji} - - ); - } -} - -EmojiPickerMenuItem.propTypes = propTypes; -EmojiPickerMenuItem.defaultProps = { - isHighlighted: false, - isFocused: false, - isUsingKeyboardMovement: false, - onHoverIn: () => {}, - onHoverOut: () => {}, - onFocus: () => {}, - onBlur: () => {}, -}; - -// Significantly speeds up re-renders of the EmojiPickerMenu's FlatList -// by only re-rendering at most two EmojiPickerMenuItems that are highlighted/un-highlighted per user action. -export default withThemeStyles( - withStyleUtils( - React.memo( - EmojiPickerMenuItem, - (prevProps, nextProps) => - prevProps.isHighlighted === nextProps.isHighlighted && prevProps.emoji === nextProps.emoji && prevProps.isUsingKeyboardMovement === nextProps.isUsingKeyboardMovement, - ), - ), -); diff --git a/src/components/EmojiPicker/EmojiPickerMenuItem/index.native.tsx b/src/components/EmojiPicker/EmojiPickerMenuItem/index.native.tsx new file mode 100644 index 000000000000..1336654cdf2f --- /dev/null +++ b/src/components/EmojiPicker/EmojiPickerMenuItem/index.native.tsx @@ -0,0 +1,62 @@ +import React, {useEffect, useRef} from 'react'; +import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback'; +import Text from '@components/Text'; +import useStyleUtils from '@hooks/useStyleUtils'; +import useThemeStyles from '@hooks/useThemeStyles'; +import getButtonState from '@libs/getButtonState'; +import CONST from '@src/CONST'; +import type EmojiPickerMenuItemProps from './types'; + +function EmojiPickerMenuItem({ + emoji, + onPress, + onHoverIn = () => {}, + onHoverOut = () => {}, + onFocus = () => {}, + onBlur = () => {}, + isFocused = false, + isHighlighted = false, + isUsingKeyboardMovement = false, +}: EmojiPickerMenuItemProps) { + const ref = useRef(null); + const StyleUtils = useStyleUtils(); + const themeStyles = useThemeStyles(); + + useEffect(() => { + if (!isFocused) { + return; + } + + ref?.current?.focus(); + }, [isFocused]); + + return ( + onPress(emoji)} + onHoverIn={onHoverIn} + onHoverOut={onHoverOut} + onFocus={onFocus} + onBlur={onBlur} + ref={ref} + style={({pressed}) => [ + StyleUtils.getButtonBackgroundColorStyle(getButtonState(false, pressed)), + isHighlighted && isUsingKeyboardMovement && themeStyles.emojiItemKeyboardHighlighted, + isHighlighted && !isUsingKeyboardMovement && themeStyles.emojiItemHighlighted, + themeStyles.emojiItem, + ]} + accessibilityLabel={emoji} + role={CONST.ROLE.BUTTON} + > + {emoji} + + ); +} + +// Significantly speeds up re-renders of the EmojiPickerMenu's FlatList +// by only re-rendering at most two EmojiPickerMenuItems that are highlighted/un-highlighted per user action. +export default React.memo( + EmojiPickerMenuItem, + (prevProps, nextProps) => + prevProps.isHighlighted === nextProps.isHighlighted && prevProps.emoji === nextProps.emoji && prevProps.isUsingKeyboardMovement === nextProps.isUsingKeyboardMovement, +); diff --git a/src/components/EmojiPicker/EmojiPickerMenuItem/index.tsx b/src/components/EmojiPicker/EmojiPickerMenuItem/index.tsx new file mode 100644 index 000000000000..8aaf4a14e560 --- /dev/null +++ b/src/components/EmojiPicker/EmojiPickerMenuItem/index.tsx @@ -0,0 +1,89 @@ +import React, {useEffect, useRef, useState} from 'react'; +// eslint-disable-next-line no-restricted-imports +import type {Text as RNText, View} from 'react-native'; +import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback'; +import Text from '@components/Text'; +import useStyleUtils from '@hooks/useStyleUtils'; +import useThemeStyles from '@hooks/useThemeStyles'; +import * as Browser from '@libs/Browser'; +import getButtonState from '@libs/getButtonState'; +import CONST from '@src/CONST'; +import type EmojiPickerMenuItemProps from './types'; + +function EmojiPickerMenuItem({ + emoji, + onPress, + onHoverIn = () => {}, + onHoverOut = () => {}, + onFocus = () => {}, + onBlur = () => {}, + isFocused = false, + isHighlighted = false, +}: EmojiPickerMenuItemProps) { + const [isHovered, setIsHovered] = useState(false); + const ref = useRef(null); + const StyleUtils = useStyleUtils(); + const themeStyles = useThemeStyles(); + + const focusAndScroll = () => { + if (ref.current && 'focus' in ref.current) { + ref.current.focus({preventScroll: true}); + } + if (ref.current && 'scrollIntoView' in ref.current) { + ref.current.scrollIntoView({block: 'nearest'}); + } + }; + + useEffect(() => { + if (!isFocused) { + return; + } + focusAndScroll(); + }, [isFocused]); + + return ( + onPress(emoji)} + // In order to prevent haptic feedback, pass empty callback as onLongPress Please refer https://github.com/necolas/react-native-web/issues/2349#issuecomment-1195564240 + onLongPress={Browser.isMobileChrome() ? () => {} : undefined} + onPressOut={Browser.isMobile() ? onHoverOut : undefined} + onHoverIn={() => { + if (onHoverIn) { + onHoverIn(); + } + + setIsHovered(true); + }} + onHoverOut={() => { + if (onHoverOut) { + onHoverOut(); + } + + setIsHovered(false); + }} + onFocus={onFocus} + onBlur={onBlur} + ref={(el) => { + ref.current = el ?? null; + }} + style={({pressed}) => [ + isFocused ? themeStyles.emojiItemKeyboardHighlighted : {}, + isHovered || isHighlighted ? themeStyles.emojiItemHighlighted : {}, + Browser.isMobile() && StyleUtils.getButtonBackgroundColorStyle(getButtonState(false, pressed)), + themeStyles.emojiItem, + ]} + accessibilityLabel={emoji} + role={CONST.ROLE.BUTTON} + > + {emoji} + + ); +} + +// Significantly speeds up re-renders of the EmojiPickerMenu's FlatList +// by only re-rendering at most two EmojiPickerMenuItems that are highlighted/un-highlighted per user action. +export default React.memo( + EmojiPickerMenuItem, + (prevProps, nextProps) => prevProps.isFocused === nextProps.isFocused && prevProps.isHighlighted === nextProps.isHighlighted && prevProps.emoji === nextProps.emoji, +); diff --git a/src/components/EmojiPicker/EmojiPickerMenuItem/types.ts b/src/components/EmojiPicker/EmojiPickerMenuItem/types.ts new file mode 100644 index 000000000000..ca5a4d12a988 --- /dev/null +++ b/src/components/EmojiPicker/EmojiPickerMenuItem/types.ts @@ -0,0 +1,30 @@ +type EmojiPickerMenuItemProps = { + /** The unicode that is used to display the emoji */ + emoji: string; + + /** The function to call when an emoji is selected */ + onPress: (emoji: string) => void; + + /** Handles what to do when we hover over this item with our cursor */ + onHoverIn?: () => void; + + /** Handles what to do when the hover is out */ + onHoverOut?: () => void; + + /** Handles what to do when the pressable is focused */ + onFocus?: () => void; + + /** Handles what to do when the pressable is blurred */ + onBlur?: () => void; + + /** Whether this menu item is currently focused or not */ + isFocused?: boolean; + + /** Whether the menu item should be highlighted or not */ + isHighlighted?: boolean; + + /** Whether the emoji is highlighted by the keyboard/mouse */ + isUsingKeyboardMovement?: boolean; +}; + +export default EmojiPickerMenuItemProps; diff --git a/src/components/EmojiPicker/EmojiSkinToneList.js b/src/components/EmojiPicker/EmojiSkinToneList.tsx similarity index 92% rename from src/components/EmojiPicker/EmojiSkinToneList.js rename to src/components/EmojiPicker/EmojiSkinToneList.tsx index 7f36d929025f..fb798f1c02c4 100644 --- a/src/components/EmojiPicker/EmojiSkinToneList.js +++ b/src/components/EmojiPicker/EmojiSkinToneList.tsx @@ -1,6 +1,5 @@ import React, {useCallback, useEffect, useState} from 'react'; import {View} from 'react-native'; -import _ from 'underscore'; import * as Emojis from '@assets/emojis'; import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback'; import Text from '@components/Text'; @@ -11,9 +10,13 @@ import CONST from '@src/CONST'; import EmojiPickerMenuItem from './EmojiPickerMenuItem'; import getSkinToneEmojiFromIndex from './getSkinToneEmojiFromIndex'; +type SkinToneEmoji = { + skinTone: number; +}; + function EmojiSkinToneList() { const styles = useThemeStyles(); - const [highlightedIndex, setHighlightedIndex] = useState(null); + const [highlightedIndex, setHighlightedIndex] = useState(null); const [isSkinToneListVisible, setIsSkinToneListVisible] = useState(false); const {translate} = useLocalize(); const [preferredSkinTone, setPreferredSkinTone] = usePreferredEmojiSkinTone(); @@ -24,9 +27,8 @@ function EmojiSkinToneList() { /** * Set the preferred skin tone in Onyx and close the skin tone picker - * @param {object} skinToneEmoji */ - function updateSelectedSkinTone(skinToneEmoji) { + function updateSelectedSkinTone(skinToneEmoji: SkinToneEmoji) { setHighlightedIndex(skinToneEmoji.skinTone); setPreferredSkinTone(skinToneEmoji.skinTone); } @@ -57,7 +59,7 @@ function EmojiSkinToneList() { )} {isSkinToneListVisible && ( - {_.map(Emojis.skinTones, (skinToneEmoji) => ( + {Emojis.skinTones.map((skinToneEmoji) => ( updateSelectedSkinTone(skinToneEmoji)} onHoverIn={() => setHighlightedIndex(skinToneEmoji.skinTone)} diff --git a/src/components/EmojiPicker/getSkinToneEmojiFromIndex.js b/src/components/EmojiPicker/getSkinToneEmojiFromIndex.js deleted file mode 100644 index 48f9e2177a73..000000000000 --- a/src/components/EmojiPicker/getSkinToneEmojiFromIndex.js +++ /dev/null @@ -1,13 +0,0 @@ -import _ from 'underscore'; -import * as Emojis from '@assets/emojis'; - -/** - * Fetch the emoji code of selected skinTone - * @param {Number} skinToneIndex - * @returns {String} - */ -function getSkinToneEmojiFromIndex(skinToneIndex) { - return _.find(Emojis.skinTones, (emoji) => emoji.skinTone === skinToneIndex) || Emojis.skinTones[0]; -} - -export default getSkinToneEmojiFromIndex; diff --git a/src/components/EmojiPicker/getSkinToneEmojiFromIndex.ts b/src/components/EmojiPicker/getSkinToneEmojiFromIndex.ts new file mode 100644 index 000000000000..6bae46edca7b --- /dev/null +++ b/src/components/EmojiPicker/getSkinToneEmojiFromIndex.ts @@ -0,0 +1,11 @@ +import type {OnyxEntry} from 'react-native-onyx'; +import * as Emojis from '@assets/emojis'; + +/** + * Fetch the emoji code of selected skinTone + */ +function getSkinToneEmojiFromIndex(skinToneIndex: OnyxEntry) { + return Emojis.skinTones.find((emoji) => emoji.skinTone === skinToneIndex) ?? Emojis.skinTones[0]; +} + +export default getSkinToneEmojiFromIndex; diff --git a/src/components/Form/types.ts b/src/components/Form/types.ts index 93da67331c9f..331f1c943b30 100644 --- a/src/components/Form/types.ts +++ b/src/components/Form/types.ts @@ -9,6 +9,7 @@ import type AmountTextInput from '@components/AmountTextInput'; import type CheckboxWithLabel from '@components/CheckboxWithLabel'; import type CountrySelector from '@components/CountrySelector'; import type DatePicker from '@components/DatePicker'; +import type EmojiPickerButtonDropdown from '@components/EmojiPicker/EmojiPickerButtonDropdown'; import type Picker from '@components/Picker'; import type RadioButtons from '@components/RadioButtons'; import type RoomNameInput from '@components/RoomNameInput'; @@ -26,9 +27,6 @@ import type {BaseForm} from '@src/types/form/Form'; /** * This type specifies all the inputs that can be used with `InputWrapper` component. Make sure to update it * when adding new inputs or removing old ones. - * - * TODO: Add remaining inputs here once these components are migrated to Typescript: - * EmojiPickerButtonDropdown */ type ValidInputs = | typeof TextInput @@ -47,7 +45,8 @@ type ValidInputs = | typeof RadioButtons | typeof AmountPicker | typeof TextPicker - | typeof AddPlaidBankAccount; + | typeof AddPlaidBankAccount + | typeof EmojiPickerButtonDropdown; type ValueTypeKey = 'string' | 'boolean' | 'date' | 'country'; type ValueTypeMap = { diff --git a/src/components/HeaderWithBackButton/types.ts b/src/components/HeaderWithBackButton/types.ts index 920abf3d08f0..6b08dd74dc8b 100644 --- a/src/components/HeaderWithBackButton/types.ts +++ b/src/components/HeaderWithBackButton/types.ts @@ -1,6 +1,7 @@ import type {ReactNode} from 'react'; import type {StyleProp, ViewStyle} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; +import type {PopoverMenuItem} from '@components/PopoverMenu'; import type {Action} from '@hooks/useSingleExecution'; import type {StepCounterParams} from '@src/languages/types'; import type {AnchorPosition} from '@src/styles'; @@ -74,7 +75,7 @@ type HeaderWithBackButtonProps = Partial & { shouldSetModalVisibility?: boolean; /** List of menu items for more(three dots) menu */ - threeDotsMenuItems?: ThreeDotsMenuItem[]; + threeDotsMenuItems?: PopoverMenuItem[]; /** The anchor position of the menu */ threeDotsAnchorPosition?: AnchorPosition; diff --git a/src/components/Icon/Expensicons.ts b/src/components/Icon/Expensicons.ts index 1fcf0d07276c..877e4972a3ec 100644 --- a/src/components/Icon/Expensicons.ts +++ b/src/components/Icon/Expensicons.ts @@ -84,6 +84,8 @@ import Hourglass from '@assets/images/hourglass.svg'; import ImageCropCircleMask from '@assets/images/image-crop-circle-mask.svg'; import ImageCropSquareMask from '@assets/images/image-crop-square-mask.svg'; import Info from '@assets/images/info.svg'; +import QBOSquare from '@assets/images/integrationicons/qbo-icon-square.svg'; +import XeroSquare from '@assets/images/integrationicons/xero-icon-square.svg'; import Invoice from '@assets/images/invoice.svg'; import Key from '@assets/images/key.svg'; import Keyboard from '@assets/images/keyboard.svg'; @@ -280,6 +282,7 @@ export { Plus, Printer, Profile, + QBOSquare, QrCode, QuestionMark, Receipt, @@ -308,6 +311,7 @@ export { Wallet, Workflows, Workspace, + XeroSquare, Zoom, Twitter, Youtube, diff --git a/src/components/Icon/Illustrations.ts b/src/components/Icon/Illustrations.ts index 58ba14916a3b..9271c417ac33 100644 --- a/src/components/Icon/Illustrations.ts +++ b/src/components/Icon/Illustrations.ts @@ -77,6 +77,7 @@ import ShieldYellow from '@assets/images/simple-illustrations/simple-illustratio import SmallRocket from '@assets/images/simple-illustrations/simple-illustration__smallrocket.svg'; import SplitBill from '@assets/images/simple-illustrations/simple-illustration__splitbill.svg'; import Tag from '@assets/images/simple-illustrations/simple-illustration__tag.svg'; +import TeachersUnite from '@assets/images/simple-illustrations/simple-illustration__teachers-unite.svg'; import ThumbsUpStars from '@assets/images/simple-illustrations/simple-illustration__thumbsupstars.svg'; import TrackShoe from '@assets/images/simple-illustrations/simple-illustration__track-shoe.svg'; import TrashCan from '@assets/images/simple-illustrations/simple-illustration__trashcan.svg'; @@ -158,6 +159,7 @@ export { Workflows, ThreeLeggedLaptopWoman, House, + TeachersUnite, Abacus, Binoculars, CompanyCard, diff --git a/src/components/LHNOptionsList/OptionRowLHN.tsx b/src/components/LHNOptionsList/OptionRowLHN.tsx index fbcb7d4b373d..25cc53340dd5 100644 --- a/src/components/LHNOptionsList/OptionRowLHN.tsx +++ b/src/components/LHNOptionsList/OptionRowLHN.tsx @@ -20,6 +20,7 @@ import useWindowDimensions from '@hooks/useWindowDimensions'; import DateUtils from '@libs/DateUtils'; import DomUtils from '@libs/DomUtils'; import * as OptionsListUtils from '@libs/OptionsListUtils'; +import Performance from '@libs/Performance'; import ReportActionComposeFocusManager from '@libs/ReportActionComposeFocusManager'; import * as ReportUtils from '@libs/ReportUtils'; import * as ReportActionContextMenu from '@pages/home/report/ContextMenu/ReportActionContextMenu'; @@ -123,6 +124,8 @@ function OptionRowLHN({reportID, isFocused = false, onSelectRow = () => {}, opti { + Performance.markStart(CONST.TIMING.OPEN_REPORT); + event?.preventDefault(); // Enable Composer to focus on clicking the same chat after opening the context menu. ReportActionComposeFocusManager.focus(); diff --git a/src/components/Modal/BaseModal.tsx b/src/components/Modal/BaseModal.tsx index 1261b418d27e..2448f65a75f4 100644 --- a/src/components/Modal/BaseModal.tsx +++ b/src/components/Modal/BaseModal.tsx @@ -15,6 +15,7 @@ import useNativeDriver from '@libs/useNativeDriver'; import variables from '@styles/variables'; import * as Modal from '@userActions/Modal'; import CONST from '@src/CONST'; +import ModalContent from './ModalContent'; import type BaseModalProps from './types'; function BaseModal( @@ -33,6 +34,7 @@ function BaseModal( animationIn, animationOut, useNativeDriver: useNativeDriverProp, + useNativeDriverForBackdrop, hideModalContentWhileAnimating = false, animationInTiming, animationOutTiming, @@ -42,6 +44,8 @@ function BaseModal( children, shouldUseCustomBackdrop = false, onBackdropPress, + shouldEnableNewFocusManagement = false, + restoreFocusType, }: BaseModalProps, ref: React.ForwardedRef, ) { @@ -56,6 +60,14 @@ function BaseModal( const isVisibleRef = useRef(isVisible); const wasVisible = usePrevious(isVisible); + const modalId = useMemo(() => ComposerFocusManager.getId(), []); + const saveFocusState = () => { + if (shouldEnableNewFocusManagement) { + ComposerFocusManager.saveFocusState(modalId); + } + ComposerFocusManager.resetReadyToFocus(modalId); + }; + /** * Hides modal * @param callHideCallback - Should we call the onModalHide callback @@ -70,11 +82,9 @@ function BaseModal( onModalHide(); } Modal.onModalDidClose(); - if (!fullscreen) { - ComposerFocusManager.setReadyToFocus(); - } + ComposerFocusManager.refocusAfterModalFullyClosed(modalId, restoreFocusType); }, - [shouldSetModalVisibility, onModalHide, fullscreen], + [shouldSetModalVisibility, onModalHide, restoreFocusType, modalId], ); useEffect(() => { @@ -126,7 +136,7 @@ function BaseModal( }; const handleDismissModal = () => { - ComposerFocusManager.setReadyToFocus(); + ComposerFocusManager.setReadyToFocus(modalId); }; const { @@ -180,47 +190,59 @@ function BaseModal( }); return ( - e.stopPropagation()} - onBackdropPress={handleBackdropPress} - // Note: Escape key on web/desktop will trigger onBackButtonPress callback - // eslint-disable-next-line react/jsx-props-no-multi-spaces - onBackButtonPress={Modal.closeTop} - onModalShow={handleShowModal} - propagateSwipe={propagateSwipe} - onModalHide={hideModal} - onModalWillShow={() => ComposerFocusManager.resetReadyToFocus()} - onDismiss={handleDismissModal} - onSwipeComplete={() => onClose?.()} - swipeDirection={swipeDirection} - isVisible={isVisible} - backdropColor={theme.overlay} - backdropOpacity={!shouldUseCustomBackdrop && hideBackdrop ? 0 : variables.overlayOpacity} - backdropTransitionOutTiming={0} - hasBackdrop={fullscreen} - coverScreen={fullscreen} - style={modalStyle} - deviceHeight={windowHeight} - deviceWidth={windowWidth} - animationIn={animationIn ?? modalStyleAnimationIn} - animationOut={animationOut ?? modalStyleAnimationOut} - useNativeDriver={useNativeDriverProp && useNativeDriver} - hideModalContentWhileAnimating={hideModalContentWhileAnimating} - animationInTiming={animationInTiming} - animationOutTiming={animationOutTiming} - statusBarTranslucent={statusBarTranslucent} - onLayout={onLayout} - avoidKeyboard={avoidKeyboard} - customBackdrop={shouldUseCustomBackdrop ? : undefined} + // this is a workaround for modal not being visible on the new arch in some cases + // it's necessary to have a non-collapseable view as a parent of the modal to prevent + // a conflict between RN core and Reanimated shadow tree operations + // position absolute is needed to prevent the view from interfering with flex layout + - e.stopPropagation()} + onBackdropPress={handleBackdropPress} + // Note: Escape key on web/desktop will trigger onBackButtonPress callback + // eslint-disable-next-line react/jsx-props-no-multi-spaces + onBackButtonPress={Modal.closeTop} + onModalShow={handleShowModal} + propagateSwipe={propagateSwipe} + onModalHide={hideModal} + onModalWillShow={saveFocusState} + onDismiss={handleDismissModal} + onSwipeComplete={() => onClose?.()} + swipeDirection={swipeDirection} + isVisible={isVisible} + backdropColor={theme.overlay} + backdropOpacity={!shouldUseCustomBackdrop && hideBackdrop ? 0 : variables.overlayOpacity} + backdropTransitionOutTiming={0} + hasBackdrop={fullscreen} + coverScreen={fullscreen} + style={modalStyle} + deviceHeight={windowHeight} + deviceWidth={windowWidth} + animationIn={animationIn ?? modalStyleAnimationIn} + animationOut={animationOut ?? modalStyleAnimationOut} + useNativeDriver={useNativeDriverProp && useNativeDriver} + useNativeDriverForBackdrop={useNativeDriverForBackdrop && useNativeDriver} + hideModalContentWhileAnimating={hideModalContentWhileAnimating} + animationInTiming={animationInTiming} + animationOutTiming={animationOutTiming} + statusBarTranslucent={statusBarTranslucent} + onLayout={onLayout} + avoidKeyboard={avoidKeyboard} + customBackdrop={shouldUseCustomBackdrop ? : undefined} > - {children} - - + + + {children} + + + + ); } diff --git a/src/components/Modal/ModalContent.tsx b/src/components/Modal/ModalContent.tsx new file mode 100644 index 000000000000..49d3b049220f --- /dev/null +++ b/src/components/Modal/ModalContent.tsx @@ -0,0 +1,23 @@ +import type {ReactNode} from 'react'; +import React from 'react'; + +type ModalContentProps = { + /** Modal contents */ + children: ReactNode; + + /** + * Callback method fired after modal content is unmounted. + * isVisible is not enough to cover all modal close cases, + * such as closing the attachment modal through the browser's back button. + * */ + onDismiss: () => void; +}; + +function ModalContent({children, onDismiss = () => {}}: ModalContentProps) { + // eslint-disable-next-line react-hooks/exhaustive-deps + React.useEffect(() => () => onDismiss?.(), []); + return children; +} +ModalContent.displayName = 'ModalContent'; + +export default ModalContent; diff --git a/src/components/Modal/index.android.tsx b/src/components/Modal/index.android.tsx index 86a1fd272185..c5d777c096e1 100644 --- a/src/components/Modal/index.android.tsx +++ b/src/components/Modal/index.android.tsx @@ -1,23 +1,14 @@ import React from 'react'; -import {AppState} from 'react-native'; -import ComposerFocusManager from '@libs/ComposerFocusManager'; import BaseModal from './BaseModal'; import type BaseModalProps from './types'; -AppState.addEventListener('focus', () => { - ComposerFocusManager.setReadyToFocus(); -}); - -AppState.addEventListener('blur', () => { - ComposerFocusManager.resetReadyToFocus(); -}); - // Only want to use useNativeDriver on Android. It has strange flashes issue on IOS // https://github.com/react-native-modal/react-native-modal#the-modal-flashes-in-a-weird-way-when-animating function Modal({useNativeDriver = true, ...rest}: BaseModalProps) { return ( diff --git a/src/components/Modal/index.ios.tsx b/src/components/Modal/index.ios.tsx index b26ba6cd0f89..c04b1c0ec54a 100644 --- a/src/components/Modal/index.ios.tsx +++ b/src/components/Modal/index.ios.tsx @@ -5,6 +5,7 @@ import type BaseModalProps from './types'; function Modal({children, ...rest}: BaseModalProps) { return ( diff --git a/src/components/Modal/types.ts b/src/components/Modal/types.ts index 9c394fdf0289..6111987e9c8d 100644 --- a/src/components/Modal/types.ts +++ b/src/components/Modal/types.ts @@ -68,6 +68,15 @@ type BaseModalProps = Partial & { /** Should we use a custom backdrop for the modal? (This prevents focus issues on desktop) */ shouldUseCustomBackdrop?: boolean; + + /** + * Whether the modal should enable the new focus manager. + * We are attempting to migrate to a new refocus manager, adding this property for gradual migration. + * */ + shouldEnableNewFocusManagement?: boolean; + + /** How to re-focus after the modal is dismissed */ + restoreFocusType?: ValueOf; }; export default BaseModalProps; diff --git a/src/components/MoneyReportHeader.tsx b/src/components/MoneyReportHeader.tsx index d36c8c43d322..14227d6a2051 100644 --- a/src/components/MoneyReportHeader.tsx +++ b/src/components/MoneyReportHeader.tsx @@ -77,7 +77,7 @@ function MoneyReportHeader({session, policy, chatReport, nextStep, report: money const [isHoldMenuVisible, setIsHoldMenuVisible] = useState(false); const [paymentType, setPaymentType] = useState(); const [requestType, setRequestType] = useState<'pay' | 'approve'>(); - const canAllowSettlement = ReportUtils.hasUpdatedTotal(moneyRequestReport); + const canAllowSettlement = ReportUtils.hasUpdatedTotal(moneyRequestReport, policy); const policyType = policy?.type; const isPayer = ReportUtils.isPayer(session, moneyRequestReport); const isDraft = ReportUtils.isOpenExpenseReport(moneyRequestReport); @@ -106,7 +106,7 @@ function MoneyReportHeader({session, policy, chatReport, nextStep, report: money const shouldShowAnyButton = shouldShowSettlementButton || shouldShowApproveButton || shouldShowSubmitButton || shouldShowNextStep; const bankAccountRoute = ReportUtils.getBankAccountRoute(chatReport); const formattedAmount = CurrencyUtils.convertToDisplayString(reimbursableSpend, moneyRequestReport.currency); - const [nonHeldAmount, fullAmount] = ReportUtils.getNonHeldAndFullAmount(moneyRequestReport); + const [nonHeldAmount, fullAmount] = ReportUtils.getNonHeldAndFullAmount(moneyRequestReport, policy); const displayedAmount = ReportUtils.hasHeldExpenses(moneyRequestReport.reportID) && canAllowSettlement ? nonHeldAmount : formattedAmount; const isMoreContentShown = shouldShowNextStep || (shouldShowAnyButton && isSmallScreenWidth); @@ -119,7 +119,7 @@ function MoneyReportHeader({session, policy, chatReport, nextStep, report: money if (ReportUtils.hasHeldExpenses(moneyRequestReport.reportID)) { setIsHoldMenuVisible(true); } else if (chatReport) { - IOU.payMoneyRequest(type, chatReport, moneyRequestReport, false); + IOU.payMoneyRequest(type, chatReport, moneyRequestReport, true); } }; diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index e1e39279336f..d39e40179a9f 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -829,7 +829,13 @@ function MoneyRequestConfirmationList({ titleStyle={styles.flex1} onPress={() => Navigation.navigate( - ROUTES.MONEY_REQUEST_STEP_TAX_RATE.getRoute(iouType, transaction?.transactionID ?? '', reportID, Navigation.getActiveRouteWithoutParams()), + ROUTES.MONEY_REQUEST_STEP_TAX_RATE.getRoute( + CONST.IOU.ACTION.CREATE, + iouType, + transaction?.transactionID ?? '', + reportID, + Navigation.getActiveRouteWithoutParams(), + ), ) } disabled={didConfirm} @@ -846,7 +852,13 @@ function MoneyRequestConfirmationList({ titleStyle={styles.flex1} onPress={() => Navigation.navigate( - ROUTES.MONEY_REQUEST_STEP_TAX_AMOUNT.getRoute(iouType, transaction?.transactionID ?? '', reportID, Navigation.getActiveRouteWithoutParams()), + ROUTES.MONEY_REQUEST_STEP_TAX_AMOUNT.getRoute( + CONST.IOU.ACTION.CREATE, + iouType, + transaction?.transactionID ?? '', + reportID, + Navigation.getActiveRouteWithoutParams(), + ), ) } disabled={didConfirm} diff --git a/src/components/MoneyTemporaryForRefactorRequestConfirmationList.js b/src/components/MoneyTemporaryForRefactorRequestConfirmationList.js index 8c236d020645..eec6cce0a1a3 100755 --- a/src/components/MoneyTemporaryForRefactorRequestConfirmationList.js +++ b/src/components/MoneyTemporaryForRefactorRequestConfirmationList.js @@ -329,7 +329,6 @@ function MoneyTemporaryForRefactorRequestConfirmationList({ const isMerchantRequired = isPolicyExpenseChat && !isScanRequest && shouldShowMerchant; const isCategoryRequired = canUseViolations && lodashGet(policy, 'requiresCategory', false); - const isTagRequired = canUseViolations && lodashGet(policy, 'requiresTag', false); useEffect(() => { if ((!isMerchantRequired && isMerchantEmpty) || !merchantError) { @@ -534,7 +533,7 @@ function MoneyTemporaryForRefactorRequestConfirmationList({ if (updatedTagsString !== TransactionUtils.getTag(transaction) && updatedTagsString) { IOU.setMoneyRequestTag(transaction.transactionID, updatedTagsString); } - }, [policyTagLists, transaction, policyTags, isTagRequired, canUseViolations]); + }, [policyTagLists, transaction, policyTags, canUseViolations]); /** * @param {Object} option @@ -642,6 +641,7 @@ function MoneyTemporaryForRefactorRequestConfirmationList({ onPress={confirm} enablePaymentsRoute={ROUTES.IOU_SEND_ENABLE_PAYMENTS} addBankAccountRoute={bankAccountRoute} + shouldShowPersonalBankAccountOption currency={iouCurrencyCode} policyID={policyID} buttonSize={CONST.DROPDOWN_BUTTON_SIZE.LARGE} @@ -829,28 +829,38 @@ function MoneyTemporaryForRefactorRequestConfirmationList({ shouldShow: shouldShowCategories, isSupplementary: !isCategoryRequired, }, - ..._.map(policyTagLists, ({name}, index) => ({ - item: ( - - Navigation.navigate( - ROUTES.MONEY_REQUEST_STEP_TAG.getRoute(CONST.IOU.ACTION.CREATE, iouType, index, transaction.transactionID, reportID, Navigation.getActiveRouteWithoutParams()), - ) - } - style={[styles.moneyRequestMenuItem]} - disabled={didConfirm} - interactive={!isReadOnly} - rightLabel={isTagRequired ? translate('common.required') : ''} - /> - ), - shouldShow: shouldShowTags, - isSupplementary: !isTagRequired, - })), + ..._.map(policyTagLists, ({name, required}, index) => { + const isTagRequired = isUndefined(required) ? false : canUseViolations && required; + return { + item: ( + + Navigation.navigate( + ROUTES.MONEY_REQUEST_STEP_TAG.getRoute( + CONST.IOU.ACTION.CREATE, + iouType, + index, + transaction.transactionID, + reportID, + Navigation.getActiveRouteWithoutParams(), + ), + ) + } + style={[styles.moneyRequestMenuItem]} + disabled={didConfirm} + interactive={!isReadOnly} + rightLabel={isTagRequired ? translate('common.required') : ''} + /> + ), + shouldShow: shouldShowTags, + isSupplementary: !isTagRequired, + }; + }), { item: ( Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_TAX_RATE.getRoute(iouType, transaction.transactionID, reportID, Navigation.getActiveRouteWithoutParams()))} + onPress={() => + Navigation.navigate( + ROUTES.MONEY_REQUEST_STEP_TAX_RATE.getRoute(CONST.IOU.ACTION.CREATE, iouType, transaction.transactionID, reportID, Navigation.getActiveRouteWithoutParams()), + ) + } disabled={didConfirm} interactive={!isReadOnly} /> @@ -877,7 +891,11 @@ function MoneyTemporaryForRefactorRequestConfirmationList({ description={translate('iou.taxAmount')} style={[styles.moneyRequestMenuItem]} titleStyle={styles.flex1} - onPress={() => Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_TAX_AMOUNT.getRoute(iouType, transaction.transactionID, reportID, Navigation.getActiveRouteWithoutParams()))} + onPress={() => + Navigation.navigate( + ROUTES.MONEY_REQUEST_STEP_TAX_AMOUNT.getRoute(CONST.IOU.ACTION.CREATE, iouType, transaction.transactionID, reportID, Navigation.getActiveRouteWithoutParams()), + ) + } disabled={didConfirm} interactive={!isReadOnly} /> diff --git a/src/components/PopoverMenu.tsx b/src/components/PopoverMenu.tsx index 1fd1c8ef5a3b..cf77ac7c4fd6 100644 --- a/src/components/PopoverMenu.tsx +++ b/src/components/PopoverMenu.tsx @@ -208,6 +208,7 @@ function PopoverMenu({ focused={focusedIndex === menuIndex} displayInDefaultIconColor={item.displayInDefaultIconColor} shouldShowRightIcon={item.shouldShowRightIcon} + iconRight={item.iconRight} shouldPutLeftPaddingWhenNoIcon={item.shouldPutLeftPaddingWhenNoIcon} label={item.label} isLabelHoverable={item.isLabelHoverable} diff --git a/src/components/QRShare/index.tsx b/src/components/QRShare/index.tsx index c7e9e7637a6c..3f0571a2cde0 100644 --- a/src/components/QRShare/index.tsx +++ b/src/components/QRShare/index.tsx @@ -16,7 +16,7 @@ function QRShare({url, title, subtitle, logo, logoRatio, logoMarginRatio}: QRSha const styles = useThemeStyles(); const theme = useTheme(); - const [qrCodeSize, setQrCodeSize] = useState(1); + const [qrCodeSize, setQrCodeSize] = useState(0); const svgRef = useRef(); useImperativeHandle( diff --git a/src/components/Reactions/AddReactionBubble.tsx b/src/components/Reactions/AddReactionBubble.tsx index 6b7aa12b742e..8364a6658270 100644 --- a/src/components/Reactions/AddReactionBubble.tsx +++ b/src/components/Reactions/AddReactionBubble.tsx @@ -32,7 +32,7 @@ type AddReactionBubbleProps = { /** * Will get called the moment before the picker opens. */ - onWillShowPicker?: (callback: CloseContextMenuCallback) => void; + onWillShowPicker?: (callback?: CloseContextMenuCallback) => void; /** * Called when the user selects an emoji. diff --git a/src/components/Reactions/EmojiReactionBubble.tsx b/src/components/Reactions/EmojiReactionBubble.tsx index d83689de2dc1..e7885a028a89 100644 --- a/src/components/Reactions/EmojiReactionBubble.tsx +++ b/src/components/Reactions/EmojiReactionBubble.tsx @@ -7,6 +7,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import useWindowDimensions from '@hooks/useWindowDimensions'; import type {ReactionListEvent} from '@pages/home/ReportScreenContext'; import CONST from '@src/CONST'; +import getEmojiReactionBubbleTextOffsetStyle from './getEmojiReactionBubbleTextOffsetStyle'; type EmojiReactionBubbleProps = { /** @@ -82,7 +83,7 @@ function EmojiReactionBubble( accessible dataSet={{[CONST.SELECTION_SCRAPER_HIDDEN_ELEMENT]: true}} > - {emojiCodes.join('')} + {emojiCodes.join('')} {count > 0 && {count}} ); diff --git a/src/components/Reactions/QuickEmojiReactions/types.ts b/src/components/Reactions/QuickEmojiReactions/types.ts index 7b6558364a55..0021f33ce2c0 100644 --- a/src/components/Reactions/QuickEmojiReactions/types.ts +++ b/src/components/Reactions/QuickEmojiReactions/types.ts @@ -18,7 +18,7 @@ type BaseReactionsProps = { /** * Will be called when the emoji picker is about to show. */ - onWillShowPicker?: (callback: CloseContextMenuCallback) => void; + onWillShowPicker?: (callback?: CloseContextMenuCallback) => void; /** * Callback to fire when the "open emoji picker" button is pressed. @@ -55,7 +55,7 @@ type QuickEmojiReactionsProps = BaseReactionsProps & { * Function that can be called to close the context menu * in which this component is rendered. */ - closeContextMenu: (callback: CloseContextMenuCallback) => void; + closeContextMenu: (callback?: CloseContextMenuCallback) => void; setIsEmojiPickerActive?: (state: boolean) => void; }; diff --git a/src/components/Reactions/getEmojiReactionBubbleTextOffsetStyle/index.ios.ts b/src/components/Reactions/getEmojiReactionBubbleTextOffsetStyle/index.ios.ts new file mode 100644 index 000000000000..9f7fb248a103 --- /dev/null +++ b/src/components/Reactions/getEmojiReactionBubbleTextOffsetStyle/index.ios.ts @@ -0,0 +1,6 @@ +function getEmojiReactionBubbleTextOffsetStyle() { + // https://github.com/Expensify/App/issues/36739 + return {transform: [{translateY: 2}]}; +} + +export default getEmojiReactionBubbleTextOffsetStyle; diff --git a/src/components/Reactions/getEmojiReactionBubbleTextOffsetStyle/index.ts b/src/components/Reactions/getEmojiReactionBubbleTextOffsetStyle/index.ts new file mode 100644 index 000000000000..1e459554789c --- /dev/null +++ b/src/components/Reactions/getEmojiReactionBubbleTextOffsetStyle/index.ts @@ -0,0 +1,5 @@ +function getEmojiReactionBubbleTextOffsetStyle() { + return {transform: [{translateY: 0}]}; +} + +export default getEmojiReactionBubbleTextOffsetStyle; diff --git a/src/components/ReportActionItem/MoneyReportView.tsx b/src/components/ReportActionItem/MoneyReportView.tsx index a1a9c6c747a1..bd2d9f73ae2a 100644 --- a/src/components/ReportActionItem/MoneyReportView.tsx +++ b/src/components/ReportActionItem/MoneyReportView.tsx @@ -19,6 +19,7 @@ import Navigation from '@libs/Navigation/Navigation'; import * as ReportUtils from '@libs/ReportUtils'; import AnimatedEmptyStateBackground from '@pages/home/report/AnimatedEmptyStateBackground'; import variables from '@styles/variables'; +import * as reportActions from '@src/libs/actions/Report'; import ROUTES from '@src/ROUTES'; import type {Policy, PolicyReportField, Report} from '@src/types/onyx'; @@ -40,7 +41,7 @@ function MoneyReportView({report, policy, shouldShowHorizontalRule}: MoneyReport const {translate} = useLocalize(); const {isSmallScreenWidth} = useWindowDimensions(); const isSettled = ReportUtils.isSettled(report.reportID); - const isTotalUpdated = ReportUtils.hasUpdatedTotal(report); + const isTotalUpdated = ReportUtils.hasUpdatedTotal(report, policy); const {totalDisplaySpend, nonReimbursableSpend, reimbursableSpend} = ReportUtils.getMoneyRequestSpendBreakdown(report); @@ -63,7 +64,7 @@ function MoneyReportView({report, policy, shouldShowHorizontalRule}: MoneyReport }, [policy, report]); return ( - + {!ReportUtils.isClosedExpenseReportWithNoExpenses(report) && ( @@ -81,6 +82,7 @@ function MoneyReportView({report, policy, shouldShowHorizontalRule}: MoneyReport errors={report.errorFields?.[fieldKey]} errorRowStyles={styles.ph5} key={`menuItem-${fieldKey}`} + onClose={() => reportActions.clearReportFieldErrors(report.reportID, reportField)} > Navigation.navigate(ROUTES.EDIT_REQUEST.getRoute(report.reportID, CONST.EDIT_REQUEST_FIELD.TAX_RATE))} + onPress={() => + Navigation.navigate( + ROUTES.MONEY_REQUEST_STEP_TAX_RATE.getRoute(CONST.IOU.ACTION.EDIT, CONST.IOU.TYPE.REQUEST, transaction?.transactionID ?? '', report.reportID), + ) + } /> )} @@ -459,7 +463,11 @@ function MoneyRequestView({ interactive={canEdit} shouldShowRightIcon={canEdit} titleStyle={styles.flex1} - onPress={() => Navigation.navigate(ROUTES.EDIT_REQUEST.getRoute(report.reportID, CONST.EDIT_REQUEST_FIELD.TAX_AMOUNT))} + onPress={() => + Navigation.navigate( + ROUTES.MONEY_REQUEST_STEP_TAX_AMOUNT.getRoute(CONST.IOU.ACTION.EDIT, CONST.IOU.TYPE.REQUEST, transaction?.transactionID ?? '', report.reportID), + ) + } /> )} diff --git a/src/components/ReportActionItem/ReportActionItemImage.tsx b/src/components/ReportActionItem/ReportActionItemImage.tsx index 740f784d2669..400d61b782b6 100644 --- a/src/components/ReportActionItem/ReportActionItemImage.tsx +++ b/src/components/ReportActionItem/ReportActionItemImage.tsx @@ -95,10 +95,12 @@ function ReportActionItemImage({ if (enablePreviewModal) { return ( - {({report}) => ( + {({report, transactionThreadReport}) => ( Navigation.navigate(ROUTES.TRANSACTION_RECEIPT.getRoute(report?.reportID ?? '', transaction?.transactionID ?? ''))} + onPress={() => + Navigation.navigate(ROUTES.TRANSACTION_RECEIPT.getRoute(transactionThreadReport?.reportID ?? report?.reportID ?? '', transaction?.transactionID ?? '')) + } accessibilityLabel={translate('accessibilityHints.viewAttachment')} accessibilityRole={CONST.ROLE.BUTTON} > diff --git a/src/components/ReportActionItem/ReportPreview.tsx b/src/components/ReportActionItem/ReportPreview.tsx index efe0b71b1012..190343e48abd 100644 --- a/src/components/ReportActionItem/ReportPreview.tsx +++ b/src/components/ReportActionItem/ReportPreview.tsx @@ -128,7 +128,7 @@ function ReportPreview({ const isOpenExpenseReport = isPolicyExpenseChat && ReportUtils.isOpenExpenseReport(iouReport); const isApproved = ReportUtils.isReportApproved(iouReport); - const canAllowSettlement = ReportUtils.hasUpdatedTotal(iouReport); + const canAllowSettlement = ReportUtils.hasUpdatedTotal(iouReport, policy); const allTransactions = TransactionUtils.getAllReportTransactions(iouReportID); const transactionsWithReceipts = ReportUtils.getTransactionsWithReceipts(iouReportID); const numberOfScanningReceipts = transactionsWithReceipts.filter((transaction) => TransactionUtils.isReceiptBeingScanned(transaction)).length; diff --git a/src/components/SelectionList/BaseListItem.tsx b/src/components/SelectionList/BaseListItem.tsx index cd1a40b5ef5d..0343ffa9826b 100644 --- a/src/components/SelectionList/BaseListItem.tsx +++ b/src/components/SelectionList/BaseListItem.tsx @@ -49,7 +49,7 @@ function BaseListItem({ pendingAction={pendingAction} errors={errors} errorRowStyles={styles.ph5} - style={containerStyle} + contentContainerStyle={containerStyle} > ({ )} + {!item.isSelected && !!item.brickRoadIndicator && ( + + + + )} + {rightHandSideComponentRender()} {FooterComponent} diff --git a/src/components/SelectionList/BaseSelectionList.tsx b/src/components/SelectionList/BaseSelectionList.tsx index 8dd7577de779..b47d920713a4 100644 --- a/src/components/SelectionList/BaseSelectionList.tsx +++ b/src/components/SelectionList/BaseSelectionList.tsx @@ -71,6 +71,9 @@ function BaseSelectionList( textInputRef, headerMessageStyle, shouldHideListOnInitialRender = true, + textInputIconLeft, + sectionTitleStyles, + textInputAutoFocus = true, }: BaseSelectionListProps, ref: ForwardedRef, ) { @@ -79,7 +82,7 @@ function BaseSelectionList( const listRef = useRef>>(null); const innerTextInputRef = useRef(null); const focusTimeoutRef = useRef(null); - const shouldShowTextInput = !!textInputLabel; + const shouldShowTextInput = !!textInputLabel || !!textInputIconLeft; const shouldShowSelectAll = !!onSelectAll; const activeElementRole = useActiveElementRole(); const isFocused = useIsFocused(); @@ -310,7 +313,7 @@ function BaseSelectionList( // We do this so that we can reference the height in `getItemLayout` – // we need to know the heights of all list items up-front in order to synchronously compute the layout of any given list item. // So be aware that if you adjust the content of the section header (for example, change the font size), you may need to adjust this explicit height as well. - + {section.title} ); @@ -377,6 +380,9 @@ function BaseSelectionList( /** Focuses the text input when the component comes into focus and after any navigation animations finish. */ useFocusEffect( useCallback(() => { + if (!textInputAutoFocus) { + return; + } if (shouldShowTextInput) { focusTimeoutRef.current = setTimeout(() => { if (!innerTextInputRef.current) { @@ -391,7 +397,7 @@ function BaseSelectionList( } clearTimeout(focusTimeoutRef.current); }; - }, [shouldShowTextInput]), + }, [shouldShowTextInput, textInputAutoFocus]), ); const prevTextInputValue = usePrevious(textInputValue); @@ -494,8 +500,12 @@ function BaseSelectionList( return; } - // eslint-disable-next-line no-param-reassign - textInputRef.current = element as RNTextInput; + if (typeof textInputRef === 'function') { + textInputRef(element as RNTextInput); + } else { + // eslint-disable-next-line no-param-reassign + textInputRef.current = element as RNTextInput; + } }} label={textInputLabel} accessibilityLabel={textInputLabel} @@ -508,6 +518,7 @@ function BaseSelectionList( inputMode={inputMode} selectTextOnFocus spellCheck={false} + iconLeft={textInputIconLeft} onSubmitEditing={selectFocusedOption} blurOnSubmit={!!flattenedSections.allOptions.length} isLoading={isLoadingNewOptions} @@ -515,7 +526,9 @@ function BaseSelectionList( /> )} - {!!headerMessage && ( + {/* If we are loading new options we will avoid showing any header message. This is mostly because one of the header messages says there are no options. */} + {/* This is misleading because we might be in the process of loading fresh options from the server. */} + {!isLoadingNewOptions && !!headerMessage && ( {headerMessage} @@ -564,6 +577,7 @@ function BaseSelectionList( onScrollBeginDrag={onScrollBeginDrag} keyExtractor={(item, index) => item.keyForList ?? `${index}`} extraData={focusedIndex} + // the only valid values on the new arch are "white", "black", and "default", other values will cause a crash indicatorStyle="white" keyboardShouldPersistTaps="always" showsVerticalScrollIndicator={showScrollIndicator} diff --git a/src/components/SelectionList/types.ts b/src/components/SelectionList/types.ts index e401dd5456b2..38c5f03fcae6 100644 --- a/src/components/SelectionList/types.ts +++ b/src/components/SelectionList/types.ts @@ -1,10 +1,12 @@ import type {MutableRefObject, ReactElement, ReactNode} from 'react'; import type {GestureResponderEvent, InputModeOptions, LayoutChangeEvent, SectionListData, StyleProp, TextInput, TextStyle, ViewStyle} from 'react-native'; import type {MaybePhraseKey} from '@libs/Localize'; +import type {BrickRoad} from '@libs/WorkspacesSettingsUtils'; import type CONST from '@src/CONST'; import type {Errors, Icon, PendingAction} from '@src/types/onyx/OnyxCommon'; import type {ReceiptErrors} from '@src/types/onyx/Transaction'; import type ChildrenProps from '@src/types/utils/ChildrenProps'; +import type IconAsset from '@src/types/utils/IconAsset'; import type InviteMemberListItem from './InviteMemberListItem'; import type RadioListItem from './RadioListItem'; import type TableListItem from './TableListItem'; @@ -33,7 +35,7 @@ type CommonListItemProps = { onDismissError?: (item: TItem) => void; /** Component to display on the right side */ - rightHandSideComponent?: ((item: TItem) => ReactElement) | ReactElement | null; + rightHandSideComponent?: ((item: TItem) => ReactElement | null) | ReactElement | null; /** Styles for the pressable component */ pressableStyle?: StyleProp; @@ -110,6 +112,8 @@ type ListItem = { /** The search value from the selection list */ searchText?: string | null; + + brickRoadIndicator?: BrickRoad | '' | null; }; type ListItemProps = CommonListItemProps & { @@ -214,6 +218,12 @@ type BaseSelectionListProps = Partial & { /** Max length for the text input */ textInputMaxLength?: number; + /** Icon to display on the left side of TextInput */ + textInputIconLeft?: IconAsset; + + /** Whether text input should be focused */ + textInputAutoFocus?: boolean; + /** Callback to fire when the text input changes */ onChangeText?: (text: string) => void; @@ -221,7 +231,7 @@ type BaseSelectionListProps = Partial & { inputMode?: InputModeOptions; /** Item `keyForList` to focus initially */ - initiallyFocusedOptionKey?: string; + initiallyFocusedOptionKey?: string | null; /** Callback to fire when the list is scrolled */ onScroll?: () => void; @@ -272,13 +282,13 @@ type BaseSelectionListProps = Partial & { disableKeyboardShortcuts?: boolean; /** Styles to apply to SelectionList container */ - containerStyle?: ViewStyle; + containerStyle?: StyleProp; /** Whether keyboard is visible on the screen */ isKeyboardShown?: boolean; /** Component to display on the right side of each child */ - rightHandSideComponent?: ((item: ListItem) => ReactElement) | ReactElement | null; + rightHandSideComponent?: ((item: ListItem) => ReactElement | null) | ReactElement | null; /** Whether to show the loading indicator for new options */ isLoadingNewOptions?: boolean; @@ -296,7 +306,10 @@ type BaseSelectionListProps = Partial & { isRowMultilineSupported?: boolean; /** Ref for textInput */ - textInputRef?: MutableRefObject; + textInputRef?: MutableRefObject | ((ref: TextInput | null) => void); + + /** Styles for the section title */ + sectionTitleStyles?: StyleProp; /** * When true, the list won't be visible until the list layout is measured. This prevents the list from "blinking" as it's scrolled to the bottom which is recommended for large lists. diff --git a/src/components/SettlementButton.tsx b/src/components/SettlementButton.tsx index a76007034fc0..84c57ae381e3 100644 --- a/src/components/SettlementButton.tsx +++ b/src/components/SettlementButton.tsx @@ -149,7 +149,7 @@ function SettlementButton({ const session = useSession(); const chatReport = ReportUtils.getReport(chatReportID); - const isPaidGroupPolicy = ReportUtils.isPaidGroupPolicyExpenseChat(chatReport as OnyxEntry); + const isPaidGroupPolicy = ReportUtils.isPaidGroupPolicyExpenseChat(chatReport); const shouldShowPaywithExpensifyOption = !isPaidGroupPolicy || (!shouldHidePaymentOptions && ReportUtils.isPayer(session, iouReport as OnyxEntry)); const shouldShowPayElsewhereOption = !isPaidGroupPolicy || policy?.reimbursementChoice === CONST.POLICY.REIMBURSEMENT_CHOICES.REIMBURSEMENT_MANUAL; const paymentButtonOptions = useMemo(() => { diff --git a/src/components/ShowContextMenuContext.ts b/src/components/ShowContextMenuContext.ts index 374ca8a2f1e5..3a996a8d2c64 100644 --- a/src/components/ShowContextMenuContext.ts +++ b/src/components/ShowContextMenuContext.ts @@ -13,6 +13,7 @@ type ShowContextMenuContextProps = { anchor: ContextMenuAnchor; report: OnyxEntry; action: OnyxEntry; + transactionThreadReport: OnyxEntry; checkIfContextMenuActive: () => void; }; @@ -20,6 +21,7 @@ const ShowContextMenuContext = createContext({ anchor: null, report: null, action: null, + transactionThreadReport: null, checkIfContextMenuActive: () => {}, }); diff --git a/src/components/StateSelector.tsx b/src/components/StateSelector.tsx index aa458834c8ad..18e6f45ed9e5 100644 --- a/src/components/StateSelector.tsx +++ b/src/components/StateSelector.tsx @@ -105,3 +105,5 @@ function StateSelector( StateSelector.displayName = 'StateSelector'; export default React.forwardRef(StateSelector); + +export type {State}; diff --git a/src/components/TagPicker/index.tsx b/src/components/TagPicker/index.tsx index 54ad016173b7..b9d2d61efa7d 100644 --- a/src/components/TagPicker/index.tsx +++ b/src/components/TagPicker/index.tsx @@ -1,10 +1,9 @@ import React, {useMemo, useState} from 'react'; import type {OnyxEntry} from 'react-native-onyx'; import {withOnyx} from 'react-native-onyx'; -import type {EdgeInsets} from 'react-native-safe-area-context'; -import OptionsSelector from '@components/OptionsSelector'; +import SelectionList from '@components/SelectionList'; +import RadioListItem from '@components/SelectionList/RadioListItem'; import useLocalize from '@hooks/useLocalize'; -import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; import * as OptionsListUtils from '@libs/OptionsListUtils'; import * as PolicyUtils from '@libs/PolicyUtils'; @@ -41,12 +40,6 @@ type TagPickerProps = TagPickerOnyxProps & { /** Callback to submit the selected tag */ onSubmit: () => void; - /** - * Safe area insets required for reflecting the portion of the view, - * that is not covered by navigation bars, tab bars, toolbars, and other ancestor views. - */ - insets: EdgeInsets; - /** Should show the selected option that is disabled? */ shouldShowDisabledAndSelectedOption?: boolean; @@ -54,9 +47,8 @@ type TagPickerProps = TagPickerOnyxProps & { tagListIndex: number; }; -function TagPicker({selectedTag, tagListName, policyTags, tagListIndex, policyRecentlyUsedTags, shouldShowDisabledAndSelectedOption = false, insets, onSubmit}: TagPickerProps) { +function TagPicker({selectedTag, tagListName, policyTags, tagListIndex, policyRecentlyUsedTags, shouldShowDisabledAndSelectedOption = false, onSubmit}: TagPickerProps) { const styles = useThemeStyles(); - const StyleUtils = useStyleUtils(); const {translate} = useLocalize(); const [searchValue, setSearchValue] = useState(''); @@ -100,22 +92,14 @@ function TagPicker({selectedTag, tagListName, policyTags, tagListIndex, policyRe const selectedOptionKey = sections[0]?.data?.filter((policyTag) => policyTag.searchText === selectedTag)?.[0]?.keyForList; return ( - ; }; -type ThreeDotsMenuProps = ThreeDotsMenuOnyxProps & { - /** Tooltip for the popup icon */ - iconTooltip?: TranslationPaths; - - /** icon for the popup trigger */ - icon?: IconAsset; - - /** Any additional styles to pass to the icon container. */ - iconStyles?: StyleProp; - - /** The fill color to pass into the icon. */ - iconFill?: string; - - /** Function to call on icon press */ - onIconPress?: () => void; - - /** menuItems that'll show up on toggle of the popup menu */ - menuItems: PopoverMenuItem[]; - - /** The anchor position of the menu */ - anchorPosition: AnchorPosition; - - /** The anchor alignment of the menu */ - anchorAlignment?: AnchorAlignment; - - /** Whether the popover menu should overlay the current view */ - shouldOverlay?: boolean; - - /** Whether the menu is disabled */ - disabled?: boolean; - - /** Should we announce the Modal visibility changes? */ - shouldSetModalVisibility?: boolean; -}; - function ThreeDotsMenu({ iconTooltip = 'common.more', icon = Expensicons.ThreeDots, diff --git a/src/components/ThreeDotsMenu/types.ts b/src/components/ThreeDotsMenu/types.ts new file mode 100644 index 000000000000..6c3618ffc3ce --- /dev/null +++ b/src/components/ThreeDotsMenu/types.ts @@ -0,0 +1,50 @@ +import type {StyleProp, ViewStyle} from 'react-native'; +import type {OnyxEntry} from 'react-native-onyx'; +import type {PopoverMenuItem} from '@components/PopoverMenu'; +import type {TranslationPaths} from '@src/languages/types'; +import type {AnchorPosition} from '@src/styles'; +import type {Modal} from '@src/types/onyx'; +import type AnchorAlignment from '@src/types/utils/AnchorAlignment'; +import type IconAsset from '@src/types/utils/IconAsset'; + +type ThreeDotsMenuOnyxProps = { + /** Details about any modals being used */ + modal: OnyxEntry; +}; + +type ThreeDotsMenuProps = ThreeDotsMenuOnyxProps & { + /** Tooltip for the popup icon */ + iconTooltip?: TranslationPaths; + + /** icon for the popup trigger */ + icon?: IconAsset; + + /** Any additional styles to pass to the icon container. */ + iconStyles?: StyleProp; + + /** The fill color to pass into the icon. */ + iconFill?: string; + + /** Function to call on icon press */ + onIconPress?: () => void; + + /** menuItems that'll show up on toggle of the popup menu */ + menuItems: PopoverMenuItem[]; + + /** The anchor position of the menu */ + anchorPosition: AnchorPosition; + + /** The anchor alignment of the menu */ + anchorAlignment?: AnchorAlignment; + + /** Whether the popover menu should overlay the current view */ + shouldOverlay?: boolean; + + /** Whether the menu is disabled */ + disabled?: boolean; + + /** Should we announce the Modal visibility changes? */ + shouldSetModalVisibility?: boolean; +}; + +export default ThreeDotsMenuProps; diff --git a/src/components/withToggleVisibilityView.tsx b/src/components/withToggleVisibilityView.tsx index 9da862ecdebe..0abcaf238fb8 100644 --- a/src/components/withToggleVisibilityView.tsx +++ b/src/components/withToggleVisibilityView.tsx @@ -16,7 +16,10 @@ export default function withToggleVisibilityView, ref: ForwardedRef) { const styles = useThemeStyles(); return ( - + { - const personalDetails = PersonalDetails.getPrivatePersonalDetails(); - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - if (network?.isOffline || (Boolean(personalDetails) && personalDetails?.isLoading !== undefined)) { - return; - } - - PersonalDetails.openPersonalDetails(); - }, [network?.isOffline]); -} diff --git a/src/languages/en.ts b/src/languages/en.ts index 55a4c586716a..a1a7d96d5c46 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -2,6 +2,7 @@ import {CONST as COMMON_CONST} from 'expensify-common/lib/CONST'; import Str from 'expensify-common/lib/str'; import CONST from '@src/CONST'; import type {Country} from '@src/CONST'; +import type {PolicyConnectionSyncStage} from '@src/types/onyx/Policy'; import type { AddressLineParams, AdminCanceledRequestParams, @@ -1822,6 +1823,7 @@ export default { invoices: 'Invoices', travel: 'Travel', members: 'Members', + accounting: 'Accounting', plan: 'Plan', profile: 'Profile', bankAccount: 'Bank account', @@ -1915,10 +1917,14 @@ export default { subtitle: 'Set up custom fields for spend.', }, connections: { - title: 'Connections', + title: 'Accounting', subtitle: 'Sync your chart of accounts and more.', }, }, + reportFields: { + delete: 'Delete field', + deleteConfirmation: 'Are you sure that you want to delete this field?', + }, tags: { tagName: 'Tag name', requiresTag: 'Members must tag all spend', @@ -2042,6 +2048,41 @@ export default { invalidRateError: 'Please enter a valid rate', lowRateError: 'Rate must be greater than 0', }, + accounting: { + title: 'Connections', + subtitle: 'Connect to your accounting system to code transactions with your chart of accounts, auto-match payments and keep your finances in sync.', + qbo: 'Quickbooks Online', + xero: 'Xero', + setup: 'Set up', + lastSync: 'Last synced just now', + import: 'Import', + export: 'Export', + advanced: 'Advanced', + other: 'Other integrations', + syncNow: 'Sync now', + disconnect: 'Disconnect', + disconnectTitle: 'Disconnect integration', + disconnectPrompt: 'Are you sure you want to disconnect this integration?', + enterCredentials: 'Enter your credentials', + connections: { + syncStageName: (stage: PolicyConnectionSyncStage) => { + switch (stage) { + case 'quickbooksOnlineImportCustomers': + return 'Importing customers'; + case 'quickbooksOnlineImportEmployees': + return 'Importing employees'; + case 'quickbooksOnlineImportAccounts': + return 'Importing accounts'; + case 'quickbooksOnlineImportClasses': + return 'Importing classes'; + + default: { + return `Translation missing for stage: ${stage}`; + } + } + }, + }, + }, bills: { manageYourBills: 'Manage your bills', askYourVendorsBeforeEmail: 'Ask your vendors to forward their invoices to ', diff --git a/src/languages/es.ts b/src/languages/es.ts index 5956f1457005..5ea339d4fe36 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1,5 +1,6 @@ import Str from 'expensify-common/lib/str'; import CONST from '@src/CONST'; +import type {PolicyConnectionSyncStage} from '@src/types/onyx/Policy'; import type { AddressLineParams, AdminCanceledRequestParams, @@ -1849,6 +1850,7 @@ export default { invoices: 'Enviar facturas', travel: 'Viajes', members: 'Miembros', + accounting: 'Contabilidad', plan: 'Plan', profile: 'Perfil', bankAccount: 'Cuenta bancaria', @@ -1942,10 +1944,14 @@ export default { subtitle: 'Configura campos personalizados para los gastos.', }, connections: { - title: 'Conexión', + title: 'Contabilidad', subtitle: 'Sincroniza tu plan de cuentas y otras opciones.', }, }, + reportFields: { + delete: 'Eliminar campos', + deleteConfirmation: '¿Estás seguro de que quieres eliminar esta campos?', + }, tags: { tagName: 'Nombre de etiqueta', requiresTag: 'Los miembros deben etiquetar todos los gastos', @@ -2037,6 +2043,41 @@ export default { invitedBySecondaryLogin: ({secondaryLogin}) => `Agregado por nombre de usuario secundario ${secondaryLogin}.`, membersListTitle: 'Directorio de todos los miembros del espacio de trabajo.', }, + accounting: { + title: 'Conexiones', + subtitle: 'Conecta a tu sistema de contabilidad para codificar transacciones con tu plan de cuentas, auto-cotejar pagos y mantener tus finanzas sincronizadas.', + qbo: 'Quickbooks Online', + xero: 'Xero', + setup: 'Configurar', + lastSync: 'Recién sincronizado', + import: 'Importar', + export: 'Exportar', + advanced: 'Avanzado', + other: 'Otras integraciones', + syncNow: 'Sincronizar ahora', + disconnect: 'Desconectar', + disconnectTitle: 'Desconectar integración', + disconnectPrompt: '¿Estás seguro de que deseas desconectar esta intregración?', + enterCredentials: 'Ingresa tus credenciales', + connections: { + syncStageName: (stage: PolicyConnectionSyncStage) => { + switch (stage) { + case 'quickbooksOnlineImportCustomers': + return 'Importando clientes'; + case 'quickbooksOnlineImportEmployees': + return 'Importing employees'; + case 'quickbooksOnlineImportAccounts': + return 'Importing accounts'; + case 'quickbooksOnlineImportClasses': + return 'Importing classes'; + + default: { + return `Translation missing for stage: ${stage}`; + } + } + }, + }, + }, card: { header: 'Desbloquea Tarjetas Expensify gratis', headerWithEcard: '¡Tus tarjetas están listas!', diff --git a/src/libs/API/parameters/DeleteReportFieldParams.ts b/src/libs/API/parameters/DeleteReportFieldParams.ts new file mode 100644 index 000000000000..f64659512f6b --- /dev/null +++ b/src/libs/API/parameters/DeleteReportFieldParams.ts @@ -0,0 +1,5 @@ +type DeleteReportFieldParams = { + fieldID: string; +}; + +export default DeleteReportFieldParams; diff --git a/src/libs/API/parameters/StartSplitBillParams.ts b/src/libs/API/parameters/StartSplitBillParams.ts index 623f291eb691..ce7a310f14e2 100644 --- a/src/libs/API/parameters/StartSplitBillParams.ts +++ b/src/libs/API/parameters/StartSplitBillParams.ts @@ -9,6 +9,7 @@ type StartSplitBillParams = { comment: string; category: string; tag: string; + currency: string; isFromGroupDM: boolean; createdReportActionID?: string; billable: boolean; diff --git a/src/libs/API/parameters/index.ts b/src/libs/API/parameters/index.ts index 1bc80e4c08c4..8ef3f255184e 100644 --- a/src/libs/API/parameters/index.ts +++ b/src/libs/API/parameters/index.ts @@ -128,6 +128,7 @@ export type {default as CompleteEngagementModalParams} from './CompleteEngagemen export type {default as SetNameValuePairParams} from './SetNameValuePairParams'; export type {default as SetReportFieldParams} from './SetReportFieldParams'; export type {default as SetReportNameParams} from './SetReportNameParams'; +export type {default as DeleteReportFieldParams} from './DeleteReportFieldParams'; export type {default as CompleteSplitBillParams} from './CompleteSplitBillParams'; export type {default as UpdateMoneyRequestParams} from './UpdateMoneyRequestParams'; export type {default as RequestMoneyParams} from './RequestMoneyParams'; diff --git a/src/libs/API/types.ts b/src/libs/API/types.ts index 3cff726a530c..aa4e57561ba0 100644 --- a/src/libs/API/types.ts +++ b/src/libs/API/types.ts @@ -136,6 +136,7 @@ const WRITE_COMMANDS = { COMPLETE_ENGAGEMENT_MODAL: 'CompleteEngagementModal', SET_NAME_VALUE_PAIR: 'SetNameValuePair', SET_REPORT_FIELD: 'Report_SetFields', + DELETE_REPORT_FIELD: 'RemoveReportField', SET_REPORT_NAME: 'RenameReport', COMPLETE_SPLIT_BILL: 'CompleteSplitBill', UPDATE_MONEY_REQUEST_DATE: 'UpdateMoneyRequestDate', @@ -324,6 +325,7 @@ type WriteCommandParameters = { [WRITE_COMMANDS.SET_NAME_VALUE_PAIR]: Parameters.SetNameValuePairParams; [WRITE_COMMANDS.SET_REPORT_FIELD]: Parameters.SetReportFieldParams; [WRITE_COMMANDS.SET_REPORT_NAME]: Parameters.SetReportNameParams; + [WRITE_COMMANDS.DELETE_REPORT_FIELD]: Parameters.DeleteReportFieldParams; [WRITE_COMMANDS.COMPLETE_SPLIT_BILL]: Parameters.CompleteSplitBillParams; [WRITE_COMMANDS.UPDATE_MONEY_REQUEST_DATE]: Parameters.UpdateMoneyRequestParams; [WRITE_COMMANDS.UPDATE_MONEY_REQUEST_MERCHANT]: Parameters.UpdateMoneyRequestParams; diff --git a/src/libs/ComposerFocusManager.ts b/src/libs/ComposerFocusManager.ts index b66bbe92599e..d793c202d243 100644 --- a/src/libs/ComposerFocusManager.ts +++ b/src/libs/ComposerFocusManager.ts @@ -1,25 +1,244 @@ -let isReadyToFocusPromise = Promise.resolve(); -let resolveIsReadyToFocus: (value: void | PromiseLike) => void; +import type {View} from 'react-native'; +import {TextInput} from 'react-native'; +import type {ValueOf} from 'type-fest'; +import CONST from '@src/CONST'; +import isWindowReadyToFocus from './isWindowReadyToFocus'; -function resetReadyToFocus() { - isReadyToFocusPromise = new Promise((resolve) => { - resolveIsReadyToFocus = resolve; +type ModalId = number | undefined; + +type InputElement = (TextInput & HTMLElement) | null; + +type RestoreFocusType = ValueOf | undefined; + +type ModalContainer = (View & HTMLElement) | undefined | null; + +/** + * So far, modern browsers only support the file cancel event in some newer versions + * (i.e., Chrome: 113+ / Firefox: 91+ / Safari 16.4+), and there is no standard feature detection method available. + * We will introduce the isInUploadingContext field to isolate the impact of the upload modal on the other modals. + */ +type FocusMapValue = { + input: InputElement; + isInUploadingContext?: boolean; +}; + +type PromiseMapValue = { + ready: Promise; + resolve: () => void; +}; + +let focusedInput: InputElement = null; +let uniqueModalId = 1; +const focusMap = new Map(); +const activeModals: ModalId[] = []; +const promiseMap = new Map(); + +/** + * Returns the ref of the currently focused text field, if one exists. + * react-native-web doesn't support `currentlyFocusedInput`, so we need to make it compatible by using `currentlyFocusedField` instead. + */ +function getActiveInput() { + return (TextInput.State.currentlyFocusedInput ? TextInput.State.currentlyFocusedInput() : TextInput.State.currentlyFocusedField()) as InputElement; +} + +/** + * On web platform, if the modal is displayed by a click, the blur event is fired before the modal appears, + * so we need to cache the focused input in the pointerdown handler, which is fired before the blur event. + */ +function saveFocusedInput() { + focusedInput = getActiveInput(); +} + +/** + * If a click does not display the modal, we also should clear the cached value to avoid potential issues. + */ +function clearFocusedInput() { + if (!focusedInput) { + return; + } + + // For the PopoverWithMeasuredContent component, Modal is only mounted after onLayout event is triggered, + // this event is placed within a setTimeout in react-native-web, + // so we can safely clear the cached value only after this event. + setTimeout(() => (focusedInput = null), CONST.ANIMATION_IN_TIMING); +} + +/** + * When a TextInput is unmounted, we also should release the reference here to avoid potential issues. + * + */ +function releaseInput(input: InputElement) { + if (!input) { + return; + } + if (input === focusedInput) { + focusedInput = null; + } + focusMap.forEach((value, key) => { + if (value.input !== input) { + return; + } + focusMap.delete(key); }); } -function setReadyToFocus() { - if (!resolveIsReadyToFocus) { +function getId() { + return uniqueModalId++; +} + +/** + * Save the focus state when opening the modal. + */ +function saveFocusState(id: ModalId, isInUploadingContext = false, shouldClearFocusWithType = false, container: ModalContainer = undefined) { + const activeInput = getActiveInput(); + + // For popoverWithoutOverlay, react calls autofocus before useEffect. + const input = focusedInput ?? activeInput; + focusedInput = null; + if (activeModals.indexOf(id) < 0) { + activeModals.push(id); + } + + if (shouldClearFocusWithType) { + focusMap.forEach((value, key) => { + if (value.isInUploadingContext !== isInUploadingContext) { + return; + } + focusMap.delete(key); + }); + } + + if (container?.contains(input)) { return; } - resolveIsReadyToFocus(); + focusMap.set(id, {input, isInUploadingContext}); + input?.blur(); } -function isReadyToFocus(): Promise { - return isReadyToFocusPromise; +/** + * On web platform, if we intentionally click on another input box, there is no need to restore focus. + * Additionally, if we are closing the RHP, we can ignore the focused input. + */ +function focus(input: InputElement, shouldIgnoreFocused = false) { + const activeInput = getActiveInput(); + if (!input || (activeInput && !shouldIgnoreFocused)) { + return; + } + isWindowReadyToFocus().then(() => input.focus()); } +function tryRestoreTopmostFocus(shouldIgnoreFocused: boolean, isInUploadingContext = false) { + const topmost = [...focusMap].filter(([, v]) => v.input && v.isInUploadingContext === isInUploadingContext).at(-1); + if (topmost === undefined) { + return; + } + const [modalId, {input}] = topmost; + + // This modal is still active + if (activeModals.indexOf(modalId) >= 0) { + return; + } + focus(input, shouldIgnoreFocused); + focusMap.delete(modalId); +} + +/** + * Restore the focus state after the modal is dismissed. + */ +function restoreFocusState(id: ModalId, shouldIgnoreFocused = false, restoreFocusType: RestoreFocusType = CONST.MODAL.RESTORE_FOCUS_TYPE.DEFAULT, isInUploadingContext = false) { + if (!id || !activeModals.length) { + return; + } + const activeModalIndex = activeModals.indexOf(id); + + // This id has been removed from the stack. + if (activeModalIndex < 0) { + return; + } + activeModals.splice(activeModalIndex, 1); + if (restoreFocusType === CONST.MODAL.RESTORE_FOCUS_TYPE.PRESERVE) { + return; + } + + const {input} = focusMap.get(id) ?? {}; + focusMap.delete(id); + if (restoreFocusType === CONST.MODAL.RESTORE_FOCUS_TYPE.DELETE) { + return; + } + + // This modal is not the topmost one, do not restore it. + if (activeModals.length > activeModalIndex) { + if (input) { + const lastId = activeModals.at(-1); + focusMap.set(lastId, {...focusMap.get(lastId), input}); + } + return; + } + if (input) { + focus(input, shouldIgnoreFocused); + return; + } + + // Try to find the topmost one and restore it + tryRestoreTopmostFocus(shouldIgnoreFocused, isInUploadingContext); +} + +function resetReadyToFocus(id: ModalId) { + const promise: PromiseMapValue = { + ready: Promise.resolve(), + resolve: () => {}, + }; + promise.ready = new Promise((resolve) => { + promise.resolve = resolve; + }); + promiseMap.set(id, promise); +} + +/** + * Backward compatibility, for cases without an ModalId param, it's fine to just take the topmost one. + */ +function getTopmostModalId() { + if (promiseMap.size < 1) { + return 0; + } + return [...promiseMap.keys()].at(-1); +} + +function setReadyToFocus(id?: ModalId) { + const key = id ?? getTopmostModalId(); + const promise = promiseMap.get(key); + if (!promise) { + return; + } + promise.resolve?.(); + promiseMap.delete(key); +} + +function isReadyToFocus(id?: ModalId) { + const key = id ?? getTopmostModalId(); + const promise = promiseMap.get(key); + if (!promise) { + return Promise.resolve(); + } + return promise.ready; +} + +function refocusAfterModalFullyClosed(id: ModalId, restoreType: RestoreFocusType, isInUploadingContext?: boolean) { + isReadyToFocus(id)?.then(() => restoreFocusState(id, false, restoreType, isInUploadingContext)); +} + +export type {InputElement}; + export default { + getId, + saveFocusedInput, + clearFocusedInput, + releaseInput, + saveFocusState, + restoreFocusState, resetReadyToFocus, setReadyToFocus, isReadyToFocus, + refocusAfterModalFullyClosed, + tryRestoreTopmostFocus, }; diff --git a/src/libs/DateUtils.ts b/src/libs/DateUtils.ts index 4d4f8d425681..44c7682b47f2 100644 --- a/src/libs/DateUtils.ts +++ b/src/libs/DateUtils.ts @@ -267,7 +267,7 @@ function formatToLongDateWithWeekday(datetime: string | Date): string { * @returns Sunday */ function formatToDayOfWeek(datetime: Date): string { - return format(new Date(datetime), CONST.DATE.WEEKDAY_TIME_FORMAT); + return format(datetime, CONST.DATE.WEEKDAY_TIME_FORMAT); } /** diff --git a/src/libs/DraftCommentUtils.ts b/src/libs/DraftCommentUtils.ts index 325da93d235e..b3cb32498725 100644 --- a/src/libs/DraftCommentUtils.ts +++ b/src/libs/DraftCommentUtils.ts @@ -25,7 +25,7 @@ function getDraftComment(reportID: string): OnyxEntry | null | undefined * A valid draft comment is a non-empty string. */ function isValidDraftComment(comment?: string | null): boolean { - return !!comment?.trim(); + return !!comment; } /** @@ -36,12 +36,12 @@ function hasValidDraftComment(reportID: string): boolean { } /** - * Prepares a draft comment by trimming it and returning null if it's empty. + * Prepares a draft comment by returning null if it's empty. */ function prepareDraftComment(comment: string | null) { // logical OR is used to convert empty string to null // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - return comment?.trim() || null; + return comment || null; } export {getDraftComment, isValidDraftComment, hasValidDraftComment, prepareDraftComment}; diff --git a/src/libs/E2E/tests/chatOpeningTest.e2e.ts b/src/libs/E2E/tests/chatOpeningTest.e2e.ts index 17d9dfa1cb4d..8e43c4ece564 100644 --- a/src/libs/E2E/tests/chatOpeningTest.e2e.ts +++ b/src/libs/E2E/tests/chatOpeningTest.e2e.ts @@ -1,8 +1,10 @@ +import Config from 'react-native-config'; import type {NativeConfig} from 'react-native-config'; import E2ELogin from '@libs/E2E/actions/e2eLogin'; import waitForAppLoaded from '@libs/E2E/actions/waitForAppLoaded'; import E2EClient from '@libs/E2E/client'; import getConfigValueOrThrow from '@libs/E2E/utils/getConfigValueOrThrow'; +import getPromiseWithResolve from '@libs/E2E/utils/getPromiseWithResolve'; import Navigation from '@libs/Navigation/Navigation'; import Performance from '@libs/Performance'; import CONST from '@src/CONST'; @@ -23,29 +25,55 @@ const test = (config: NativeConfig) => { } console.debug('[E2E] Logged in, getting chat opening metrics and submitting them…'); + + const [renderChatPromise, renderChatResolve] = getPromiseWithResolve(); + const [chatTTIPromise, chatTTIResolve] = getPromiseWithResolve(); + + Promise.all([renderChatPromise, chatTTIPromise]).then(() => { + console.debug(`[E2E] Submitting!`); + + E2EClient.submitTestDone(); + }); + Performance.subscribeToMeasurements((entry) => { if (entry.name === CONST.TIMING.SIDEBAR_LOADED) { console.debug(`[E2E] Sidebar loaded, navigating to report…`); + Performance.markStart(CONST.TIMING.OPEN_REPORT); Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(reportID)); return; } + console.debug(`[E2E] Entry: ${JSON.stringify(entry)}`); - if (entry.name !== CONST.TIMING.CHAT_RENDER) { - return; + + if (entry.name === CONST.TIMING.CHAT_RENDER) { + E2EClient.submitTestResults({ + branch: Config.E2E_BRANCH, + name: 'Chat opening', + duration: entry.duration, + }) + .then(() => { + console.debug('[E2E] Done with chat opening, exiting…'); + renderChatResolve(); + }) + .catch((err) => { + console.debug('[E2E] Error while submitting test results:', err); + }); } - console.debug(`[E2E] Submitting!`); - E2EClient.submitTestResults({ - name: 'Chat opening', - duration: entry.duration, - }) - .then(() => { - console.debug('[E2E] Done with chat opening, exiting…'); - E2EClient.submitTestDone(); + if (entry.name === CONST.TIMING.OPEN_REPORT) { + E2EClient.submitTestResults({ + branch: Config.E2E_BRANCH, + name: 'Chat TTI', + duration: entry.duration, }) - .catch((err) => { - console.debug('[E2E] Error while submitting test results:', err); - }); + .then(() => { + console.debug('[E2E] Done with chat TTI tracking, exiting…'); + chatTTIResolve(); + }) + .catch((err) => { + console.debug('[E2E] Error while submitting test results:', err); + }); + } }); }); }; diff --git a/src/libs/E2E/utils/getPromiseWithResolve.ts b/src/libs/E2E/utils/getPromiseWithResolve.ts new file mode 100644 index 000000000000..fd49cd82c513 --- /dev/null +++ b/src/libs/E2E/utils/getPromiseWithResolve.ts @@ -0,0 +1,9 @@ +export default function getPromiseWithResolve(): [Promise, (value?: T) => void] { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + let resolveFn = (_value?: T) => {}; + const promise = new Promise((resolve) => { + resolveFn = resolve; + }); + + return [promise, resolveFn]; +} diff --git a/src/libs/EmojiUtils.ts b/src/libs/EmojiUtils.ts index 05f6fbd17503..3b189dbb084f 100644 --- a/src/libs/EmojiUtils.ts +++ b/src/libs/EmojiUtils.ts @@ -13,7 +13,8 @@ import type IconAsset from '@src/types/utils/IconAsset'; type HeaderIndice = {code: string; index: number; icon: IconAsset}; type EmojiSpacer = {code: string; spacer: boolean}; -type EmojiPickerList = Array; +type EmojiPickerListItem = EmojiSpacer | Emoji | HeaderEmoji; +type EmojiPickerList = EmojiPickerListItem[]; type ReplacedEmoji = {text: string; emojis: Emoji[]; cursorPosition?: number}; let frequentlyUsedEmojis: FrequentlyUsedEmoji[] = []; @@ -155,7 +156,7 @@ function containsOnlyEmojis(message: string): boolean { /** * Get the header emojis with their code, icon and index */ -function getHeaderEmojis(emojis: PickerEmojis): HeaderIndice[] { +function getHeaderEmojis(emojis: EmojiPickerList): HeaderIndice[] { const headerIndices: HeaderIndice[] = []; emojis.forEach((emoji, index) => { if (!('header' in emoji)) { @@ -554,7 +555,7 @@ const getEmojiReactionDetails = (emojiName: string, reaction: ReportActionReacti /** * Given an emoji code, returns an base emoji code without skin tone */ -const getRemovedSkinToneEmoji = (emoji: string) => emoji.replace(CONST.REGEX.EMOJI_SKIN_TONES, ''); +const getRemovedSkinToneEmoji = (emoji?: string) => emoji?.replace(CONST.REGEX.EMOJI_SKIN_TONES, ''); function getSpacersIndexes(allEmojis: EmojiPickerList): number[] { const spacersIndexes: number[] = []; @@ -568,6 +569,8 @@ function getSpacersIndexes(allEmojis: EmojiPickerList): number[] { return spacersIndexes; } +export type {HeaderIndice, EmojiPickerList, EmojiSpacer, EmojiPickerListItem}; + export { findEmojiByName, findEmojiByCode, diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index 295daa1938e7..fde0202d3d2f 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -2,6 +2,7 @@ import React, {memo, useEffect, useMemo, useRef} from 'react'; import {View} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; import Onyx, {withOnyx} from 'react-native-onyx'; +import OptionsListContextProvider from '@components/OptionListContextProvider'; import useOnboardingLayout from '@hooks/useOnboardingLayout'; import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; @@ -266,130 +267,132 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie }, []); return ( - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + ); } diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/WorkspaceSettingsModalStackNavigator.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/WorkspaceSettingsModalStackNavigator.tsx index 14153809bc86..2dce4247c7ae 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/WorkspaceSettingsModalStackNavigator.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/WorkspaceSettingsModalStackNavigator.tsx @@ -50,6 +50,13 @@ function WorkspaceSettingsModalStackNavigator() { name={SCREENS.WORKSPACE.MEMBERS} getComponent={() => require('@pages/workspace/WorkspaceMembersPage').default as React.ComponentType} /> + + require('@pages/workspace/accounting/WorkspaceAccountingPage').default as React.ComponentType} + /> + require('../../../../pages/workspace/categories/CategorySettingsPage').default as React.ComponentType, [SCREENS.WORKSPACE.CATEGORIES_SETTINGS]: () => require('../../../../pages/workspace/categories/WorkspaceCategoriesSettingsPage').default as React.ComponentType, [SCREENS.WORKSPACE.MEMBER_DETAILS]: () => require('../../../../pages/workspace/members/WorkspaceMemberDetailsPage').default as React.ComponentType, - [SCREENS.WORKSPACE.MEMBER_DETAILS_ROLE_SELECTION]: () => require('../../../../pages/workspace/members/WorkspaceMemberDetailsRoleSelectionPage').default as React.ComponentType, [SCREENS.WORKSPACE.OWNER_CHANGE_CHECK]: () => require('@pages/workspace/members/WorkspaceOwnerChangeWrapperPage').default as React.ComponentType, [SCREENS.WORKSPACE.OWNER_CHANGE_SUCCESS]: () => require('../../../../pages/workspace/members/WorkspaceOwnerChangeSuccessPage').default as React.ComponentType, [SCREENS.WORKSPACE.OWNER_CHANGE_ERROR]: () => require('../../../../pages/workspace/members/WorkspaceOwnerChangeErrorPage').default as React.ComponentType, @@ -268,6 +267,7 @@ const SettingsModalStackNavigator = createModalStackNavigator require('../../../../pages/workspace/taxes/NamePage').default as React.ComponentType, [SCREENS.WORKSPACE.TAX_VALUE]: () => require('../../../../pages/workspace/taxes/ValuePage').default as React.ComponentType, [SCREENS.WORKSPACE.TAX_CREATE]: () => require('../../../../pages/workspace/taxes/WorkspaceCreateTaxPage').default as React.ComponentType, + [SCREENS.SETTINGS.SAVE_THE_WORLD]: () => require('../../../../pages/TeachersUnite/SaveTheWorldPage').default as React.ComponentType, }); const EnablePaymentsStackNavigator = createModalStackNavigator({ diff --git a/src/libs/Navigation/AppNavigator/Navigators/CentralPaneNavigator/BaseCentralPaneNavigator.tsx b/src/libs/Navigation/AppNavigator/Navigators/CentralPaneNavigator/BaseCentralPaneNavigator.tsx index 16f403342a58..2b63037a436f 100644 --- a/src/libs/Navigation/AppNavigator/Navigators/CentralPaneNavigator/BaseCentralPaneNavigator.tsx +++ b/src/libs/Navigation/AppNavigator/Navigators/CentralPaneNavigator/BaseCentralPaneNavigator.tsx @@ -20,6 +20,7 @@ const settingsScreens = { [SCREENS.SETTINGS.PROFILE.ROOT]: () => require('../../../../../pages/settings/Profile/ProfilePage').default as React.ComponentType, [SCREENS.SETTINGS.WALLET.ROOT]: () => require('../../../../../pages/settings/Wallet/WalletPage').default as React.ComponentType, [SCREENS.SETTINGS.ABOUT]: () => require('../../../../../pages/settings/AboutPage/AboutPage').default as React.ComponentType, + [SCREENS.SETTINGS.SAVE_THE_WORLD]: () => require('../../../../../pages/TeachersUnite/SaveTheWorldPage').default as React.ComponentType, } satisfies Screens; function BaseCentralPaneNavigator() { diff --git a/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/TopBar.tsx b/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/TopBar.tsx index 38bfe4af9ab6..fd5282a8cfcd 100644 --- a/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/TopBar.tsx +++ b/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/TopBar.tsx @@ -17,19 +17,21 @@ import * as Session from '@userActions/Session'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; -import type {Policy} from '@src/types/onyx'; +import type {Policy, Session as SessionType} from '@src/types/onyx'; type TopBarOnyxProps = { policy: OnyxEntry; + session: OnyxEntry>; }; // eslint-disable-next-line react/no-unused-prop-types type TopBarProps = {activeWorkspaceID?: string} & TopBarOnyxProps; -function TopBar({policy}: TopBarProps) { +function TopBar({policy, session}: TopBarProps) { const styles = useThemeStyles(); const theme = useTheme(); const {translate} = useLocalize(); + const isAnonymousUser = Session.isAnonymousUser(session); const headerBreadcrumb = policy?.name ? {type: CONST.BREADCRUMB_TYPE.STRONG, text: policy.name} @@ -57,7 +59,7 @@ function TopBar({policy}: TopBarProps) { /> - {Session.isAnonymousUser() ? ( + {isAnonymousUser ? ( ) : ( @@ -84,4 +86,8 @@ export default withOnyx({ policy: { key: ({activeWorkspaceID}) => `${ONYXKEYS.COLLECTION.POLICY}${activeWorkspaceID}`, }, + session: { + key: ONYXKEYS.SESSION, + selector: (session) => session && {authTokenType: session.authTokenType}, + }, })(TopBar); diff --git a/src/libs/Navigation/AppNavigator/getModalPresentationStyle/index.android.ts b/src/libs/Navigation/AppNavigator/getModalPresentationStyle/index.android.ts new file mode 100644 index 000000000000..ad498a36302e --- /dev/null +++ b/src/libs/Navigation/AppNavigator/getModalPresentationStyle/index.android.ts @@ -0,0 +1,6 @@ +// a temporary workaround for the modals opening below the current screen on Android +function getModalPresentationStyle(): 'modal' { + return 'modal'; +} + +export default getModalPresentationStyle; diff --git a/src/libs/Navigation/AppNavigator/getModalPresentationStyle/index.ts b/src/libs/Navigation/AppNavigator/getModalPresentationStyle/index.ts new file mode 100644 index 000000000000..830bf1e5b857 --- /dev/null +++ b/src/libs/Navigation/AppNavigator/getModalPresentationStyle/index.ts @@ -0,0 +1,5 @@ +function getModalPresentationStyle(): 'transparentModal' { + return 'transparentModal'; +} + +export default getModalPresentationStyle; diff --git a/src/libs/Navigation/AppNavigator/getRootNavigatorScreenOptions.ts b/src/libs/Navigation/AppNavigator/getRootNavigatorScreenOptions.ts index 0c3b5fdadadd..31e4bc37971b 100644 --- a/src/libs/Navigation/AppNavigator/getRootNavigatorScreenOptions.ts +++ b/src/libs/Navigation/AppNavigator/getRootNavigatorScreenOptions.ts @@ -5,6 +5,7 @@ import type {StyleUtilsType} from '@styles/utils'; import variables from '@styles/variables'; import CONFIG from '@src/CONFIG'; import createModalCardStyleInterpolator from './createModalCardStyleInterpolator'; +import getModalPresentationStyle from './getModalPresentationStyle'; type GetOnboardingModalNavigatorOptions = (shouldUseNarrowLayout: boolean) => StackNavigationOptions; @@ -35,7 +36,7 @@ const getRootNavigatorScreenOptions: GetRootNavigatorScreenOptions = (isSmallScr rightModalNavigator: { ...commonScreenOptions, cardStyleInterpolator: (props: StackCardInterpolationProps) => modalCardStyleInterpolator(isSmallScreenWidth, false, false, props), - presentation: 'transparentModal', + presentation: getModalPresentationStyle(), // We want pop in RHP since there are some flows that would work weird otherwise animationTypeForReplace: 'pop', @@ -67,7 +68,7 @@ const getRootNavigatorScreenOptions: GetRootNavigatorScreenOptions = (isSmallScr leftModalNavigator: { ...commonScreenOptions, cardStyleInterpolator: (props) => modalCardStyleInterpolator(isSmallScreenWidth, false, false, props), - presentation: 'transparentModal', + presentation: getModalPresentationStyle(), gestureDirection: 'horizontal-inverted', // We want pop in LHP since there are some flows that would work weird otherwise diff --git a/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts b/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts index 1247933701a8..984f2ef20bbd 100755 --- a/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts +++ b/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts @@ -8,7 +8,6 @@ const FULL_SCREEN_TO_RHP_MAPPING: Partial> = { SCREENS.WORKSPACE.INVITE, SCREENS.WORKSPACE.INVITE_MESSAGE, SCREENS.WORKSPACE.MEMBER_DETAILS, - SCREENS.WORKSPACE.MEMBER_DETAILS_ROLE_SELECTION, SCREENS.WORKSPACE.OWNER_CHANGE_CHECK, SCREENS.WORKSPACE.OWNER_CHANGE_SUCCESS, SCREENS.WORKSPACE.OWNER_CHANGE_ERROR, diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts index c9c3efbf2e16..2706f40f6b68 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -61,6 +61,7 @@ const config: LinkingOptions['config'] = { exact: true, }, [SCREENS.SETTINGS.WORKSPACES]: ROUTES.SETTINGS_WORKSPACES, + [SCREENS.SETTINGS.SAVE_THE_WORLD]: ROUTES.SETTINGS_SAVE_THE_WORLD, }, }, [SCREENS.NOT_FOUND]: '*', @@ -307,9 +308,6 @@ const config: LinkingOptions['config'] = { [SCREENS.WORKSPACE.MEMBER_DETAILS]: { path: ROUTES.WORKSPACE_MEMBER_DETAILS.route, }, - [SCREENS.WORKSPACE.MEMBER_DETAILS_ROLE_SELECTION]: { - path: ROUTES.WORKSPACE_MEMBER_ROLE_SELECTION.route, - }, [SCREENS.WORKSPACE.OWNER_CHANGE_SUCCESS]: { path: ROUTES.WORKSPACE_OWNER_CHANGE_SUCCESS.route, }, @@ -401,12 +399,21 @@ const config: LinkingOptions['config'] = { }, [SCREENS.WORKSPACE.TAX_EDIT]: { path: ROUTES.WORKSPACE_TAX_EDIT.route, + parse: { + taxID: (taxID: string) => decodeURIComponent(taxID), + }, }, [SCREENS.WORKSPACE.TAX_NAME]: { path: ROUTES.WORKSPACE_TAX_NAME.route, + parse: { + taxID: (taxID: string) => decodeURIComponent(taxID), + }, }, [SCREENS.WORKSPACE.TAX_VALUE]: { path: ROUTES.WORKSPACE_TAX_VALUE.route, + parse: { + taxID: (taxID: string) => decodeURIComponent(taxID), + }, }, }, }, @@ -487,7 +494,6 @@ const config: LinkingOptions['config'] = { }, [SCREENS.RIGHT_MODAL.TEACHERS_UNITE]: { screens: { - [SCREENS.SAVE_THE_WORLD.ROOT]: ROUTES.TEACHERS_UNITE, [SCREENS.I_KNOW_A_TEACHER]: ROUTES.I_KNOW_A_TEACHER, [SCREENS.INTRO_SCHOOL_PRINCIPAL]: ROUTES.INTRO_SCHOOL_PRINCIPAL, [SCREENS.I_AM_A_TEACHER]: ROUTES.I_AM_A_TEACHER, @@ -650,6 +656,9 @@ const config: LinkingOptions['config'] = { [SCREENS.WORKSPACE.MEMBERS]: { path: ROUTES.WORKSPACE_MEMBERS.route, }, + [SCREENS.WORKSPACE.ACCOUNTING]: { + path: ROUTES.WORKSPACE_ACCOUNTING.route, + }, [SCREENS.WORKSPACE.CATEGORIES]: { path: ROUTES.WORKSPACE_CATEGORIES.route, }, diff --git a/src/libs/Navigation/linkingConfig/getAdaptedStateFromPath.ts b/src/libs/Navigation/linkingConfig/getAdaptedStateFromPath.ts index 07d2fac3b2e1..f51f7fae3fb7 100644 --- a/src/libs/Navigation/linkingConfig/getAdaptedStateFromPath.ts +++ b/src/libs/Navigation/linkingConfig/getAdaptedStateFromPath.ts @@ -312,7 +312,9 @@ function getAdaptedState(state: PartialState metainfo, }; } - if (bottomTabNavigator) { + + // We need to make sure that this if only handles states where we deeplink to the bottom tab directly + if (bottomTabNavigator && bottomTabNavigator.state) { // Routes // - found bottom tab // - matching central pane on desktop layout diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index fefad04b9faf..e77dceb8736f 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -59,6 +59,7 @@ type CentralPaneNavigatorParamList = { [SCREENS.SETTINGS.WALLET.ROOT]: undefined; [SCREENS.SETTINGS.ABOUT]: undefined; [SCREENS.SETTINGS.WORKSPACES]: undefined; + [SCREENS.SETTINGS.SAVE_THE_WORLD]: undefined; }; type WorkspaceSwitcherNavigatorParamList = { @@ -220,12 +221,6 @@ type SettingsNavigatorParamList = { [SCREENS.WORKSPACE.MEMBER_DETAILS]: { policyID: string; accountID: string; - backTo: Routes; - }; - [SCREENS.WORKSPACE.MEMBER_DETAILS_ROLE_SELECTION]: { - policyID: string; - accountID: string; - backTo: Routes; }; [SCREENS.WORKSPACE.OWNER_CHANGE_SUCCESS]: { policyID: string; @@ -382,6 +377,7 @@ type MoneyRequestNavigatorParamList = { backTo: Routes; }; [SCREENS.MONEY_REQUEST.STEP_TAX_AMOUNT]: { + action: ValueOf; iouType: ValueOf; transactionID: string; reportID: string; @@ -395,6 +391,7 @@ type MoneyRequestNavigatorParamList = { backTo: Routes; }; [SCREENS.MONEY_REQUEST.STEP_TAX_RATE]: { + action: ValueOf; iouType: ValueOf; transactionID: string; reportID: string; @@ -491,8 +488,9 @@ type AddPersonalBankAccountNavigatorParamList = { type ReimbursementAccountNavigatorParamList = { [SCREENS.REIMBURSEMENT_ACCOUNT_ROOT]: { - stepToOpen: string; - policyID: string; + stepToOpen?: string; + backTo?: Routes; + policyID?: string; }; }; @@ -609,6 +607,9 @@ type WorkspacesCentralPaneNavigatorParamList = { [SCREENS.WORKSPACE.MEMBERS]: { policyID: string; }; + [SCREENS.WORKSPACE.ACCOUNTING]: { + policyID: string; + }; [SCREENS.WORKSPACE.CATEGORIES]: { policyID: string; }; diff --git a/src/libs/NextStepUtils.ts b/src/libs/NextStepUtils.ts index 8b0afe2d24c3..0e76596ba8fa 100644 --- a/src/libs/NextStepUtils.ts +++ b/src/libs/NextStepUtils.ts @@ -81,7 +81,7 @@ function buildNextStep( const {policyID = '', ownerAccountID = -1, managerID = -1} = report; const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${policyID}`] ?? ({} as Policy); - const {submitsTo, harvesting, isPreventSelfApprovalEnabled, preventSelfApproval, autoReportingFrequency, autoReportingOffset} = policy; + const {submitsTo, harvesting, preventSelfApproval, autoReportingFrequency, autoReportingOffset} = policy; const isOwner = currentUserAccountID === ownerAccountID; const isManager = currentUserAccountID === managerID; const isSelfApproval = currentUserAccountID === submitsTo; @@ -172,7 +172,7 @@ function buildNextStep( } // Prevented self submitting - if ((isPreventSelfApprovalEnabled ?? preventSelfApproval) && isSelfApproval) { + if (preventSelfApproval && isSelfApproval) { optimisticNextStep.message = [ { text: "Oops! Looks like you're submitting to ", @@ -255,6 +255,20 @@ function buildNextStep( break; } + // Generates an optimistic nextStep once a report has been closed for example in the case of Submit and Close approval flow + case CONST.REPORT.STATUS_NUM.CLOSED: + optimisticNextStep = { + type, + title: 'Finished!', + message: [ + { + text: 'No further action required!', + }, + ], + }; + + break; + // Generates an optimistic nextStep once a report has been approved case CONST.REPORT.STATUS_NUM.APPROVED: // Self review diff --git a/src/libs/Notification/LocalNotification/BrowserNotifications.ts b/src/libs/Notification/LocalNotification/BrowserNotifications.ts index 2a0dfc1cd91a..ee6d00ee2208 100644 --- a/src/libs/Notification/LocalNotification/BrowserNotifications.ts +++ b/src/libs/Notification/LocalNotification/BrowserNotifications.ts @@ -101,7 +101,7 @@ export default { const plainTextPerson = person?.map((f) => f.text).join() ?? ''; // Specifically target the comment part of the message - const plainTextMessage = message?.find((f) => f.type === 'COMMENT')?.text ?? ''; + const plainTextMessage = message?.find((f) => f?.type === 'COMMENT')?.text ?? ''; if (isChatRoom) { const roomName = ReportUtils.getReportName(report); diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index 3acbd9232c87..e1a3e9207ad8 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -157,6 +157,9 @@ type GetOptionsConfig = { includeSelectedOptions?: boolean; includeTaxRates?: boolean; taxRates?: TaxRatesWithDefault; + includePolicyReportFieldOptions?: boolean; + policyReportFieldOptions?: string[]; + recentlyUsedPolicyReportFieldOptions?: string[]; transactionViolations?: OnyxCollection; }; @@ -184,6 +187,7 @@ type GetOptions = { categoryOptions: CategoryTreeSection[]; tagOptions: CategorySection[]; taxRatesOptions: CategorySection[]; + policyReportFieldOptions?: CategorySection[] | null; }; type PreviewConfig = {showChatPreviewLine?: boolean; forcePolicyNamePreview?: boolean; showPersonalDetails?: boolean}; @@ -1105,7 +1109,7 @@ function getCategoryListSections( * * @param tags - an initial tag array */ -function getTagsOptions(tags: Array>): Option[] { +function getTagsOptions(tags: Array>, selectedOptions?: SelectedTagOption[]): Option[] { return tags.map((tag) => { // This is to remove unnecessary escaping backslash in tag name sent from backend. const cleanedName = PolicyUtils.getCleanedTagName(tag.name); @@ -1115,6 +1119,7 @@ function getTagsOptions(tags: Array>): Optio searchText: tag.name, tooltipText: cleanedName, isDisabled: !tag.enabled, + isSelected: selectedOptions?.some((selectedTag) => selectedTag.name === tag.name), }; }); } @@ -1146,7 +1151,7 @@ function getTagListSections( // "Selected" section title: '', shouldShow: false, - data: getTagsOptions(selectedTagOptions), + data: getTagsOptions(selectedTagOptions, selectedOptions), }); return tagSections; @@ -1159,7 +1164,7 @@ function getTagListSections( // "Search" section title: '', shouldShow: true, - data: getTagsOptions(searchTags), + data: getTagsOptions(searchTags, selectedOptions), }); return tagSections; @@ -1170,7 +1175,7 @@ function getTagListSections( // "All" section when items amount less than the threshold title: '', shouldShow: false, - data: getTagsOptions(enabledTags), + data: getTagsOptions(enabledTags, selectedOptions), }); return tagSections; @@ -1195,7 +1200,7 @@ function getTagListSections( // "Selected" section title: '', shouldShow: true, - data: getTagsOptions(selectedTagOptions), + data: getTagsOptions(selectedTagOptions, selectedOptions), }); } @@ -1206,7 +1211,7 @@ function getTagListSections( // "Recent" section title: Localize.translateLocal('common.recent'), shouldShow: true, - data: getTagsOptions(cutRecentlyUsedTags), + data: getTagsOptions(cutRecentlyUsedTags, selectedOptions), }); } @@ -1214,7 +1219,7 @@ function getTagListSections( // "All" section when items amount more than the threshold title: Localize.translateLocal('common.all'), shouldShow: true, - data: getTagsOptions(filteredTags), + data: getTagsOptions(filteredTags, selectedOptions), }); return tagSections; @@ -1229,6 +1234,81 @@ function hasEnabledTags(policyTagList: Array return hasEnabledOptions(policyTagValueList); } +/** + * Transforms the provided report field options into option objects. + * + * @param reportFieldOptions - an initial report field options array + */ +function getReportFieldOptions(reportFieldOptions: string[]): Option[] { + return reportFieldOptions.map((name) => ({ + text: name, + keyForList: name, + searchText: name, + tooltipText: name, + isDisabled: false, + })); +} + +/** + * Build the section list for report field options + */ +function getReportFieldOptionsSection(options: string[], recentlyUsedOptions: string[], selectedOptions: Array>, searchInputValue: string) { + const reportFieldOptionsSections = []; + const selectedOptionKeys = selectedOptions.map(({text, keyForList, name}) => text ?? keyForList ?? name ?? '').filter((o) => !!o); + let indexOffset = 0; + + if (searchInputValue) { + const searchOptions = options.filter((option) => option.toLowerCase().includes(searchInputValue.toLowerCase())); + + reportFieldOptionsSections.push({ + // "Search" section + title: '', + shouldShow: true, + indexOffset, + data: getReportFieldOptions(searchOptions), + }); + + return reportFieldOptionsSections; + } + + const filteredRecentlyUsedOptions = recentlyUsedOptions.filter((recentlyUsedOption) => !selectedOptionKeys.includes(recentlyUsedOption)); + const filteredOptions = options.filter((option) => !selectedOptionKeys.includes(option)); + + if (selectedOptionKeys.length) { + reportFieldOptionsSections.push({ + // "Selected" section + title: '', + shouldShow: true, + indexOffset, + data: getReportFieldOptions(selectedOptionKeys), + }); + + indexOffset += selectedOptionKeys.length; + } + + if (filteredRecentlyUsedOptions.length > 0) { + reportFieldOptionsSections.push({ + // "Recent" section + title: Localize.translateLocal('common.recent'), + shouldShow: true, + indexOffset, + data: getReportFieldOptions(filteredRecentlyUsedOptions), + }); + + indexOffset += filteredRecentlyUsedOptions.length; + } + + reportFieldOptionsSections.push({ + // "All" section when items amount more than the threshold + title: Localize.translateLocal('common.all'), + shouldShow: true, + indexOffset, + data: getReportFieldOptions(filteredOptions), + }); + + return reportFieldOptionsSections; +} + /** * Transforms tax rates to a new object format - to add codes and new name with concatenated name and value. * @@ -1454,6 +1534,9 @@ function getOptions( includeTaxRates, taxRates, includeSelfDM = false, + includePolicyReportFieldOptions = false, + policyReportFieldOptions = [], + recentlyUsedPolicyReportFieldOptions = [], }: GetOptionsConfig, ): GetOptions { if (includeCategories) { @@ -1498,6 +1581,20 @@ function getOptions( }; } + if (includePolicyReportFieldOptions) { + const transformedPolicyReportFieldOptions = getReportFieldOptionsSection(policyReportFieldOptions, recentlyUsedPolicyReportFieldOptions, selectedOptions, searchInputValue); + return { + recentReports: [], + personalDetails: [], + userToInvite: null, + currentUserOption: null, + categoryOptions: [], + tagOptions: [], + taxRatesOptions: [], + policyReportFieldOptions: transformedPolicyReportFieldOptions, + }; + } + const parsedPhoneNumber = PhoneNumber.parsePhoneNumber(LoginUtils.appendCountryCode(Str.removeSMSDomain(searchInputValue))); const searchValue = parsedPhoneNumber.possible ? parsedPhoneNumber.number?.e164 : searchInputValue.toLowerCase(); const topmostReportId = Navigation.getTopmostReportId() ?? ''; @@ -1881,6 +1978,9 @@ function getFilteredOptions( includeTaxRates = false, taxRates: TaxRatesWithDefault = {} as TaxRatesWithDefault, includeSelfDM = false, + includePolicyReportFieldOptions = false, + policyReportFieldOptions: string[] = [], + recentlyUsedPolicyReportFieldOptions: string[] = [], ) { return getOptions( {reports, personalDetails}, @@ -1905,6 +2005,9 @@ function getFilteredOptions( includeTaxRates, taxRates, includeSelfDM, + includePolicyReportFieldOptions, + policyReportFieldOptions, + recentlyUsedPolicyReportFieldOptions, }, ); } @@ -2138,4 +2241,4 @@ export { getTaxRatesSection, }; -export type {MemberForList, CategorySection, GetOptions, OptionList, SearchOption, PayeePersonalDetails, Category, TaxRatesOption}; +export type {MemberForList, CategorySection, CategoryTreeSection, GetOptions, OptionList, SearchOption, PayeePersonalDetails, Category, TaxRatesOption}; diff --git a/src/libs/PersonalDetailsUtils.ts b/src/libs/PersonalDetailsUtils.ts index c9ea65781117..081d1139bf5d 100644 --- a/src/libs/PersonalDetailsUtils.ts +++ b/src/libs/PersonalDetailsUtils.ts @@ -17,11 +17,18 @@ type FirstAndLastName = { let personalDetails: Array = []; let allPersonalDetails: OnyxEntry = {}; +let emailToPersonalDetailsCache: Record = {}; Onyx.connect({ key: ONYXKEYS.PERSONAL_DETAILS_LIST, callback: (val) => { personalDetails = Object.values(val ?? {}); allPersonalDetails = val; + emailToPersonalDetailsCache = personalDetails.reduce((acc: Record, detail) => { + if (detail?.login) { + acc[detail.login.toLowerCase()] = detail; + } + return acc; + }, {}); }, }); @@ -77,7 +84,7 @@ function getPersonalDetailsByIDs(accountIDs: number[], currentUserAccountID: num } function getPersonalDetailByEmail(email: string): PersonalDetails | undefined { - return (Object.values(allPersonalDetails ?? {}) as PersonalDetails[]).find((detail) => detail?.login === email); + return emailToPersonalDetailsCache[email.toLowerCase()]; } /** diff --git a/src/libs/ReportActionComposeFocusManager.ts b/src/libs/ReportActionComposeFocusManager.ts index 123d97987e14..11c1fd04329f 100644 --- a/src/libs/ReportActionComposeFocusManager.ts +++ b/src/libs/ReportActionComposeFocusManager.ts @@ -3,7 +3,7 @@ import type {TextInput} from 'react-native'; import ROUTES from '@src/ROUTES'; import Navigation from './Navigation/Navigation'; -type FocusCallback = () => void; +type FocusCallback = (shouldFocusForNonBlurInputOnTapOutside?: boolean) => void; const composerRef = React.createRef(); const editComposerRef = React.createRef(); @@ -18,7 +18,7 @@ let mainComposerFocusCallback: FocusCallback | null = null; * * @param callback callback to register */ -function onComposerFocus(callback: FocusCallback, isMainComposer = false) { +function onComposerFocus(callback: FocusCallback | null, isMainComposer = false) { if (isMainComposer) { mainComposerFocusCallback = callback; } else { @@ -29,7 +29,7 @@ function onComposerFocus(callback: FocusCallback, isMainComposer = false) { /** * Request focus on the ReportActionComposer */ -function focus() { +function focus(shouldFocusForNonBlurInputOnTapOutside?: boolean) { /** Do not trigger the refocusing when the active route is not the report route, */ if (!Navigation.isActiveRoute(ROUTES.REPORT_WITH_ID.getRoute(Navigation.getTopmostReportId() ?? ''))) { return; @@ -40,7 +40,7 @@ function focus() { return; } - mainComposerFocusCallback(); + mainComposerFocusCallback(shouldFocusForNonBlurInputOnTapOutside); return; } diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index bf1a9f994c37..b09f58b969f0 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -224,7 +224,12 @@ function getOneTransactionThreadReportID(reportActions: OnyxEntry } // Get all IOU report actions for the report. - const iouRequestTypes: Array> = [CONST.IOU.REPORT_ACTION_TYPE.CREATE, CONST.IOU.REPORT_ACTION_TYPE.SPLIT, CONST.IOU.REPORT_ACTION_TYPE.PAY]; + const iouRequestTypes: Array> = [ + CONST.IOU.REPORT_ACTION_TYPE.CREATE, + CONST.IOU.REPORT_ACTION_TYPE.SPLIT, + CONST.IOU.REPORT_ACTION_TYPE.PAY, + CONST.IOU.REPORT_ACTION_TYPE.TRACK, + ]; const iouRequestActions = reportActionsArray.filter( (action) => action.actionName === CONST.REPORT.ACTIONS.TYPE.IOU && @@ -346,7 +351,11 @@ function getMostRecentIOURequestActionID(reportActions: ReportAction[] | null): if (!Array.isArray(reportActions)) { return null; } - const iouRequestTypes: Array> = [CONST.IOU.REPORT_ACTION_TYPE.CREATE, CONST.IOU.REPORT_ACTION_TYPE.SPLIT]; + const iouRequestTypes: Array> = [ + CONST.IOU.REPORT_ACTION_TYPE.CREATE, + CONST.IOU.REPORT_ACTION_TYPE.SPLIT, + CONST.IOU.REPORT_ACTION_TYPE.TRACK, + ]; const iouRequestActions = reportActions?.filter((action) => action.actionName === CONST.REPORT.ACTIONS.TYPE.IOU && iouRequestTypes.includes(action.originalMessage.type)) ?? []; if (iouRequestActions.length === 0) { @@ -549,7 +558,9 @@ function replaceBaseURLInPolicyChangeLogAction(reportAction: ReportAction): Repo return updatedReportAction; } - updatedReportAction.message[0].html = reportAction.message[0].html?.replace('%baseURL', environmentURL); + if (updatedReportAction.message[0]) { + updatedReportAction.message[0].html = reportAction.message?.[0]?.html?.replace('%baseURL', environmentURL); + } return updatedReportAction; } @@ -899,7 +910,7 @@ function getMemberChangeMessageFragment(reportAction: OnyxEntry): return { html: `${html}`, - text: reportAction?.message ? reportAction?.message[0].text : '', + text: reportAction?.message?.[0] ? reportAction?.message?.[0]?.text : '', type: CONST.REPORT.MESSAGE.TYPE.COMMENT, }; } @@ -942,7 +953,7 @@ function isOldDotReportAction(action: ReportAction): boolean { * For now, we just concat all of the text elements of the message to create the full message. */ function getMessageOfOldDotReportAction(reportAction: OnyxEntry): string { - return reportAction?.message?.map((element) => element.text).join('') ?? ''; + return reportAction?.message?.map((element) => element?.text).join('') ?? ''; } function getMemberChangeMessagePlainText(reportAction: OnyxEntry): string { @@ -1054,7 +1065,7 @@ function isApprovedOrSubmittedReportAction(action: OnyxEntry | Emp * Gets the text version of the message in a report action */ function getReportActionMessageText(reportAction: OnyxEntry | EmptyObject): string { - return reportAction?.message?.reduce((acc, curr) => `${acc}${curr.text}`, '') ?? ''; + return reportAction?.message?.reduce((acc, curr) => `${acc}${curr?.text}`, '') ?? ''; } export { diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 9d7b6b1d6549..c9241054e74c 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -29,6 +29,7 @@ import type { ReportMetadata, Session, Task, + TaxRate, Transaction, TransactionViolation, UserWallet, @@ -166,6 +167,7 @@ type OptimisticExpenseReport = Pick< | 'stateNum' | 'statusNum' | 'total' + | 'nonReimbursableTotal' | 'notificationPreference' | 'parentReportID' | 'lastVisibleActionCreated' @@ -416,6 +418,9 @@ type OptionData = { isDisabled?: boolean | null; name?: string | null; isSelfDM?: boolean | null; + reportID?: string; + enabled?: boolean; + data?: Partial; } & Report; type OnyxDataTaskAssigneeChat = { @@ -560,12 +565,12 @@ function getChatType(report: OnyxEntry | Participant | EmptyObject): Val /** * Get the report given a reportID */ -function getReport(reportID: string | undefined): OnyxEntry | EmptyObject { +function getReport(reportID: string | undefined): OnyxEntry { if (!allReports) { - return {}; + return null; } - return allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${reportID}`] ?? {}; + return allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${reportID}`]; } /** @@ -745,8 +750,8 @@ function isOpenExpenseReport(report: OnyxEntry | EmptyObject): boolean { /** * Checks if the supplied report has a common policy member with the array passed in params. */ -function hasParticipantInArray(report: Report, policyMemberAccountIDs: number[]) { - if (!report.participantAccountIDs) { +function hasParticipantInArray(report: OnyxEntry, policyMemberAccountIDs: number[]) { + if (!report?.participantAccountIDs) { return false; } @@ -979,9 +984,10 @@ function findSelfDMReportID(): string | undefined { * Checks if the supplied report belongs to workspace based on the provided params. If the report's policyID is _FAKE_ or has no value, it means this report is a DM. * In this case report and workspace members must be compared to determine whether the report belongs to the workspace. */ -function doesReportBelongToWorkspace(report: Report, policyMemberAccountIDs: number[], policyID?: string) { +function doesReportBelongToWorkspace(report: OnyxEntry, policyMemberAccountIDs: number[], policyID?: string) { return ( - isConciergeChatReport(report) || (report.policyID === CONST.POLICY.ID_FAKE || !report.policyID ? hasParticipantInArray(report, policyMemberAccountIDs) : report.policyID === policyID) + isConciergeChatReport(report) || + (report?.policyID === CONST.POLICY.ID_FAKE || !report?.policyID ? hasParticipantInArray(report, policyMemberAccountIDs) : report?.policyID === policyID) ); } @@ -995,7 +1001,7 @@ function filterReportsByPolicyIDAndMemberAccountIDs(reports: Report[], policyMem /** * Given an array of reports, return them sorted by the last read timestamp. */ -function sortReportsByLastRead(reports: Report[], reportMetadata: OnyxCollection): Array> { +function sortReportsByLastRead(reports: Array>, reportMetadata: OnyxCollection): Array> { return reports .filter((report) => !!report?.reportID && !!(reportMetadata?.[`${ONYXKEYS.COLLECTION.REPORT_METADATA}${report.reportID}`]?.lastVisitTime ?? report?.lastReadTime)) .sort((a, b) => { @@ -2587,7 +2593,7 @@ function getReportPreviewMessage( isForListPreview = false, originalReportAction: OnyxEntry | EmptyObject = iouReportAction, ): string { - const reportActionMessage = iouReportAction?.message?.[0].html ?? ''; + const reportActionMessage = iouReportAction?.message?.[0]?.html ?? ''; if (isEmptyObject(report) || !report?.reportID) { // The iouReport is not found locally after SignIn because the OpenApp API won't return iouReports if they're settled @@ -2779,10 +2785,11 @@ function getModifiedExpenseOriginalMessage( if ('taxAmount' in transactionChanges) { originalMessage.oldTaxAmount = TransactionUtils.getTaxAmount(oldTransaction, isFromExpenseReport); originalMessage.taxAmount = transactionChanges?.taxAmount; + originalMessage.currency = TransactionUtils.getCurrency(oldTransaction); } if ('taxCode' in transactionChanges) { - originalMessage.oldTaxRate = policy?.taxRates?.taxes[TransactionUtils.getTaxCode(oldTransaction)].value; + originalMessage.oldTaxRate = policy?.taxRates?.taxes[TransactionUtils.getTaxCode(oldTransaction)]?.value; originalMessage.taxRate = transactionChanges?.taxCode && policy?.taxRates?.taxes[transactionChanges?.taxCode].value; } @@ -3167,15 +3174,15 @@ function updateOptimisticParentReportAction(parentReportAction: OnyxEntry, policy: OnyxEntry, o * - Send option should show for: * - DMs * - Split options should show for: - * - chat/ policy rooms with more than 1 participants + * - DMs + * - chat/policy rooms with more than 1 participant * - groups chats with 3 and more participants * - corporate workspace chats * - Track expense option should show for: * - Self DMs - * - admin rooms + * - own policy expense chats + * - open and processing expense reports tied to own policy expense chat * * None of the options should show in chat threads or if there is some special Expensify account * as a participant of the report. @@ -4828,7 +4840,6 @@ function getMoneyRequestOptions(report: OnyxEntry, policy: OnyxEntry currentUserPersonalDetails?.accountID !== accountID); const hasSingleOtherParticipantInReport = otherParticipants.length === 1; - const hasMultipleOtherParticipants = otherParticipants.length > 1; let options: Array> = []; if (isSelfDM(report)) { @@ -4837,24 +4848,24 @@ function getMoneyRequestOptions(report: OnyxEntry, policy: OnyxEntry 0) || - (isDM(report) && hasMultipleOtherParticipants) || + (isDM(report) && otherParticipants.length > 0) || (isGroupChat(report) && otherParticipants.length > 0) || (isPolicyExpenseChat(report) && report?.isOwnPolicyExpenseChat) ) { options = [CONST.IOU.TYPE.SPLIT]; } - // TODO: Re-enable this when we have a clarity on track expense in policy expense chat - // if (canUseTrackExpense && isPolicyExpenseChat(report) && report?.isOwnPolicyExpenseChat) { - // options = [...options, CONST.IOU.TYPE.TRACK_EXPENSE]; - // } - if (canRequestMoney(report, policy, otherParticipants)) { options = [...options, CONST.IOU.TYPE.REQUEST]; + + // If the user can request money from the workspace report, they can also track expenses + if (canUseTrackExpense && (isPolicyExpenseChat(report) || isExpenseReport(report))) { + options = [...options, CONST.IOU.TYPE.TRACK_EXPENSE]; + } } // Send money option should be visible only in 1:1 DMs @@ -5156,7 +5167,7 @@ function getTaskAssigneeChatOnyxData( // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing const displayname = allPersonalDetails?.[assigneeAccountID]?.displayName || allPersonalDetails?.[assigneeAccountID]?.login || ''; optimisticAssigneeAddComment = buildOptimisticTaskCommentReportAction(taskReportID, title, assigneeAccountID, `assigned to ${displayname}`, parentReportID); - const lastAssigneeCommentText = formatReportLastMessageText(optimisticAssigneeAddComment.reportAction.message?.[0].text ?? ''); + const lastAssigneeCommentText = formatReportLastMessageText(optimisticAssigneeAddComment.reportAction.message?.[0]?.text ?? ''); const optimisticAssigneeReport = { lastVisibleActionCreated: currentTime, lastMessageText: lastAssigneeCommentText, @@ -5472,7 +5483,7 @@ function shouldDisplayThreadReplies(reportAction: OnyxEntry, repor /** * Check if money report has any transactions updated optimistically */ -function hasUpdatedTotal(report: OnyxEntry): boolean { +function hasUpdatedTotal(report: OnyxEntry, policy: OnyxEntry): boolean { if (!report) { return true; } @@ -5480,18 +5491,19 @@ function hasUpdatedTotal(report: OnyxEntry): boolean { const transactions = TransactionUtils.getAllReportTransactions(report.reportID); const hasPendingTransaction = transactions.some((transaction) => !!transaction.pendingAction); const hasTransactionWithDifferentCurrency = transactions.some((transaction) => transaction.currency !== report.currency); + const hasDifferentWorkspaceCurrency = report.pendingFields?.createChat && isExpenseReport(report) && report.currency !== policy?.outputCurrency; - return !(hasPendingTransaction && hasTransactionWithDifferentCurrency) && !(hasHeldExpenses(report.reportID) && report?.unheldTotal === undefined); + return !(hasPendingTransaction && (hasTransactionWithDifferentCurrency || hasDifferentWorkspaceCurrency)) && !(hasHeldExpenses(report.reportID) && report?.unheldTotal === undefined); } /** * Return held and full amount formatted with used currency */ -function getNonHeldAndFullAmount(iouReport: OnyxEntry): string[] { +function getNonHeldAndFullAmount(iouReport: OnyxEntry, policy: OnyxEntry): string[] { const transactions = TransactionUtils.getAllReportTransactions(iouReport?.reportID ?? ''); const hasPendingTransaction = transactions.some((transaction) => !!transaction.pendingAction); - if (hasUpdatedTotal(iouReport) && hasPendingTransaction) { + if (hasUpdatedTotal(iouReport, policy) && hasPendingTransaction) { const unheldTotal = transactions.reduce((currentVal, transaction) => currentVal - (!TransactionUtils.isOnHold(transaction) ? transaction.amount : 0), 0); return [CurrencyUtils.convertToDisplayString(unheldTotal, iouReport?.currency ?? ''), CurrencyUtils.convertToDisplayString((iouReport?.total ?? 0) * -1, iouReport?.currency ?? '')]; @@ -5729,7 +5741,8 @@ function getOutstandingChildRequest(iouReport: OnyxEntry | EmptyObject): const policy = getPolicy(iouReport.policyID); const shouldBeManuallySubmitted = PolicyUtils.isPaidGroupPolicy(policy) && !policy?.harvesting?.enabled; - if (shouldBeManuallySubmitted || PolicyUtils.isPolicyAdmin(policy)) { + const isOwnFreePolicy = PolicyUtils.isFreeGroupPolicy(policy) && PolicyUtils.isPolicyAdmin(policy); + if (shouldBeManuallySubmitted || isOwnFreePolicy) { return { hasOutstandingChildRequest: true, }; diff --git a/src/libs/SidebarUtils.ts b/src/libs/SidebarUtils.ts index 789029779b55..e1dd7ea684b1 100644 --- a/src/libs/SidebarUtils.ts +++ b/src/libs/SidebarUtils.ts @@ -63,10 +63,10 @@ function compareStringDates(a: string, b: string): 0 | 1 | -1 { */ function getOrderedReportIDs( currentReportId: string | null, - allReports: Record, - betas: Beta[], - policies: Record, - priorityMode: ValueOf, + allReports: OnyxCollection, + betas: OnyxEntry, + policies: OnyxCollection, + priorityMode: OnyxEntry>, allReportActions: OnyxCollection, transactionViolations: OnyxCollection, currentPolicyID = '', @@ -74,7 +74,7 @@ function getOrderedReportIDs( ): string[] { const isInGSDMode = priorityMode === CONST.PRIORITY_MODE.GSD; const isInDefaultMode = !isInGSDMode; - const allReportsDictValues = Object.values(allReports); + const allReportsDictValues = Object.values(allReports ?? {}); // Filter out all the reports that shouldn't be displayed let reportsToDisplay = allReportsDictValues.filter((report) => { @@ -86,8 +86,11 @@ function getOrderedReportIDs( const parentReportActions = allReportActions?.[parentReportActionsKey]; const reportActions = ReportActionsUtils.getAllReportActions(report.reportID); const parentReportAction = parentReportActions?.find((action) => action && action?.reportActionID === report.parentReportActionID); - const doesReportHaveViolations = - betas.includes(CONST.BETAS.VIOLATIONS) && !!parentReportAction && ReportUtils.doesTransactionThreadHaveViolations(report, transactionViolations, parentReportAction); + const doesReportHaveViolations = !!( + betas?.includes(CONST.BETAS.VIOLATIONS) && + !!parentReportAction && + ReportUtils.doesTransactionThreadHaveViolations(report, transactionViolations, parentReportAction) + ); const isHidden = report.notificationPreference === CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN; const isFocused = report.reportID === currentReportId; const hasErrors = Object.keys(OptionsListUtils.getAllReportErrors(report, reportActions) ?? {}).length !== 0; @@ -118,14 +121,14 @@ function getOrderedReportIDs( // 4. Archived reports // - Sorted by lastVisibleActionCreated in default (most recent) view mode // - Sorted by reportDisplayName in GSD (focus) view mode - const pinnedAndGBRReports: Report[] = []; - const draftReports: Report[] = []; - const nonArchivedReports: Report[] = []; - const archivedReports: Report[] = []; + const pinnedAndGBRReports: Array> = []; + const draftReports: Array> = []; + const nonArchivedReports: Array> = []; + const archivedReports: Array> = []; if (currentPolicyID || policyMemberAccountIDs.length > 0) { reportsToDisplay = reportsToDisplay.filter( - (report) => report.reportID === currentReportId || ReportUtils.doesReportBelongToWorkspace(report, policyMemberAccountIDs, currentPolicyID), + (report) => report?.reportID === currentReportId || ReportUtils.doesReportBelongToWorkspace(report, policyMemberAccountIDs, currentPolicyID), ); } // There are a few properties that need to be calculated for the report which are used when sorting reports. @@ -133,14 +136,16 @@ function getOrderedReportIDs( // Normally, the spread operator would be used here to clone the report and prevent the need to reassign the params. // However, this code needs to be very performant to handle thousands of reports, so in the interest of speed, we're just going to disable this lint rule and add // the reportDisplayName property to the report object directly. - // eslint-disable-next-line no-param-reassign - report.displayName = ReportUtils.getReportName(report); + if (report) { + // eslint-disable-next-line no-param-reassign + report.displayName = ReportUtils.getReportName(report); + } - const isPinned = report.isPinned ?? false; - const reportAction = ReportActionsUtils.getReportAction(report.parentReportID ?? '', report.parentReportActionID ?? ''); + const isPinned = report?.isPinned ?? false; + const reportAction = ReportActionsUtils.getReportAction(report?.parentReportID ?? '', report?.parentReportActionID ?? ''); if (isPinned || ReportUtils.requiresAttentionFromCurrentUser(report, reportAction)) { pinnedAndGBRReports.push(report); - } else if (hasValidDraftComment(report.reportID)) { + } else if (hasValidDraftComment(report?.reportID ?? '')) { draftReports.push(report); } else if (ReportUtils.isArchivedRoom(report)) { archivedReports.push(report); @@ -171,7 +176,7 @@ function getOrderedReportIDs( // Now that we have all the reports grouped and sorted, they must be flattened into an array and only return the reportID. // The order the arrays are concatenated in matters and will determine the order that the groups are displayed in the sidebar. - const LHNReports = [...pinnedAndGBRReports, ...draftReports, ...nonArchivedReports, ...archivedReports].map((report) => report.reportID); + const LHNReports = [...pinnedAndGBRReports, ...draftReports, ...nonArchivedReports, ...archivedReports].map((report) => report?.reportID ?? ''); return LHNReports; } diff --git a/src/libs/TaskUtils.ts b/src/libs/TaskUtils.ts index 7cbc9f2dc1f8..19e1025a09c8 100644 --- a/src/libs/TaskUtils.ts +++ b/src/libs/TaskUtils.ts @@ -29,8 +29,8 @@ function getTaskReportActionMessage(action: OnyxEntry): Pick}> | undefined = undefined, + reimbursable = true, ): Transaction { // transactionIDs are random, positive, 64-bit numeric strings. // Because JS can only handle 53-bit numbers, transactionIDs are strings in the front-end (just like reportActionID) @@ -124,6 +125,7 @@ function buildOptimisticTransaction( category, tag, billable, + reimbursable, }; } @@ -623,9 +625,9 @@ function getEnabledTaxRateCount(options: TaxRates) { /** * Gets the default tax name */ -function getDefaultTaxName(taxRates: TaxRatesWithDefault, transaction: Transaction) { +function getDefaultTaxName(taxRates: TaxRatesWithDefault, transaction?: Transaction) { const defaultTaxKey = taxRates.defaultExternalID; - const defaultTaxName = (defaultTaxKey && `${taxRates.taxes[defaultTaxKey].name} (${taxRates.taxes[defaultTaxKey].value}) • ${Localize.translateLocal('common.default')}`) || ''; + const defaultTaxName = (defaultTaxKey && `${taxRates.taxes[defaultTaxKey]?.name} (${taxRates.taxes[defaultTaxKey]?.value}) • ${Localize.translateLocal('common.default')}`) || ''; return transaction?.taxRate?.text ?? defaultTaxName; } @@ -633,9 +635,9 @@ function getDefaultTaxName(taxRates: TaxRatesWithDefault, transaction: Transacti * Gets the tax name */ function getTaxName(taxes: TaxRates, transactionTaxCode: string) { - const taxName = `${taxes[transactionTaxCode].name}`; - const taxValue = `${taxes[transactionTaxCode].value}`; - return transactionTaxCode ? `${taxName} (${taxValue})` : ''; + const taxName = taxes[transactionTaxCode]?.name ?? ''; + const taxValue = taxes[transactionTaxCode]?.value ?? ''; + return transactionTaxCode && taxName && taxValue ? `${taxName} (${taxValue})` : ''; } export { diff --git a/src/libs/actions/BankAccounts.ts b/src/libs/actions/BankAccounts.ts index 60a0b3f3cd8e..234868f8322c 100644 --- a/src/libs/actions/BankAccounts.ts +++ b/src/libs/actions/BankAccounts.ts @@ -1,3 +1,4 @@ +import type {OnyxEntry} from 'react-native-onyx'; import Onyx from 'react-native-onyx'; import type {FormInputErrors, FormOnyxValues} from '@components/Form/types'; import type {OnfidoDataWithApplicantID} from '@components/Onfido/types'; @@ -70,7 +71,7 @@ function openPlaidView() { clearPlaid().then(() => ReimbursementAccount.setBankAccountSubStep(CONST.BANK_ACCOUNT.SETUP_TYPE.PLAID)); } -function setPlaidEvent(eventName: string) { +function setPlaidEvent(eventName: OnyxEntry) { Onyx.set(ONYXKEYS.PLAID_CURRENT_EVENT, eventName); } @@ -463,11 +464,11 @@ function connectBankAccountManually(bankAccountID: number, bankAccount: PlaidBan /** * Verify the user's identity via Onfido */ -function verifyIdentityForBankAccount(bankAccountID: number, onfidoData: OnfidoDataWithApplicantID, policyID: string) { +function verifyIdentityForBankAccount(bankAccountID: number, onfidoData: OnfidoDataWithApplicantID, policyID?: string) { const parameters: VerifyIdentityForBankAccountParams = { bankAccountID, onfidoData: JSON.stringify(onfidoData), - policyID, + policyID: policyID ?? '', canUseNewVbbaFlow: true, }; diff --git a/src/libs/actions/EmojiPickerAction.ts b/src/libs/actions/EmojiPickerAction.ts index a54095ad9c23..787f105e4939 100644 --- a/src/libs/actions/EmojiPickerAction.ts +++ b/src/libs/actions/EmojiPickerAction.ts @@ -9,15 +9,15 @@ import type CONST from '@src/CONST'; type AnchorOrigin = { horizontal: ValueOf; vertical: ValueOf; + shiftVertical?: number; }; type EmojiPopoverAnchor = MutableRefObject; -type OnWillShowPicker = (callback: CloseContextMenuCallback) => void; +type OnWillShowPicker = (callback?: CloseContextMenuCallback) => void; type OnModalHideValue = () => void; -// TODO: Move this type to src/components/EmojiPicker/EmojiPicker.js once it is converted to TS type EmojiPickerRef = { showEmojiPicker: ( onModalHideValue: OnModalHideValue, @@ -112,4 +112,4 @@ function resetEmojiPopoverAnchor() { } export {emojiPickerRef, showEmojiPicker, hideEmojiPicker, isActive, clearActive, isEmojiPickerVisible, resetEmojiPopoverAnchor}; -export type {AnchorOrigin, EmojiPickerRef}; +export type {AnchorOrigin, OnModalHideValue, OnEmojiSelected, EmojiPopoverAnchor, OnWillShowPicker, EmojiPickerRef}; diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index ab49305b5f0b..463642cdecbf 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -500,8 +500,8 @@ function buildOnyxDataForMoneyRequest( key: `${ONYXKEYS.COLLECTION.REPORT}${iouReport.reportID}`, value: { ...iouReport, - lastMessageText: iouAction.message?.[0].text, - lastMessageHtml: iouAction.message?.[0].html, + lastMessageText: iouAction.message?.[0]?.text, + lastMessageHtml: iouAction.message?.[0]?.html, pendingFields: { ...(shouldCreateNewMoneyRequestReport ? {createChat: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD} : {preview: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE}), }, @@ -802,10 +802,14 @@ function buildOnyxDataForMoneyRequest( /** Builds the Onyx data for track expense */ function buildOnyxDataForTrackExpense( chatReport: OnyxEntry, + iouReport: OnyxEntry, transaction: OnyxTypes.Transaction, + iouCreatedAction: OptimisticCreatedReportAction, iouAction: OptimisticIOUReportAction, + reportPreviewAction: OnyxEntry, transactionThreadReport: OptimisticChatReport, transactionThreadCreatedReportAction: OptimisticCreatedReportAction, + shouldCreateNewMoneyRequestReport: boolean, policy?: OnyxEntry, policyTagList?: OnyxEntry, policyCategories?: OnyxEntry, @@ -820,25 +824,67 @@ function buildOnyxDataForTrackExpense( key: `${ONYXKEYS.COLLECTION.REPORT}${chatReport.reportID}`, value: { ...chatReport, - lastMessageText: iouAction.message?.[0].text, - lastMessageHtml: iouAction.message?.[0].html, + lastMessageText: iouAction.message?.[0]?.text, + lastMessageHtml: iouAction.message?.[0]?.html, lastReadTime: DateUtils.getDBTime(), + iouReportID: iouReport?.reportID, }, }); } - optimisticData.push( - { - onyxMethod: Onyx.METHOD.SET, - key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transaction.transactionID}`, - value: transaction, - }, - { + if (iouReport) { + optimisticData.push( + { + onyxMethod: shouldCreateNewMoneyRequestReport ? Onyx.METHOD.SET : Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT}${iouReport.reportID}`, + value: { + ...iouReport, + lastMessageText: iouAction.message?.[0]?.text, + lastMessageHtml: iouAction.message?.[0]?.html, + pendingFields: { + ...(shouldCreateNewMoneyRequestReport ? {createChat: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD} : {preview: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE}), + }, + }, + }, + shouldCreateNewMoneyRequestReport + ? { + onyxMethod: Onyx.METHOD.SET, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${iouReport.reportID}`, + value: { + [iouCreatedAction.reportActionID]: iouCreatedAction as OnyxTypes.ReportAction, + [iouAction.reportActionID]: iouAction as OnyxTypes.ReportAction, + }, + } + : { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${iouReport.reportID}`, + value: { + [iouAction.reportActionID]: iouAction as OnyxTypes.ReportAction, + }, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${chatReport?.reportID}`, + value: { + ...(reportPreviewAction && {[reportPreviewAction.reportActionID]: reportPreviewAction}), + }, + }, + ); + } else { + optimisticData.push({ onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${chatReport?.reportID}`, value: { [iouAction.reportActionID]: iouAction as OnyxTypes.ReportAction, }, + }); + } + + optimisticData.push( + { + onyxMethod: Onyx.METHOD.SET, + key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transaction.transactionID}`, + value: transaction, }, { onyxMethod: Onyx.METHOD.MERGE, @@ -863,6 +909,56 @@ function buildOnyxDataForTrackExpense( const successData: OnyxUpdate[] = []; + if (iouReport) { + successData.push( + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT}${iouReport?.reportID}`, + value: { + pendingFields: null, + errorFields: null, + }, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${iouReport?.reportID}`, + value: { + ...(shouldCreateNewMoneyRequestReport + ? { + [iouCreatedAction.reportActionID]: { + pendingAction: null, + errors: null, + }, + } + : {}), + [iouAction.reportActionID]: { + pendingAction: null, + errors: null, + }, + }, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${chatReport?.reportID}`, + value: { + ...(reportPreviewAction && {[reportPreviewAction.reportActionID]: {pendingAction: null}}), + }, + }, + ); + } else { + successData.push({ + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${chatReport?.reportID}`, + value: { + [iouAction.reportActionID]: { + pendingAction: null, + errors: null, + }, + ...(reportPreviewAction && {[reportPreviewAction.reportActionID]: {pendingAction: null}}), + }, + }); + } + successData.push( { onyxMethod: Onyx.METHOD.MERGE, @@ -882,27 +978,70 @@ function buildOnyxDataForTrackExpense( }, { onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${chatReport?.reportID}`, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transactionThreadReport.reportID}`, value: { - [iouAction.reportActionID]: { + [transactionThreadCreatedReportAction.reportActionID]: { pendingAction: null, errors: null, }, }, }, - { + ); + + const failureData: OnyxUpdate[] = []; + + if (iouReport) { + failureData.push( + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT}${iouReport.reportID}`, + value: { + pendingFields: null, + errorFields: { + ...(shouldCreateNewMoneyRequestReport ? {createChat: ErrorUtils.getMicroSecondOnyxError('report.genericCreateReportFailureMessage')} : {}), + }, + }, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${iouReport.reportID}`, + value: { + ...(shouldCreateNewMoneyRequestReport + ? { + [iouCreatedAction.reportActionID]: { + // Disabling this line since transaction.filename can be an empty string + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + errors: getReceiptError(transaction.receipt, transaction.filename || transaction.receipt?.filename, isScanRequest), + }, + [iouAction.reportActionID]: { + errors: ErrorUtils.getMicroSecondOnyxError('iou.error.genericCreateFailureMessage'), + }, + } + : { + [iouAction.reportActionID]: { + // Disabling this line since transaction.filename can be an empty string + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + errors: getReceiptError(transaction.receipt, transaction.filename || transaction.receipt?.filename, isScanRequest), + }, + }), + }, + }, + ); + } else { + failureData.push({ onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transactionThreadReport.reportID}`, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${chatReport?.reportID}`, value: { - [transactionThreadCreatedReportAction.reportActionID]: { - pendingAction: null, - errors: null, + [iouAction.reportActionID]: { + // Disabling this line since transaction.filename can be an empty string + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + errors: getReceiptError(transaction.receipt, transaction.filename || transaction.receipt?.filename, isScanRequest), }, }, - }, - ); + }); + } - const failureData: OnyxUpdate[] = [ + failureData.push( { onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.REPORT}${chatReport?.reportID}`, @@ -930,17 +1069,6 @@ function buildOnyxDataForTrackExpense( pendingFields: clearedPendingFields, }, }, - { - onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${chatReport?.reportID}`, - value: { - [iouAction.reportActionID]: { - // Disabling this line since transaction.filename can be an empty string - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - errors: getReceiptError(transaction.receipt, transaction.filename || transaction.receipt?.filename, isScanRequest), - }, - }, - }, { onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transactionThreadReport.reportID}`, @@ -950,7 +1078,7 @@ function buildOnyxDataForTrackExpense( }, }, }, - ]; + ); // We don't need to compute violations unless we're on a paid policy if (!policy || !PolicyUtils.isPaidGroupPolicy(policy)) { @@ -1199,24 +1327,54 @@ function getTrackExpenseInformation( policyTagList: OnyxEntry | undefined, policyCategories: OnyxEntry | undefined, payeeEmail = currentUserEmail, + payeeAccountID = userAccountID, + moneyRequestReportID = '', ): TrackExpenseInformation | EmptyObject { + const isPolicyExpenseChat = participant.isPolicyExpenseChat; + // STEP 1: Get existing chat report let chatReport = !isEmptyObject(parentChatReport) && parentChatReport?.reportID ? parentChatReport : null; - // The chatReport always exist and we can get it from Onyx if chatReport is null. + // The chatReport always exists, and we can get it from Onyx if chatReport is null. if (!chatReport) { chatReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${participant.reportID}`] ?? null; } - // If we still don't have a report, it likely doens't exist and we will early return here as it should not happen + // If we still don't have a report, it likely doesn't exist, and we will early return here as it should not happen // Maybe later, we can build an optimistic selfDM chat. if (!chatReport) { return {}; } - // STEP 2: Get the money request report. - // TODO: This is deferred to later as we are not sure if we create iouReport at all in future. - // We can build an optimistic iouReport here if needed. + // STEP 2: If not in the self-DM flow, we need to use the money request report. + // For this, first use the chatReport.iouReportID property. Build a new optimistic money request report if needed. + const shouldUseMoneyReport = !!isPolicyExpenseChat; + + let iouReport: OnyxEntry = null; + let shouldCreateNewMoneyRequestReport = false; + + if (shouldUseMoneyReport) { + if (moneyRequestReportID) { + iouReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${moneyRequestReportID}`] ?? null; + } else { + iouReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${chatReport.iouReportID}`] ?? null; + } + + shouldCreateNewMoneyRequestReport = ReportUtils.shouldCreateNewMoneyRequestReport(iouReport, chatReport); + if (!iouReport || shouldCreateNewMoneyRequestReport) { + iouReport = ReportUtils.buildOptimisticExpenseReport(chatReport.reportID, chatReport.policyID ?? '', payeeAccountID, amount, currency, false); + } else { + iouReport = {...iouReport}; + if (iouReport?.currency === currency && typeof iouReport.total === 'number' && typeof iouReport.nonReimbursableTotal === 'number') { + // Because of the Expense reports are stored as negative values, we subtract the total from the amount + iouReport.total -= amount; + iouReport.nonReimbursableTotal -= amount; + } + } + } + + // If shouldUseMoneyReport is true, the iouReport was defined. + // But we'll use the `shouldUseMoneyReport && iouReport` check further instead of `shouldUseMoneyReport` to avoid TS errors. // STEP 3: Build optimistic receipt and transaction const receiptObject: Receipt = {}; @@ -1229,9 +1387,9 @@ function getTrackExpenseInformation( const existingTransaction = allTransactionDrafts[`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`]; const isDistanceRequest = existingTransaction && existingTransaction.iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE; let optimisticTransaction = TransactionUtils.buildOptimisticTransaction( - amount, + ReportUtils.isExpenseReport(iouReport) ? -amount : amount, currency, - chatReport.reportID, + shouldUseMoneyReport && iouReport ? iouReport.reportID : '0', comment, created, '', @@ -1244,6 +1402,7 @@ function getTrackExpenseInformation( tag, billable, isDistanceRequest ? {waypoints: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD} : undefined, + false, ); // If there is an existing transaction (which is the case for distance requests), then the data from the existing transaction @@ -1256,37 +1415,52 @@ function getTrackExpenseInformation( } // STEP 4: Build optimistic reportActions. We need: - // 1. IOU action for the chatReport - // 2. The transaction thread, which requires the iouAction, and CREATED action for the transaction thread - const currentTime = DateUtils.getDBTime(); - const iouAction = ReportUtils.buildOptimisticIOUReportAction( + // 1. CREATED action for the iouReport (if tracking in the Expense chat) + // 2. IOU action for the iouReport (if tracking in the Expense chat), otherwise – for chatReport + // 3. The transaction thread, which requires the iouAction, and CREATED action for the transaction thread + // 4. REPORTPREVIEW action for the chatReport (if tracking in the Expense chat) + const [, optimisticCreatedActionForIOUReport, iouAction, optimisticTransactionThread, optimisticCreatedActionForTransactionThread] = ReportUtils.buildOptimisticMoneyRequestEntities( + shouldUseMoneyReport && iouReport ? iouReport : chatReport, CONST.IOU.REPORT_ACTION_TYPE.TRACK, amount, currency, comment, + payeeEmail, [participant], optimisticTransaction.transactionID, undefined, - '0', false, false, receiptObject, false, - currentTime, + !shouldUseMoneyReport, ); - const optimisticTransactionThread = ReportUtils.buildTransactionThread(iouAction, chatReport); - const optimisticCreatedActionForTransactionThread = ReportUtils.buildOptimisticCreatedReportAction(payeeEmail); - // The IOU action and the transactionThread are co-dependent as parent-child, so we need to link them together - iouAction.childReportID = optimisticTransactionThread.reportID; + let reportPreviewAction: OnyxEntry = null; + if (shouldUseMoneyReport && iouReport) { + reportPreviewAction = shouldCreateNewMoneyRequestReport ? null : ReportActionsUtils.getReportPreviewAction(chatReport.reportID, iouReport.reportID); + if (reportPreviewAction) { + reportPreviewAction = ReportUtils.updateReportPreview(iouReport, reportPreviewAction, false, comment, optimisticTransaction); + } else { + reportPreviewAction = ReportUtils.buildOptimisticReportPreview(chatReport, iouReport, comment, optimisticTransaction); + + // Generated ReportPreview action is a parent report action of the iou report. + // We are setting the iou report's parentReportActionID to display subtitle correctly in IOU page when offline. + iouReport.parentReportActionID = reportPreviewAction.reportActionID; + } + } // STEP 5: Build Onyx Data const [optimisticData, successData, failureData] = buildOnyxDataForTrackExpense( chatReport, + iouReport, optimisticTransaction, + optimisticCreatedActionForIOUReport, iouAction, + reportPreviewAction, optimisticTransactionThread, optimisticCreatedActionForTransactionThread, + shouldCreateNewMoneyRequestReport, policy, policyTagList, policyCategories, @@ -1294,12 +1468,12 @@ function getTrackExpenseInformation( return { chatReport, - iouReport: undefined, + iouReport: iouReport ?? undefined, transaction: optimisticTransaction, iouAction, createdChatReportActionID: '0', - createdIOUReportActionID: undefined, - reportPreviewAction: undefined, + createdIOUReportActionID: shouldCreateNewMoneyRequestReport ? optimisticCreatedActionForIOUReport.reportActionID : '0', + reportPreviewAction: reportPreviewAction ?? undefined, transactionThreadReportID: optimisticTransactionThread.reportID, createdReportActionIDForThread: optimisticCreatedActionForTransactionThread.reportActionID, onyxData: { @@ -1310,7 +1484,7 @@ function getTrackExpenseInformation( }; } -/** Requests money based on a distance (eg. mileage from a map) */ +/** Requests money based on a distance (e.g. mileage from a map) */ function createDistanceRequest( report: OnyxTypes.Report, participant: Participant, @@ -2195,6 +2369,10 @@ function trackExpense( policyCategories?: OnyxEntry, gpsPoints = undefined, ) { + const isMoneyRequestReport = ReportUtils.isMoneyRequestReport(report); + const currentChatReport = isMoneyRequestReport ? ReportUtils.getReport(report.chatReportID) : report; + const moneyRequestReportID = isMoneyRequestReport ? report.reportID : ''; + const currentCreated = DateUtils.enrichMoneyRequestTimestamp(created); const { iouReport, @@ -2208,7 +2386,7 @@ function trackExpense( createdReportActionIDForThread, onyxData, } = getTrackExpenseInformation( - report, + currentChatReport, participant, comment, amount, @@ -2223,8 +2401,10 @@ function trackExpense( policyTagList, policyCategories, payeeEmail, + payeeAccountID, + moneyRequestReportID, ); - const activeReportID = report.reportID; + const activeReportID = isMoneyRequestReport ? report.reportID : chatReport.reportID; const parameters: TrackExpenseParams = { amount, @@ -2372,8 +2552,8 @@ function createSplitsAndOnyxData( ); splitChatReport.lastReadTime = DateUtils.getDBTime(); - splitChatReport.lastMessageText = splitIOUReportAction.message?.[0].text; - splitChatReport.lastMessageHtml = splitIOUReportAction.message?.[0].html; + splitChatReport.lastMessageText = splitIOUReportAction.message?.[0]?.text; + splitChatReport.lastMessageHtml = splitIOUReportAction.message?.[0]?.html; // If we have an existing splitChatReport (group chat or workspace) use it's pending fields, otherwise indicate that we are adding a chat if (!existingSplitChatReport) { @@ -2734,7 +2914,7 @@ function splitBill( API.write(WRITE_COMMANDS.SPLIT_BILL, parameters, onyxData); resetMoneyRequestInfo(); - Navigation.dismissModal(); + Navigation.dismissModal(existingSplitChatReportID); Report.notifyNewAction(splitData.chatReportID, currentUserAccountID); } @@ -2809,6 +2989,7 @@ function startSplitBill( comment: string, category: string, tag: string, + currency: string, receipt: Receipt, existingSplitChatReportID = '', billable = false, @@ -2824,7 +3005,7 @@ function startSplitBill( // ReportID is -2 (aka "deleted") on the group transaction const splitTransaction = TransactionUtils.buildOptimisticTransaction( 0, - CONST.CURRENCY.USD, + currency, CONST.REPORT.SPLIT_REPORTID, comment, '', @@ -2857,8 +3038,8 @@ function startSplitBill( ); splitChatReport.lastReadTime = DateUtils.getDBTime(); - splitChatReport.lastMessageText = splitIOUReportAction.message?.[0].text; - splitChatReport.lastMessageHtml = splitIOUReportAction.message?.[0].html; + splitChatReport.lastMessageText = splitIOUReportAction.message?.[0]?.text; + splitChatReport.lastMessageHtml = splitIOUReportAction.message?.[0]?.html; // If we have an existing splitChatReport (group chat or workspace) use it's pending fields, otherwise indicate that we are adding a chat if (!existingSplitChatReport) { @@ -3070,6 +3251,7 @@ function startSplitBill( comment, category, tag, + currency, isFromGroupDM: !existingSplitChatReport, billable, ...(existingSplitChatReport ? {} : {createdReportActionID: splitChatCreatedReportAction.reportActionID}), @@ -3674,7 +3856,12 @@ function deleteMoneyRequest(transactionID: string, reportAction: OnyxTypes.Repor if (typeof updatedIOUReport.total === 'number' && currency === iouReport?.currency) { // Because of the Expense reports are stored as negative values, we add the total from the amount - updatedIOUReport.total += TransactionUtils.getAmount(transaction, true); + const amountDiff = TransactionUtils.getAmount(transaction, true); + updatedIOUReport.total += amountDiff; + + if (!transaction?.reimbursable && typeof updatedIOUReport.nonReimbursableTotal === 'number') { + updatedIOUReport.nonReimbursableTotal += amountDiff; + } } } else { updatedIOUReport = IOUUtils.updateIOUOwnerAndTotal(iouReport, reportAction.actorAccountID ?? -1, TransactionUtils.getAmount(transaction, false), currency, true); @@ -3921,6 +4108,10 @@ function deleteMoneyRequest(transactionID: string, reportAction: OnyxTypes.Repor function deleteTrackExpense(chatReportID: string, transactionID: string, reportAction: OnyxTypes.ReportAction, isSingleTransactionView = false) { // STEP 1: Get all collections we're updating const chatReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${chatReportID}`] ?? null; + if (!ReportUtils.isSelfDM(chatReport)) { + return deleteMoneyRequest(transactionID, reportAction, isSingleTransactionView); + } + const transaction = allTransactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`]; const transactionViolations = allTransactionViolations[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`]; const transactionThreadID = reportAction.childReportID; @@ -4175,8 +4366,8 @@ function getSendMoneyParams( key: `${ONYXKEYS.COLLECTION.REPORT}${optimisticIOUReport.reportID}`, value: { ...optimisticIOUReport, - lastMessageText: optimisticIOUReportAction.message?.[0].text, - lastMessageHtml: optimisticIOUReportAction.message?.[0].html, + lastMessageText: optimisticIOUReportAction.message?.[0]?.text, + lastMessageHtml: optimisticIOUReportAction.message?.[0]?.html, }, }; const optimisticTransactionThreadData: OnyxUpdate = { @@ -4377,7 +4568,7 @@ function getPayMoneyRequestParams( paymentMethodType: PaymentMethodType, full: boolean, ): PayMoneyRequestData { - let total = iouReport.total ?? 0; + let total = (iouReport.total ?? 0) - (iouReport.nonReimbursableTotal ?? 0); if (ReportUtils.hasHeldExpenses(iouReport.reportID) && !full && !!iouReport.unheldTotal) { total = iouReport.unheldTotal; } @@ -4415,8 +4606,8 @@ function getPayMoneyRequestParams( lastVisibleActionCreated: optimisticIOUReportAction.created, hasOutstandingChildRequest: false, iouReportID: null, - lastMessageText: optimisticIOUReportAction.message?.[0].text, - lastMessageHtml: optimisticIOUReportAction.message?.[0].html, + lastMessageText: optimisticIOUReportAction.message?.[0]?.text, + lastMessageHtml: optimisticIOUReportAction.message?.[0]?.html, }, }, { @@ -4434,8 +4625,8 @@ function getPayMoneyRequestParams( key: `${ONYXKEYS.COLLECTION.REPORT}${iouReport.reportID}`, value: { ...iouReport, - lastMessageText: optimisticIOUReportAction.message?.[0].text, - lastMessageHtml: optimisticIOUReportAction.message?.[0].html, + lastMessageText: optimisticIOUReportAction.message?.[0]?.text, + lastMessageHtml: optimisticIOUReportAction.message?.[0]?.html, hasOutstandingChildRequest: false, statusNum: CONST.REPORT.STATUS_NUM.REIMBURSED, pendingFields: { @@ -4656,8 +4847,8 @@ function approveMoneyRequest(expenseReport: OnyxTypes.Report | EmptyObject, full key: `${ONYXKEYS.COLLECTION.REPORT}${expenseReport.reportID}`, value: { ...expenseReport, - lastMessageText: optimisticApprovedReportAction.message?.[0].text, - lastMessageHtml: optimisticApprovedReportAction.message?.[0].html, + lastMessageText: optimisticApprovedReportAction.message?.[0]?.text, + lastMessageHtml: optimisticApprovedReportAction.message?.[0]?.html, stateNum: CONST.REPORT.STATE_NUM.APPROVED, statusNum: CONST.REPORT.STATUS_NUM.APPROVED, pendingFields: { @@ -4743,8 +4934,8 @@ function submitReport(expenseReport: OnyxTypes.Report) { const parentReport = ReportUtils.getReport(expenseReport.parentReportID); const policy = getPolicy(expenseReport.policyID); const isCurrentUserManager = currentUserPersonalDetails.accountID === expenseReport.managerID; - const optimisticNextStep = NextStepUtils.buildNextStep(expenseReport, CONST.REPORT.STATUS_NUM.SUBMITTED); const isSubmitAndClosePolicy = PolicyUtils.isSubmitAndClose(policy); + const optimisticNextStep = NextStepUtils.buildNextStep(expenseReport, isSubmitAndClosePolicy ? CONST.REPORT.STATUS_NUM.CLOSED : CONST.REPORT.STATUS_NUM.SUBMITTED); const optimisticData: OnyxUpdate[] = !isSubmitAndClosePolicy ? [ @@ -4763,17 +4954,12 @@ function submitReport(expenseReport: OnyxTypes.Report) { key: `${ONYXKEYS.COLLECTION.REPORT}${expenseReport.reportID}`, value: { ...expenseReport, - lastMessageText: optimisticSubmittedReportAction.message?.[0].text ?? '', - lastMessageHtml: optimisticSubmittedReportAction.message?.[0].html ?? '', + lastMessageText: optimisticSubmittedReportAction.message?.[0]?.text ?? '', + lastMessageHtml: optimisticSubmittedReportAction.message?.[0]?.html ?? '', stateNum: CONST.REPORT.STATE_NUM.SUBMITTED, statusNum: CONST.REPORT.STATUS_NUM.SUBMITTED, }, }, - { - onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.COLLECTION.NEXT_STEP}${expenseReport.reportID}`, - value: optimisticNextStep, - }, ] : [ { @@ -4787,6 +4973,12 @@ function submitReport(expenseReport: OnyxTypes.Report) { }, ]; + optimisticData.push({ + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.NEXT_STEP}${expenseReport.reportID}`, + value: optimisticNextStep, + }); + if (parentReport?.reportID) { optimisticData.push({ onyxMethod: Onyx.METHOD.MERGE, @@ -4822,24 +5014,22 @@ function submitReport(expenseReport: OnyxTypes.Report) { stateNum: CONST.REPORT.STATE_NUM.OPEN, }, }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.NEXT_STEP}${expenseReport.reportID}`, + value: currentNextStep, + }, ]; if (!isSubmitAndClosePolicy) { - failureData.push( - { - onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${expenseReport.reportID}`, - value: { - [optimisticSubmittedReportAction.reportActionID]: { - errors: ErrorUtils.getMicroSecondOnyxError('iou.error.other'), - }, + failureData.push({ + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${expenseReport.reportID}`, + value: { + [optimisticSubmittedReportAction.reportActionID]: { + errors: ErrorUtils.getMicroSecondOnyxError('iou.error.other'), }, }, - { - onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.COLLECTION.NEXT_STEP}${expenseReport.reportID}`, - value: currentNextStep, - }, - ); + }); } if (parentReport?.reportID) { @@ -4890,8 +5080,8 @@ function cancelPayment(expenseReport: OnyxTypes.Report, chatReport: OnyxTypes.Re key: `${ONYXKEYS.COLLECTION.REPORT}${expenseReport.reportID}`, value: { ...expenseReport, - lastMessageText: optimisticReportAction.message?.[0].text, - lastMessageHtml: optimisticReportAction.message?.[0].html, + lastMessageText: optimisticReportAction.message?.[0]?.text, + lastMessageHtml: optimisticReportAction.message?.[0]?.html, stateNum, statusNum, }, @@ -4971,7 +5161,7 @@ function payMoneyRequest(paymentType: PaymentMethodType, chatReport: OnyxTypes.R const recipient = {accountID: iouReport.ownerAccountID}; const {params, optimisticData, successData, failureData} = getPayMoneyRequestParams(chatReport, iouReport, recipient, paymentType, full); - // For now we need to call the PayMoneyRequestWithWallet API since PayMoneyRequest was not updated to work with + // For now, we need to call the PayMoneyRequestWithWallet API since PayMoneyRequest was not updated to work with // Expensify Wallets. const apiCommand = paymentType === CONST.IOU.PAYMENT_TYPE.EXPENSIFY ? WRITE_COMMANDS.PAY_MONEY_REQUEST_WITH_WALLET : WRITE_COMMANDS.PAY_MONEY_REQUEST; diff --git a/src/libs/actions/OnyxUpdateManager.ts b/src/libs/actions/OnyxUpdateManager.ts index 45cb2b78ecde..cc51cbd22deb 100644 --- a/src/libs/actions/OnyxUpdateManager.ts +++ b/src/libs/actions/OnyxUpdateManager.ts @@ -1,9 +1,9 @@ import Onyx from 'react-native-onyx'; +import * as ActiveClientManager from '@libs/ActiveClientManager'; import Log from '@libs/Log'; import * as SequentialQueue from '@libs/Network/SequentialQueue'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import type {OnyxUpdatesFromServer, Response} from '@src/types/onyx'; import * as App from './App'; import * as OnyxUpdates from './OnyxUpdates'; @@ -28,134 +28,6 @@ Onyx.connect({ callback: (value) => (lastUpdateIDAppliedToClient = value), }); -let queryPromise: Promise | undefined; - -type DeferredUpdatesDictionary = Record; -let deferredUpdates: DeferredUpdatesDictionary = {}; - -// This function will reset the query variables, unpause the SequentialQueue and log an info to the user. -function finalizeUpdatesAndResumeQueue() { - console.debug('[OnyxUpdateManager] Done applying all updates'); - queryPromise = undefined; - deferredUpdates = {}; - Onyx.set(ONYXKEYS.ONYX_UPDATES_FROM_SERVER, null); - SequentialQueue.unpause(); -} - -// This function applies a list of updates to Onyx in order and resolves when all updates have been applied -const applyUpdates = (updates: DeferredUpdatesDictionary) => Promise.all(Object.values(updates).map((update) => OnyxUpdates.apply(update))); - -// In order for the deferred updates to be applied correctly in order, -// we need to check if there are any gaps between deferred updates. -type DetectGapAndSplitResult = {applicableUpdates: DeferredUpdatesDictionary; updatesAfterGaps: DeferredUpdatesDictionary; latestMissingUpdateID: number | undefined}; -function detectGapsAndSplit(updates: DeferredUpdatesDictionary): DetectGapAndSplitResult { - const updateValues = Object.values(updates); - const applicableUpdates: DeferredUpdatesDictionary = {}; - - let gapExists = false; - let firstUpdateAfterGaps: number | undefined; - let latestMissingUpdateID: number | undefined; - - for (const [index, update] of updateValues.entries()) { - const isFirst = index === 0; - - // If any update's previousUpdateID doesn't match the lastUpdateID from the previous update, the deferred updates aren't chained and there's a gap. - // For the first update, we need to check that the previousUpdateID of the fetched update is the same as the lastUpdateIDAppliedToClient. - // For any other updates, we need to check if the previousUpdateID of the current update is found in the deferred updates. - // If an update is chained, we can add it to the applicable updates. - const isChained = isFirst ? update.previousUpdateID === lastUpdateIDAppliedToClient : !!updates[Number(update.previousUpdateID)]; - if (isChained) { - // If a gap exists already, we will not add any more updates to the applicable updates. - // Instead, once there are two chained updates again, we can set "firstUpdateAfterGaps" to the first update after the current gap. - if (gapExists) { - // If "firstUpdateAfterGaps" hasn't been set yet and there was a gap, we need to set it to the first update after all gaps. - if (!firstUpdateAfterGaps) { - firstUpdateAfterGaps = Number(update.previousUpdateID); - } - } else { - // If no gap exists yet, we can add the update to the applicable updates - applicableUpdates[Number(update.lastUpdateID)] = update; - } - } else { - // When we find a (new) gap, we need to set "gapExists" to true and reset the "firstUpdateAfterGaps" variable, - // so that we can continue searching for the next update after all gaps - gapExists = true; - firstUpdateAfterGaps = undefined; - - // If there is a gap, it means the previous update is the latest missing update. - latestMissingUpdateID = Number(update.previousUpdateID); - } - } - - // When "firstUpdateAfterGaps" is not set yet, we need to set it to the last update in the list, - // because we will fetch all missing updates up to the previous one and can then always apply the last update in the deferred updates. - if (!firstUpdateAfterGaps) { - firstUpdateAfterGaps = Number(updateValues[updateValues.length - 1].lastUpdateID); - } - - let updatesAfterGaps: DeferredUpdatesDictionary = {}; - if (gapExists && firstUpdateAfterGaps) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - updatesAfterGaps = Object.fromEntries(Object.entries(updates).filter(([lastUpdateID]) => Number(lastUpdateID) >= firstUpdateAfterGaps!)); - } - - return {applicableUpdates, updatesAfterGaps, latestMissingUpdateID}; -} - -// This function will check for gaps in the deferred updates and -// apply the updates in order after the missing updates are fetched and applied -function validateAndApplyDeferredUpdates(): Promise { - // We only want to apply deferred updates that are newer than the last update that was applied to the client. - // At this point, the missing updates from "GetMissingOnyxUpdates" have been applied already, so we can safely filter out. - const pendingDeferredUpdates = Object.fromEntries( - Object.entries(deferredUpdates).filter(([lastUpdateID]) => { - // It should not be possible for lastUpdateIDAppliedToClient to be null, - // after the missing updates have been applied. - // If still so we want to keep the deferred update in the list. - if (!lastUpdateIDAppliedToClient) { - return true; - } - return (Number(lastUpdateID) ?? 0) > lastUpdateIDAppliedToClient; - }), - ); - - // If there are no remaining deferred updates after filtering out outdated ones, - // we can just unpause the queue and return - if (Object.values(pendingDeferredUpdates).length === 0) { - return Promise.resolve(); - } - - const {applicableUpdates, updatesAfterGaps, latestMissingUpdateID} = detectGapsAndSplit(pendingDeferredUpdates); - - // If we detected a gap in the deferred updates, only apply the deferred updates before the gap, - // re-fetch the missing updates and then apply the remaining deferred updates after the gap - if (latestMissingUpdateID) { - return new Promise((resolve, reject) => { - deferredUpdates = {}; - applyUpdates(applicableUpdates).then(() => { - // After we have applied the applicable updates, there might have been new deferred updates added. - // In the next (recursive) call of "validateAndApplyDeferredUpdates", - // the initial "updatesAfterGaps" and all new deferred updates will be applied in order, - // as long as there was no new gap detected. Otherwise repeat the process. - deferredUpdates = {...deferredUpdates, ...updatesAfterGaps}; - - // It should not be possible for lastUpdateIDAppliedToClient to be null, therefore we can ignore this case. - // If lastUpdateIDAppliedToClient got updated in the meantime, we will just retrigger the validation and application of the current deferred updates. - if (!lastUpdateIDAppliedToClient || latestMissingUpdateID <= lastUpdateIDAppliedToClient) { - validateAndApplyDeferredUpdates().then(resolve).catch(reject); - return; - } - - // Then we can fetch the missing updates and apply them - App.getMissingOnyxUpdates(lastUpdateIDAppliedToClient, latestMissingUpdateID).then(validateAndApplyDeferredUpdates).then(resolve).catch(reject); - }); - }); - } - - // If there are no gaps in the deferred updates, we can apply all deferred updates in order - return applyUpdates(applicableUpdates); -} - export default () => { console.debug('[OnyxUpdateManager] Listening for updates from the server'); Onyx.connect({ @@ -164,6 +36,12 @@ export default () => { if (!value) { return; } + // This key is shared across clients, thus every client/tab will have a copy and try to execute this method. + // It is very important to only process the missing onyx updates from leader client otherwise requests we'll execute + // several duplicated requests that are not controlled by the SequentialQueue. + if (!ActiveClientManager.isClientTheLeader()) { + return; + } // Since we used the same key that used to store another object, let's confirm that the current object is // following the new format before we proceed. If it isn't, then let's clear the object in Onyx. @@ -195,45 +73,32 @@ export default () => { // applied in their correct and specific order. If this queue was not paused, then there would be a lot of // onyx data being applied while we are fetching the missing updates and that would put them all out of order. SequentialQueue.pause(); + let canUnpauseQueuePromise; // The flow below is setting the promise to a reconnect app to address flow (1) explained above. if (!lastUpdateIDAppliedToClient) { - // If there is a ReconnectApp query in progress, we should not start another one. - if (queryPromise) { - return; - } - Log.info('Client has not gotten reliable updates before so reconnecting the app to start the process'); // Since this is a full reconnectApp, we'll not apply the updates we received - those will come in the reconnect app request. - queryPromise = App.finalReconnectAppAfterActivatingReliableUpdates(); + canUnpauseQueuePromise = App.finalReconnectAppAfterActivatingReliableUpdates(); } else { // The flow below is setting the promise to a getMissingOnyxUpdates to address flow (2) explained above. - - // Get the number of deferred updates before adding the new one - const existingDeferredUpdatesCount = Object.keys(deferredUpdates).length; - - // Add the new update to the deferred updates - deferredUpdates[Number(updateParams.lastUpdateID)] = updateParams; - - // If there are deferred updates already, we don't need to fetch the missing updates again. - if (existingDeferredUpdatesCount > 0) { - return; - } - console.debug(`[OnyxUpdateManager] Client is behind the server by ${Number(previousUpdateIDFromServer) - lastUpdateIDAppliedToClient} so fetching incremental updates`); Log.info('Gap detected in update IDs from server so fetching incremental updates', true, { lastUpdateIDFromServer, previousUpdateIDFromServer, lastUpdateIDAppliedToClient, }); - - // Get the missing Onyx updates from the server and afterwards validate and apply the deferred updates. - // This will trigger recursive calls to "validateAndApplyDeferredUpdates" if there are gaps in the deferred updates. - queryPromise = App.getMissingOnyxUpdates(lastUpdateIDAppliedToClient, previousUpdateIDFromServer).then(validateAndApplyDeferredUpdates); + canUnpauseQueuePromise = App.getMissingOnyxUpdates(lastUpdateIDAppliedToClient, previousUpdateIDFromServer); } - queryPromise.finally(finalizeUpdatesAndResumeQueue); + canUnpauseQueuePromise.finally(() => { + OnyxUpdates.apply(updateParams).finally(() => { + console.debug('[OnyxUpdateManager] Done applying all updates'); + Onyx.set(ONYXKEYS.ONYX_UPDATES_FROM_SERVER, null); + SequentialQueue.unpause(); + }); + }); }, }); }; diff --git a/src/libs/actions/PersonalDetails.ts b/src/libs/actions/PersonalDetails.ts index 085d8b78e418..60aff19223bc 100644 --- a/src/libs/actions/PersonalDetails.ts +++ b/src/libs/actions/PersonalDetails.ts @@ -23,7 +23,7 @@ import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import type {DateOfBirthForm} from '@src/types/form'; -import type {PersonalDetails, PersonalDetailsList, PrivatePersonalDetails} from '@src/types/onyx'; +import type {PersonalDetails, PersonalDetailsList} from '@src/types/onyx'; import type {SelectedTimezone, Timezone} from '@src/types/onyx/PersonalDetails'; import * as Session from './Session'; @@ -43,12 +43,6 @@ Onyx.connect({ callback: (val) => (allPersonalDetails = val), }); -let privatePersonalDetails: OnyxEntry = null; -Onyx.connect({ - key: ONYXKEYS.PRIVATE_PERSONAL_DETAILS, - callback: (val) => (privatePersonalDetails = val), -}); - function updatePronouns(pronouns: string) { if (currentUserAccountID) { const parameters: UpdatePronounsParams = {pronouns}; @@ -240,43 +234,6 @@ function updateSelectedTimezone(selectedTimezone: SelectedTimezone) { Navigation.goBack(ROUTES.SETTINGS_TIMEZONE); } -/** - * Fetches additional personal data like legal name, date of birth, address - */ -function openPersonalDetails() { - const optimisticData: OnyxUpdate[] = [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.PRIVATE_PERSONAL_DETAILS, - value: { - isLoading: true, - }, - }, - ]; - - const successData: OnyxUpdate[] = [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.PRIVATE_PERSONAL_DETAILS, - value: { - isLoading: false, - }, - }, - ]; - - const failureData: OnyxUpdate[] = [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.PRIVATE_PERSONAL_DETAILS, - value: { - isLoading: false, - }, - }, - ]; - - API.read(READ_COMMANDS.OPEN_PERSONAL_DETAILS, {}, {optimisticData, successData, failureData}); -} - /** * Fetches public profile info about a given user. * The API will only return the accountID, displayName, and avatar for the user @@ -446,18 +403,9 @@ function clearAvatarErrors() { }); } -/** - * Get private personal details value - */ -function getPrivatePersonalDetails(): OnyxEntry { - return privatePersonalDetails; -} - export { clearAvatarErrors, deleteAvatar, - getPrivatePersonalDetails, - openPersonalDetails, openPublicProfilePage, updateAddress, updateAutomaticTimezone, diff --git a/src/libs/actions/Policy.ts b/src/libs/actions/Policy.ts index 42a2852e42a6..d99ccccf1596 100644 --- a/src/libs/actions/Policy.ts +++ b/src/libs/actions/Policy.ts @@ -67,6 +67,7 @@ import * as PolicyUtils from '@libs/PolicyUtils'; import * as ReportActionsUtils from '@libs/ReportActionsUtils'; import * as ReportUtils from '@libs/ReportUtils'; import * as TransactionUtils from '@libs/TransactionUtils'; +import type {PolicySelector} from '@pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import type {Route} from '@src/ROUTES'; @@ -288,8 +289,8 @@ function getPolicy(policyID: string | undefined): Policy | EmptyObject { /** * Check if the user has any active free policies (aka workspaces) */ -function hasActiveChatEnabledPolicies(policies: Array> | PoliciesRecord, includeOnlyFreePolicies = false): boolean { - const adminChatEnabledPolicies = Object.values(policies).filter( +function hasActiveChatEnabledPolicies(policies: Array> | OnyxCollection, includeOnlyFreePolicies = false): boolean { + const adminChatEnabledPolicies = Object.values(policies ?? {}).filter( (policy) => policy && ((policy.type === CONST.POLICY.TYPE.FREE && policy.role === CONST.POLICY.ROLE.ADMIN) || @@ -1294,7 +1295,10 @@ function addMembersToWorkspace(invitedEmailsToAccountIDs: InvitedEmailsToAccount const optimisticMembersState: OnyxCollection = {}; const failureMembersState: OnyxCollection = {}; accountIDs.forEach((accountID) => { - optimisticMembersState[accountID] = {pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD}; + optimisticMembersState[accountID] = { + pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD, + role: CONST.POLICY.ROLE.USER, + }; failureMembersState[accountID] = { errors: ErrorUtils.getMicroSecondOnyxError('workspace.people.error.genericAdd'), }; @@ -1321,12 +1325,11 @@ function addMembersToWorkspace(invitedEmailsToAccountIDs: InvitedEmailsToAccount // Convert to object with each key clearing pendingAction, when it is an existing account. // Remove the object, when it is a newly created account. value: accountIDs.reduce((accountIDsWithClearedPendingAction, accountID) => { - let value = null; - const accountAlreadyExists = !isEmptyObject(allPersonalDetails?.[accountID]); - - if (accountAlreadyExists) { - value = {pendingAction: null, errors: null}; - } + const value = { + ...allPolicyMembers?.[accountID], + pendingAction: null, + errors: null, + }; return {...accountIDsWithClearedPendingAction, [accountID]: value}; }, {}), @@ -1951,6 +1954,11 @@ function createDraftInitialWorkspace(policyOwnerEmail = '', policyName = '', pol pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD, customUnits, makeMeAdmin, + autoReporting: true, + approvalMode: CONST.POLICY.APPROVAL_MODE.OPTIONAL, + harvesting: { + enabled: true, + }, }, }, { @@ -2009,6 +2017,11 @@ function createWorkspace(policyOwnerEmail = '', makeMeAdmin = false, policyName isPolicyExpenseChatEnabled: true, outputCurrency, pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD, + autoReporting: true, + approvalMode: CONST.POLICY.APPROVAL_MODE.OPTIONAL, + harvesting: { + enabled: true, + }, customUnits, areCategoriesEnabled: true, areTagsEnabled: false, @@ -2497,6 +2510,11 @@ function createWorkspaceFromIOUPayment(iouReport: Report | EmptyObject): string // Setting the currency to USD as we can only add the VBBA for this policy currency right now outputCurrency: CONST.CURRENCY.USD, pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD, + autoReporting: true, + approvalMode: CONST.POLICY.APPROVAL_MODE.OPTIONAL, + harvesting: { + enabled: true, + }, customUnits, areCategoriesEnabled: true, areTagsEnabled: false, @@ -3058,6 +3076,9 @@ function renamePolicyCategory(policyID: string, policyCategory: {oldName: string name: policyCategory.newName, unencodedName: decodeURIComponent(policyCategory.newName), pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE, + pendingFields: { + name: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE, + }, }, }, }, @@ -3074,6 +3095,9 @@ function renamePolicyCategory(policyID: string, policyCategory: {oldName: string unencodedName: decodeURIComponent(policyCategory.newName), errors: null, pendingAction: null, + pendingFields: { + name: null, + }, }, }, }, @@ -3364,6 +3388,9 @@ function renamePolicyTag(policyID: string, policyTag: {oldName: string; newName: ...oldTag, name: policyTag.newName, pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE, + pendingFields: { + name: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE, + }, }, }, }, @@ -3380,6 +3407,9 @@ function renamePolicyTag(policyID: string, policyTag: {oldName: string; newName: [policyTag.newName]: { errors: null, pendingAction: null, + pendingFields: { + name: null, + }, }, }, }, @@ -4369,6 +4399,18 @@ function clearPolicyDistanceRateErrorFields(policyID: string, customUnitID: stri }); } +/** + * Takes removes pendingFields and errorFields from a customUnit + */ +function removePendingFieldsFromCustomUnit(customUnit: CustomUnit): CustomUnit { + const cleanedCustomUnit = {...customUnit}; + + delete cleanedCustomUnit.pendingFields; + delete cleanedCustomUnit.errorFields; + + return cleanedCustomUnit; +} + function setPolicyDistanceRatesUnit(policyID: string, currentCustomUnit: CustomUnit, newCustomUnit: CustomUnit) { const optimisticData: OnyxUpdate[] = [ { @@ -4417,7 +4459,7 @@ function setPolicyDistanceRatesUnit(policyID: string, currentCustomUnit: CustomU const params: SetPolicyDistanceRatesUnitParams = { policyID, - customUnit: JSON.stringify(newCustomUnit), + customUnit: JSON.stringify(removePendingFieldsFromCustomUnit(newCustomUnit)), }; API.write(WRITE_COMMANDS.SET_POLICY_DISTANCE_RATES_UNIT, params, {optimisticData, successData, failureData}); @@ -4471,7 +4513,7 @@ function setPolicyDistanceRatesDefaultCategory(policyID: string, currentCustomUn const params: SetPolicyDistanceRatesDefaultCategoryParams = { policyID, - customUnit: JSON.stringify(newCustomUnit), + customUnit: JSON.stringify(removePendingFieldsFromCustomUnit(newCustomUnit)), }; API.write(WRITE_COMMANDS.SET_POLICY_DISTANCE_RATES_DEFAULT_CATEGORY, params, {optimisticData, successData, failureData}); diff --git a/src/libs/actions/ReimbursementAccount/resetFreePlanBankAccount.ts b/src/libs/actions/ReimbursementAccount/resetFreePlanBankAccount.ts index 4663fbb5bcc3..a1f0e070fcb3 100644 --- a/src/libs/actions/ReimbursementAccount/resetFreePlanBankAccount.ts +++ b/src/libs/actions/ReimbursementAccount/resetFreePlanBankAccount.ts @@ -13,7 +13,7 @@ import type * as OnyxTypes from '@src/types/onyx'; /** * Reset user's reimbursement account. This will delete the bank account. */ -function resetFreePlanBankAccount(bankAccountID: number, session: OnyxEntry, policyID: string, user: OnyxEntry) { +function resetFreePlanBankAccount(bankAccountID: number | undefined, session: OnyxEntry, policyID: string, user: OnyxEntry) { if (!bankAccountID) { throw new Error('Missing bankAccountID when attempting to reset free plan bank account'); } diff --git a/src/libs/actions/Report.ts b/src/libs/actions/Report.ts index 179ee87862ff..d2f85362baf8 100644 --- a/src/libs/actions/Report.ts +++ b/src/libs/actions/Report.ts @@ -70,16 +70,7 @@ import ONYXKEYS from '@src/ONYXKEYS'; import type {Route} from '@src/ROUTES'; import ROUTES from '@src/ROUTES'; import INPUT_IDS from '@src/types/form/NewRoomForm'; -import type { - NewGroupChatDraft, - PersonalDetails, - PersonalDetailsList, - PolicyReportField, - RecentlyUsedReportFields, - ReportActionReactions, - ReportMetadata, - ReportUserIsTyping, -} from '@src/types/onyx'; +import type {PersonalDetails, PersonalDetailsList, PolicyReportField, RecentlyUsedReportFields, ReportActionReactions, ReportMetadata, ReportUserIsTyping} from '@src/types/onyx'; import type {Decision, OriginalMessageIOU} from '@src/types/onyx/OriginalMessage'; import type {NotificationPreference, RoomVisibility, WriteCapability} from '@src/types/onyx/Report'; import type Report from '@src/types/onyx/Report'; @@ -212,12 +203,6 @@ Onyx.connect({ callback: (val) => (allRecentlyUsedReportFields = val), }); -let newGroupDraft: OnyxEntry; -Onyx.connect({ - key: ONYXKEYS.NEW_GROUP_CHAT_DRAFT, - callback: (value) => (newGroupDraft = value), -}); - function clearGroupChat() { Onyx.set(ONYXKEYS.NEW_GROUP_CHAT_DRAFT, null); } @@ -740,11 +725,6 @@ function openReport( key: ONYXKEYS.PERSONAL_DETAILS_LIST, value: settledPersonalDetails, }); - failureData.push({ - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.PERSONAL_DETAILS_LIST, - value: settledPersonalDetails, - }); // Add the createdReportActionID parameter to the API call parameters.createdReportActionID = optimisticCreatedAction.reportActionID; @@ -799,14 +779,15 @@ function navigateToAndOpenReport(userLogins: string[], shouldDismissModal = true let newChat: ReportUtils.OptimisticChatReport | EmptyObject = {}; let chat: OnyxEntry | EmptyObject = {}; const participantAccountIDs = PersonalDetailsUtils.getAccountIDsByLogins(userLogins); + const isGroupChat = participantAccountIDs.length > 1; // If we are not creating a new Group Chat then we are creating a 1:1 DM and will look for an existing chat - if (!newGroupDraft) { + if (!isGroupChat) { chat = ReportUtils.getChatByParticipants(participantAccountIDs); } if (isEmptyObject(chat)) { - if (newGroupDraft) { + if (isGroupChat) { newChat = ReportUtils.buildOptimisticChatReport( participantAccountIDs, reportName, @@ -1612,6 +1593,18 @@ function updateReportName(reportID: string, value: string, previousValue: string API.write(WRITE_COMMANDS.SET_REPORT_NAME, parameters, {optimisticData, failureData, successData}); } +function clearReportFieldErrors(reportID: string, reportField: PolicyReportField) { + const fieldKey = ReportUtils.getReportFieldKey(reportField.fieldID); + Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`, { + pendingFields: { + [fieldKey]: null, + }, + errorFields: { + [fieldKey]: null, + }, + }); +} + function updateReportField(reportID: string, reportField: PolicyReportField, previousReportField: PolicyReportField) { const fieldKey = ReportUtils.getReportFieldKey(reportField.fieldID); const recentlyUsedValues = allRecentlyUsedReportFields?.[fieldKey] ?? []; @@ -1692,6 +1685,65 @@ function updateReportField(reportID: string, reportField: PolicyReportField, pre API.write(WRITE_COMMANDS.SET_REPORT_FIELD, parameters, {optimisticData, failureData, successData}); } +function deleteReportField(reportID: string, reportField: PolicyReportField) { + const fieldKey = ReportUtils.getReportFieldKey(reportField.fieldID); + + const optimisticData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT}${reportID}`, + value: { + fieldList: { + [fieldKey]: null, + }, + pendingFields: { + [fieldKey]: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE, + }, + }, + }, + ]; + + const failureData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT}${reportID}`, + value: { + fieldList: { + [fieldKey]: reportField, + }, + pendingFields: { + [fieldKey]: null, + }, + errorFields: { + [fieldKey]: ErrorUtils.getMicroSecondOnyxError('report.genericUpdateReportFieldFailureMessage'), + }, + }, + }, + ]; + + const successData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT}${reportID}`, + value: { + pendingFields: { + [fieldKey]: null, + }, + errorFields: { + [fieldKey]: null, + }, + }, + }, + ]; + + const parameters = { + reportID, + fieldID: fieldKey, + }; + + API.write(WRITE_COMMANDS.DELETE_REPORT_FIELD, parameters, {optimisticData, failureData, successData}); +} + function updateDescription(reportID: string, previousValue: string, newValue: string) { // No change needed, navigate back if (previousValue === newValue) { @@ -1886,6 +1938,16 @@ function deleteReport(reportID: string) { Onyx.multiSet(onyxData); + // Clear the optimistic personal detail + const participantPersonalDetails: OnyxCollection = {}; + report?.participantAccountIDs?.forEach((accountID) => { + if (!allPersonalDetails?.[accountID]?.isOptimisticPersonalDetail) { + return; + } + participantPersonalDetails[accountID] = null; + }); + Onyx.merge(ONYXKEYS.PERSONAL_DETAILS_LIST, participantPersonalDetails); + // Delete linked IOU report if (report?.iouReportID) { deleteReport(report.iouReportID); @@ -3024,6 +3086,8 @@ export { clearNewRoomFormError, updateReportField, updateReportName, + deleteReportField, + clearReportFieldErrors, resolveActionableMentionWhisper, updateRoomVisibility, setGroupDraft, diff --git a/src/libs/actions/Session/index.ts b/src/libs/actions/Session/index.ts index 17004baef43e..7f7531a094fa 100644 --- a/src/libs/actions/Session/index.ts +++ b/src/libs/actions/Session/index.ts @@ -2,7 +2,7 @@ import throttle from 'lodash/throttle'; import type {ChannelAuthorizationData} from 'pusher-js/types/src/core/auth/options'; import type {ChannelAuthorizationCallback} from 'pusher-js/with-encryption'; import {InteractionManager, Linking, NativeModules} from 'react-native'; -import type {OnyxUpdate} from 'react-native-onyx'; +import type {OnyxEntry, OnyxUpdate} from 'react-native-onyx'; import Onyx from 'react-native-onyx'; import type {ValueOf} from 'type-fest'; import * as PersistedRequests from '@libs/actions/PersistedRequests'; @@ -175,8 +175,8 @@ function signOut() { /** * Checks if the account is an anonymous account. */ -function isAnonymousUser(): boolean { - return session.authTokenType === CONST.AUTH_TOKEN_TYPES.ANONYMOUS; +function isAnonymousUser(sessionParam?: OnyxEntry): boolean { + return (sessionParam?.authTokenType ?? session.authTokenType) === CONST.AUTH_TOKEN_TYPES.ANONYMOUS; } function hasStashedSession(): boolean { diff --git a/src/libs/actions/Task.ts b/src/libs/actions/Task.ts index 644c5f6c2bcc..9cf7b0b78008 100644 --- a/src/libs/actions/Task.ts +++ b/src/libs/actions/Task.ts @@ -130,7 +130,7 @@ function createTaskAndNavigate( optimisticTaskReport.parentReportActionID = optimisticAddCommentReport.reportAction.reportActionID; const currentTime = DateUtils.getDBTime(); - const lastCommentText = ReportUtils.formatReportLastMessageText(optimisticAddCommentReport?.reportAction?.message?.[0].text ?? ''); + const lastCommentText = ReportUtils.formatReportLastMessageText(optimisticAddCommentReport?.reportAction?.message?.[0]?.text ?? ''); const optimisticParentReport = { lastVisibleActionCreated: currentTime, lastMessageText: lastCommentText, @@ -191,16 +191,12 @@ function createTaskAndNavigate( { onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.REPORT}${optimisticTaskReport.reportID}`, - value: { - errorFields: { - createTask: ErrorUtils.getMicroSecondOnyxError('task.genericCreateTaskFailureMessage'), - }, - }, + value: null, }, { onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${optimisticTaskReport.reportID}`, - value: {[optimisticTaskCreatedAction.reportActionID]: {pendingAction: null}}, + value: null, }, ]; @@ -659,11 +655,11 @@ function setAssigneeChatReport(chatReport: OnyxTypes.Report) { function setAssigneeValue( assigneeEmail: string, assigneeAccountID: number, - shareToReportID: string, - chatReport: OnyxEntry, + shareToReportID?: string, + chatReport?: OnyxEntry, isCurrentUser = false, -): OnyxEntry { - let report = chatReport; +): OnyxEntry | undefined { + let report: OnyxEntry | undefined = chatReport; if (!isCurrentUser) { // Check for the chatReport by participants IDs if (!report) { @@ -729,7 +725,7 @@ function setParentReportID(parentReportID: string) { /** * Clears out the task info from the store and navigates to the NewTaskDetails page */ -function clearOutTaskInfoAndNavigate(reportID: string, chatReport: OnyxEntry, accountID = 0) { +function clearOutTaskInfoAndNavigate(reportID?: string, chatReport?: OnyxEntry, accountID = 0) { clearOutTaskInfo(); if (reportID && reportID !== '0') { setParentReportID(reportID); diff --git a/src/libs/actions/connections/getQuickBooksOnlineSetupLink.ts b/src/libs/actions/connections/getQuickBooksOnlineSetupLink.ts new file mode 100644 index 000000000000..a93ebbdae9b2 --- /dev/null +++ b/src/libs/actions/connections/getQuickBooksOnlineSetupLink.ts @@ -0,0 +1,13 @@ +import {getCommandURL} from '@libs/ApiUtils'; +import CONFIG from '@src/CONFIG'; +import ROUTES from '@src/ROUTES'; + +function getQuickBooksOnlineSetupLink(policyID: string) { + const callbackPath = `${CONFIG.EXPENSIFY.NEW_EXPENSIFY_URL}${ROUTES.WORKSPACE_ACCOUNTING.getRoute(policyID)}`; + const params = new URLSearchParams({callbackPath, policyID}); + const commandURL = getCommandURL({command: 'ConnectToQuickbooksOnline'}); + + return commandURL + params.toString(); +} + +export default getQuickBooksOnlineSetupLink; diff --git a/src/libs/calculateAnchorPosition.ts b/src/libs/calculateAnchorPosition.ts index 365bd1ece28b..bee34c1c1e96 100644 --- a/src/libs/calculateAnchorPosition.ts +++ b/src/libs/calculateAnchorPosition.ts @@ -1,14 +1,7 @@ -/* eslint-disable no-restricted-imports */ -import type {ValueOf} from 'type-fest'; import type {ContextMenuAnchor} from '@pages/home/report/ContextMenu/ReportActionContextMenu'; import CONST from '@src/CONST'; import type {AnchorDimensions, AnchorPosition} from '@src/styles'; - -type AnchorOrigin = { - horizontal: ValueOf; - vertical: ValueOf; - shiftVertical?: number; -}; +import type {AnchorOrigin} from './actions/EmojiPickerAction'; /** * Gets the x,y position of the passed in component for the purpose of anchoring another component to it. diff --git a/src/libs/focusComposerWithDelay/index.ts b/src/libs/focusComposerWithDelay/index.ts index 75e8f6ca8a67..cbd81b884d12 100644 --- a/src/libs/focusComposerWithDelay/index.ts +++ b/src/libs/focusComposerWithDelay/index.ts @@ -1,4 +1,5 @@ import ComposerFocusManager from '@libs/ComposerFocusManager'; +import isWindowReadyToFocus from '@libs/isWindowReadyToFocus'; import * as EmojiPickerAction from '@userActions/EmojiPickerAction'; import setTextInputSelection from './setTextInputSelection'; import type {FocusComposerWithDelay, InputType} from './types'; @@ -26,7 +27,7 @@ function focusComposerWithDelay(textInput: InputType | null): FocusComposerWithD } return; } - ComposerFocusManager.isReadyToFocus().then(() => { + Promise.all([ComposerFocusManager.isReadyToFocus(), isWindowReadyToFocus()]).then(() => { if (!textInput) { return; } diff --git a/src/libs/isWindowReadyToFocus/index.android.ts b/src/libs/isWindowReadyToFocus/index.android.ts new file mode 100644 index 000000000000..b9cca1b5a294 --- /dev/null +++ b/src/libs/isWindowReadyToFocus/index.android.ts @@ -0,0 +1,27 @@ +import {AppState} from 'react-native'; + +let isWindowReadyPromise = Promise.resolve(); +let resolveWindowReadyToFocus: () => void; + +AppState.addEventListener('focus', () => { + if (!resolveWindowReadyToFocus) { + return; + } + resolveWindowReadyToFocus(); +}); + +AppState.addEventListener('blur', () => { + isWindowReadyPromise = new Promise((resolve) => { + resolveWindowReadyToFocus = resolve; + }); +}); + +/** + * If we want to show the soft keyboard reliably, we need to ensure that the input's window gains focus first. + * Fortunately, we only need to manage the focus of the app window now, + * so we can achieve this by listening to the 'focus' event of the AppState. + * See {@link https://developer.android.com/develop/ui/views/touch-and-input/keyboard-input/visibility#ShowReliably} + */ +const isWindowReadyToFocus = () => isWindowReadyPromise; + +export default isWindowReadyToFocus; diff --git a/src/libs/isWindowReadyToFocus/index.ts b/src/libs/isWindowReadyToFocus/index.ts new file mode 100644 index 000000000000..7ae3930c0c1d --- /dev/null +++ b/src/libs/isWindowReadyToFocus/index.ts @@ -0,0 +1,3 @@ +const isWindowReadyToFocus = () => Promise.resolve(); + +export default isWindowReadyToFocus; diff --git a/src/pages/EditReportFieldDatePage.tsx b/src/pages/EditReportFieldDate.tsx similarity index 53% rename from src/pages/EditReportFieldDatePage.tsx rename to src/pages/EditReportFieldDate.tsx index 3d60884d3cfc..e7021f9123d6 100644 --- a/src/pages/EditReportFieldDatePage.tsx +++ b/src/pages/EditReportFieldDate.tsx @@ -4,9 +4,7 @@ import DatePicker from '@components/DatePicker'; import FormProvider from '@components/Form/FormProvider'; import InputWrapper from '@components/Form/InputWrapper'; import type {FormInputErrors, FormOnyxValues} from '@components/Form/types'; -import HeaderWithBackButton from '@components/HeaderWithBackButton'; import type {AnimatedTextInputRef} from '@components/RNTextInput'; -import ScreenWrapper from '@components/ScreenWrapper'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import CONST from '@src/CONST'; @@ -46,40 +44,29 @@ function EditReportFieldDatePage({fieldName, isRequired, onSubmit, fieldValue, f ); return ( - { - inputRef.current?.focus(); - }} - testID={EditReportFieldDatePage.displayName} + - - - - {/* @ts-expect-error TODO: Remove this once DatePicker (https://github.com/Expensify/App/issues/25148) is migrated to TypeScript. */} - - InputComponent={DatePicker} - inputID={fieldKey} - name={fieldKey} - defaultValue={fieldValue} - label={fieldName} - accessibilityLabel={fieldName} - role={CONST.ROLE.PRESENTATION} - maxDate={CONST.CALENDAR_PICKER.MAX_DATE} - minDate={CONST.CALENDAR_PICKER.MIN_DATE} - ref={inputRef} - /> - - - + + + + ); } diff --git a/src/pages/EditReportFieldDropdown.tsx b/src/pages/EditReportFieldDropdown.tsx new file mode 100644 index 000000000000..225051238e2b --- /dev/null +++ b/src/pages/EditReportFieldDropdown.tsx @@ -0,0 +1,125 @@ +import React, {useCallback, useMemo} from 'react'; +import {withOnyx} from 'react-native-onyx'; +import type {OnyxEntry} from 'react-native-onyx'; +import Icon from '@components/Icon'; +import * as Expensicons from '@components/Icon/Expensicons'; +import SelectionList from '@components/SelectionList'; +import RadioListItem from '@components/SelectionList/RadioListItem'; +import type {ListItem} from '@components/SelectionList/types'; +import useDebouncedState from '@hooks/useDebouncedState'; +import useLocalize from '@hooks/useLocalize'; +import useTheme from '@hooks/useTheme'; +import * as OptionsListUtils from '@libs/OptionsListUtils'; +import ONYXKEYS from '@src/ONYXKEYS'; +import type {RecentlyUsedReportFields} from '@src/types/onyx'; + +type EditReportFieldDropdownPageComponentProps = { + /** Value of the policy report field */ + fieldValue: string; + + /** Key of the policy report field */ + fieldKey: string; + + /** ID of the policy this report field belongs to */ + // eslint-disable-next-line react/no-unused-prop-types + policyID: string; + + /** Options of the policy report field */ + fieldOptions: string[]; + + /** Callback to fire when the Save button is pressed */ + onSubmit: (form: Record) => void; +}; + +type EditReportFieldDropdownPageOnyxProps = { + recentlyUsedReportFields: OnyxEntry; +}; + +type EditReportFieldDropdownPageProps = EditReportFieldDropdownPageComponentProps & EditReportFieldDropdownPageOnyxProps; + +function EditReportFieldDropdownPage({onSubmit, fieldKey, fieldValue, fieldOptions, recentlyUsedReportFields}: EditReportFieldDropdownPageProps) { + const [searchValue, debouncedSearchValue, setSearchValue] = useDebouncedState(''); + const theme = useTheme(); + const {translate} = useLocalize(); + const recentlyUsedOptions = useMemo(() => recentlyUsedReportFields?.[fieldKey] ?? [], [recentlyUsedReportFields, fieldKey]); + + const itemRightSideComponent = useCallback( + (item: ListItem) => { + if (item.text === fieldValue) { + return ( + + ); + } + + return null; + }, + [theme.iconSuccessFill, fieldValue], + ); + + const [sections, headerMessage] = useMemo(() => { + const validFieldOptions = fieldOptions?.filter((option) => !!option); + + const {policyReportFieldOptions} = OptionsListUtils.getFilteredOptions( + [], + [], + [], + debouncedSearchValue, + [ + { + keyForList: fieldValue, + searchText: fieldValue, + text: fieldValue, + }, + ], + [], + false, + false, + false, + {}, + [], + false, + {}, + [], + false, + false, + undefined, + undefined, + undefined, + true, + validFieldOptions, + recentlyUsedOptions, + ); + + const policyReportFieldData = policyReportFieldOptions?.[0]?.data ?? []; + const header = OptionsListUtils.getHeaderMessageForNonUserList(policyReportFieldData.length > 0, debouncedSearchValue); + + return [policyReportFieldOptions, header]; + }, [recentlyUsedOptions, debouncedSearchValue, fieldValue, fieldOptions]); + + const selectedOptionKey = useMemo(() => (sections?.[0]?.data ?? []).filter((option) => option.searchText === fieldValue)?.[0]?.keyForList, [sections, fieldValue]); + return ( + onSubmit({[fieldKey]: !option?.text || fieldValue === option.text ? '' : option.text})} + initiallyFocusedOptionKey={selectedOptionKey ?? undefined} + onChangeText={setSearchValue} + headerMessage={headerMessage} + ListItem={RadioListItem} + isRowMultilineSupported + rightHandSideComponent={itemRightSideComponent} + /> + ); +} + +EditReportFieldDropdownPage.displayName = 'EditReportFieldDropdownPage'; + +export default withOnyx({ + recentlyUsedReportFields: { + key: () => ONYXKEYS.RECENTLY_USED_REPORT_FIELDS, + }, +})(EditReportFieldDropdownPage); diff --git a/src/pages/EditReportFieldDropdownPage.tsx b/src/pages/EditReportFieldDropdownPage.tsx deleted file mode 100644 index e887860ae155..000000000000 --- a/src/pages/EditReportFieldDropdownPage.tsx +++ /dev/null @@ -1,167 +0,0 @@ -import React, {useMemo, useState} from 'react'; -import {withOnyx} from 'react-native-onyx'; -import type {OnyxEntry} from 'react-native-onyx'; -import HeaderWithBackButton from '@components/HeaderWithBackButton'; -import OptionsSelector from '@components/OptionsSelector'; -import ScreenWrapper from '@components/ScreenWrapper'; -import useLocalize from '@hooks/useLocalize'; -import useStyleUtils from '@hooks/useStyleUtils'; -import useThemeStyles from '@hooks/useThemeStyles'; -import ONYXKEYS from '@src/ONYXKEYS'; -import type {RecentlyUsedReportFields} from '@src/types/onyx'; - -type EditReportFieldDropdownPageComponentProps = { - /** Value of the policy report field */ - fieldValue: string; - - /** Name of the policy report field */ - fieldName: string; - - /** Key of the policy report field */ - fieldKey: string; - - /** ID of the policy this report field belongs to */ - // eslint-disable-next-line react/no-unused-prop-types - policyID: string; - - /** Options of the policy report field */ - fieldOptions: string[]; - - /** Callback to fire when the Save button is pressed */ - onSubmit: (form: Record) => void; -}; - -type EditReportFieldDropdownPageOnyxProps = { - recentlyUsedReportFields: OnyxEntry; -}; - -type EditReportFieldDropdownPageProps = EditReportFieldDropdownPageComponentProps & EditReportFieldDropdownPageOnyxProps; - -type ReportFieldDropdownData = { - text: string; - keyForList: string; - searchText: string; - tooltipText: string; -}; - -type ReportFieldDropdownSectionItem = { - data: ReportFieldDropdownData[]; - shouldShow: boolean; - title?: string; -}; - -function EditReportFieldDropdownPage({fieldName, onSubmit, fieldKey, fieldValue, fieldOptions, recentlyUsedReportFields}: EditReportFieldDropdownPageProps) { - const [searchValue, setSearchValue] = useState(''); - const styles = useThemeStyles(); - const {getSafeAreaMargins} = useStyleUtils(); - const {translate} = useLocalize(); - const recentlyUsedOptions = useMemo(() => recentlyUsedReportFields?.[fieldKey] ?? [], [recentlyUsedReportFields, fieldKey]); - - const {sections, headerMessage} = useMemo(() => { - let newHeaderMessage = ''; - const newSections: ReportFieldDropdownSectionItem[] = []; - - if (searchValue) { - const filteredOptions = fieldOptions.filter((option) => option.toLowerCase().includes(searchValue.toLowerCase())); - newHeaderMessage = !filteredOptions.length ? translate('common.noResultsFound') : ''; - newSections.push({ - shouldShow: false, - data: filteredOptions.map((option) => ({ - text: option, - keyForList: option, - searchText: option, - tooltipText: option, - })), - }); - } else { - const selectedValue = fieldValue; - if (selectedValue) { - newSections.push({ - shouldShow: false, - data: [ - { - text: selectedValue, - keyForList: selectedValue, - searchText: selectedValue, - tooltipText: selectedValue, - }, - ], - }); - } - - const filteredRecentlyUsedOptions = recentlyUsedOptions.filter((option) => option !== selectedValue && fieldOptions.includes(option)); - if (filteredRecentlyUsedOptions.length > 0) { - newSections.push({ - title: translate('common.recents'), - shouldShow: true, - data: filteredRecentlyUsedOptions.map((option) => ({ - text: option, - keyForList: option, - searchText: option, - tooltipText: option, - })), - }); - } - - const filteredFieldOptions = fieldOptions.filter((option) => option !== selectedValue); - if (filteredFieldOptions.length > 0) { - newSections.push({ - title: translate('common.all'), - shouldShow: true, - data: filteredFieldOptions.map((option) => ({ - text: option, - keyForList: option, - searchText: option, - tooltipText: option, - })), - }); - } - } - - return {sections: newSections, headerMessage: newHeaderMessage}; - }, [fieldValue, fieldOptions, recentlyUsedOptions, searchValue, translate]); - - return ( - - {({insets}) => ( - <> - - ) => - onSubmit({ - [fieldKey]: fieldValue === option.text ? '' : option.text, - }) - } - onChangeText={setSearchValue} - highlightSelectedOptions - isRowMultilineSupported - headerMessage={headerMessage} - /> - - )} - - ); -} - -EditReportFieldDropdownPage.displayName = 'EditReportFieldDropdownPage'; - -export default withOnyx({ - recentlyUsedReportFields: { - key: () => ONYXKEYS.RECENTLY_USED_REPORT_FIELDS, - }, -})(EditReportFieldDropdownPage); diff --git a/src/pages/EditReportFieldPage.tsx b/src/pages/EditReportFieldPage.tsx index 72a472db3da0..6cc93d05ebbc 100644 --- a/src/pages/EditReportFieldPage.tsx +++ b/src/pages/EditReportFieldPage.tsx @@ -1,18 +1,25 @@ import Str from 'expensify-common/lib/str'; -import React from 'react'; +import React, {useState} from 'react'; import {withOnyx} from 'react-native-onyx'; import type {OnyxEntry} from 'react-native-onyx'; import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView'; +import ConfirmModal from '@components/ConfirmModal'; import type {FormOnyxValues} from '@components/Form/types'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import type {ThreeDotsMenuItem} from '@components/HeaderWithBackButton/types'; +import * as Expensicons from '@components/Icon/Expensicons'; import ScreenWrapper from '@components/ScreenWrapper'; +import useLocalize from '@hooks/useLocalize'; +import useThemeStyles from '@hooks/useThemeStyles'; +import useWindowDimensions from '@hooks/useWindowDimensions'; import Navigation from '@libs/Navigation/Navigation'; import * as ReportUtils from '@libs/ReportUtils'; import * as ReportActions from '@src/libs/actions/Report'; import ONYXKEYS from '@src/ONYXKEYS'; import type {Policy, Report} from '@src/types/onyx'; -import EditReportFieldDatePage from './EditReportFieldDatePage'; -import EditReportFieldDropdownPage from './EditReportFieldDropdownPage'; -import EditReportFieldTextPage from './EditReportFieldTextPage'; +import EditReportFieldDate from './EditReportFieldDate'; +import EditReportFieldDropdown from './EditReportFieldDropdown'; +import EditReportFieldText from './EditReportFieldText'; type EditReportFieldPageOnyxProps = { /** The report object for the expense report */ @@ -40,9 +47,13 @@ type EditReportFieldPageProps = EditReportFieldPageOnyxProps & { }; function EditReportFieldPage({route, policy, report}: EditReportFieldPageProps) { + const {windowWidth} = useWindowDimensions(); + const styles = useThemeStyles(); const fieldKey = ReportUtils.getReportFieldKey(route.params.fieldID); const reportField = report?.fieldList?.[fieldKey] ?? policy?.fieldList?.[fieldKey]; const isDisabled = ReportUtils.isReportFieldDisabled(report, reportField ?? null, policy); + const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false); + const {translate} = useLocalize(); if (!reportField || !report || isDisabled) { return ( @@ -73,44 +84,78 @@ function EditReportFieldPage({route, policy, report}: EditReportFieldPageProps) Navigation.dismissModal(report?.reportID); }; + const handleReportFieldDelete = () => { + ReportActions.deleteReportField(report.reportID, reportField); + Navigation.dismissModal(report?.reportID); + }; + const fieldValue = isReportFieldTitle ? report.reportName ?? '' : reportField.value ?? reportField.defaultValue; - if (reportField.type === 'text' || isReportFieldTitle) { - return ( - - ); + const menuItems: ThreeDotsMenuItem[] = []; + + const isReportFieldDeletable = reportField.deletable && !isReportFieldTitle; + + if (isReportFieldDeletable) { + menuItems.push({icon: Expensicons.Trashcan, text: translate('common.delete'), onSelected: () => setIsDeleteModalVisible(true)}); } - if (reportField.type === 'date') { - return ( - + - ); - } - if (reportField.type === 'dropdown') { - return ( - !reportField.disabledOptions[index])} - onSubmit={handleReportFieldChange} + setIsDeleteModalVisible(false)} + prompt={translate('workspace.reportFields.deleteConfirmation')} + confirmText={translate('common.delete')} + cancelText={translate('common.cancel')} + danger /> - ); - } + + {(reportField.type === 'text' || isReportFieldTitle) && ( + + )} + + {reportField.type === 'date' && ( + + )} + + {reportField.type === 'dropdown' && ( + !reportField.disabledOptions[index])} + onSubmit={handleReportFieldChange} + /> + )} + + ); } EditReportFieldPage.displayName = 'EditReportFieldPage'; diff --git a/src/pages/EditReportFieldTextPage.tsx b/src/pages/EditReportFieldText.tsx similarity index 58% rename from src/pages/EditReportFieldTextPage.tsx rename to src/pages/EditReportFieldText.tsx index 1a6cf96fb37a..d89724f0228b 100644 --- a/src/pages/EditReportFieldTextPage.tsx +++ b/src/pages/EditReportFieldText.tsx @@ -3,9 +3,7 @@ import {View} from 'react-native'; import FormProvider from '@components/Form/FormProvider'; import InputWrapper from '@components/Form/InputWrapper'; import type {FormInputErrors, FormOnyxValues} from '@components/Form/types'; -import HeaderWithBackButton from '@components/HeaderWithBackButton'; import type {AnimatedTextInputRef} from '@components/RNTextInput'; -import ScreenWrapper from '@components/ScreenWrapper'; import TextInput from '@components/TextInput'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; @@ -46,37 +44,27 @@ function EditReportFieldTextPage({fieldName, onSubmit, fieldValue, isRequired, f ); return ( - { - inputRef.current?.focus(); - }} - testID={EditReportFieldTextPage.displayName} + - - - - - - - + + + + ); } diff --git a/src/pages/EditRequestPage.js b/src/pages/EditRequestPage.js index ec49e32a5f0f..d3941dca044e 100644 --- a/src/pages/EditRequestPage.js +++ b/src/pages/EditRequestPage.js @@ -8,12 +8,10 @@ import ScreenWrapper from '@components/ScreenWrapper'; import tagPropTypes from '@components/tagPropTypes'; import transactionPropTypes from '@components/transactionPropTypes'; import compose from '@libs/compose'; -import * as CurrencyUtils from '@libs/CurrencyUtils'; import * as IOUUtils from '@libs/IOUUtils'; import Navigation from '@libs/Navigation/Navigation'; import * as OptionsListUtils from '@libs/OptionsListUtils'; import * as PolicyUtils from '@libs/PolicyUtils'; -import {isTaxTrackingEnabled} from '@libs/PolicyUtils'; import * as ReportUtils from '@libs/ReportUtils'; import * as TransactionUtils from '@libs/TransactionUtils'; import * as IOU from '@userActions/IOU'; @@ -21,8 +19,6 @@ import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import EditRequestReceiptPage from './EditRequestReceiptPage'; import EditRequestTagPage from './EditRequestTagPage'; -import EditRequestTaxAmountPage from './EditRequestTaxAmountPage'; -import EditRequestTaxRatePage from './EditRequestTaxRatePage'; import reportActionPropTypes from './home/report/reportActionPropTypes'; import reportPropTypes from './reportPropTypes'; import {policyPropTypes} from './workspace/withPolicy'; @@ -72,17 +68,10 @@ const defaultProps = { transaction: {}, }; -const getTaxAmount = (transactionAmount, transactionTaxCode, taxRates) => { - const percentage = (transactionTaxCode ? taxRates.taxes[transactionTaxCode].value : taxRates.defaultValue) || ''; - return CurrencyUtils.convertToBackendAmount(Number.parseFloat(TransactionUtils.calculateTaxAmount(percentage, transactionAmount))); -}; - function EditRequestPage({report, route, policy, policyCategories, policyTags, parentReportActions, transaction}) { const parentReportActionID = lodashGet(report, 'parentReportActionID', '0'); const parentReportAction = lodashGet(parentReportActions, parentReportActionID, {}); - const {taxAmount: transactionTaxAmount, taxCode: transactionTaxCode, currency: transactionCurrency, tag: transactionTag} = ReportUtils.getTransactionDetails(transaction); - - const defaultCurrency = lodashGet(route, 'params.currency', '') || transactionCurrency; + const {tag: transactionTag} = ReportUtils.getTransactionDetails(transaction); const fieldToEdit = lodashGet(route, ['params', 'field'], ''); const tagListIndex = Number(lodashGet(route, ['params', 'tagIndex'], undefined)); @@ -91,23 +80,12 @@ function EditRequestPage({report, route, policy, policyCategories, policyTags, p const policyTagListName = PolicyUtils.getTagListName(policyTags, tagListIndex); const policyTagLists = useMemo(() => PolicyUtils.getTagLists(policyTags), [policyTags]); - const taxRates = lodashGet(policy, 'taxRates', {}); - - const taxRateTitle = - taxRates && - (transactionTaxCode === taxRates.defaultExternalID - ? transaction && TransactionUtils.getDefaultTaxName(taxRates, transaction) - : transactionTaxCode && TransactionUtils.getTaxName(taxRates.taxes, transactionTaxCode)); - // A flag for verifying that the current report is a sub-report of a workspace chat const isPolicyExpenseChat = ReportUtils.isGroupPolicy(report); // A flag for showing the tags page const shouldShowTags = useMemo(() => isPolicyExpenseChat && (transactionTag || OptionsListUtils.hasEnabledTags(policyTagLists)), [isPolicyExpenseChat, policyTagLists, transactionTag]); - // A flag for showing tax rate - const shouldShowTax = isTaxTrackingEnabled(isPolicyExpenseChat, policy); - // Decides whether to allow or disallow editing a money request useEffect(() => { // Do not dismiss the modal, when a current user can edit this property of the money request. @@ -121,35 +99,6 @@ function EditRequestPage({report, route, policy, policyCategories, policyTags, p }); }, [parentReportAction, fieldToEdit]); - const updateTaxAmount = useCallback( - (transactionChanges) => { - const newTaxAmount = CurrencyUtils.convertToBackendAmount(Number.parseFloat(transactionChanges.amount)); - - if (newTaxAmount === TransactionUtils.getTaxAmount(transaction)) { - Navigation.dismissModal(); - return; - } - IOU.updateMoneyRequestTaxAmount(transaction.transactionID, report.reportID, newTaxAmount, policy, policyTags, policyCategories); - Navigation.dismissModal(report.reportID); - }, - [transaction, report, policy, policyTags, policyCategories], - ); - - const updateTaxRate = useCallback( - (transactionChanges) => { - const newTaxCode = transactionChanges.data.code; - - if (newTaxCode === undefined || newTaxCode === TransactionUtils.getTaxCode(transaction)) { - Navigation.dismissModal(); - return; - } - - IOU.updateMoneyRequestTaxRate(transaction.transactionID, report.reportID, newTaxCode, policy, policyTags, policyCategories); - Navigation.dismissModal(report.reportID); - }, - [transaction, report, policy, policyTags, policyCategories], - ); - const saveTag = useCallback( ({tag: newTag}) => { let updatedTag = newTag; @@ -182,27 +131,6 @@ function EditRequestPage({report, route, policy, policyCategories, policyTags, p ); } - if (fieldToEdit === CONST.EDIT_REQUEST_FIELD.TAX_AMOUNT && shouldShowTax) { - return ( - - ); - } - - if (fieldToEdit === CONST.EDIT_REQUEST_FIELD.TAX_RATE && shouldShowTax) { - return ( - - ); - } - if (fieldToEdit === CONST.EDIT_REQUEST_FIELD.RECEIPT) { return ( - {({insets}) => ( - <> - - {translate('iou.tagSelection')} - - - )} + + {translate('iou.tagSelection')} + ); } diff --git a/src/pages/EditRequestTaxAmountPage.tsx b/src/pages/EditRequestTaxAmountPage.tsx deleted file mode 100644 index a34ed8a5252d..000000000000 --- a/src/pages/EditRequestTaxAmountPage.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import {useFocusEffect} from '@react-navigation/native'; -import React, {useCallback, useRef} from 'react'; -import HeaderWithBackButton from '@components/HeaderWithBackButton'; -import ScreenWrapper from '@components/ScreenWrapper'; -import useLocalize from '@hooks/useLocalize'; -import * as DeviceCapabilities from '@libs/DeviceCapabilities'; -import type {BaseTextInputRef} from '@src/components/TextInput/BaseTextInput/types'; -import CONST from '@src/CONST'; -import MoneyRequestAmountForm from './iou/steps/MoneyRequestAmountForm'; - -type EditRequestTaxAmountPageProps = { - /** Transaction default amount value */ - defaultAmount: number; - - /** Transaction default tax amount value */ - defaultTaxAmount: number; - - /** Transaction default currency value */ - defaultCurrency: string; - - /** Callback to fire when the Save button is pressed */ - onSubmit: () => void; -}; - -function EditRequestTaxAmountPage({defaultAmount, defaultTaxAmount, defaultCurrency, onSubmit}: EditRequestTaxAmountPageProps) { - const {translate} = useLocalize(); - const textInput = useRef(null); - - const focusTimeoutRef = useRef(null); - - useFocusEffect( - useCallback(() => { - focusTimeoutRef.current = setTimeout(() => textInput.current && textInput.current.focus(), CONST.ANIMATED_TRANSITION); - return () => { - if (!focusTimeoutRef.current) { - return; - } - clearTimeout(focusTimeoutRef.current); - }; - }, []), - ); - - return ( - - - - - ); -} - -EditRequestTaxAmountPage.displayName = 'EditRequestTaxAmountPage'; - -export default EditRequestTaxAmountPage; diff --git a/src/pages/EditRequestTaxRatePage.tsx b/src/pages/EditRequestTaxRatePage.tsx deleted file mode 100644 index 099851e92209..000000000000 --- a/src/pages/EditRequestTaxRatePage.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from 'react'; -import HeaderWithBackButton from '@components/HeaderWithBackButton'; -import ScreenWrapper from '@components/ScreenWrapper'; -import TaxPicker from '@components/TaxPicker'; -import useLocalize from '@hooks/useLocalize'; - -type EditRequestTaxRatePageProps = { - /** Transaction default tax Rate value */ - defaultTaxRate: string; - - /** The policyID we are getting categories for */ - policyID: string; - - /** Callback to fire when the Save button is pressed */ - onSubmit: () => void; -}; - -function EditRequestTaxRatePage({defaultTaxRate, policyID, onSubmit}: EditRequestTaxRatePageProps) { - const {translate} = useLocalize(); - - return ( - - {({insets}) => ( - <> - - - - )} - - ); -} - -EditRequestTaxRatePage.displayName = 'EditRequestTaxRatePage'; - -export default EditRequestTaxRatePage; diff --git a/src/pages/EnablePayments/AdditionalDetailsStep.tsx b/src/pages/EnablePayments/AdditionalDetailsStep.tsx index 57b9c7c6ade4..46e7191f222b 100644 --- a/src/pages/EnablePayments/AdditionalDetailsStep.tsx +++ b/src/pages/EnablePayments/AdditionalDetailsStep.tsx @@ -191,7 +191,6 @@ function AdditionalDetailsStep({walletAdditionalDetails = DEFAULT_WALLET_ADDITIO state: 'addressState', zipCode: 'addressZipCode', }} - translate={translate} streetTranslationKey={fieldNameTranslationKeys.addressStreet} shouldSaveDraft /> diff --git a/src/pages/LogOutPreviousUserPage.tsx b/src/pages/LogOutPreviousUserPage.tsx index 37402ea8b048..c80b26bbb9e7 100644 --- a/src/pages/LogOutPreviousUserPage.tsx +++ b/src/pages/LogOutPreviousUserPage.tsx @@ -63,7 +63,15 @@ function LogOutPreviousUserPage({session, route, isAccountLoading}: LogOutPrevio const shortLivedAuthToken = route.params.shortLivedAuthToken ?? ''; SessionActions.signInWithShortLivedAuthToken(email, shortLivedAuthToken); } + // We only want to run this effect once on mount (when the page first loads after transitioning from OldDot) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [initialURL]); + + useEffect(() => { const exitTo = route.params.exitTo as Route | null; + const sessionEmail = session?.email; + const transitionURL = NativeModules.HybridAppModule ? `${CONST.DEEPLINK_BASE_URL}${initialURL ?? ''}` : initialURL; + const isLoggingInAsNewUser = SessionUtils.isLoggingInAsNewUser(transitionURL ?? undefined, sessionEmail); // We don't want to navigate to the exitTo route when creating a new workspace from a deep link, // because we already handle creating the optimistic policy and navigating to it in App.setUpPoliciesAndNavigate, // which is already called when AuthScreens mounts. @@ -75,8 +83,6 @@ function LogOutPreviousUserPage({session, route, isAccountLoading}: LogOutPrevio Navigation.navigate(exitUrl); }); } - - // We only want to run this effect once on mount (when the page first loads after transitioning from OldDot) // eslint-disable-next-line react-hooks/exhaustive-deps }, [initialURL, isAccountLoading]); diff --git a/src/pages/NewChatConfirmPage.tsx b/src/pages/NewChatConfirmPage.tsx index dfb30bded769..84f8e8630b70 100644 --- a/src/pages/NewChatConfirmPage.tsx +++ b/src/pages/NewChatConfirmPage.tsx @@ -134,7 +134,7 @@ function NewChatConfirmPage({newGroupDraft, allPersonalDetails}: NewChatConfirmP onSelectRow={unselectOption} showConfirmButton={selectedOptions.length > 1} confirmButtonText={translate('newChatPage.startGroup')} - onConfirm={createGroup} + onConfirm={selectedOptions.length > 1 ? createGroup : undefined} shouldHideListOnInitialRender={false} /> diff --git a/src/pages/ReimbursementAccount/ACHContractStep.js b/src/pages/ReimbursementAccount/ACHContractStep.tsx similarity index 61% rename from src/pages/ReimbursementAccount/ACHContractStep.js rename to src/pages/ReimbursementAccount/ACHContractStep.tsx index f2c2e5af85de..d4ba013e27d9 100644 --- a/src/pages/ReimbursementAccount/ACHContractStep.js +++ b/src/pages/ReimbursementAccount/ACHContractStep.tsx @@ -1,16 +1,15 @@ -import PropTypes from 'prop-types'; import React from 'react'; import CompleteVerification from './CompleteVerification/CompleteVerification'; -const propTypes = { +type ACHContractStepProps = { /** Goes to the previous step */ - onBackButtonPress: PropTypes.func.isRequired, + onBackButtonPress: () => void; }; -function ACHContractStep({onBackButtonPress}) { +function ACHContractStep({onBackButtonPress}: ACHContractStepProps) { return ; } -ACHContractStep.propTypes = propTypes; ACHContractStep.displayName = 'ACHContractStep'; + export default ACHContractStep; diff --git a/src/pages/ReimbursementAccount/AddressForm.js b/src/pages/ReimbursementAccount/AddressForm.js deleted file mode 100644 index d20d9df1d189..000000000000 --- a/src/pages/ReimbursementAccount/AddressForm.js +++ /dev/null @@ -1,163 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import {View} from 'react-native'; -import AddressSearch from '@components/AddressSearch'; -import InputWrapper from '@components/Form/InputWrapper'; -import StateSelector from '@components/StateSelector'; -import TextInput from '@components/TextInput'; -import useThemeStyles from '@hooks/useThemeStyles'; -import CONST from '@src/CONST'; - -const propTypes = { - /** Translate key for Street name */ - streetTranslationKey: PropTypes.string.isRequired, - - /** Callback fired when a field changes. Passes args as {[fieldName]: val} */ - onFieldChange: PropTypes.func, - - /** Default values */ - defaultValues: PropTypes.shape({ - /** Address street field */ - street: PropTypes.string, - - /** Address city field */ - city: PropTypes.string, - - /** Address state field */ - state: PropTypes.string, - - /** Address zip code field */ - zipCode: PropTypes.string, - }), - - /** Form values */ - values: PropTypes.shape({ - /** Address street field */ - street: PropTypes.string, - - /** Address city field */ - city: PropTypes.string, - - /** Address state field */ - state: PropTypes.string, - - /** Address zip code field */ - zipCode: PropTypes.string, - }), - - /** Any errors that can arise from form validation */ - errors: PropTypes.shape({ - street: PropTypes.bool, - city: PropTypes.bool, - state: PropTypes.bool, - zipCode: PropTypes.bool, - }), - - /** The map for inputID of the inputs */ - inputKeys: PropTypes.shape({ - street: PropTypes.string, - city: PropTypes.string, - state: PropTypes.string, - zipCode: PropTypes.string, - }), - - /** Saves a draft of the input value when used in a form */ - shouldSaveDraft: PropTypes.bool, - - /** Returns translated string for given locale and phrase */ - translate: PropTypes.func.isRequired, -}; - -const defaultProps = { - values: { - street: undefined, - city: undefined, - state: undefined, - zipCode: undefined, - }, - defaultValues: { - street: undefined, - city: undefined, - state: undefined, - zipCode: undefined, - }, - errors: {}, - inputKeys: { - street: '', - city: '', - state: '', - zipCode: '', - }, - shouldSaveDraft: false, - onFieldChange: () => {}, -}; - -function AddressForm(props) { - const styles = useThemeStyles(); - return ( - <> - - - - props.onFieldChange({city: value})} - errorText={props.errors.city ? 'bankAccount.error.addressCity' : ''} - containerStyles={[styles.mt6]} - /> - - - props.onFieldChange({state: value})} - errorText={props.errors.state ? 'bankAccount.error.addressState' : ''} - /> - - props.onFieldChange({zipCode: value})} - errorText={props.errors.zipCode ? 'bankAccount.error.zipCode' : ''} - maxLength={CONST.BANK_ACCOUNT.MAX_LENGTH.ZIP_CODE} - hint={['common.zipCodeExampleFormat', {zipSampleFormat: CONST.COUNTRY_ZIP_REGEX_DATA.US.samples}]} - containerStyles={[styles.mt3]} - /> - - ); -} - -AddressForm.propTypes = propTypes; -AddressForm.defaultProps = defaultProps; -AddressForm.displayName = 'AddressForm'; -export default AddressForm; diff --git a/src/pages/ReimbursementAccount/AddressForm.tsx b/src/pages/ReimbursementAccount/AddressForm.tsx new file mode 100644 index 000000000000..22829eed521f --- /dev/null +++ b/src/pages/ReimbursementAccount/AddressForm.tsx @@ -0,0 +1,108 @@ +import React from 'react'; +import {View} from 'react-native'; +import AddressSearch from '@components/AddressSearch'; +import InputWrapper from '@components/Form/InputWrapper'; +import type {State} from '@components/StateSelector'; +import StateSelector from '@components/StateSelector'; +import TextInput from '@components/TextInput'; +import useLocalize from '@hooks/useLocalize'; +import useThemeStyles from '@hooks/useThemeStyles'; +import CONST from '@src/CONST'; +import type {TranslationPaths} from '@src/languages/types'; +import type {Address} from '@src/types/onyx/PrivatePersonalDetails'; + +type AddressErrors = Record; + +type AddressFormProps = { + /** Translate key for Street name */ + streetTranslationKey: TranslationPaths; + + /** Callback fired when a field changes. Passes args as {[fieldName]: val} */ + onFieldChange?: (value: T) => void; + + /** Default values */ + defaultValues?: Address; + + /** Form values */ + values?: Address; + + /** Any errors that can arise from form validation */ + errors?: AddressErrors; + + /** The map for inputID of the inputs */ + inputKeys: Address; + + /** Saves a draft of the input value when used in a form */ + shouldSaveDraft?: boolean; +}; + +function AddressForm({shouldSaveDraft = false, defaultValues, values, errors, inputKeys, onFieldChange, streetTranslationKey}: AddressFormProps) { + const {translate} = useLocalize(); + const styles = useThemeStyles(); + + return ( + <> + + + + onFieldChange?.({city: value})} + errorText={errors?.city ? 'bankAccount.error.addressCity' : ''} + containerStyles={styles.mt6} + /> + + + onFieldChange?.({state: value})} + errorText={errors?.state ? 'bankAccount.error.addressState' : ''} + /> + + onFieldChange?.({zipCode: value})} + errorText={errors?.zipCode ? 'bankAccount.error.zipCode' : ''} + maxLength={CONST.BANK_ACCOUNT.MAX_LENGTH.ZIP_CODE} + hint={['common.zipCodeExampleFormat', {zipSampleFormat: CONST.COUNTRY_ZIP_REGEX_DATA.US.samples}]} + containerStyles={styles.mt3} + /> + + ); +} + +AddressForm.displayName = 'AddressForm'; + +export default AddressForm; diff --git a/src/pages/ReimbursementAccount/BankAccountStep.js b/src/pages/ReimbursementAccount/BankAccountStep.tsx similarity index 77% rename from src/pages/ReimbursementAccount/BankAccountStep.js rename to src/pages/ReimbursementAccount/BankAccountStep.tsx index 678afd4e9df4..d2fe7199a4c6 100644 --- a/src/pages/ReimbursementAccount/BankAccountStep.js +++ b/src/pages/ReimbursementAccount/BankAccountStep.tsx @@ -1,7 +1,6 @@ -import lodashGet from 'lodash/get'; -import PropTypes from 'prop-types'; import React from 'react'; import {View} from 'react-native'; +import type {OnyxEntry} from 'react-native-onyx'; import {withOnyx} from 'react-native-onyx'; import Button from '@components/Button'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; @@ -28,68 +27,68 @@ import CONFIG from '@src/CONFIG'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; +import type {ReimbursementAccountForm} from '@src/types/form/ReimbursementAccountForm'; import INPUT_IDS from '@src/types/form/ReimbursementAccountForm'; +import type * as OnyxTypes from '@src/types/onyx'; import BankInfo from './BankInfo/BankInfo'; -import StepPropTypes from './StepPropTypes'; -const propTypes = { - ...StepPropTypes, +type BankAccountStepOnyxProps = { + /** Object with various information about the user */ + user: OnyxEntry; + /** If the plaid button has been disabled */ + isPlaidDisabled: OnyxEntry; +}; + +type BankAccountStepProps = BankAccountStepOnyxProps & { /** The OAuth URI + stateID needed to re-initialize the PlaidLink after the user logs into their bank */ - receivedRedirectURI: PropTypes.string, + receivedRedirectURI?: string | null; /** During the OAuth flow we need to use the plaidLink token that we initially connected with */ - plaidLinkOAuthToken: PropTypes.string, - - /** Object with various information about the user */ - user: PropTypes.shape({ - /** Is the user account validated? */ - validated: PropTypes.bool, - }), - - /** If the plaid button has been disabled */ - isPlaidDisabled: PropTypes.bool, + plaidLinkOAuthToken?: OnyxEntry; /* The workspace name */ - policyName: PropTypes.string, + policyName?: string; /* The workspace ID */ - policyID: PropTypes.string, -}; + policyID?: string; + + /** The bank account currently in setup */ + reimbursementAccount: OnyxEntry; -const defaultProps = { - receivedRedirectURI: null, - plaidLinkOAuthToken: '', - user: {}, - isPlaidDisabled: false, - policyName: '', - policyID: '', + /** Goes to the previous step */ + onBackButtonPress: () => void; }; const bankInfoStepKeys = INPUT_IDS.BANK_INFO_STEP; -function BankAccountStep(props) { +function BankAccountStep({ + plaidLinkOAuthToken = '', + policyID = '', + policyName = '', + user, + receivedRedirectURI, + reimbursementAccount, + onBackButtonPress, + isPlaidDisabled = false, +}: BankAccountStepProps) { const theme = useTheme(); const styles = useThemeStyles(); const {translate} = useLocalize(); - let subStep = lodashGet(props.reimbursementAccount, 'achData.subStep', ''); - const shouldReinitializePlaidLink = props.plaidLinkOAuthToken && props.receivedRedirectURI && subStep !== CONST.BANK_ACCOUNT.SUBSTEP.MANUAL; + let subStep = reimbursementAccount?.achData?.subStep ?? ''; + const shouldReinitializePlaidLink = plaidLinkOAuthToken && receivedRedirectURI && subStep !== CONST.BANK_ACCOUNT.SUBSTEP.MANUAL; if (shouldReinitializePlaidLink) { subStep = CONST.BANK_ACCOUNT.SETUP_TYPE.PLAID; } const plaidDesktopMessage = getPlaidDesktopMessage(); - const bankAccountRoute = `${CONFIG.EXPENSIFY.NEW_EXPENSIFY_URL}${ROUTES.BANK_ACCOUNT_WITH_STEP_TO_OPEN.getRoute( - 'new', - props.policyID, - ROUTES.WORKSPACE_INITIAL.getRoute(props.policyID), - )}`; + const bankAccountRoute = `${CONFIG.EXPENSIFY.NEW_EXPENSIFY_URL}${ROUTES.BANK_ACCOUNT_WITH_STEP_TO_OPEN.getRoute('new', policyID, ROUTES.WORKSPACE_INITIAL.getRoute(policyID))}`; const removeExistingBankAccountDetails = () => { - const bankAccountData = { + const bankAccountData: Partial = { [bankInfoStepKeys.ROUTING_NUMBER]: '', [bankInfoStepKeys.ACCOUNT_NUMBER]: '', [bankInfoStepKeys.PLAID_MASK]: '', - [bankInfoStepKeys.IS_SAVINGS]: '', + [bankInfoStepKeys.IS_SAVINGS]: undefined, [bankInfoStepKeys.BANK_NAME]: '', [bankInfoStepKeys.PLAID_ACCOUNT_ID]: '', [bankInfoStepKeys.PLAID_ACCESS_TOKEN]: '', @@ -100,8 +99,8 @@ function BankAccountStep(props) { if (subStep === CONST.BANK_ACCOUNT.SETUP_TYPE.PLAID || subStep === CONST.BANK_ACCOUNT.SETUP_TYPE.MANUAL) { return ( ); } @@ -114,21 +113,21 @@ function BankAccountStep(props) { - +
- + {translate('bankAccount.toGetStarted')} - {Boolean(plaidDesktopMessage) && ( + {!!plaidDesktopMessage && ( {translate(plaidDesktopMessage)} @@ -138,24 +137,23 @@ function BankAccountStep(props) { iconStyles={[styles.customMarginButtonWithMenuItem]} text={translate('bankAccount.connectOnlineWithPlaid')} onPress={() => { - if (props.isPlaidDisabled || !props.user.validated) { + if (!!isPlaidDisabled || !user?.validated) { return; } removeExistingBankAccountDetails(); BankAccounts.openPlaidView(); }} - isDisabled={props.isPlaidDisabled || !props.user.validated} + isDisabled={!!isPlaidDisabled || !user?.validated} style={[styles.mt4]} shouldShowRightIcon success innerStyles={[styles.pr2, styles.pl4, styles.h13]} /> - {Boolean(props.error) && {props.error}} - + { removeExistingBankAccountDetails(); BankAccounts.setBankAccountSubStep(CONST.BANK_ACCOUNT.SETUP_TYPE.MANUAL); @@ -165,7 +163,7 @@ function BankAccountStep(props) { />
- {!props.user.validated && ( + {!user?.validated && ( Session.signOutAndRedirectToSignIn()} > {translate('bankAccount.validateAccountError.phrase2')} @@ -194,7 +192,7 @@ function BankAccountStep(props) { {translate('bankAccount.yourDataIsSecure')} - + ({ user: { key: ONYXKEYS.USER, }, diff --git a/src/pages/ReimbursementAccount/BankInfo/BankInfo.tsx b/src/pages/ReimbursementAccount/BankInfo/BankInfo.tsx index 027ab77d84da..b7b4ec171db9 100644 --- a/src/pages/ReimbursementAccount/BankInfo/BankInfo.tsx +++ b/src/pages/ReimbursementAccount/BankInfo/BankInfo.tsx @@ -31,13 +31,14 @@ type BankInfoOnyxProps = { /** The draft values of the bank account being setup */ reimbursementAccountDraft: OnyxEntry; - - policyID: string; }; type BankInfoProps = BankInfoOnyxProps & { /** Goes to the previous step */ onBackButtonPress: () => void; + + /** Current Policy ID */ + policyID: string; }; const BANK_INFO_STEP_KEYS = INPUT_IDS.BANK_INFO_STEP; diff --git a/src/pages/ReimbursementAccount/BeneficialOwnerInfo/substeps/BeneficialOwnerDetailsFormSubsteps/AddressUBO.tsx b/src/pages/ReimbursementAccount/BeneficialOwnerInfo/substeps/BeneficialOwnerDetailsFormSubsteps/AddressUBO.tsx index b68423115825..c02e3e238c80 100644 --- a/src/pages/ReimbursementAccount/BeneficialOwnerInfo/substeps/BeneficialOwnerDetailsFormSubsteps/AddressUBO.tsx +++ b/src/pages/ReimbursementAccount/BeneficialOwnerInfo/substeps/BeneficialOwnerDetailsFormSubsteps/AddressUBO.tsx @@ -77,7 +77,6 @@ function AddressUBO({reimbursementAccountDraft, onNext, isEditing, beneficialOwn diff --git a/src/pages/ReimbursementAccount/BusinessInfo/substeps/AddressBusiness.tsx b/src/pages/ReimbursementAccount/BusinessInfo/substeps/AddressBusiness.tsx index bd6cf04adab2..f569d220662e 100644 --- a/src/pages/ReimbursementAccount/BusinessInfo/substeps/AddressBusiness.tsx +++ b/src/pages/ReimbursementAccount/BusinessInfo/substeps/AddressBusiness.tsx @@ -81,7 +81,6 @@ function AddressBusiness({reimbursementAccount, onNext, isEditing}: AddressBusin diff --git a/src/pages/ReimbursementAccount/CompanyStep.js b/src/pages/ReimbursementAccount/CompanyStep.tsx similarity index 58% rename from src/pages/ReimbursementAccount/CompanyStep.js rename to src/pages/ReimbursementAccount/CompanyStep.tsx index ea814ff37943..740fc7329d30 100644 --- a/src/pages/ReimbursementAccount/CompanyStep.js +++ b/src/pages/ReimbursementAccount/CompanyStep.tsx @@ -1,17 +1,15 @@ -import PropTypes from 'prop-types'; import React from 'react'; import BusinessInfo from './BusinessInfo/BusinessInfo'; -const propTypes = { +type CompanyStepProps = { /** Goes to the previous step */ - onBackButtonPress: PropTypes.func.isRequired, + onBackButtonPress: () => void; }; -function CompanyStep({onBackButtonPress}) { +function CompanyStep({onBackButtonPress}: CompanyStepProps) { return ; } -CompanyStep.propTypes = propTypes; CompanyStep.displayName = 'CompanyStep'; export default CompanyStep; diff --git a/src/pages/ReimbursementAccount/ContinueBankAccountSetup.js b/src/pages/ReimbursementAccount/ContinueBankAccountSetup.tsx similarity index 57% rename from src/pages/ReimbursementAccount/ContinueBankAccountSetup.js rename to src/pages/ReimbursementAccount/ContinueBankAccountSetup.tsx index 6ce8356e7273..07142499f6c6 100644 --- a/src/pages/ReimbursementAccount/ContinueBankAccountSetup.js +++ b/src/pages/ReimbursementAccount/ContinueBankAccountSetup.tsx @@ -1,7 +1,5 @@ -import lodashGet from 'lodash/get'; -import PropTypes from 'prop-types'; import React from 'react'; -import _ from 'underscore'; +import type {OnyxEntry} from 'react-native-onyx'; import Button from '@components/Button'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; import * as Expensicons from '@components/Icon/Expensicons'; @@ -12,88 +10,85 @@ import ScreenWrapper from '@components/ScreenWrapper'; import ScrollView from '@components/ScrollView'; import Section from '@components/Section'; import Text from '@components/Text'; -import withLocalize, {withLocalizePropTypes} from '@components/withLocalize'; +import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import WorkspaceResetBankAccountModal from '@pages/workspace/WorkspaceResetBankAccountModal'; import * as BankAccounts from '@userActions/BankAccounts'; import CONST from '@src/CONST'; -import * as ReimbursementAccountProps from './reimbursementAccountPropTypes'; +import type * as OnyxTypes from '@src/types/onyx'; +import {isEmptyObject} from '@src/types/utils/EmptyObject'; -const propTypes = { +type ContinueBankAccountStepProps = { /** Bank account currently in setup */ - reimbursementAccount: ReimbursementAccountProps.reimbursementAccountPropTypes.isRequired, + reimbursementAccount: OnyxEntry; /** Callback to continue to the next step of the setup */ - continue: PropTypes.func.isRequired, + onContinuePress: () => void; /* The workspace name */ - policyName: PropTypes.string, + policyName?: string; /** Goes to the previous step */ - onBackButtonPress: PropTypes.func.isRequired, - - ...withLocalizePropTypes, + onBackButtonPress: () => void; }; -const defaultProps = {policyName: ''}; - -function ContinueBankAccountSetup(props) { +function ContinueBankAccountSetup({policyName = '', onBackButtonPress, reimbursementAccount, onContinuePress}: ContinueBankAccountStepProps) { const styles = useThemeStyles(); - const errors = lodashGet(props.reimbursementAccount, 'errors', {}); - const pendingAction = lodashGet(props.reimbursementAccount, 'pendingAction', null); + const {translate} = useLocalize(); + const errors = reimbursementAccount?.errors ?? {}; + const pendingAction = reimbursementAccount?.pendingAction ?? null; + return (
- {props.translate('workspace.bankAccount.youreAlmostDone')} + {translate('workspace.bankAccount.youreAlmostDone')}
- {props.reimbursementAccount.shouldShowResetModal && } + {reimbursementAccount?.shouldShowResetModal && }
); } -ContinueBankAccountSetup.propTypes = propTypes; -ContinueBankAccountSetup.defaultProps = defaultProps; ContinueBankAccountSetup.displayName = 'ContinueBankAccountSetup'; -export default withLocalize(ContinueBankAccountSetup); +export default ContinueBankAccountSetup; diff --git a/src/pages/ReimbursementAccount/EnableBankAccount/EnableBankAccount.tsx b/src/pages/ReimbursementAccount/EnableBankAccount/EnableBankAccount.tsx index ee40e85e3775..8687ff89ba62 100644 --- a/src/pages/ReimbursementAccount/EnableBankAccount/EnableBankAccount.tsx +++ b/src/pages/ReimbursementAccount/EnableBankAccount/EnableBankAccount.tsx @@ -29,7 +29,7 @@ type EnableBankAccountOnyxProps = { type EnableBankAccountProps = EnableBankAccountOnyxProps & { /** Bank account currently in setup */ - reimbursementAccount: ReimbursementAccount; + reimbursementAccount: OnyxEntry; /** Method to trigger when pressing back button of the header */ onBackButtonPress: () => void; diff --git a/src/pages/ReimbursementAccount/ExampleCheck.js b/src/pages/ReimbursementAccount/ExampleCheck.tsx similarity index 100% rename from src/pages/ReimbursementAccount/ExampleCheck.js rename to src/pages/ReimbursementAccount/ExampleCheck.tsx diff --git a/src/pages/ReimbursementAccount/IdentityForm.js b/src/pages/ReimbursementAccount/IdentityForm.js deleted file mode 100644 index 1c53511723af..000000000000 --- a/src/pages/ReimbursementAccount/IdentityForm.js +++ /dev/null @@ -1,209 +0,0 @@ -import {subYears} from 'date-fns'; -import PropTypes from 'prop-types'; -import React from 'react'; -import {View} from 'react-native'; -import _ from 'underscore'; -import DatePicker from '@components/DatePicker'; -import InputWrapper from '@components/Form/InputWrapper'; -import TextInput from '@components/TextInput'; -import useThemeStyles from '@hooks/useThemeStyles'; -import CONST from '@src/CONST'; -import AddressForm from './AddressForm'; - -const propTypes = { - /** Style for wrapping View */ - style: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.object), PropTypes.object]), - - /** Form values */ - values: PropTypes.shape({ - /** First name field */ - firstName: PropTypes.string, - - /** Last name field */ - lastName: PropTypes.string, - - /** Address street field */ - street: PropTypes.string, - - /** Address city field */ - city: PropTypes.string, - - /** Address state field */ - state: PropTypes.string, - - /** Address zip code field */ - zipCode: PropTypes.string, - - /** Date of birth field */ - dob: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]), - - /** Last 4 digits of SSN */ - ssnLast4: PropTypes.string, - }), - - /** Default values */ - defaultValues: PropTypes.shape({ - /** First name field */ - firstName: PropTypes.string, - - /** Last name field */ - lastName: PropTypes.string, - - /** Address street field */ - street: PropTypes.string, - - /** Address city field */ - city: PropTypes.string, - - /** Address state field */ - state: PropTypes.string, - - /** Address zip code field */ - zipCode: PropTypes.string, - - /** Date of birth field */ - dob: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]), - - /** Last 4 digits of SSN */ - ssnLast4: PropTypes.string, - }), - - /** Any errors that can arise from form validation */ - errors: PropTypes.objectOf(PropTypes.bool), - - /** The map for inputID of the inputs */ - inputKeys: PropTypes.shape({ - firstName: PropTypes.string, - lastName: PropTypes.string, - dob: PropTypes.string, - ssnLast4: PropTypes.string, - street: PropTypes.string, - city: PropTypes.string, - state: PropTypes.string, - zipCode: PropTypes.string, - }), - - /** Saves a draft of the input value when used in a form */ - shouldSaveDraft: PropTypes.bool, - - /** Returns translated string for given locale and phrase */ - translate: PropTypes.func.isRequired, -}; - -const defaultProps = { - style: {}, - values: { - firstName: undefined, - lastName: undefined, - street: undefined, - city: undefined, - state: undefined, - zipCode: undefined, - dob: undefined, - ssnLast4: undefined, - }, - defaultValues: { - firstName: undefined, - lastName: undefined, - street: undefined, - city: undefined, - state: undefined, - zipCode: undefined, - dob: undefined, - ssnLast4: undefined, - }, - errors: {}, - inputKeys: { - firstName: '', - lastName: '', - street: '', - city: '', - state: '', - zipCode: '', - dob: '', - ssnLast4: '', - }, - shouldSaveDraft: false, -}; - -function IdentityForm(props) { - const styles = useThemeStyles(); - // dob field has multiple validations/errors, we are handling it temporarily like this. - const dobErrorText = (props.errors.dob ? 'bankAccount.error.dob' : '') || (props.errors.dobAge ? 'bankAccount.error.age' : ''); - const identityFormInputKeys = ['firstName', 'lastName', 'dob', 'ssnLast4']; - - const minDate = subYears(new Date(), CONST.DATE_BIRTH.MAX_AGE); - const maxDate = subYears(new Date(), CONST.DATE_BIRTH.MIN_AGE_FOR_PAYMENT); - - return ( - - - - - - - - - - - - - - ); -} - -IdentityForm.propTypes = propTypes; -IdentityForm.defaultProps = defaultProps; -IdentityForm.displayName = 'IdentityForm'; -export default IdentityForm; diff --git a/src/pages/ReimbursementAccount/PersonalInfo/PersonalInfo.tsx b/src/pages/ReimbursementAccount/PersonalInfo/PersonalInfo.tsx index ce37cd4aa4e2..b259a4ee7e3c 100644 --- a/src/pages/ReimbursementAccount/PersonalInfo/PersonalInfo.tsx +++ b/src/pages/ReimbursementAccount/PersonalInfo/PersonalInfo.tsx @@ -1,3 +1,4 @@ +import type {RefAttributes} from 'react'; import React, {forwardRef, useCallback, useMemo} from 'react'; import {View} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; @@ -95,7 +96,7 @@ function PersonalInfo({reimbursementAccount, reimbursementAccountDraft, onBackBu PersonalInfo.displayName = 'PersonalInfo'; -export default withOnyx({ +export default withOnyx & PersonalInfoProps, PersonalInfoOnyxProps>({ // @ts-expect-error: ONYXKEYS.REIMBURSEMENT_ACCOUNT is conflicting with ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM reimbursementAccount: { key: ONYXKEYS.REIMBURSEMENT_ACCOUNT, diff --git a/src/pages/ReimbursementAccount/PersonalInfo/substeps/Address.tsx b/src/pages/ReimbursementAccount/PersonalInfo/substeps/Address.tsx index 712661510b7d..59815f511b77 100644 --- a/src/pages/ReimbursementAccount/PersonalInfo/substeps/Address.tsx +++ b/src/pages/ReimbursementAccount/PersonalInfo/substeps/Address.tsx @@ -79,7 +79,6 @@ function Address({reimbursementAccount, onNext, isEditing}: AddressProps) { {translate('common.noPO')} ; /** Plaid SDK current event */ - plaidCurrentEvent: PropTypes.string, - - /** ACH data for the withdrawal account actively being set up */ - reimbursementAccount: ReimbursementAccountProps.reimbursementAccountPropTypes, - - /** The draft values of the bank account being setup */ - reimbursementAccountDraft: reimbursementAccountDraftPropTypes, - - /** The token required to initialize the Onfido SDK */ - onfidoToken: PropTypes.string, - - /** Policy values needed in the component */ - policy: PropTypes.shape({ - name: PropTypes.string, - }), + plaidCurrentEvent: OnyxEntry; /** Indicated whether the app is loading */ - isLoadingApp: PropTypes.bool, + isLoadingApp: OnyxEntry; /** Holds information about the users account that is logging in */ - account: PropTypes.shape({ - /** Whether a sign on form is loading (being submitted) */ - isLoading: PropTypes.bool, - }), + account: OnyxEntry; /** Current session for the user */ - session: PropTypes.shape({ - /** User login */ - email: PropTypes.string, - }), - - /** Route object from navigation */ - route: PropTypes.shape({ - /** Params that are passed into the route */ - params: PropTypes.shape({ - /** A step to navigate to if we need to drop the user into a specific point in the flow */ - stepToOpen: PropTypes.string, - policyID: PropTypes.string, - }), - }), -}; + session: OnyxEntry; -const defaultProps = { - reimbursementAccount: ReimbursementAccountProps.reimbursementAccountDefaultProps, - reimbursementAccountDraft: {}, - onfidoToken: '', - policy: {}, - plaidLinkToken: '', - plaidCurrentEvent: '', - isLoadingApp: false, - account: {}, - session: { - email: null, - }, - route: { - params: { - stepToOpen: '', - policyID: '', - }, - }, + /** ACH data for the withdrawal account actively being set up */ + reimbursementAccount: OnyxEntry; + + /** The token required to initialize the Onfido SDK */ + onfidoToken: OnyxEntry; }; +type ReimbursementAccountPageProps = WithPolicyOnyxProps & + ReimbursementAccountOnyxProps & + StackScreenProps; + const ROUTE_NAMES = { COMPANY: 'company', PERSONAL_INFORMATION: 'personal-information', @@ -116,11 +83,9 @@ const ROUTE_NAMES = { /** * We can pass stepToOpen in the URL to force which step to show. * Mainly needed when user finished the flow in verifying state, and Ops ask them to modify some fields from a specific step. - * @param {Object} route - * @returns {String} */ -function getStepToOpenFromRouteParams(route) { - switch (lodashGet(route, ['params', 'stepToOpen'], '')) { +function getStepToOpenFromRouteParams(route: RouteProp): TBankAccountStep | '' { + switch (route.params.stepToOpen) { case ROUTE_NAMES.NEW: return CONST.BANK_ACCOUNT.STEP.BANK_ACCOUNT; case ROUTE_NAMES.COMPANY: @@ -140,11 +105,7 @@ function getStepToOpenFromRouteParams(route) { } } -/** - * @param {String} currentStep - * @returns {String} - */ -function getRouteForCurrentStep(currentStep) { +function getRouteForCurrentStep(currentStep: TBankAccountStep): ValueOf { switch (currentStep) { case CONST.BANK_ACCOUNT.STEP.COMPANY: return ROUTE_NAMES.COMPANY; @@ -164,7 +125,17 @@ function getRouteForCurrentStep(currentStep) { } } -function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, policy, account, isLoadingApp, session, plaidLinkToken, plaidCurrentEvent, reimbursementAccountDraft}) { +function ReimbursementAccountPage({ + reimbursementAccount, + route, + onfidoToken = '', + policy, + account, + isLoadingApp = false, + session, + plaidLinkToken = '', + plaidCurrentEvent = '', +}: ReimbursementAccountPageProps) { /** The SetupWithdrawalAccount flow allows us to continue the flow from various points depending on where the user left off. This view will refer to the achData as the single source of truth to determine which route to @@ -172,26 +143,18 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol mounts which will set the achData.currentStep after the account data is fetched and overwrite the logical next step. */ - const achData = lodashGet(reimbursementAccount, 'achData', {}); + const achData = reimbursementAccount?.achData; - /** - * @param {Array} fieldNames - * - * @returns {Object} - */ - function getBankAccountFields(fieldNames) { + function getBankAccountFields(fieldNames: T[]): Pick { return { - ..._.pick(lodashGet(reimbursementAccount, 'achData'), ...fieldNames), + ...lodashPick(reimbursementAccount?.achData, ...fieldNames), }; } /** * Returns selected bank account fields based on field names provided. - * - * @param {string} step - * @returns {Array} */ - function getFieldsForStep(step) { + function getFieldsForStep(step: TBankAccountStep): InputID[] { switch (step) { case CONST.BANK_ACCOUNT.STEP.BANK_ACCOUNT: return ['routingNumber', 'accountNumber', 'bankName', 'plaidAccountID', 'plaidAccessToken', 'isSavings']; @@ -218,21 +181,20 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol /** * Returns true if a VBBA exists in any state other than OPEN or LOCKED - * @returns {Boolean} */ - function hasInProgressVBBA() { - return achData.bankAccountID && achData.state !== BankAccount.STATE.OPEN && achData.state !== BankAccount.STATE.LOCKED; + function hasInProgressVBBA(): boolean { + return !!achData?.bankAccountID && achData?.state !== BankAccount.STATE.OPEN && achData?.state !== BankAccount.STATE.LOCKED; } /* * Calculates the state used to show the "Continue with setup" view. If a bank account setup is already in progress and * no specific further step was passed in the url we'll show the workspace bank account reset modal if the user wishes to start over */ - function getShouldShowContinueSetupButtonInitialValue() { + function getShouldShowContinueSetupButtonInitialValue(): boolean { if (!hasInProgressVBBA()) { // Since there is no VBBA in progress, we won't need to show the component ContinueBankAccountSetup return false; } - return achData.state === BankAccount.STATE.PENDING || _.contains([CONST.BANK_ACCOUNT.STEP.BANK_ACCOUNT, ''], getStepToOpenFromRouteParams(route)); + return achData?.state === BankAccount.STATE.PENDING || [CONST.BANK_ACCOUNT.STEP.BANK_ACCOUNT, ''].includes(getStepToOpenFromRouteParams(route)); } /** @@ -244,14 +206,15 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol which acts similarly to `componentDidUpdate` when the `reimbursementAccount` dependency changes. */ const [hasACHDataBeenLoaded, setHasACHDataBeenLoaded] = useState( - reimbursementAccount !== ReimbursementAccountProps.reimbursementAccountDefaultProps && _.has(reimbursementAccount, 'achData.currentStep'), + reimbursementAccount !== ReimbursementAccountProps.reimbursementAccountDefaultProps && reimbursementAccount?.achData && 'currentStep' in reimbursementAccount.achData, ); const [shouldShowContinueSetupButton, setShouldShowContinueSetupButton] = useState(hasACHDataBeenLoaded ? getShouldShowContinueSetupButtonInitialValue() : false); - const currentStep = achData.currentStep || CONST.BANK_ACCOUNT.STEP.BANK_ACCOUNT; - const policyName = lodashGet(policy, 'name', ''); - const policyID = lodashGet(route.params, 'policyID', ''); + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + const currentStep = achData?.currentStep || CONST.BANK_ACCOUNT.STEP.BANK_ACCOUNT; + const policyName = policy?.name ?? ''; + const policyIDParam = route.params?.policyID ?? ''; const styles = useThemeStyles(); const {translate} = useLocalize(); const {isOffline} = useNetwork(); @@ -261,30 +224,27 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol /** * Retrieve verified business bank account currently being set up. - * @param {boolean} ignoreLocalCurrentStep Pass true if you want the last "updated" view (from db), not the last "viewed" view (from onyx). + * @param ignoreLocalCurrentStep Pass true if you want the last "updated" view (from db), not the last "viewed" view (from onyx). */ - function fetchData(ignoreLocalCurrentStep) { + function fetchData(ignoreLocalCurrentStep?: boolean) { // Show loader right away, as optimisticData might be set only later in case multiple calls are in the queue BankAccounts.setReimbursementAccountLoading(true); // We can specify a step to navigate to by using route params when the component mounts. // We want to use the same stepToOpen variable when the network state changes because we can be redirected to a different step when the account refreshes. const stepToOpen = getStepToOpenFromRouteParams(route); - const subStep = achData.subStep || ''; - const localCurrentStep = achData.currentStep || ''; - BankAccounts.openReimbursementAccountPage(stepToOpen, subStep, ignoreLocalCurrentStep ? '' : localCurrentStep, policyID); + const subStep = achData?.subStep ?? ''; + const localCurrentStep = achData?.currentStep ?? ''; + BankAccounts.openReimbursementAccountPage(stepToOpen, subStep, ignoreLocalCurrentStep ? '' : localCurrentStep, policyIDParam); } - useEffect( - () => { - fetchData(); - return () => { - BankAccounts.clearReimbursementAccount(); - }; - }, + useEffect(() => { + fetchData(); + return () => { + BankAccounts.clearReimbursementAccount(); + }; // eslint-disable-next-line react-hooks/exhaustive-deps - [], - ); // The empty dependency array ensures this runs only once after the component mounts. + }, []); // The empty dependency array ensures this runs only once after the component mounts. useEffect( () => { @@ -294,7 +254,7 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol } if (!hasACHDataBeenLoaded) { - if (reimbursementAccount !== ReimbursementAccountProps.reimbursementAccountDefaultProps && reimbursementAccount.isLoading === false) { + if (reimbursementAccount !== ReimbursementAccountProps.reimbursementAccountDefaultProps && reimbursementAccount?.isLoading === false) { setShouldShowContinueSetupButton(getShouldShowContinueSetupButtonInitialValue()); setHasACHDataBeenLoaded(true); } @@ -304,7 +264,7 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol if ( prevReimbursementAccount && prevReimbursementAccount.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE && - reimbursementAccount.pendingAction !== prevReimbursementAccount.pendingAction + reimbursementAccount?.pendingAction !== prevReimbursementAccount.pendingAction ) { setShouldShowContinueSetupButton(hasInProgressVBBA()); } @@ -316,7 +276,7 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol const currentStepRouteParam = getStepToOpenFromRouteParams(route); if (currentStepRouteParam === currentStep) { // If the user is connecting online with plaid, reset any bank account errors so we don't persist old data from a potential previous connection - if (currentStep === CONST.BANK_ACCOUNT.STEP.BANK_ACCOUNT && achData.subStep === CONST.BANK_ACCOUNT.SETUP_TYPE.PLAID) { + if (currentStep === CONST.BANK_ACCOUNT.STEP.BANK_ACCOUNT && achData?.subStep === CONST.BANK_ACCOUNT.SETUP_TYPE.PLAID) { BankAccounts.hideBankAccountErrors(); } @@ -325,7 +285,7 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol } // Update the data that is returned from back-end to draft value - const draftStep = reimbursementAccount.draftStep; + const draftStep = reimbursementAccount?.draftStep; if (draftStep) { BankAccounts.updateReimbursementAccountDraft(getBankAccountFields(getFieldsForStep(draftStep))); } @@ -337,9 +297,8 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol BankAccounts.hideBankAccountErrors(); } - // eslint-disable-next-line no-shadow - const policyID = lodashGet(route.params, 'policyID'); - const backTo = lodashGet(route.params, 'backTo'); + const policyID = route.params.policyID; + const backTo = route.params.backTo; Navigation.navigate(ROUTES.BANK_ACCOUNT_WITH_STEP_TO_OPEN.getRoute(getRouteForCurrentStep(currentStep), policyID, backTo)); }, @@ -347,24 +306,16 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol [isOffline, reimbursementAccount, route, hasACHDataBeenLoaded, shouldShowContinueSetupButton], ); - const continueFunction = () => { + const setManualStep = () => { BankAccounts.setBankAccountSubStep(CONST.BANK_ACCOUNT.SETUP_TYPE.MANUAL).then(() => { setShouldShowContinueSetupButton(false); }); fetchData(true); }; - /** - * @param {String} fieldName - * @param {String} defaultValue - * - * @returns {String} - */ - const getDefaultStateForField = (fieldName, defaultValue = '') => lodashGet(reimbursementAccount, ['achData', fieldName], defaultValue); - const goBack = () => { - const subStep = achData.subStep; - const shouldShowOnfido = onfidoToken && !achData.isOnfidoSetupComplete; + const subStep = achData?.subStep; + const shouldShowOnfido = onfidoToken && !achData?.isOnfidoSetupComplete; switch (currentStep) { case CONST.BANK_ACCOUNT.STEP.BANK_ACCOUNT: @@ -401,9 +352,9 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol break; case CONST.BANK_ACCOUNT.STEP.VALIDATION: - if (_.contains([BankAccount.STATE.VERIFYING, BankAccount.STATE.SETUP], achData.state)) { + if ([BankAccount.STATE.VERIFYING, BankAccount.STATE.SETUP].some((value) => value === achData?.state)) { BankAccounts.goToWithdrawalAccountSetupStep(CONST.BANK_ACCOUNT.STEP.ACH_CONTRACT); - } else if (!isOffline && achData.state === BankAccount.STATE.PENDING) { + } else if (!isOffline && achData?.state === BankAccount.STATE.PENDING) { setShouldShowContinueSetupButton(true); } else { Navigation.goBack(); @@ -415,19 +366,17 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol } }; - const isLoading = (isLoadingApp || account.isLoading || reimbursementAccount.isLoading) && (!plaidCurrentEvent || plaidCurrentEvent === CONST.BANK_ACCOUNT.PLAID.EVENTS_NAME.EXIT); + const isLoading = (!!isLoadingApp || !!account?.isLoading || reimbursementAccount?.isLoading) && (!plaidCurrentEvent || plaidCurrentEvent === CONST.BANK_ACCOUNT.PLAID.EVENTS_NAME.EXIT); + const shouldShowOfflineLoader = !( isOffline && - _.contains( - [ - CONST.BANK_ACCOUNT.STEP.BANK_ACCOUNT, - CONST.BANK_ACCOUNT.STEP.COMPANY, - CONST.BANK_ACCOUNT.STEP.REQUESTOR, - CONST.BANK_ACCOUNT.STEP.BENEFICIAL_OWNERS, - CONST.BANK_ACCOUNT.STEP.ACH_CONTRACT, - ], - currentStep, - ) + [ + CONST.BANK_ACCOUNT.STEP.BANK_ACCOUNT, + CONST.BANK_ACCOUNT.STEP.COMPANY, + CONST.BANK_ACCOUNT.STEP.REQUESTOR, + CONST.BANK_ACCOUNT.STEP.BENEFICIAL_OWNERS, + CONST.BANK_ACCOUNT.STEP.ACH_CONTRACT, + ].some((value) => value === currentStep) ); // Show loading indicator when page is first time being opened and props.reimbursementAccount yet to be loaded from the server @@ -437,23 +386,23 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol return ; } - if (!isLoading && (_.isEmpty(policy) || !PolicyUtils.isPolicyAdmin(policy))) { + if (!isLoading && (isEmptyObject(policy) || !PolicyUtils.isPolicyAdmin(policy))) { return ( ); } let errorText; - const userHasPhonePrimaryEmail = Str.endsWith(session.email, CONST.SMS.DOMAIN); - const throttledDate = lodashGet(reimbursementAccount, 'throttledDate', ''); - const hasUnsupportedCurrency = lodashGet(policy, 'outputCurrency', '') !== CONST.CURRENCY.USD; + const userHasPhonePrimaryEmail = Str.endsWith(session?.email ?? '', CONST.SMS.DOMAIN); + const throttledDate = reimbursementAccount?.throttledDate ?? ''; + const hasUnsupportedCurrency = (policy?.outputCurrency ?? '') !== CONST.CURRENCY.USD; if (userHasPhonePrimaryEmail) { errorText = translate('bankAccount.hasPhoneLoginError'); @@ -482,7 +431,7 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol return ( @@ -493,13 +442,11 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol return ( ); } @@ -509,7 +456,7 @@ function ReimbursementAccountPage({reimbursementAccount, route, onfidoToken, pol } if (currentStep === CONST.BANK_ACCOUNT.STEP.REQUESTOR) { - const shouldShowOnfido = onfidoToken && !achData.isOnfidoSetupComplete; + const shouldShowOnfido = onfidoToken && !achData?.isOnfidoSetupComplete; return ( ({ + // @ts-expect-error: ONYXKEYS.REIMBURSEMENT_ACCOUNT is conflicting with ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM reimbursementAccount: { key: ONYXKEYS.REIMBURSEMENT_ACCOUNT, }, - reimbursementAccountDraft: { - key: ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM_DRAFT, - }, session: { key: ONYXKEYS.SESSION, }, @@ -571,6 +514,5 @@ export default compose( account: { key: ONYXKEYS.ACCOUNT, }, - }), - withPolicy, -)(ReimbursementAccountPage); + })(ReimbursementAccountPage), +); diff --git a/src/pages/ReimbursementAccount/RequestorOnfidoStep.js b/src/pages/ReimbursementAccount/RequestorOnfidoStep.tsx similarity index 76% rename from src/pages/ReimbursementAccount/RequestorOnfidoStep.js rename to src/pages/ReimbursementAccount/RequestorOnfidoStep.tsx index fac405090de7..da111380d751 100644 --- a/src/pages/ReimbursementAccount/RequestorOnfidoStep.js +++ b/src/pages/ReimbursementAccount/RequestorOnfidoStep.tsx @@ -1,10 +1,10 @@ -import lodashGet from 'lodash/get'; -import PropTypes from 'prop-types'; import React from 'react'; +import type {OnyxEntry} from 'react-native-onyx'; import {withOnyx} from 'react-native-onyx'; import FullPageOfflineBlockingView from '@components/BlockingViews/FullPageOfflineBlockingView'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; import Onfido from '@components/Onfido'; +import type {OnfidoData} from '@components/Onfido/types'; import ScreenWrapper from '@components/ScreenWrapper'; import ScrollView from '@components/ScrollView'; import useLocalize from '@hooks/useLocalize'; @@ -13,38 +13,35 @@ import Growl from '@libs/Growl'; import * as BankAccounts from '@userActions/BankAccounts'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import * as ReimbursementAccountProps from './reimbursementAccountPropTypes'; - -const propTypes = { - /** The bank account currently in setup */ - reimbursementAccount: ReimbursementAccountProps.reimbursementAccountPropTypes.isRequired, - - /** Goes to the previous step */ - onBackButtonPress: PropTypes.func.isRequired, +import type {ReimbursementAccount} from '@src/types/onyx'; +type RequestorOnfidoStepOnyxProps = { /** The token required to initialize the Onfido SDK */ - onfidoToken: PropTypes.string, + onfidoToken: OnyxEntry; /** The application ID for our Onfido instance */ - onfidoApplicantID: PropTypes.string, + onfidoApplicantID: OnyxEntry; }; -const defaultProps = { - onfidoToken: null, - onfidoApplicantID: null, +type RequestorOnfidoStepProps = RequestorOnfidoStepOnyxProps & { + /** The bank account currently in setup */ + reimbursementAccount: ReimbursementAccount; + + /** Goes to the previous step */ + onBackButtonPress: () => void; }; const HEADER_STEP_COUNTER = {step: 3, total: 5}; const ONFIDO_ERROR_DISPLAY_DURATION = 10000; -function RequestorOnfidoStep({onBackButtonPress, reimbursementAccount, onfidoToken, onfidoApplicantID}) { +function RequestorOnfidoStep({onBackButtonPress, reimbursementAccount, onfidoToken, onfidoApplicantID}: RequestorOnfidoStepProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); - const submitOnfidoData = (onfidoData) => { - BankAccounts.verifyIdentityForBankAccount(lodashGet(reimbursementAccount, 'achData.bankAccountID', 0), { + const submitOnfidoData = (onfidoData: OnfidoData) => { + BankAccounts.verifyIdentityForBankAccount(reimbursementAccount.achData?.bankAccountID ?? 0, { ...onfidoData, - applicantID: onfidoApplicantID, + applicantID: onfidoApplicantID ?? '', }); BankAccounts.updateReimbursementAccountDraft({isOnfidoSetupComplete: true}); }; @@ -77,7 +74,7 @@ function RequestorOnfidoStep({onBackButtonPress, reimbursementAccount, onfidoTok ({ onfidoToken: { key: ONYXKEYS.ONFIDO_TOKEN, }, diff --git a/src/pages/ReimbursementAccount/RequestorStep.js b/src/pages/ReimbursementAccount/RequestorStep.tsx similarity index 56% rename from src/pages/ReimbursementAccount/RequestorStep.js rename to src/pages/ReimbursementAccount/RequestorStep.tsx index a8060cb1ae90..ef2901b1370a 100644 --- a/src/pages/ReimbursementAccount/RequestorStep.js +++ b/src/pages/ReimbursementAccount/RequestorStep.tsx @@ -1,17 +1,18 @@ -import PropTypes from 'prop-types'; -import React from 'react'; +import type {ForwardedRef} from 'react'; +import React, {forwardRef} from 'react'; +import type {View} from 'react-native'; import PersonalInfo from './PersonalInfo/PersonalInfo'; import VerifyIdentity from './VerifyIdentity/VerifyIdentity'; -const propTypes = { +type RequestorStepProps = { /** Goes to the previous step */ - onBackButtonPress: PropTypes.func.isRequired, + onBackButtonPress: () => void; /** If we should show Onfido flow */ - shouldShowOnfido: PropTypes.bool.isRequired, + shouldShowOnfido: boolean; }; -const RequestorStep = React.forwardRef(({shouldShowOnfido, onBackButtonPress}, ref) => { +function RequestorStep({shouldShowOnfido, onBackButtonPress}: RequestorStepProps, ref: ForwardedRef) { if (shouldShowOnfido) { return ; } @@ -22,9 +23,8 @@ const RequestorStep = React.forwardRef(({shouldShowOnfido, onBackButtonPress}, r onBackButtonPress={onBackButtonPress} /> ); -}); +} -RequestorStep.propTypes = propTypes; RequestorStep.displayName = 'RequestorStep'; -export default RequestorStep; +export default forwardRef(RequestorStep); diff --git a/src/pages/ReimbursementAccount/StepPropTypes.js b/src/pages/ReimbursementAccount/StepPropTypes.js deleted file mode 100644 index 04399230a1ab..000000000000 --- a/src/pages/ReimbursementAccount/StepPropTypes.js +++ /dev/null @@ -1,20 +0,0 @@ -import PropTypes from 'prop-types'; -import {withLocalizePropTypes} from '@components/withLocalize'; -import reimbursementAccountDraftPropTypes from './ReimbursementAccountDraftPropTypes'; -import * as ReimbursementAccountProps from './reimbursementAccountPropTypes'; - -export default { - /** The bank account currently in setup */ - reimbursementAccount: ReimbursementAccountProps.reimbursementAccountPropTypes.isRequired, - - /** The draft values of the bank account being setup */ - reimbursementAccountDraft: reimbursementAccountDraftPropTypes.isRequired, - - /** Goes to the previous step */ - onBackButtonPress: PropTypes.func.isRequired, - - /** Get a field value from Onyx reimbursementAccountDraft or reimbursementAccount */ - getDefaultStateForField: PropTypes.func.isRequired, - - ...withLocalizePropTypes, -}; diff --git a/src/pages/ReimbursementAccount/utils/getInitialSubstepForPersonalInfo.ts b/src/pages/ReimbursementAccount/utils/getInitialSubstepForPersonalInfo.ts index 2b30c6533977..73cfff9e5980 100644 --- a/src/pages/ReimbursementAccount/utils/getInitialSubstepForPersonalInfo.ts +++ b/src/pages/ReimbursementAccount/utils/getInitialSubstepForPersonalInfo.ts @@ -7,7 +7,7 @@ const personalInfoKeys = INPUT_IDS.PERSONAL_INFO_STEP; * Returns the initial substep for the Personal Info step based on already existing data */ function getInitialSubstepForPersonalInfo(data: RequestorStepProps): number { - if (data[personalInfoKeys.FIRST_NAME] === '' && data[personalInfoKeys.LAST_NAME] === '') { + if (data[personalInfoKeys.FIRST_NAME] === '' || data[personalInfoKeys.LAST_NAME] === '') { return 0; } diff --git a/src/pages/TeachersUnite/SaveTheWorldPage.tsx b/src/pages/TeachersUnite/SaveTheWorldPage.tsx index 5a6ce4e8f3e9..cc414315e725 100644 --- a/src/pages/TeachersUnite/SaveTheWorldPage.tsx +++ b/src/pages/TeachersUnite/SaveTheWorldPage.tsx @@ -1,49 +1,87 @@ -import React from 'react'; +import React, {useMemo} from 'react'; import {View} from 'react-native'; -import IllustratedHeaderPageLayout from '@components/IllustratedHeaderPageLayout'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import * as Illustrations from '@components/Icon/Illustrations'; import LottieAnimations from '@components/LottieAnimations'; -import MenuItem from '@components/MenuItem'; -import Text from '@components/Text'; +import MenuItemList from '@components/MenuItemList'; +import ScreenWrapper from '@components/ScreenWrapper'; +import ScrollView from '@components/ScrollView'; +import Section from '@components/Section'; import useLocalize from '@hooks/useLocalize'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; +import useWaitForNavigation from '@hooks/useWaitForNavigation'; +import useWindowDimensions from '@hooks/useWindowDimensions'; import Navigation from '@libs/Navigation/Navigation'; +import type {TranslationPaths} from '@src/languages/types'; import ROUTES from '@src/ROUTES'; import SCREENS from '@src/SCREENS'; function SaveTheWorldPage() { - const theme = useTheme(); const styles = useThemeStyles(); const {translate} = useLocalize(); + const waitForNavigate = useWaitForNavigation(); + const {isSmallScreenWidth} = useWindowDimensions(); + const theme = useTheme(); + + const menuItems = useMemo(() => { + const baseMenuItems = [ + { + translationKey: 'teachersUnitePage.iKnowATeacher', + action: waitForNavigate(() => Navigation.navigate(ROUTES.I_KNOW_A_TEACHER)), + }, + { + translationKey: 'teachersUnitePage.iAmATeacher', + action: waitForNavigate(() => Navigation.navigate(ROUTES.I_AM_A_TEACHER)), + }, + ]; + + return baseMenuItems.map((item) => ({ + key: item.translationKey, + title: translate(item.translationKey as TranslationPaths), + onPress: item.action, + shouldShowRightIcon: true, + link: '', + wrapperStyle: [styles.sectionMenuItemTopDescription], + })); + }, [translate, waitForNavigate, styles]); return ( - - - {translate('teachersUnitePage.teachersUnite')} - {translate('teachersUnitePage.joinExpensifyOrg')} - - - Navigation.navigate(ROUTES.I_KNOW_A_TEACHER)} - /> - - Navigation.navigate(ROUTES.I_AM_A_TEACHER)} + Navigation.goBack()} + icon={Illustrations.TeachersUnite} /> - + + +
+ +
+
+
+ ); } -SaveTheWorldPage.displayName = 'SaveTheWorldPage'; +SaveTheWorldPage.displayName = 'SettingSecurityPage'; + export default SaveTheWorldPage; diff --git a/src/pages/WorkspaceSwitcherPage.tsx b/src/pages/WorkspaceSwitcherPage.tsx index 6f077f764474..631d377e34cd 100644 --- a/src/pages/WorkspaceSwitcherPage.tsx +++ b/src/pages/WorkspaceSwitcherPage.tsx @@ -1,4 +1,4 @@ -import React, {useCallback, useEffect, useMemo, useState} from 'react'; +import React, {useCallback, useMemo, useState} from 'react'; import {View} from 'react-native'; import type {OnyxCollection} from 'react-native-onyx'; import {withOnyx} from 'react-native-onyx'; @@ -7,9 +7,10 @@ import Icon from '@components/Icon'; import * as Expensicons from '@components/Icon/Expensicons'; import {MagnifyingGlass} from '@components/Icon/Expensicons'; import OptionRow from '@components/OptionRow'; -import OptionsSelector from '@components/OptionsSelector'; import PressableWithFeedback from '@components/Pressable/PressableWithFeedback'; import ScreenWrapper from '@components/ScreenWrapper'; +import SelectionList from '@components/SelectionList'; +import UserListItem from '@components/SelectionList/UserListItem'; import Text from '@components/Text'; import Tooltip from '@components/Tooltip'; import useActiveWorkspace from '@hooks/useActiveWorkspace'; @@ -57,7 +58,6 @@ function WorkspaceSwitcherPage({policies}: WorkspaceSwitcherPageProps) { const theme = useTheme(); const styles = useThemeStyles(); const {isOffline} = useNetwork(); - const [selectedOption, setSelectedOption] = useState(); const [searchTerm, setSearchTerm] = useState(''); const {inputCallbackRef} = useAutoFocusInput(); const {translate} = useLocalize(); @@ -105,11 +105,6 @@ function WorkspaceSwitcherPage({policies}: WorkspaceSwitcherPageProps) { const {policyID} = option; - if (policyID) { - setSelectedOption(option); - } else { - setSelectedOption(undefined); - } setActiveWorkspaceID(policyID); Navigation.goBack(); if (policyID !== activeWorkspaceID) { @@ -141,8 +136,9 @@ function WorkspaceSwitcherPage({policies}: WorkspaceSwitcherPageProps) { boldStyle: hasUnreadData(policy?.id), keyForList: policy?.id, isPolicyAdmin: PolicyUtils.isPolicyAdmin(policy), + isSelected: policy?.id === activeWorkspaceID, })); - }, [policies, getIndicatorTypeForPolicy, hasUnreadData, isOffline]); + }, [policies, getIndicatorTypeForPolicy, hasUnreadData, isOffline, activeWorkspaceID]); const filteredAndSortedUserWorkspaces = useMemo( () => @@ -236,28 +232,20 @@ function WorkspaceSwitcherPage({policies}: WorkspaceSwitcherPageProps) {
{usersWorkspaces.length > 0 ? ( - = CONST.WORKSPACE_SWITCHER.MINIMUM_WORKSPACES_TO_SHOW_SEARCH} + textInputValue={searchTerm} onChangeText={setSearchTerm} - selectedOptions={selectedOption ? [selectedOption] : []} onSelectRow={selectPolicy} shouldPreventDefaultFocusOnSelectRow headerMessage={headerMessage} - highlightSelectedOptions - shouldShowOptions - autoFocus={false} - canSelectMultipleOptions={false} - shouldShowSubscript={false} - showTitleTooltip={false} - contentContainerStyles={[styles.pt0, styles.mt0]} - textIconLeft={MagnifyingGlass} - // Null is to avoid selecting unfocused option when Global selected, undefined is to focus selected workspace - initiallyFocusedOptionKey={!activeWorkspaceID ? null : undefined} + containerStyle={[styles.pt0, styles.mt0]} + textInputIconLeft={usersWorkspaces.length >= CONST.WORKSPACE_SWITCHER.MINIMUM_WORKSPACES_TO_SHOW_SEARCH ? MagnifyingGlass : undefined} + initiallyFocusedOptionKey={activeWorkspaceID} + textInputAutoFocus={false} /> ) : ( @@ -269,7 +257,6 @@ function WorkspaceSwitcherPage({policies}: WorkspaceSwitcherPageProps) { setSearchTerm, searchTerm, selectPolicy, - selectedOption, styles, theme.textSupporting, translate, @@ -281,14 +268,6 @@ function WorkspaceSwitcherPage({policies}: WorkspaceSwitcherPageProps) { ], ); - useEffect(() => { - if (!activeWorkspaceID) { - return; - } - const optionToSet = usersWorkspaces.find((option) => option.policyID === activeWorkspaceID); - setSelectedOption(optionToSet); - }, [activeWorkspaceID, usersWorkspaces]); - return ( { if (closePopover) { hideContextMenu(false, () => { - ReportActionComposeFocusManager.focus(); + InteractionManager.runAfterInteractions(() => { + // Normally the focus callback of the main composer doesn't focus when willBlurTextInputOnTapOutside + // is false, so we need to pass true here to override this condition. + ReportActionComposeFocusManager.focus(true); + }); Report.navigateToAndOpenChildReport(reportAction?.childReportID ?? '0', reportAction, reportID); }); return; @@ -374,7 +379,7 @@ const ContextMenuActions: ContextMenuAction[] = [ const logMessage = ReportActionsUtils.getMemberChangeMessageFragment(reportAction).html ?? ''; setClipboardMessage(logMessage); } else if (ReportActionsUtils.isReimbursementQueuedAction(reportAction)) { - Clipboard.setString(ReportUtils.getReimbursementQueuedActionMessage(reportAction, ReportUtils.getReport(reportID) as OnyxEntry, false)); + Clipboard.setString(ReportUtils.getReimbursementQueuedActionMessage(reportAction, ReportUtils.getReport(reportID), false)); } else if (ReportActionsUtils.isActionableMentionWhisper(reportAction)) { const mentionWhisperMessage = ReportActionsUtils.getActionableMentionWhisperMessage(reportAction); setClipboardMessage(mentionWhisperMessage); diff --git a/src/pages/home/report/ContextMenu/ReportActionContextMenu.ts b/src/pages/home/report/ContextMenu/ReportActionContextMenu.ts index 04b4d5cc1850..f984e88b85b2 100644 --- a/src/pages/home/report/ContextMenu/ReportActionContextMenu.ts +++ b/src/pages/home/report/ContextMenu/ReportActionContextMenu.ts @@ -1,7 +1,7 @@ import React from 'react'; import type {RefObject} from 'react'; // eslint-disable-next-line no-restricted-imports -import type {GestureResponderEvent, Text as RNText, View} from 'react-native'; +import type {GestureResponderEvent, Text as RNText, TextInput, View} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; import type {ValueOf} from 'type-fest'; import type CONST from '@src/CONST'; @@ -16,7 +16,7 @@ type OnCancel = () => void; type ContextMenuType = ValueOf; -type ContextMenuAnchor = View | RNText | HTMLDivElement | null | undefined; +type ContextMenuAnchor = View | RNText | TextInput | HTMLDivElement | null | undefined; type ShowContextMenu = ( type: ContextMenuType, diff --git a/src/pages/home/report/ReportActionCompose/ComposerWithSuggestions/ComposerWithSuggestions.tsx b/src/pages/home/report/ReportActionCompose/ComposerWithSuggestions/ComposerWithSuggestions.tsx index bfcef66e7c54..f8147dfda81d 100644 --- a/src/pages/home/report/ReportActionCompose/ComposerWithSuggestions/ComposerWithSuggestions.tsx +++ b/src/pages/home/report/ReportActionCompose/ComposerWithSuggestions/ComposerWithSuggestions.tsx @@ -591,8 +591,8 @@ function ComposerWithSuggestions( const setUpComposeFocusManager = useCallback(() => { // This callback is used in the contextMenuActions to manage giving focus back to the compose input. - ReportActionComposeFocusManager.onComposerFocus(() => { - if (!willBlurTextInputOnTapOutside || !isFocused) { + ReportActionComposeFocusManager.onComposerFocus((shouldFocusForNonBlurInputOnTapOutside = false) => { + if ((!willBlurTextInputOnTapOutside && !shouldFocusForNonBlurInputOnTapOutside) || !isFocused) { return; } diff --git a/src/pages/home/report/ReportActionItem.tsx b/src/pages/home/report/ReportActionItem.tsx index eeeb5b95273c..4377ff7e55b1 100644 --- a/src/pages/home/report/ReportActionItem.tsx +++ b/src/pages/home/report/ReportActionItem.tsx @@ -187,7 +187,7 @@ function ReportActionItem({ const reactionListRef = useContext(ReactionListContext); const {updateHiddenAttachments} = useContext(ReportAttachmentsContext); const textInputRef = useRef(); - const popoverAnchorRef = useRef(null); + const popoverAnchorRef = useRef>(null); const downloadedPreviews = useRef([]); const prevDraftMessage = usePrevious(draftMessage); const originalReportID = ReportUtils.getOriginalReportID(report.reportID, action); @@ -277,7 +277,7 @@ function ReportActionItem({ // Hide the message if it is being moderated for a higher offense, or is hidden by a moderator // Removed messages should not be shown anyway and should not need this flow - const latestDecision = action.message?.[0].moderationDecision?.decision ?? ''; + const latestDecision = action.message?.[0]?.moderationDecision?.decision ?? ''; useEffect(() => { if (action.actionName !== CONST.REPORT.ACTIONS.TYPE.ADDCOMMENT) { return; @@ -366,9 +366,10 @@ function ReportActionItem({ anchor: popoverAnchorRef.current, report, action, + transactionThreadReport, checkIfContextMenuActive: toggleContextMenuFromActiveReportAction, }), - [report, action, toggleContextMenuFromActiveReportAction], + [report, action, toggleContextMenuFromActiveReportAction, transactionThreadReport], ); const actionableItemButtons: ActionableItem[] = useMemo(() => { @@ -532,7 +533,7 @@ function ReportActionItem({ } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.HOLD) { children = ; } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.HOLDCOMMENT) { - children = ; + children = ; } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.UNHOLD) { children = ; } else { diff --git a/src/pages/home/report/ReportActionItemCreated.tsx b/src/pages/home/report/ReportActionItemCreated.tsx index 899575a9aa3a..ede654adf3ce 100644 --- a/src/pages/home/report/ReportActionItemCreated.tsx +++ b/src/pages/home/report/ReportActionItemCreated.tsx @@ -117,6 +117,7 @@ export default withOnyx${translate('parentReportAction.deletedMessage')}`} />; } @@ -115,7 +115,7 @@ function ReportActionItemFragment({ return ( @@ -141,7 +141,7 @@ function ReportActionItemFragment({ numberOfLines={isSingleLine ? 1 : undefined} style={[styles.chatItemMessage, styles.colorMuted]} > - {isFragmentContainingDisplayName ? convertToLTR(fragment.text) : fragment.text} + {isFragmentContainingDisplayName ? convertToLTR(fragment?.text ?? '') : fragment?.text} ); } @@ -152,7 +152,7 @@ function ReportActionItemFragment({ numberOfLines={isSingleLine ? 1 : undefined} style={[styles.chatItemMessage]} > - {isFragmentContainingDisplayName ? convertToLTR(fragment.text) : fragment.text} + {isFragmentContainingDisplayName ? convertToLTR(fragment?.text ?? '') : fragment?.text} ); } @@ -167,7 +167,7 @@ function ReportActionItemFragment({ numberOfLines={isSingleLine ? 1 : undefined} style={[styles.chatItemMessageHeaderSender, isSingleLine ? styles.pre : styles.preWrap]} > - {fragment.text} + {fragment?.text} ); diff --git a/src/pages/home/report/ReportActionItemMessage.tsx b/src/pages/home/report/ReportActionItemMessage.tsx index eec0b825e454..b2f120f16ef4 100644 --- a/src/pages/home/report/ReportActionItemMessage.tsx +++ b/src/pages/home/report/ReportActionItemMessage.tsx @@ -100,7 +100,7 @@ function ReportActionItemMessage({action, transaction, displayAsGroup, reportID, // to decide if the fragment should be from left to right for RTL display names e.g. Arabic for proper // formatting. isFragmentContainingDisplayName={index === 0} - moderationDecision={action.message?.[0].moderationDecision?.decision} + moderationDecision={action.message?.[0]?.moderationDecision?.decision} /> )); diff --git a/src/pages/home/report/ReportActionItemMessageEdit.tsx b/src/pages/home/report/ReportActionItemMessageEdit.tsx index bd5195f2410f..fc3c92434fc4 100644 --- a/src/pages/home/report/ReportActionItemMessageEdit.tsx +++ b/src/pages/home/report/ReportActionItemMessageEdit.tsx @@ -118,7 +118,7 @@ function ReportActionItemMessageEdit( useEffect(() => { const parser = new ExpensiMark(); - const originalMessage = parser.htmlToMarkdown(action.message?.[0].html ?? ''); + const originalMessage = parser.htmlToMarkdown(action.message?.[0]?.html ?? ''); if ( ReportActionsUtils.isDeletedAction(action) || Boolean(action.message && draftMessage === originalMessage) || diff --git a/src/pages/home/report/ReportActionItemSingle.tsx b/src/pages/home/report/ReportActionItemSingle.tsx index 696cd7a7d850..23d97680e9d3 100644 --- a/src/pages/home/report/ReportActionItemSingle.tsx +++ b/src/pages/home/report/ReportActionItemSingle.tsx @@ -244,7 +244,7 @@ function ReportActionItemSingle({ delegateAccountID={action?.delegateAccountID} isSingleLine actorIcon={icon} - moderationDecision={action?.message?.[0].moderationDecision?.decision} + moderationDecision={action?.message?.[0]?.moderationDecision?.decision} /> ))} diff --git a/src/pages/home/report/ReportActionsView.tsx b/src/pages/home/report/ReportActionsView.tsx index b8c683a803db..e3dc873a3283 100755 --- a/src/pages/home/report/ReportActionsView.tsx +++ b/src/pages/home/report/ReportActionsView.tsx @@ -145,10 +145,10 @@ function ReportActionsView({ // Filter out the created action from the transaction thread report actions, since we already have the parent report's created action in `reportActions` const filteredTransactionThreadReportActions = transactionThreadReportActions?.filter((action) => action.actionName !== CONST.REPORT.ACTIONS.TYPE.CREATED); - // Filter out request and send money request actions because we don't want to show any preview actions for one transaction reports + // Filter out the money request actions because we don't want to show any preview actions for one-transaction reports const filteredReportActions = [...allReportActions, ...filteredTransactionThreadReportActions].filter((action) => { const actionType = (action as OnyxTypes.OriginalMessageIOU).originalMessage?.type ?? ''; - return actionType !== CONST.IOU.REPORT_ACTION_TYPE.CREATE && !ReportActionsUtils.isSentMoneyReportAction(action); + return actionType !== CONST.IOU.REPORT_ACTION_TYPE.CREATE && actionType !== CONST.IOU.REPORT_ACTION_TYPE.TRACK && !ReportActionsUtils.isSentMoneyReportAction(action); }); return ReportActionsUtils.getSortedReportActions(filteredReportActions, true); }, [allReportActions, transactionThreadReportActions]); @@ -377,6 +377,7 @@ function ReportActionsView({ didLayout.current = true; // Capture the init measurement only once not per each chat switch as the value gets overwritten if (!ReportActionsView.initMeasured) { + Performance.markEnd(CONST.TIMING.OPEN_REPORT); Performance.markEnd(CONST.TIMING.REPORT_INITIAL_RENDER); Timing.end(CONST.TIMING.REPORT_INITIAL_RENDER); ReportActionsView.initMeasured = true; diff --git a/src/pages/home/report/comment/TextCommentFragment.tsx b/src/pages/home/report/comment/TextCommentFragment.tsx index 7ff413f554b8..cf1ab6f8aa19 100644 --- a/src/pages/home/report/comment/TextCommentFragment.tsx +++ b/src/pages/home/report/comment/TextCommentFragment.tsx @@ -23,7 +23,7 @@ type TextCommentFragmentProps = { source: OriginalMessageSource; /** The message fragment needing to be displayed */ - fragment: Message; + fragment: Message | undefined; /** Should this message fragment be styled as deleted? */ styleAsDeleted: boolean; @@ -44,16 +44,16 @@ type TextCommentFragmentProps = { function TextCommentFragment({fragment, styleAsDeleted, styleAsMuted = false, source, style, displayAsGroup, iouMessage = ''}: TextCommentFragmentProps) { const theme = useTheme(); const styles = useThemeStyles(); - const {html = '', text} = fragment; + const {html = '', text} = fragment ?? {}; const {translate} = useLocalize(); const {isSmallScreenWidth} = useWindowDimensions(); // If the only difference between fragment.text and fragment.html is
tags and emoji tag // on native, we render it as text, not as html // on other device, only render it as text if the only difference is
tag - const containsOnlyEmojis = EmojiUtils.containsOnlyEmojis(text); - if (!shouldRenderAsText(html, text) && !(containsOnlyEmojis && styleAsDeleted)) { - const editedTag = fragment.isEdited ? `` : ''; + const containsOnlyEmojis = EmojiUtils.containsOnlyEmojis(text ?? ''); + if (!shouldRenderAsText(html, text ?? '') && !(containsOnlyEmojis && styleAsDeleted)) { + const editedTag = fragment?.isEdited ? `` : ''; const htmlWithDeletedTag = styleAsDeleted ? `${html}` : html; const htmlContent = containsOnlyEmojis ? Str.replaceAll(htmlWithDeletedTag, '', '') : htmlWithDeletedTag; @@ -89,9 +89,9 @@ function TextCommentFragment({fragment, styleAsDeleted, styleAsMuted = false, so !DeviceCapabilities.canUseTouchScreen() || !isSmallScreenWidth ? styles.userSelectText : styles.userSelectNone, ]} > - {convertToLTR(message)} + {convertToLTR(message ?? '')} - {fragment.isEdited && ( + {fragment?.isEdited && ( <> diff --git a/src/pages/home/sidebar/SidebarLinks.js b/src/pages/home/sidebar/SidebarLinks.tsx similarity index 77% rename from src/pages/home/sidebar/SidebarLinks.js rename to src/pages/home/sidebar/SidebarLinks.tsx index 3716d6ef2f4e..27f328be726a 100644 --- a/src/pages/home/sidebar/SidebarLinks.js +++ b/src/pages/home/sidebar/SidebarLinks.tsx @@ -1,8 +1,9 @@ /* eslint-disable rulesdir/onyx-props-must-have-default */ -import PropTypes from 'prop-types'; import React, {memo, useCallback, useEffect, useMemo, useRef} from 'react'; import {InteractionManager, StyleSheet, View} from 'react-native'; -import _ from 'underscore'; +import type {OnyxEntry} from 'react-native-onyx'; +import type {EdgeInsets} from 'react-native-safe-area-context'; +import type {ValueOf} from 'type-fest'; import LHNOptionsList from '@components/LHNOptionsList/LHNOptionsList'; import OptionsListSkeletonView from '@components/OptionsListSkeletonView'; import useLocalize from '@hooks/useLocalize'; @@ -13,37 +14,40 @@ import KeyboardShortcut from '@libs/KeyboardShortcut'; import Navigation from '@libs/Navigation/Navigation'; import onyxSubscribe from '@libs/onyxSubscribe'; import * as ReportActionContextMenu from '@pages/home/report/ContextMenu/ReportActionContextMenu'; -import safeAreaInsetPropTypes from '@pages/safeAreaInsetPropTypes'; import * as App from '@userActions/App'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; +import type {Modal, Report} from '@src/types/onyx'; -const basePropTypes = { +type SidebarLinksProps = { /** Toggles the navigation menu open and closed */ - onLinkClick: PropTypes.func.isRequired, + onLinkClick: () => void; /** Safe area insets required for mobile devices margins */ - insets: safeAreaInsetPropTypes.isRequired, -}; + insets: EdgeInsets; -const propTypes = { - ...basePropTypes, + /** List of options to display */ + optionListItems: string[]; - optionListItems: PropTypes.arrayOf(PropTypes.string).isRequired, + /** Whether the reports are loading. When false it means they are ready to be used. */ + isLoading: OnyxEntry; - isLoading: PropTypes.bool.isRequired, + /** The chat priority mode */ + priorityMode?: OnyxEntry>; - // eslint-disable-next-line react/require-default-props - priorityMode: PropTypes.oneOf(_.values(CONST.PRIORITY_MODE)), + /** Method to change currently active report */ + isActiveReport: (reportID: string) => boolean; - isActiveReport: PropTypes.func.isRequired, + /** ID of currently active workspace */ + // eslint-disable-next-line react/no-unused-prop-types -- its used in withOnyx + activeWorkspaceID: string | undefined; }; -function SidebarLinks({onLinkClick, insets, optionListItems, isLoading, priorityMode = CONST.PRIORITY_MODE.DEFAULT, isActiveReport, isCreateMenuOpen}) { +function SidebarLinks({onLinkClick, insets, optionListItems, isLoading, priorityMode = CONST.PRIORITY_MODE.DEFAULT, isActiveReport}: SidebarLinksProps) { const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); - const modal = useRef({}); + const modal = useRef({}); const {updateLocale} = useLocalize(); const {isSmallScreenWidth} = useWindowDimensions(); @@ -61,7 +65,7 @@ function SidebarLinks({onLinkClick, insets, optionListItems, isLoading, priority const unsubscribeOnyxModal = onyxSubscribe({ key: ONYXKEYS.MODAL, callback: (modalArg) => { - if (_.isNull(modalArg) || typeof modalArg !== 'object') { + if (modalArg === null || typeof modalArg !== 'object') { return; } modal.current = modalArg; @@ -99,24 +103,21 @@ function SidebarLinks({onLinkClick, insets, optionListItems, isLoading, priority /** * Show Report page with selected report id - * - * @param {Object} option - * @param {String} option.reportID */ const showReportPage = useCallback( - (option) => { + (option: Report) => { // Prevent opening Report page when clicking LHN row quickly after clicking FAB icon // or when clicking the active LHN row on large screens // or when continuously clicking different LHNs, only apply to small screen // since getTopmostReportId always returns on other devices const reportActionID = Navigation.getTopmostReportActionId(); - if (isCreateMenuOpen || (option.reportID === Navigation.getTopmostReportId() && !reportActionID) || (isSmallScreenWidth && isActiveReport(option.reportID) && !reportActionID)) { + if ((option.reportID === Navigation.getTopmostReportId() && !reportActionID) || (isSmallScreenWidth && isActiveReport(option.reportID) && !reportActionID)) { return; } Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(option.reportID)); onLinkClick(); }, - [isCreateMenuOpen, isSmallScreenWidth, isActiveReport, onLinkClick], + [isSmallScreenWidth, isActiveReport, onLinkClick], ); const viewMode = priorityMode === CONST.PRIORITY_MODE.GSD ? CONST.OPTION_MODE.COMPACT : CONST.OPTION_MODE.DEFAULT; @@ -136,7 +137,7 @@ function SidebarLinks({onLinkClick, insets, optionListItems, isLoading, priority optionMode={viewMode} onFirstItemRendered={App.setSidebarLoaded} /> - {isLoading && optionListItems.length === 0 && ( + {isLoading && optionListItems?.length === 0 && ( @@ -146,8 +147,6 @@ function SidebarLinks({onLinkClick, insets, optionListItems, isLoading, priority ); } -SidebarLinks.propTypes = propTypes; SidebarLinks.displayName = 'SidebarLinks'; export default memo(SidebarLinks); -export {basePropTypes}; diff --git a/src/pages/home/sidebar/SidebarLinksData.js b/src/pages/home/sidebar/SidebarLinksData.tsx similarity index 52% rename from src/pages/home/sidebar/SidebarLinksData.js rename to src/pages/home/sidebar/SidebarLinksData.tsx index 34af75308ac4..e56962a331a2 100644 --- a/src/pages/home/sidebar/SidebarLinksData.js +++ b/src/pages/home/sidebar/SidebarLinksData.tsx @@ -1,164 +1,120 @@ +import {useIsFocused} from '@react-navigation/native'; import {deepEqual} from 'fast-equals'; -import lodashGet from 'lodash/get'; -import lodashMap from 'lodash/map'; -import PropTypes from 'prop-types'; +import lodashIsEqual from 'lodash/isEqual'; import React, {memo, useCallback, useEffect, useMemo, useRef} from 'react'; import {View} from 'react-native'; +import type {OnyxCollection, OnyxEntry} from 'react-native-onyx'; import {withOnyx} from 'react-native-onyx'; -import _ from 'underscore'; -import networkPropTypes from '@components/networkPropTypes'; -import {withNetwork} from '@components/OnyxProvider'; +import type {EdgeInsets} from 'react-native-safe-area-context'; +import type {ValueOf} from 'type-fest'; +import type {CurrentReportIDContextValue} from '@components/withCurrentReportID'; import withCurrentReportID from '@components/withCurrentReportID'; -import withCurrentUserPersonalDetails, {withCurrentUserPersonalDetailsDefaultProps, withCurrentUserPersonalDetailsPropTypes} from '@components/withCurrentUserPersonalDetails'; -import withNavigationFocus from '@components/withNavigationFocus'; import useActiveWorkspace from '@hooks/useActiveWorkspace'; +import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useLocalize from '@hooks/useLocalize'; +import useNetwork from '@hooks/useNetwork'; import usePrevious from '@hooks/usePrevious'; import useThemeStyles from '@hooks/useThemeStyles'; -import compose from '@libs/compose'; import {getPolicyMembersByIdWithoutCurrentUser} from '@libs/PolicyUtils'; import * as ReportUtils from '@libs/ReportUtils'; import SidebarUtils from '@libs/SidebarUtils'; -import reportPropTypes from '@pages/reportPropTypes'; import * as Policy from '@userActions/Policy'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import SidebarLinks, {basePropTypes} from './SidebarLinks'; +import type * as OnyxTypes from '@src/types/onyx'; +import type {Message} from '@src/types/onyx/ReportAction'; +import SidebarLinks from './SidebarLinks'; -const propTypes = { - ...basePropTypes, +type ChatReportSelector = OnyxTypes.Report & {isUnreadWithMention: boolean}; +type PolicySelector = Pick; +type ReportActionsSelector = Array>; - /* Onyx Props */ +type SidebarLinksDataOnyxProps = { /** List of reports */ - chatReports: PropTypes.objectOf(reportPropTypes), - - /** All report actions for all reports */ - - /** Object of report actions for this report */ - allReportActions: PropTypes.objectOf( - PropTypes.arrayOf( - PropTypes.shape({ - error: PropTypes.string, - message: PropTypes.arrayOf( - PropTypes.shape({ - moderationDecision: PropTypes.shape({ - decision: PropTypes.string, - }), - }), - ), - }), - ), - ), + chatReports: OnyxCollection; /** Whether the reports are loading. When false it means they are ready to be used. */ - isLoadingApp: PropTypes.bool, + isLoadingApp: OnyxEntry; /** The chat priority mode */ - priorityMode: PropTypes.string, + priorityMode: OnyxEntry>; /** Beta features list */ - betas: PropTypes.arrayOf(PropTypes.string), + betas: OnyxEntry; - network: networkPropTypes.isRequired, + /** All report actions for all reports */ + allReportActions: OnyxCollection; /** The policies which the user has access to */ - // eslint-disable-next-line react/forbid-prop-types - policies: PropTypes.object, - - // eslint-disable-next-line react/forbid-prop-types - policyMembers: PropTypes.object, + policies: OnyxCollection; /** All of the transaction violations */ - transactionViolations: PropTypes.shape({ - violations: PropTypes.arrayOf( - PropTypes.shape({ - /** The transaction ID */ - transactionID: PropTypes.number, - - /** The transaction violation type */ - type: PropTypes.string, - - /** The transaction violation message */ - message: PropTypes.string, - - /** The transaction violation data */ - data: PropTypes.shape({ - /** The transaction violation data field */ - field: PropTypes.string, + transactionViolations: OnyxCollection; - /** The transaction violation data value */ - value: PropTypes.string, - }), - }), - ), - }), + /** All policy members */ + policyMembers: OnyxCollection; - reportsDrafts: PropTypes.objectOf(PropTypes.string), - - ...withCurrentUserPersonalDetailsPropTypes, + /** Drafts of reports */ + reportsDrafts: OnyxCollection; }; -const defaultProps = { - chatReports: {}, - isLoadingApp: true, - priorityMode: CONST.PRIORITY_MODE.DEFAULT, - betas: [], - policies: {}, - policyMembers: {}, - transactionViolations: {}, - allReportActions: {}, - reportsDrafts: {}, - ...withCurrentUserPersonalDetailsDefaultProps, -}; +type SidebarLinksDataProps = CurrentReportIDContextValue & + SidebarLinksDataOnyxProps & { + /** Toggles the navigation menu open and closed */ + onLinkClick: () => void; + + /** Safe area insets required for mobile devices margins */ + insets: EdgeInsets; + }; function SidebarLinksData({ - isFocused, allReportActions, betas, chatReports, currentReportID, insets, - isLoadingApp, + isLoadingApp = true, onLinkClick, policies, - priorityMode, - network, + priorityMode = CONST.PRIORITY_MODE.DEFAULT, policyMembers, transactionViolations, - currentUserPersonalDetails, reportsDrafts, -}) { +}: SidebarLinksDataProps) { + const {accountID} = useCurrentUserPersonalDetails(); + const network = useNetwork(); + const isFocused = useIsFocused(); const styles = useThemeStyles(); const {activeWorkspaceID} = useActiveWorkspace(); const {translate} = useLocalize(); const prevPriorityMode = usePrevious(priorityMode); - - const policyMemberAccountIDs = getPolicyMembersByIdWithoutCurrentUser(policyMembers, activeWorkspaceID, currentUserPersonalDetails.accountID); + const policyMemberAccountIDs = getPolicyMembersByIdWithoutCurrentUser(policyMembers, activeWorkspaceID, accountID); // eslint-disable-next-line react-hooks/exhaustive-deps - useEffect(() => Policy.openWorkspace(activeWorkspaceID, policyMemberAccountIDs), [activeWorkspaceID]); + useEffect(() => Policy.openWorkspace(activeWorkspaceID ?? '', policyMemberAccountIDs), [activeWorkspaceID]); - const reportIDsRef = useRef(null); + const reportIDsRef = useRef(null); const isLoading = isLoadingApp; - const optionItemsMemoized = useMemo( + const optionItemsMemoized: string[] = useMemo( () => SidebarUtils.getOrderedReportIDs( null, chatReports, betas, - policies, + policies as OnyxCollection, priorityMode, - allReportActions, + allReportActions as OnyxCollection, transactionViolations, activeWorkspaceID, policyMemberAccountIDs, - reportsDrafts, ), + // we need reports draft in deps array for reloading of list when reportDrafts will change + // eslint-disable-next-line react-hooks/exhaustive-deps [chatReports, betas, policies, priorityMode, allReportActions, transactionViolations, activeWorkspaceID, policyMemberAccountIDs, reportsDrafts], ); - const optionListItems = useMemo(() => { + const optionListItems: string[] | null = useMemo(() => { const reportIDs = optionItemsMemoized; if (deepEqual(reportIDsRef.current, reportIDs)) { @@ -171,38 +127,38 @@ function SidebarLinksData({ if (!isLoading || !reportIDsRef.current || network.isOffline || (reportIDsRef.current && prevPriorityMode !== priorityMode)) { reportIDsRef.current = reportIDs; } - return reportIDsRef.current || []; + return reportIDsRef.current ?? []; }, [optionItemsMemoized, priorityMode, isLoading, network.isOffline, prevPriorityMode]); - // We need to make sure the current report is in the list of reports, but we do not want // to have to re-generate the list every time the currentReportID changes. To do that // we first generate the list as if there was no current report, then here we check if // the current report is missing from the list, which should very rarely happen. In this // case we re-generate the list a 2nd time with the current report included. const optionListItemsWithCurrentReport = useMemo(() => { - if (currentReportID && !_.contains(optionListItems, currentReportID)) { + if (currentReportID && !optionListItems?.includes(currentReportID)) { return SidebarUtils.getOrderedReportIDs( currentReportID, - chatReports, + chatReports as OnyxCollection, betas, - policies, + policies as OnyxCollection, priorityMode, - allReportActions, + allReportActions as OnyxCollection, transactionViolations, activeWorkspaceID, policyMemberAccountIDs, ); } - return optionListItems; + return optionListItems ?? []; }, [currentReportID, optionListItems, chatReports, betas, policies, priorityMode, allReportActions, transactionViolations, activeWorkspaceID, policyMemberAccountIDs]); const currentReportIDRef = useRef(currentReportID); currentReportIDRef.current = currentReportID; - const isActiveReport = useCallback((reportID) => currentReportIDRef.current === reportID, []); + const isActiveReport = useCallback((reportID: string): boolean => currentReportIDRef.current === reportID, []); return ( @@ -210,10 +166,10 @@ function SidebarLinksData({ // Forwarded props: onLinkClick={onLinkClick} insets={insets} - priorityMode={priorityMode} + priorityMode={priorityMode ?? CONST.PRIORITY_MODE.DEFAULT} // Data props: isActiveReport={isActiveReport} - isLoading={isLoading} + isLoading={isLoading ?? false} optionListItems={optionListItemsWithCurrentReport} activeWorkspaceID={activeWorkspaceID} /> @@ -221,25 +177,21 @@ function SidebarLinksData({ ); } -SidebarLinksData.propTypes = propTypes; -SidebarLinksData.defaultProps = defaultProps; SidebarLinksData.displayName = 'SidebarLinksData'; /** * This function (and the few below it), narrow down the data from Onyx to just the properties that we want to trigger a re-render of the component. This helps minimize re-rendering * and makes the entire component more performant because it's not re-rendering when a bunch of properties change which aren't ever used in the UI. - * @param {Object} [report] - * @returns {Object|undefined} */ -const chatReportSelector = (report) => - report && { +const chatReportSelector = (report: OnyxEntry): ChatReportSelector => + (report && { reportID: report.reportID, participantAccountIDs: report.participantAccountIDs, isPinned: report.isPinned, isHidden: report.isHidden, notificationPreference: report.notificationPreference, errorFields: { - addWorkspaceRoom: report.errorFields && report.errorFields.addWorkspaceRoom, + addWorkspaceRoom: report.errorFields?.addWorkspaceRoom, }, lastMessageText: report.lastMessageText, lastVisibleActionCreated: report.lastVisibleActionCreated, @@ -268,88 +220,35 @@ const chatReportSelector = (report) => parentReportID: report.parentReportID, isDeletedParentAction: report.isDeletedParentAction, isUnreadWithMention: ReportUtils.isUnreadWithMention(report), - }; - -/** - * @param {Object} [reportActions] - * @returns {Object|undefined} - */ -const reportActionsSelector = (reportActions) => - reportActions && - lodashMap(reportActions, (reportAction) => { - const {reportActionID, parentReportActionID, actionName, errors = [], originalMessage} = reportAction; - const decision = lodashGet(reportAction, 'message[0].moderationDecision.decision'); - - return { - reportActionID, - parentReportActionID, - actionName, - errors, - message: [ - { - moderationDecision: {decision}, - }, - ], - originalMessage, - }; - }); - -/** - * @param {Object} [policy] - * @returns {Object|undefined} - */ -const policySelector = (policy) => - policy && { + }) as ChatReportSelector; + +const reportActionsSelector = (reportActions: OnyxEntry): ReportActionsSelector => + (reportActions && + Object.values(reportActions).map((reportAction) => { + const {reportActionID, actionName, errors = [], originalMessage} = reportAction; + const decision = reportAction.message?.[0]?.moderationDecision?.decision; + + return { + reportActionID, + actionName, + errors, + message: [ + { + moderationDecision: {decision}, + }, + ] as Message[], + originalMessage, + }; + })) as ReportActionsSelector; + +const policySelector = (policy: OnyxEntry): PolicySelector => + (policy && { type: policy.type, name: policy.name, avatar: policy.avatar, - }; + }) as PolicySelector; -export default compose( - withCurrentReportID, - withCurrentUserPersonalDetails, - withNavigationFocus, - withNetwork(), - withOnyx({ - chatReports: { - key: ONYXKEYS.COLLECTION.REPORT, - selector: chatReportSelector, - initialValue: {}, - }, - isLoadingApp: { - key: ONYXKEYS.IS_LOADING_APP, - }, - priorityMode: { - key: ONYXKEYS.NVP_PRIORITY_MODE, - initialValue: CONST.PRIORITY_MODE.DEFAULT, - }, - betas: { - key: ONYXKEYS.BETAS, - initialValue: [], - }, - allReportActions: { - key: ONYXKEYS.COLLECTION.REPORT_ACTIONS, - selector: reportActionsSelector, - initialValue: {}, - }, - policies: { - key: ONYXKEYS.COLLECTION.POLICY, - selector: policySelector, - initialValue: {}, - }, - policyMembers: { - key: ONYXKEYS.COLLECTION.POLICY_MEMBERS, - }, - transactionViolations: { - key: ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, - initialValue: {}, - }, - reportsDrafts: { - key: ONYXKEYS.COLLECTION.REPORT_DRAFT_COMMENT, - initialValue: {}, - }, - }), -)( +const SidebarLinkDataWithCurrentReportID = withCurrentReportID( /* While working on audit on the App Start App metric we noticed that by memoizing SidebarLinksData we can avoid 2 additional run of getOrderedReportIDs. With that we can reduce app start up time by ~2s on heavy account. @@ -358,19 +257,57 @@ export default compose( memo( SidebarLinksData, (prevProps, nextProps) => - _.isEqual(prevProps.chatReports, nextProps.chatReports) && - _.isEqual(prevProps.allReportActions, nextProps.allReportActions) && + lodashIsEqual(prevProps.chatReports, nextProps.chatReports) && + lodashIsEqual(prevProps.allReportActions, nextProps.allReportActions) && prevProps.isLoadingApp === nextProps.isLoadingApp && prevProps.priorityMode === nextProps.priorityMode && - _.isEqual(prevProps.betas, nextProps.betas) && - _.isEqual(prevProps.policies, nextProps.policies) && - prevProps.network.isOffline === nextProps.network.isOffline && - _.isEqual(prevProps.insets, nextProps.insets) && + lodashIsEqual(prevProps.betas, nextProps.betas) && + lodashIsEqual(prevProps.policies, nextProps.policies) && + lodashIsEqual(prevProps.insets, nextProps.insets) && prevProps.onLinkClick === nextProps.onLinkClick && - _.isEqual(prevProps.policyMembers, nextProps.policyMembers) && - _.isEqual(prevProps.transactionViolations, nextProps.transactionViolations) && - _.isEqual(prevProps.currentUserPersonalDetails, nextProps.currentUserPersonalDetails) && + lodashIsEqual(prevProps.policyMembers, nextProps.policyMembers) && + lodashIsEqual(prevProps.transactionViolations, nextProps.transactionViolations) && prevProps.currentReportID === nextProps.currentReportID && - _.isEqual(prevProps.reportsDrafts, nextProps.reportsDrafts), + lodashIsEqual(prevProps.reportsDrafts, nextProps.reportsDrafts), ), ); + +export default withOnyx, SidebarLinksDataOnyxProps>({ + chatReports: { + key: ONYXKEYS.COLLECTION.REPORT, + selector: chatReportSelector, + initialValue: {}, + }, + isLoadingApp: { + key: ONYXKEYS.IS_LOADING_APP, + }, + priorityMode: { + key: ONYXKEYS.NVP_PRIORITY_MODE, + initialValue: CONST.PRIORITY_MODE.DEFAULT, + }, + betas: { + key: ONYXKEYS.BETAS, + initialValue: [], + }, + allReportActions: { + key: ONYXKEYS.COLLECTION.REPORT_ACTIONS, + selector: reportActionsSelector, + initialValue: {}, + }, + policies: { + key: ONYXKEYS.COLLECTION.POLICY, + selector: policySelector, + initialValue: {}, + }, + policyMembers: { + key: ONYXKEYS.COLLECTION.POLICY_MEMBERS, + }, + transactionViolations: { + key: ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, + initialValue: {}, + }, + reportsDrafts: { + key: ONYXKEYS.COLLECTION.REPORT_DRAFT_COMMENT, + initialValue: {}, + }, +})(SidebarLinkDataWithCurrentReportID); diff --git a/src/pages/home/sidebar/SidebarNavigationContext.js b/src/pages/home/sidebar/SidebarNavigationContext.js deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.js b/src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.tsx similarity index 90% rename from src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.js rename to src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.tsx index d34f821b4b9b..fe61af021d7f 100644 --- a/src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.js +++ b/src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.tsx @@ -9,7 +9,6 @@ import {getPolicyIDFromNavigationState} from '@libs/PolicyUtils'; import SidebarLinksData from '@pages/home/sidebar/SidebarLinksData'; import Timing from '@userActions/Timing'; import CONST from '@src/CONST'; -import sidebarPropTypes from './sidebarPropTypes'; /** * Function called when a pinned chat is selected. @@ -19,7 +18,7 @@ const startTimer = () => { Performance.markStart(CONST.TIMING.SWITCH_REPORT); }; -function BaseSidebarScreen(props) { +function BaseSidebarScreen() { const styles = useThemeStyles(); const activeWorkspaceID = getPolicyIDFromNavigationState(); useEffect(() => { @@ -42,7 +41,6 @@ function BaseSidebarScreen(props) { @@ -51,7 +49,6 @@ function BaseSidebarScreen(props) { ); } -BaseSidebarScreen.propTypes = sidebarPropTypes; BaseSidebarScreen.displayName = 'BaseSidebarScreen'; export default BaseSidebarScreen; diff --git a/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.js b/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx similarity index 65% rename from src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.js rename to src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx index 104deb818067..4ce9b508365b 100644 --- a/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.js +++ b/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx @@ -1,47 +1,75 @@ -import PropTypes from 'prop-types'; +import {useIsFocused} from '@react-navigation/native'; +import type {ImageContentFit} from 'expo-image'; +import type {ForwardedRef, RefAttributes} from 'react'; import React, {forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState} from 'react'; import {View} from 'react-native'; +import type {OnyxCollection, OnyxEntry} from 'react-native-onyx'; import {withOnyx} from 'react-native-onyx'; -import _ from 'underscore'; +import type {SvgProps} from 'react-native-svg'; import FloatingActionButton from '@components/FloatingActionButton'; import * as Expensicons from '@components/Icon/Expensicons'; import PopoverMenu from '@components/PopoverMenu'; -import withNavigation from '@components/withNavigation'; -import withNavigationFocus from '@components/withNavigationFocus'; -import withWindowDimensions, {windowDimensionsPropTypes} from '@components/withWindowDimensions'; import useLocalize from '@hooks/useLocalize'; import usePermissions from '@hooks/usePermissions'; import usePrevious from '@hooks/usePrevious'; import useThemeStyles from '@hooks/useThemeStyles'; -import compose from '@libs/compose'; +import useWindowDimensions from '@hooks/useWindowDimensions'; import interceptAnonymousUser from '@libs/interceptAnonymousUser'; -import Navigation from '@libs/Navigation/Navigation'; import * as ReportUtils from '@libs/ReportUtils'; -import personalDetailsPropType from '@pages/personalDetailsPropType'; import * as App from '@userActions/App'; import * as IOU from '@userActions/IOU'; import * as Policy from '@userActions/Policy'; import * as Report from '@userActions/Report'; import * as Task from '@userActions/Task'; import CONST from '@src/CONST'; +import type {TranslationPaths} from '@src/languages/types'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import type * as OnyxTypes from '@src/types/onyx'; +import type {QuickActionName} from '@src/types/onyx/QuickAction'; +import {isEmptyObject} from '@src/types/utils/EmptyObject'; -/** - * @param {Object} [policy] - * @returns {Object|undefined} - */ -const policySelector = (policy) => - policy && { +type PolicySelector = Pick; + +type FloatingActionButtonAndPopoverOnyxProps = { + /** The list of policies the user has access to. */ + allPolicies: OnyxCollection; + + /** Whether app is in loading state */ + isLoading: OnyxEntry; + + /** Information on the last taken action to display as Quick Action */ + quickAction: OnyxEntry; + + /** The current session */ + session: OnyxEntry; + + /** Personal details of all the users */ + personalDetails: OnyxEntry; +}; + +type FloatingActionButtonAndPopoverProps = FloatingActionButtonAndPopoverOnyxProps & { + /* Callback function when the menu is shown */ + onShowCreateMenu?: () => void; + + /* Callback function before the menu is hidden */ + onHideCreateMenu?: () => void; +}; + +type FloatingActionButtonAndPopoverRef = { + hideCreateMenu: () => void; +}; + +const policySelector = (policy: OnyxEntry): PolicySelector => + (policy && { type: policy.type, role: policy.role, isPolicyExpenseChatEnabled: policy.isPolicyExpenseChatEnabled, pendingAction: policy.pendingAction, avatar: policy.avatar, name: policy.name, - }; + }) as PolicySelector; -const getQuickActionIcon = (action) => { +const getQuickActionIcon = (action: QuickActionName): React.FC => { switch (action) { case CONST.QUICK_ACTIONS.REQUEST_MANUAL: return Expensicons.MoneyCircle; @@ -62,7 +90,7 @@ const getQuickActionIcon = (action) => { } }; -const getQuickActionTitle = (action) => { +const getQuickActionTitle = (action: QuickActionName): TranslationPaths => { switch (action) { case CONST.QUICK_ACTIONS.REQUEST_MANUAL: return 'quickAction.requestMoney'; @@ -87,134 +115,85 @@ const getQuickActionTitle = (action) => { case CONST.QUICK_ACTIONS.TRACK_DISTANCE: return 'quickAction.trackDistance'; default: - return ''; + return '' as TranslationPaths; } }; -const propTypes = { - ...windowDimensionsPropTypes, - - /* Callback function when the menu is shown */ - onShowCreateMenu: PropTypes.func, - - /* Callback function before the menu is hidden */ - onHideCreateMenu: PropTypes.func, - - /** The list of policies the user has access to. */ - allPolicies: PropTypes.shape({ - /** The policy name */ - name: PropTypes.string, - }), - - /** Indicated whether the report data is loading */ - isLoading: PropTypes.bool, - - /** Forwarded ref to FloatingActionButtonAndPopover */ - innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), - - /** Information on the last taken action to display as Quick Action */ - quickAction: PropTypes.shape({ - action: PropTypes.string, - chatReportID: PropTypes.string, - targetAccountID: PropTypes.number, - isFirstQuickAction: PropTypes.bool, - }), - - /** Personal details of all the users */ - personalDetails: personalDetailsPropType, - - session: PropTypes.shape({ - /** Currently logged in user accountID */ - accountID: PropTypes.number, - }).isRequired, -}; -const defaultProps = { - onHideCreateMenu: () => {}, - onShowCreateMenu: () => {}, - allPolicies: {}, - isLoading: false, - innerRef: null, - quickAction: null, - personalDetails: {}, -}; - /** * Responsible for rendering the {@link PopoverMenu}, and the accompanying * FAB that can open or close the menu. - * @param {Object} props - * @returns {JSX.Element} */ -function FloatingActionButtonAndPopover(props) { +function FloatingActionButtonAndPopover( + {onHideCreateMenu, onShowCreateMenu, isLoading = false, allPolicies, quickAction, session, personalDetails}: FloatingActionButtonAndPopoverProps, + ref: ForwardedRef, +) { const styles = useThemeStyles(); const {translate} = useLocalize(); const [isCreateMenuActive, setIsCreateMenuActive] = useState(false); - const fabRef = useRef(null); + const fabRef = useRef(null); const {canUseTrackExpense} = usePermissions(); + const {isSmallScreenWidth, windowHeight} = useWindowDimensions(); + const isFocused = useIsFocused(); + const prevIsFocused = usePrevious(isFocused); - const prevIsFocused = usePrevious(props.isFocused); - - const quickActionReport = useMemo(() => (props.quickAction ? ReportUtils.getReport(props.quickAction.chatReportID) : 0), [props.quickAction]); + const quickActionReport: OnyxEntry = useMemo(() => (quickAction ? ReportUtils.getReport(quickAction.chatReportID) : null), [quickAction]); - const quickActionPolicy = props.allPolicies ? props.allPolicies[`${ONYXKEYS.COLLECTION.POLICY}${quickActionReport.policyID}`] : undefined; + const quickActionPolicy = allPolicies ? allPolicies[`${ONYXKEYS.COLLECTION.POLICY}${quickActionReport?.policyID}`] : undefined; const quickActionAvatars = useMemo(() => { if (quickActionReport) { - const avatars = ReportUtils.getIcons(quickActionReport, props.personalDetails); - return avatars.length <= 1 || ReportUtils.isPolicyExpenseChat(quickActionReport) ? avatars : _.filter(avatars, (avatar) => avatar.id !== props.session.accountID); + const avatars = ReportUtils.getIcons(quickActionReport, personalDetails); + return avatars.length <= 1 || ReportUtils.isPolicyExpenseChat(quickActionReport) ? avatars : avatars.filter((avatar) => avatar.id !== session?.accountID); } return []; // Policy is needed as a dependency in order to update the shortcut details when the workspace changes // eslint-disable-next-line react-hooks/exhaustive-deps - }, [props.personalDetails, props.session.accountID, quickActionReport, quickActionPolicy]); + }, [personalDetails, session?.accountID, quickActionReport, quickActionPolicy]); const quickActionTitle = useMemo(() => { - const titleKey = getQuickActionTitle(props.quickAction && props.quickAction.action); + const titleKey = getQuickActionTitle(quickAction?.action ?? ('' as QuickActionName)); return titleKey ? translate(titleKey) : ''; - }, [props.quickAction, translate]); + }, [quickAction, translate]); const navigateToQuickAction = () => { - switch (props.quickAction.action) { + switch (quickAction?.action) { case CONST.QUICK_ACTIONS.REQUEST_MANUAL: - IOU.startMoneyRequest(CONST.IOU.TYPE.REQUEST, props.quickAction.chatReportID, CONST.IOU.REQUEST_TYPE.MANUAL); - return; + IOU.startMoneyRequest(CONST.IOU.TYPE.REQUEST, quickAction?.chatReportID ?? '', CONST.IOU.REQUEST_TYPE.MANUAL); + break; case CONST.QUICK_ACTIONS.REQUEST_SCAN: - IOU.startMoneyRequest(CONST.IOU.TYPE.REQUEST, props.quickAction.chatReportID, CONST.IOU.REQUEST_TYPE.SCAN); - return; + IOU.startMoneyRequest(CONST.IOU.TYPE.REQUEST, quickAction?.chatReportID ?? '', CONST.IOU.REQUEST_TYPE.SCAN); + break; case CONST.QUICK_ACTIONS.REQUEST_DISTANCE: - IOU.startMoneyRequest(CONST.IOU.TYPE.REQUEST, props.quickAction.chatReportID, CONST.IOU.REQUEST_TYPE.DISTANCE); - return; + IOU.startMoneyRequest(CONST.IOU.TYPE.REQUEST, quickAction?.chatReportID ?? '', CONST.IOU.REQUEST_TYPE.DISTANCE); + break; case CONST.QUICK_ACTIONS.SPLIT_MANUAL: - IOU.startMoneyRequest(CONST.IOU.TYPE.SPLIT, props.quickAction.chatReportID, CONST.IOU.REQUEST_TYPE.MANUAL); - return; + IOU.startMoneyRequest(CONST.IOU.TYPE.SPLIT, quickAction?.chatReportID ?? '', CONST.IOU.REQUEST_TYPE.MANUAL); + break; case CONST.QUICK_ACTIONS.SPLIT_SCAN: - IOU.startMoneyRequest(CONST.IOU.TYPE.SPLIT, props.quickAction.chatReportID, CONST.IOU.REQUEST_TYPE.SCAN); - return; + IOU.startMoneyRequest(CONST.IOU.TYPE.SPLIT, quickAction?.chatReportID ?? '', CONST.IOU.REQUEST_TYPE.SCAN); + break; case CONST.QUICK_ACTIONS.SPLIT_DISTANCE: - IOU.startMoneyRequest(CONST.IOU.TYPE.SPLIT, props.quickAction.chatReportID, CONST.IOU.REQUEST_TYPE.DISTANCE); - return; + IOU.startMoneyRequest(CONST.IOU.TYPE.SPLIT, quickAction?.chatReportID ?? '', CONST.IOU.REQUEST_TYPE.DISTANCE); + break; case CONST.QUICK_ACTIONS.SEND_MONEY: - IOU.startMoneyRequest(CONST.IOU.TYPE.SEND, props.quickAction.chatReportID); - return; + IOU.startMoneyRequest(CONST.IOU.TYPE.SEND, quickAction?.chatReportID ?? ''); + break; case CONST.QUICK_ACTIONS.ASSIGN_TASK: - Task.clearOutTaskInfoAndNavigate(props.quickAction.chatReportID, quickActionReport, _.get(props.quickAction, 'targetAccountID', 0)); - return; + Task.clearOutTaskInfoAndNavigate(quickAction?.chatReportID, quickActionReport, quickAction.targetAccountID ?? 0); + break; default: - return ''; } }; /** * Check if LHN status changed from active to inactive. * Used to close already opened FAB menu when open any other pages (i.e. Press Command + K on web). - * - * @param {Object} prevProps - * @return {Boolean} */ const didScreenBecomeInactive = useCallback( - () => + (): boolean => // When any other page is opened over LHN - !props.isFocused && prevIsFocused, - [props.isFocused, prevIsFocused], + !isFocused && prevIsFocused, + [isFocused, prevIsFocused], ); /** @@ -222,14 +201,14 @@ function FloatingActionButtonAndPopover(props) { */ const showCreateMenu = useCallback( () => { - if (!props.isFocused && props.isSmallScreenWidth) { + if (!isFocused && isSmallScreenWidth) { return; } setIsCreateMenuActive(true); - props.onShowCreateMenu(); + onShowCreateMenu?.(); }, // eslint-disable-next-line react-hooks/exhaustive-deps - [props.isFocused, props.isSmallScreenWidth], + [isFocused, isSmallScreenWidth], ); /** @@ -243,7 +222,7 @@ function FloatingActionButtonAndPopover(props) { return; } setIsCreateMenuActive(false); - props.onHideCreateMenu(); + onHideCreateMenu?.(); }, // eslint-disable-next-line react-hooks/exhaustive-deps [isCreateMenuActive], @@ -258,7 +237,7 @@ function FloatingActionButtonAndPopover(props) { hideCreateMenu(); }, [didScreenBecomeInactive, hideCreateMenu]); - useImperativeHandle(props.innerRef, () => ({ + useImperativeHandle(ref, () => ({ hideCreateMenu() { hideCreateMenu(); }, @@ -276,10 +255,10 @@ function FloatingActionButtonAndPopover(props) { interceptAnonymousUser(() => Task.clearOutTaskInfoAndNavigate()), }, - { - icon: Expensicons.Heart, - text: translate('sidebarScreen.saveTheWorld'), - onSelected: () => interceptAnonymousUser(() => Navigation.navigate(ROUTES.TEACHERS_UNITE)), - }, - ...(!props.isLoading && !Policy.hasActiveChatEnabledPolicies(props.allPolicies) + ...(!isLoading && !Policy.hasActiveChatEnabledPolicies(allPolicies) ? [ { displayInDefaultIconColor: true, - contentFit: 'contain', + contentFit: 'contain' as ImageContentFit, icon: Expensicons.NewWorkspace, iconWidth: 46, iconHeight: 40, @@ -353,16 +328,16 @@ function FloatingActionButtonAndPopover(props) { }, ] : []), - ...(props.quickAction && props.quickAction.action + ...(quickAction?.action ? [ { - icon: getQuickActionIcon(props.quickAction.action), + icon: getQuickActionIcon(quickAction?.action), text: quickActionTitle, label: translate('quickAction.shortcut'), isLabelHoverable: false, floatRightAvatars: quickActionAvatars, floatRightAvatarSize: CONST.AVATAR_SIZE.SMALL, - description: ReportUtils.getReportName(quickActionReport), + description: !isEmptyObject(quickActionReport) ? ReportUtils.getReportName(quickActionReport) : '', numberOfLinesDescription: 1, onSelected: () => interceptAnonymousUser(() => navigateToQuickAction()), shouldShowSubscriptRightAvatar: ReportUtils.isPolicyExpenseChat(quickActionReport), @@ -384,40 +359,25 @@ function FloatingActionButtonAndPopover(props) { ); } -FloatingActionButtonAndPopover.propTypes = propTypes; -FloatingActionButtonAndPopover.defaultProps = defaultProps; FloatingActionButtonAndPopover.displayName = 'FloatingActionButtonAndPopover'; -const FloatingActionButtonAndPopoverWithRef = forwardRef((props, ref) => ( - -)); +export default withOnyx, FloatingActionButtonAndPopoverOnyxProps>({ + allPolicies: { + key: ONYXKEYS.COLLECTION.POLICY, + selector: policySelector, + }, + isLoading: { + key: ONYXKEYS.IS_LOADING_APP, + }, + quickAction: { + key: ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE, + }, + personalDetails: { + key: ONYXKEYS.PERSONAL_DETAILS_LIST, + }, + session: { + key: ONYXKEYS.SESSION, + }, +})(forwardRef(FloatingActionButtonAndPopover)); -FloatingActionButtonAndPopoverWithRef.displayName = 'FloatingActionButtonAndPopoverWithRef'; - -export default compose( - withNavigation, - withNavigationFocus, - withWindowDimensions, - withOnyx({ - allPolicies: { - key: ONYXKEYS.COLLECTION.POLICY, - selector: policySelector, - }, - isLoading: { - key: ONYXKEYS.IS_LOADING_APP, - }, - quickAction: { - key: ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE, - }, - personalDetails: { - key: ONYXKEYS.PERSONAL_DETAILS_LIST, - }, - session: { - key: ONYXKEYS.SESSION, - }, - }), -)(FloatingActionButtonAndPopoverWithRef); +export type {PolicySelector}; diff --git a/src/pages/home/sidebar/SidebarScreen/index.js b/src/pages/home/sidebar/SidebarScreen/index.tsx similarity index 51% rename from src/pages/home/sidebar/SidebarScreen/index.js rename to src/pages/home/sidebar/SidebarScreen/index.tsx index dfb5db7c15d3..625491674cd8 100755 --- a/src/pages/home/sidebar/SidebarScreen/index.js +++ b/src/pages/home/sidebar/SidebarScreen/index.tsx @@ -1,20 +1,15 @@ import React from 'react'; import FreezeWrapper from '@libs/Navigation/FreezeWrapper'; import BaseSidebarScreen from './BaseSidebarScreen'; -import sidebarPropTypes from './sidebarPropTypes'; -function SidebarScreen(props) { +function SidebarScreen() { return ( - + ); } -SidebarScreen.propTypes = sidebarPropTypes; SidebarScreen.displayName = 'SidebarScreen'; export default SidebarScreen; diff --git a/src/pages/home/sidebar/SidebarScreen/sidebarPropTypes.js b/src/pages/home/sidebar/SidebarScreen/sidebarPropTypes.js deleted file mode 100644 index 61a9194bb1e5..000000000000 --- a/src/pages/home/sidebar/SidebarScreen/sidebarPropTypes.js +++ /dev/null @@ -1,7 +0,0 @@ -import PropTypes from 'prop-types'; - -const sidebarPropTypes = { - /** Callback when onLayout of sidebar is called */ - onLayout: PropTypes.func, -}; -export default sidebarPropTypes; diff --git a/src/pages/home/sidebar/SignInButton.js b/src/pages/home/sidebar/SignInButton.tsx similarity index 100% rename from src/pages/home/sidebar/SignInButton.js rename to src/pages/home/sidebar/SignInButton.tsx diff --git a/src/pages/iou/IOUCurrencySelection.js b/src/pages/iou/IOUCurrencySelection.js index b939ac9b2af9..dd0510d09958 100644 --- a/src/pages/iou/IOUCurrencySelection.js +++ b/src/pages/iou/IOUCurrencySelection.js @@ -82,7 +82,7 @@ function IOUCurrencySelection(props) { } const report = ReportUtils.getReport(threadReportID); - const parentReportAction = ReportActionsUtils.getReportAction(report.parentReportID, report.parentReportActionID); + const parentReportAction = report ? ReportActionsUtils.getReportAction(report.parentReportID, report.parentReportActionID) : null; // Do not dismiss the modal, when a current user can edit this currency of this money request. if (ReportUtils.canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.CURRENCY)) { diff --git a/src/pages/iou/MoneyRequestWaypointPage.tsx b/src/pages/iou/MoneyRequestWaypointPage.tsx index dd65b76c8d38..35778f37a9ef 100644 --- a/src/pages/iou/MoneyRequestWaypointPage.tsx +++ b/src/pages/iou/MoneyRequestWaypointPage.tsx @@ -15,7 +15,6 @@ type MoneyRequestWaypointPageProps = StackScreenProps _.pick(waypoint, 'address')); const addresses = _.mapObject(waypoints, (waypoint) => _.pick(waypoint, 'address')); if (_.isEqual(oldAddresses, addresses)) { - Navigation.dismissModal(report.reportID); + Navigation.dismissModal(); return; } IOU.updateMoneyRequestDistance(transaction.transactionID, report.reportID, waypoints); - Navigation.dismissModal(report.reportID); + Navigation.dismissModal(); return; } diff --git a/src/pages/iou/request/step/IOURequestStepScan/index.native.js b/src/pages/iou/request/step/IOURequestStepScan/index.native.js index f3c02db81234..83ca90e7330b 100644 --- a/src/pages/iou/request/step/IOURequestStepScan/index.native.js +++ b/src/pages/iou/request/step/IOURequestStepScan/index.native.js @@ -72,7 +72,7 @@ function IOURequestStepScan({ const theme = useTheme(); const styles = useThemeStyles(); const device = useCameraDevice('back', { - physicalDevices: ['wide-angle-camera'], + physicalDevices: ['wide-angle-camera', 'ultra-wide-angle-camera'], }); const hasFlash = device != null && device.hasFlash; diff --git a/src/pages/iou/request/step/IOURequestStepTag.js b/src/pages/iou/request/step/IOURequestStepTag.js index ed55628ecaa9..3693e1cf9449 100644 --- a/src/pages/iou/request/step/IOURequestStepTag.js +++ b/src/pages/iou/request/step/IOURequestStepTag.js @@ -142,19 +142,14 @@ function IOURequestStepTag({ testID={IOURequestStepTag.displayName} shouldShowNotFoundPage={shouldShowNotFoundPage} > - {({insets}) => ( - <> - {translate('iou.tagSelection')} - - - )} + {translate('iou.tagSelection')} + ); } diff --git a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx b/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx index bf4a169058be..a88de35a5025 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx @@ -6,6 +6,7 @@ import type {BaseTextInputRef} from '@components/TextInput/BaseTextInput/types'; import useLocalize from '@hooks/useLocalize'; import * as CurrencyUtils from '@libs/CurrencyUtils'; import Navigation from '@libs/Navigation/Navigation'; +import * as ReportUtils from '@libs/ReportUtils'; import * as TransactionUtils from '@libs/TransactionUtils'; import type {CurrentMoney} from '@pages/iou/steps/MoneyRequestAmountForm'; import MoneyRequestAmountForm from '@pages/iou/steps/MoneyRequestAmountForm'; @@ -14,7 +15,7 @@ import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; -import type {Policy, Transaction} from '@src/types/onyx'; +import type {Policy, PolicyCategories, PolicyTagList, TaxRatesWithDefault, Transaction} from '@src/types/onyx'; import StepScreenWrapper from './StepScreenWrapper'; import withFullTransactionOrNotFound from './withFullTransactionOrNotFound'; import type {WithWritableReportOrNotFoundProps} from './withWritableReportOrNotFound'; @@ -22,6 +23,10 @@ import withWritableReportOrNotFound from './withWritableReportOrNotFound'; type IOURequestStepTaxAmountPageOnyxProps = { policy: OnyxEntry; + policyCategories: OnyxEntry; + + /** Collection of tag list on a policy */ + policyTags: OnyxEntry; }; type IOURequestStepTaxAmountPageProps = IOURequestStepTaxAmountPageOnyxProps & @@ -29,30 +34,39 @@ type IOURequestStepTaxAmountPageProps = IOURequestStepTaxAmountPageOnyxProps & transaction: OnyxEntry; }; -function getTaxAmount(transaction: OnyxEntry, defaultTaxValue: string | undefined): number | undefined { +function getTaxAmount(transaction: OnyxEntry, taxRates: TaxRatesWithDefault | undefined, isEditing: boolean): number | undefined { if (!transaction?.amount) { return; } - const percentage = (transaction?.taxRate ? transaction?.taxRate?.data?.value : defaultTaxValue) ?? ''; - return CurrencyUtils.convertToBackendAmount(TransactionUtils.calculateTaxAmount(percentage, transaction?.amount)); + const transactionTaxAmount = TransactionUtils.getAmount(transaction); + const transactionTaxCode = transaction?.taxCode ?? ''; + const defaultTaxValue = taxRates?.defaultValue; + const editingTaxPercentage = (transactionTaxCode ? taxRates?.taxes[transactionTaxCode]?.value : taxRates?.defaultValue) ?? ''; + const moneyRequestTaxPercentage = (transaction?.taxRate ? transaction?.taxRate?.data?.value : defaultTaxValue) ?? ''; + const taxPercentage = isEditing ? editingTaxPercentage : moneyRequestTaxPercentage; + return CurrencyUtils.convertToBackendAmount(TransactionUtils.calculateTaxAmount(taxPercentage, transactionTaxAmount)); } function IOURequestStepTaxAmountPage({ route: { - params: {iouType, reportID, transactionID, backTo}, + params: {action, iouType, reportID, transactionID, backTo}, }, transaction, report, policy, + policyTags, + policyCategories, }: IOURequestStepTaxAmountPageProps) { const {translate} = useLocalize(); const textInput = useRef(); - const isEditing = Navigation.getActiveRoute().includes('taxAmount'); + const isEditing = action === CONST.IOU.ACTION.EDIT; const focusTimeoutRef = useRef(); const isSaveButtonPressed = useRef(false); const originalCurrency = useRef(); + + const transactionDetails = ReportUtils.getTransactionDetails(transaction); const taxRates = policy?.taxRates; useEffect(() => { @@ -99,6 +113,17 @@ function IOURequestStepTaxAmountPage({ const updateTaxAmount = (currentAmount: CurrentMoney) => { isSaveButtonPressed.current = true; const amountInSmallestCurrencyUnits = CurrencyUtils.convertToBackendAmount(Number.parseFloat(currentAmount.amount)); + + if (isEditing) { + if (amountInSmallestCurrencyUnits === TransactionUtils.getTaxAmount(transaction, false)) { + navigateBack(); + return; + } + IOU.updateMoneyRequestTaxAmount(transactionID, report?.reportID ?? '', amountInSmallestCurrencyUnits, policy, policyTags, policyCategories); + navigateBack(); + return; + } + IOU.setMoneyRequestTaxAmount(transactionID, amountInSmallestCurrencyUnits, true); // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing @@ -129,14 +154,14 @@ function IOURequestStepTaxAmountPage({ headerTitle={translate('iou.taxAmount')} onBackButtonPress={navigateBack} testID={IOURequestStepTaxAmountPage.displayName} - shouldShowWrapper={Boolean(backTo)} + shouldShowWrapper={Boolean(backTo || isEditing)} includeSafeAreaPaddingBottom > (textInput.current = e)} onCurrencyButtonPress={navigateToCurrencySelectionPage} onSubmitButtonPress={updateTaxAmount} @@ -151,6 +176,12 @@ const IOURequestStepTaxAmountPageWithOnyx = withOnyx `${ONYXKEYS.COLLECTION.POLICY}${report ? report.policyID : '0'}`, }, + policyCategories: { + key: ({report}) => `${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${report ? report.policyID : '0'}`, + }, + policyTags: { + key: ({report}) => `${ONYXKEYS.COLLECTION.POLICY_TAGS}${report ? report.policyID : '0'}`, + }, })(IOURequestStepTaxAmountPage); // eslint-disable-next-line rulesdir/no-negated-variables diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx index 7ab9ab1d0961..da3a244a2db2 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx @@ -6,11 +6,13 @@ import useLocalize from '@hooks/useLocalize'; import * as CurrencyUtils from '@libs/CurrencyUtils'; import Navigation from '@libs/Navigation/Navigation'; import * as OptionsListUtils from '@libs/OptionsListUtils'; +import * as ReportUtils from '@libs/ReportUtils'; import * as TransactionUtils from '@libs/TransactionUtils'; import * as IOU from '@userActions/IOU'; +import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import type SCREENS from '@src/SCREENS'; -import type {Policy, TaxRatesWithDefault, Transaction} from '@src/types/onyx'; +import type {Policy, PolicyCategories, PolicyTagList, TaxRatesWithDefault, Transaction} from '@src/types/onyx'; import StepScreenWrapper from './StepScreenWrapper'; import withFullTransactionOrNotFound from './withFullTransactionOrNotFound'; import type {WithWritableReportOrNotFoundProps} from './withWritableReportOrNotFound'; @@ -18,6 +20,10 @@ import withWritableReportOrNotFound from './withWritableReportOrNotFound'; type IOURequestStepTaxRatePageOnyxProps = { policy: OnyxEntry; + policyCategories: OnyxEntry; + + /** Collection of tag list on a policy */ + policyTags: OnyxEntry; }; type IOURequestStepTaxRatePageProps = IOURequestStepTaxRatePageOnyxProps & @@ -34,23 +40,44 @@ function getTaxAmount(taxRates: TaxRatesWithDefault, selectedTaxRate: string, am function IOURequestStepTaxRatePage({ route: { - params: {backTo}, + params: {action, backTo}, }, policy, transaction, report, + policyCategories, + policyTags, }: IOURequestStepTaxRatePageProps) { const {translate} = useLocalize(); + const isEditing = action === CONST.IOU.ACTION.EDIT; + const taxRates = policy?.taxRates; + const defaultExternalID = taxRates?.defaultExternalID; + const transactionDetails = ReportUtils.getTransactionDetails(transaction); + const transactionTaxCode = transactionDetails?.taxCode; + const navigateBack = () => { Navigation.goBack(backTo); }; - const taxRates = policy?.taxRates; - const defaultTaxKey = taxRates?.defaultExternalID; // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - const selectedTaxRate = transaction?.taxRate?.keyForList || defaultTaxKey; + const moneyRequestSelectedTaxRate = transaction?.taxRate?.keyForList || (taxRates && TransactionUtils.getDefaultTaxName(taxRates)); + const editingSelectedTaxRate = + taxRates && + (transactionTaxCode === defaultExternalID + ? transaction && TransactionUtils.getDefaultTaxName(taxRates, transaction) + : transactionTaxCode && TransactionUtils.getTaxName(taxRates.taxes, transactionTaxCode)); const updateTaxRates = (taxes: OptionsListUtils.TaxRatesOption) => { + if (isEditing) { + const newTaxCode = taxes.data.code; + if (newTaxCode === undefined || newTaxCode === TransactionUtils.getTaxCode(transaction)) { + navigateBack(); + return; + } + IOU.updateMoneyRequestTaxRate(transaction?.transactionID ?? '', report?.reportID ?? '', newTaxCode, policy, policyTags, policyCategories); + navigateBack(); + return; + } if (!transaction || !taxes.text || !taxRates) { Navigation.goBack(backTo); return; @@ -75,7 +102,7 @@ function IOURequestStepTaxRatePage({ testID={IOURequestStepTaxRatePage.displayName} > @@ -89,6 +116,12 @@ const IOURequestStepTaxRatePageWithOnyx = withOnyx `${ONYXKEYS.COLLECTION.POLICY}${report ? report.policyID : '0'}`, }, + policyCategories: { + key: ({report}) => `${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${report ? report.policyID : '0'}`, + }, + policyTags: { + key: ({report}) => `${ONYXKEYS.COLLECTION.POLICY_TAGS}${report ? report.policyID : '0'}`, + }, })(IOURequestStepTaxRatePage); // eslint-disable-next-line rulesdir/no-negated-variables diff --git a/src/pages/iou/request/step/IOURequestStepWaypoint.tsx b/src/pages/iou/request/step/IOURequestStepWaypoint.tsx index a186288e8a27..93f9e03a7494 100644 --- a/src/pages/iou/request/step/IOURequestStepWaypoint.tsx +++ b/src/pages/iou/request/step/IOURequestStepWaypoint.tsx @@ -233,31 +233,29 @@ function IOURequestStepWaypoint({ IOURequestStepWaypoint.displayName = 'IOURequestStepWaypoint'; -// eslint-disable-next-line rulesdir/no-negated-variables -const IOURequestStepWaypointWithWritableReportOrNotFound = withWritableReportOrNotFound(IOURequestStepWaypoint); -// eslint-disable-next-line rulesdir/no-negated-variables -const IOURequestStepWaypointWithFullTransactionOrNotFound = withFullTransactionOrNotFound(IOURequestStepWaypointWithWritableReportOrNotFound); +export default withWritableReportOrNotFound( + withFullTransactionOrNotFound( + withOnyx({ + userLocation: { + key: ONYXKEYS.USER_LOCATION, + }, + recentWaypoints: { + key: ONYXKEYS.NVP_RECENT_WAYPOINTS, -export default withOnyx({ - userLocation: { - key: ONYXKEYS.USER_LOCATION, - }, - recentWaypoints: { - key: ONYXKEYS.NVP_RECENT_WAYPOINTS, - - // Only grab the most recent 5 waypoints because that's all that is shown in the UI. This also puts them into the format of data - // that the google autocomplete component expects for it's "predefined places" feature. - selector: (waypoints) => - (waypoints ? waypoints.slice(0, 5) : []).map((waypoint) => ({ - name: waypoint.name, - description: waypoint.address ?? '', - geometry: { - location: { - lat: waypoint.lat ?? 0, - lng: waypoint.lng ?? 0, - }, - }, - })), - }, - // @ts-expect-error TODO: Remove this once withFullTransactionOrNotFound (https://github.com/Expensify/App/issues/36123) is migrated to TypeScript. -})(IOURequestStepWaypointWithFullTransactionOrNotFound); + // Only grab the most recent 5 waypoints because that's all that is shown in the UI. This also puts them into the format of data + // that the google autocomplete component expects for it's "predefined places" feature. + selector: (waypoints) => + (waypoints ? waypoints.slice(0, 5) : []).map((waypoint) => ({ + name: waypoint.name, + description: waypoint.address ?? '', + geometry: { + location: { + lat: waypoint.lat ?? 0, + lng: waypoint.lng ?? 0, + }, + }, + })), + }, + })(IOURequestStepWaypoint), + ), +); diff --git a/src/pages/iou/request/step/withFullTransactionOrNotFound.js b/src/pages/iou/request/step/withFullTransactionOrNotFound.js deleted file mode 100644 index 7cdbb3484999..000000000000 --- a/src/pages/iou/request/step/withFullTransactionOrNotFound.js +++ /dev/null @@ -1,78 +0,0 @@ -import {useIsFocused} from '@react-navigation/native'; -import lodashGet from 'lodash/get'; -import PropTypes from 'prop-types'; -import React from 'react'; -import {withOnyx} from 'react-native-onyx'; -import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView'; -import transactionPropTypes from '@components/transactionPropTypes'; -import getComponentDisplayName from '@libs/getComponentDisplayName'; -import CONST from '@src/CONST'; -import ONYXKEYS from '@src/ONYXKEYS'; -import IOURequestStepRoutePropTypes from './IOURequestStepRoutePropTypes'; - -const propTypes = { - /** The HOC takes an optional ref as a prop and passes it as a ref to the wrapped component. - * That way, if a ref is passed to a component wrapped in the HOC, the ref is a reference to the wrapped component, not the HOC. */ - forwardedRef: PropTypes.func, - - /** The report corresponding to the reportID in the route params */ - transaction: transactionPropTypes, - - route: IOURequestStepRoutePropTypes.isRequired, -}; - -const defaultProps = { - forwardedRef: () => {}, - transaction: {}, -}; - -export default function (WrappedComponent) { - // eslint-disable-next-line rulesdir/no-negated-variables - function WithFullTransactionOrNotFound({forwardedRef, ...props}) { - const { - transaction: {transactionID}, - } = props; - - const isFocused = useIsFocused(); - - // If the transaction does not have a transactionID, then the transaction no longer exists in Onyx as a full transaction and the not-found page should be shown. - // In addition, the not-found page should be shown only if the component screen's route is active (i.e. is focused). - // This is to prevent it from showing when the modal is being dismissed while navigating to a different route (e.g. on requesting money). - if (!transactionID) { - return ; - } - - return ( - - ); - } - - WithFullTransactionOrNotFound.propTypes = propTypes; - WithFullTransactionOrNotFound.defaultProps = defaultProps; - WithFullTransactionOrNotFound.displayName = `withFullTransactionOrNotFound(${getComponentDisplayName(WrappedComponent)})`; - - // eslint-disable-next-line rulesdir/no-negated-variables - const WithFullTransactionOrNotFoundWithRef = React.forwardRef((props, ref) => ( - - )); - - WithFullTransactionOrNotFoundWithRef.displayName = 'WithFullTransactionOrNotFoundWithRef'; - - return withOnyx({ - transaction: { - key: ({route}) => { - const transactionID = lodashGet(route, 'params.transactionID', 0); - const userAction = lodashGet(route, 'params.action', CONST.IOU.ACTION.CREATE); - return `${userAction === CONST.IOU.ACTION.CREATE ? ONYXKEYS.COLLECTION.TRANSACTION_DRAFT : ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`; - }, - }, - })(WithFullTransactionOrNotFoundWithRef); -} diff --git a/src/pages/iou/request/step/withFullTransactionOrNotFound.tsx b/src/pages/iou/request/step/withFullTransactionOrNotFound.tsx new file mode 100644 index 000000000000..5f8a981ab3bb --- /dev/null +++ b/src/pages/iou/request/step/withFullTransactionOrNotFound.tsx @@ -0,0 +1,70 @@ +import type {RouteProp} from '@react-navigation/native'; +import {useIsFocused} from '@react-navigation/native'; +import type {ComponentType, ForwardedRef, RefAttributes} from 'react'; +import React, {forwardRef} from 'react'; +import type {OnyxEntry} from 'react-native-onyx'; +import {withOnyx} from 'react-native-onyx'; +import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView'; +import getComponentDisplayName from '@libs/getComponentDisplayName'; +import type {MoneyRequestNavigatorParamList} from '@libs/Navigation/types'; +import CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; +import type SCREENS from '@src/SCREENS'; +import type {Transaction} from '@src/types/onyx'; + +type WithFullTransactionOrNotFoundOnyxProps = { + /** Indicates whether the report data is loading */ + transaction: OnyxEntry; +}; + +type MoneyRequestRouteName = + | typeof SCREENS.MONEY_REQUEST.STEP_WAYPOINT + | typeof SCREENS.MONEY_REQUEST.STEP_DESCRIPTION + | typeof SCREENS.MONEY_REQUEST.STEP_TAX_AMOUNT + | typeof SCREENS.MONEY_REQUEST.STEP_TAX_RATE; + +type Route = RouteProp; + +type WithFullTransactionOrNotFoundProps = WithFullTransactionOrNotFoundOnyxProps & {route: Route}; + +export default function , TRef>(WrappedComponent: ComponentType>) { + // eslint-disable-next-line rulesdir/no-negated-variables + function WithFullTransactionOrNotFound(props: TProps, ref: ForwardedRef) { + const transactionID = props.transaction?.transactionID; + + const isFocused = useIsFocused(); + + // If the transaction does not have a transactionID, then the transaction no longer exists in Onyx as a full transaction and the not-found page should be shown. + // In addition, the not-found page should be shown only if the component screen's route is active (i.e. is focused). + // This is to prevent it from showing when the modal is being dismissed while navigating to a different route (e.g. on requesting money). + if (!transactionID) { + return ; + } + + return ( + + ); + } + + WithFullTransactionOrNotFound.displayName = `withFullTransactionOrNotFound(${getComponentDisplayName(WrappedComponent)})`; + + return withOnyx, WithFullTransactionOrNotFoundOnyxProps>({ + transaction: { + key: ({route}) => { + const transactionID = route.params.transactionID ?? 0; + const userAction = 'action' in route.params && route.params.action ? route.params.action : CONST.IOU.ACTION.CREATE; + + if (userAction === CONST.IOU.ACTION.CREATE) { + return `${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transactionID}` as `${typeof ONYXKEYS.COLLECTION.TRANSACTION}${string}`; + } + return `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`; + }, + }, + })(forwardRef(WithFullTransactionOrNotFound)); +} + +export type {WithFullTransactionOrNotFoundProps}; diff --git a/src/pages/iou/steps/MoneyRequestAmountForm.tsx b/src/pages/iou/steps/MoneyRequestAmountForm.tsx index 755da80fb93f..c8b418f301c9 100644 --- a/src/pages/iou/steps/MoneyRequestAmountForm.tsx +++ b/src/pages/iou/steps/MoneyRequestAmountForm.tsx @@ -1,3 +1,4 @@ +import {useIsFocused} from '@react-navigation/core'; import type {ForwardedRef} from 'react'; import React, {useCallback, useEffect, useRef, useState} from 'react'; import {View} from 'react-native'; @@ -8,6 +9,7 @@ import FormHelpMessage from '@components/FormHelpMessage'; import ScrollView from '@components/ScrollView'; import TextInputWithCurrencySymbol from '@components/TextInputWithCurrencySymbol'; import useLocalize from '@hooks/useLocalize'; +import usePrevious from '@hooks/usePrevious'; import useThemeStyles from '@hooks/useThemeStyles'; import useWindowDimensions from '@hooks/useWindowDimensions'; import * as Browser from '@libs/Browser'; @@ -97,6 +99,9 @@ function MoneyRequestAmountForm( const [formError, setFormError] = useState(''); const [shouldUpdateSelection, setShouldUpdateSelection] = useState(true); + const isFocused = useIsFocused(); + const wasFocused = usePrevious(isFocused); + const [selection, setSelection] = useState({ start: selectedAmountAsString.length, end: selectedAmountAsString.length, @@ -116,6 +121,11 @@ function MoneyRequestAmountForm( } event.preventDefault(); + setSelection({ + start: selection.end, + end: selection.end, + }); + if (!textInput.current) { return; } @@ -191,6 +201,18 @@ function MoneyRequestAmountForm( // eslint-disable-next-line react-hooks/exhaustive-deps }, [setNewAmount]); + // Removes text selection if user visits currency selector with selection and comes back + useEffect(() => { + if (!isFocused || wasFocused) { + return; + } + + setSelection({ + start: selection.end, + end: selection.end, + }); + }, [selection.end, isFocused, selection, wasFocused]); + /** * Update amount with number or Backspace pressed for BigNumberPad. * Validate new amount with decimal number regex up to 6 digits and 2 decimal digit to enable Next button @@ -232,7 +254,7 @@ function MoneyRequestAmountForm( */ const submitAndNavigateToNextPage = useCallback(() => { // Skip the check for tax amount form as 0 is a valid input - if (!isTaxAmountForm && isAmountInvalid(currentAmount)) { + if (!currentAmount.length || (!isTaxAmountForm && isAmountInvalid(currentAmount))) { setFormError('iou.error.invalidAmount'); return; } diff --git a/src/pages/settings/AboutPage/ShareLogList/BaseShareLogList.tsx b/src/pages/settings/AboutPage/ShareLogList/BaseShareLogList.tsx index cee62380a011..578efbe5317b 100644 --- a/src/pages/settings/AboutPage/ShareLogList/BaseShareLogList.tsx +++ b/src/pages/settings/AboutPage/ShareLogList/BaseShareLogList.tsx @@ -1,65 +1,52 @@ -import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'; -import {View} from 'react-native'; -import {withOnyx} from 'react-native-onyx'; +import React, {useMemo} from 'react'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import {useBetas} from '@components/OnyxProvider'; import {useOptionsList} from '@components/OptionListContextProvider'; -import OptionsSelector from '@components/OptionsSelector'; import ScreenWrapper from '@components/ScreenWrapper'; +import SelectionList from '@components/SelectionList'; +import UserListItem from '@components/SelectionList/UserListItem'; +import useDebouncedState from '@hooks/useDebouncedState'; import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; -import useThemeStyles from '@hooks/useThemeStyles'; import * as FileUtils from '@libs/fileDownload/FileUtils'; import Navigation from '@libs/Navigation/Navigation'; import * as OptionsListUtils from '@libs/OptionsListUtils'; -import ONYXKEYS from '@src/ONYXKEYS'; +import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; import type {Report} from '@src/types/onyx'; -import type {BaseShareLogListOnyxProps, BaseShareLogListProps} from './types'; +import type {BaseShareLogListProps} from './types'; -function BaseShareLogList({betas, onAttachLogToReport}: BaseShareLogListProps) { - const [searchValue, setSearchValue] = useState(''); - const [searchOptions, setSearchOptions] = useState>({ - recentReports: [], - personalDetails: [], - userToInvite: null, - }); +function BaseShareLogList({onAttachLogToReport}: BaseShareLogListProps) { + const [searchValue, debouncedSearchValue, setSearchValue] = useDebouncedState(''); const {isOffline} = useNetwork(); const {translate} = useLocalize(); - const styles = useThemeStyles(); - const isMounted = useRef(false); + const betas = useBetas(); const {options, areOptionsInitialized} = useOptionsList(); - const updateOptions = useCallback(() => { + + const searchOptions = useMemo(() => { + if (!areOptionsInitialized) { + return { + recentReports: [], + personalDetails: [], + userToInvite: undefined, + headerMessage: '', + }; + } const { recentReports: localRecentReports, personalDetails: localPersonalDetails, userToInvite: localUserToInvite, - } = OptionsListUtils.getShareLogOptions(options, searchValue.trim(), betas ?? []); + } = OptionsListUtils.getShareLogOptions(options, debouncedSearchValue.trim(), betas ?? []); - setSearchOptions({ + const header = OptionsListUtils.getHeaderMessage((localRecentReports?.length || 0) + (localPersonalDetails?.length || 0) !== 0, Boolean(localUserToInvite), debouncedSearchValue); + + return { recentReports: localRecentReports, personalDetails: localPersonalDetails, userToInvite: localUserToInvite, - }); - }, [betas, options, searchValue]); - - useEffect(() => { - if (!areOptionsInitialized) { - return; - } - - updateOptions(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [options, areOptionsInitialized]); - - useEffect(() => { - if (!isMounted.current) { - isMounted.current = true; - return; - } - - updateOptions(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [searchValue]); + headerMessage: header, + }; + }, [areOptionsInitialized, options, debouncedSearchValue, betas]); const sections = useMemo(() => { const sectionsList = []; @@ -84,17 +71,7 @@ function BaseShareLogList({betas, onAttachLogToReport}: BaseShareLogListProps) { } return sectionsList; - }, [searchOptions.personalDetails, searchOptions.recentReports, searchOptions.userToInvite, translate]); - - const headerMessage = OptionsListUtils.getHeaderMessage( - searchOptions.recentReports.length + searchOptions.personalDetails.length !== 0, - Boolean(searchOptions.userToInvite), - searchValue, - ); - - const onChangeText = (value = '') => { - setSearchValue(value); - }; + }, [searchOptions?.personalDetails, searchOptions?.recentReports, searchOptions?.userToInvite, translate]); const attachLogToReport = (option: Report) => { if (!option.reportID) { @@ -110,28 +87,23 @@ function BaseShareLogList({betas, onAttachLogToReport}: BaseShareLogListProps) { testID={BaseShareLogList.displayName} includeSafeAreaPaddingBottom={false} > - {({safeAreaPaddingBottomStyle}) => ( + {({didScreenTransitionEnd}) => ( <> Navigation.goBack(ROUTES.SETTINGS_CONSOLE)} /> - - - + )}
@@ -140,12 +112,4 @@ function BaseShareLogList({betas, onAttachLogToReport}: BaseShareLogListProps) { BaseShareLogList.displayName = 'ShareLogPage'; -export default withOnyx({ - reports: { - key: ONYXKEYS.COLLECTION.REPORT, - }, - betas: { - key: ONYXKEYS.BETAS, - initialValue: [], - }, -})(BaseShareLogList); +export default BaseShareLogList; diff --git a/src/pages/settings/AboutPage/ShareLogList/types.ts b/src/pages/settings/AboutPage/ShareLogList/types.ts index abbdbfb88e0b..500641a3da42 100644 --- a/src/pages/settings/AboutPage/ShareLogList/types.ts +++ b/src/pages/settings/AboutPage/ShareLogList/types.ts @@ -1,21 +1,10 @@ -import type {OnyxCollection, OnyxEntry} from 'react-native-onyx'; -import type {Beta, Report} from '@src/types/onyx'; - -type BaseShareLogListOnyxProps = { - /** Beta features list */ - betas: OnyxEntry; - - /** All reports shared with the user */ - reports: OnyxCollection; -}; - type ShareLogListProps = { /** The source of the log file to share */ logSource: string; }; -type BaseShareLogListProps = BaseShareLogListOnyxProps & { +type BaseShareLogListProps = { onAttachLogToReport: (reportID: string, filename: string) => void; }; -export type {BaseShareLogListOnyxProps, BaseShareLogListProps, ShareLogListProps}; +export type {BaseShareLogListProps, ShareLogListProps}; diff --git a/src/pages/settings/InitialSettingsPage.tsx b/src/pages/settings/InitialSettingsPage.tsx index 73bd031b5978..a307f6cf6a7f 100755 --- a/src/pages/settings/InitialSettingsPage.tsx +++ b/src/pages/settings/InitialSettingsPage.tsx @@ -250,6 +250,11 @@ function InitialSettingsPage({session, userWallet, bankAccountList, fundList, wa icon: Expensicons.Info, routeName: ROUTES.SETTINGS_ABOUT, }, + { + translationKey: 'sidebarScreen.saveTheWorld', + icon: Expensicons.Heart, + routeName: ROUTES.SETTINGS_SAVE_THE_WORLD, + }, { translationKey: signOutTranslationKey, icon: Expensicons.Exit, diff --git a/src/pages/settings/Profile/CustomStatus/StatusPage.tsx b/src/pages/settings/Profile/CustomStatus/StatusPage.tsx index bb7be4a6866c..5dc1c1832d39 100644 --- a/src/pages/settings/Profile/CustomStatus/StatusPage.tsx +++ b/src/pages/settings/Profile/CustomStatus/StatusPage.tsx @@ -162,11 +162,13 @@ function StatusPage({draftStatus, currentUserPersonalDetails}: StatusPageProps) {}} + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onInputChange={(emoji: string): void => {}} /> ; + /** Whether app is loading */ + isLoadingApp: OnyxEntry; }; type AddressPageProps = StackScreenProps & AddressPageOnyxProps; @@ -43,9 +44,8 @@ function updateAddress(values: FormOnyxValues privatePersonalDetails?.address, [privatePersonalDetails]); const countryFromUrlTemp = route?.params?.country; @@ -54,7 +54,6 @@ function AddressPage({privatePersonalDetails, route}: AddressPageProps) { const countryFromUrl = CONST.ALL_COUNTRIES[countryFromUrlTemp as keyof typeof CONST.ALL_COUNTRIES] ? countryFromUrlTemp : ''; const stateFromUrl = useGeographicalStateFromRoute(); const [currentCountry, setCurrentCountry] = useState(address?.country); - const isLoadingPersonalDetails = privatePersonalDetails?.isLoading ?? true; const [street1, street2] = (address?.street ?? '').split('\n'); const [state, setState] = useState(address?.state); const [city, setCity] = useState(address?.city); @@ -122,7 +121,7 @@ function AddressPage({privatePersonalDetails, route}: AddressPageProps) { shouldShowBackButton onBackButtonPress={() => Navigation.goBack()} /> - {isLoadingPersonalDetails ? ( + {isLoadingApp ? ( ) : ( ({ privatePersonalDetails: { key: ONYXKEYS.PRIVATE_PERSONAL_DETAILS, }, + isLoadingApp: { + key: ONYXKEYS.IS_LOADING_APP, + }, })(AddressPage); diff --git a/src/pages/settings/Profile/PersonalDetails/DateOfBirthPage.tsx b/src/pages/settings/Profile/PersonalDetails/DateOfBirthPage.tsx index fed313b69c7e..e91093731c03 100644 --- a/src/pages/settings/Profile/PersonalDetails/DateOfBirthPage.tsx +++ b/src/pages/settings/Profile/PersonalDetails/DateOfBirthPage.tsx @@ -10,7 +10,6 @@ import FullscreenLoadingIndicator from '@components/FullscreenLoadingIndicator'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; import ScreenWrapper from '@components/ScreenWrapper'; import useLocalize from '@hooks/useLocalize'; -import usePrivatePersonalDetails from '@hooks/usePrivatePersonalDetails'; import useThemeStyles from '@hooks/useThemeStyles'; import Navigation from '@libs/Navigation/Navigation'; import * as ValidationUtils from '@libs/ValidationUtils'; @@ -23,14 +22,14 @@ import type {PrivatePersonalDetails} from '@src/types/onyx'; type DateOfBirthPageOnyxProps = { /** User's private personal details */ privatePersonalDetails: OnyxEntry; + /** Whether app is loading */ + isLoadingApp: OnyxEntry; }; type DateOfBirthPageProps = DateOfBirthPageOnyxProps; -function DateOfBirthPage({privatePersonalDetails}: DateOfBirthPageProps) { +function DateOfBirthPage({privatePersonalDetails, isLoadingApp = true}: DateOfBirthPageProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); - usePrivatePersonalDetails(); - const isLoadingPersonalDetails = privatePersonalDetails?.isLoading ?? true; /** * @returns An object containing the errors for each inputID @@ -59,7 +58,7 @@ function DateOfBirthPage({privatePersonalDetails}: DateOfBirthPageProps) { title={translate('common.dob')} onBackButtonPress={() => Navigation.goBack()} /> - {isLoadingPersonalDetails ? ( + {isLoadingApp ? ( ) : ( ({ privatePersonalDetails: { key: ONYXKEYS.PRIVATE_PERSONAL_DETAILS, }, + isLoadingApp: { + key: ONYXKEYS.IS_LOADING_APP, + }, })(DateOfBirthPage); diff --git a/src/pages/settings/Profile/PersonalDetails/LegalNamePage.tsx b/src/pages/settings/Profile/PersonalDetails/LegalNamePage.tsx index 5e8e4ea493a0..a957740e81d0 100644 --- a/src/pages/settings/Profile/PersonalDetails/LegalNamePage.tsx +++ b/src/pages/settings/Profile/PersonalDetails/LegalNamePage.tsx @@ -10,7 +10,6 @@ import HeaderWithBackButton from '@components/HeaderWithBackButton'; import ScreenWrapper from '@components/ScreenWrapper'; import TextInput from '@components/TextInput'; import useLocalize from '@hooks/useLocalize'; -import usePrivatePersonalDetails from '@hooks/usePrivatePersonalDetails'; import useThemeStyles from '@hooks/useThemeStyles'; import * as ErrorUtils from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; @@ -25,6 +24,8 @@ import type {Errors} from '@src/types/onyx/OnyxCommon'; type LegalNamePageOnyxProps = { /** User's private personal details */ privatePersonalDetails: OnyxEntry; + /** Whether app is loading */ + isLoadingApp: OnyxEntry; }; type LegalNamePageProps = LegalNamePageOnyxProps; @@ -33,13 +34,11 @@ const updateLegalName = (values: PrivatePersonalDetails) => { PersonalDetails.updateLegalName(values.legalFirstName?.trim() ?? '', values.legalLastName?.trim() ?? ''); }; -function LegalNamePage({privatePersonalDetails}: LegalNamePageProps) { +function LegalNamePage({privatePersonalDetails, isLoadingApp = true}: LegalNamePageProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); - usePrivatePersonalDetails(); const legalFirstName = privatePersonalDetails?.legalFirstName ?? ''; const legalLastName = privatePersonalDetails?.legalLastName ?? ''; - const isLoadingPersonalDetails = privatePersonalDetails?.isLoading ?? true; const validate = useCallback((values: FormOnyxValues) => { const errors: Errors = {}; @@ -86,7 +85,7 @@ function LegalNamePage({privatePersonalDetails}: LegalNamePageProps) { title={translate('privatePersonalDetails.legalName')} onBackButtonPress={() => Navigation.goBack()} /> - {isLoadingPersonalDetails ? ( + {isLoadingApp ? ( ) : ( ({ privatePersonalDetails: { key: ONYXKEYS.PRIVATE_PERSONAL_DETAILS, }, + isLoadingApp: { + key: ONYXKEYS.IS_LOADING_APP, + }, })(LegalNamePage); diff --git a/src/pages/settings/Profile/ProfilePage.tsx b/src/pages/settings/Profile/ProfilePage.tsx index 58a323bf0a10..4c5ed88e6898 100755 --- a/src/pages/settings/Profile/ProfilePage.tsx +++ b/src/pages/settings/Profile/ProfilePage.tsx @@ -13,7 +13,6 @@ import Section from '@components/Section'; import type {WithCurrentUserPersonalDetailsProps} from '@components/withCurrentUserPersonalDetails'; import withCurrentUserPersonalDetails from '@components/withCurrentUserPersonalDetails'; import useLocalize from '@hooks/useLocalize'; -import usePrivatePersonalDetails from '@hooks/usePrivatePersonalDetails'; import useStyleUtils from '@hooks/useStyleUtils'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; @@ -33,6 +32,8 @@ type ProfilePageOnyxProps = { loginList: OnyxEntry; /** User's private personal details */ privatePersonalDetails: OnyxEntry; + /** Whether app is loading */ + isLoadingApp: OnyxEntry; }; type ProfilePageProps = ProfilePageOnyxProps & WithCurrentUserPersonalDetailsProps; @@ -53,6 +54,7 @@ function ProfilePage({ }, }, currentUserPersonalDetails, + isLoadingApp, }: ProfilePageProps) { const theme = useTheme(); const styles = useThemeStyles(); @@ -67,10 +69,8 @@ function ProfilePage({ const contactMethodBrickRoadIndicator = UserUtils.getLoginListBrickRoadIndicator(loginList); const emojiCode = currentUserPersonalDetails?.status?.emojiCode ?? ''; - usePrivatePersonalDetails(); const privateDetails = privatePersonalDetails ?? {}; const legalName = `${privateDetails.legalFirstName ?? ''} ${privateDetails.legalLastName ?? ''}`.trim(); - const isLoadingPersonalDetails = privatePersonalDetails?.isLoading ?? true; const publicOptions = [ { @@ -167,7 +167,7 @@ function ProfilePage({ childrenStyles={styles.pt3} titleStyles={styles.accountSettingsSectionTitle} > - {isLoadingPersonalDetails ? ( + {isLoadingApp ? ( ) : ( <> @@ -202,5 +202,8 @@ export default withCurrentUserPersonalDetails( privatePersonalDetails: { key: ONYXKEYS.PRIVATE_PERSONAL_DETAILS, }, + isLoadingApp: { + key: ONYXKEYS.IS_LOADING_APP, + }, })(ProfilePage), ); diff --git a/src/pages/settings/Profile/TimezoneInitialPage.tsx b/src/pages/settings/Profile/TimezoneInitialPage.tsx index 1df0063c57b1..433a49787681 100644 --- a/src/pages/settings/Profile/TimezoneInitialPage.tsx +++ b/src/pages/settings/Profile/TimezoneInitialPage.tsx @@ -44,7 +44,7 @@ function TimezoneInitialPage({currentUserPersonalDetails}: TimezoneInitialPagePr {translate('timezonePage.isShownOnProfile')} - {translate('timezonePage.getLocationAutomatically')} + {translate('timezonePage.getLocationAutomatically')} { diff --git a/src/pages/tasks/TaskAssigneeSelectorModal.tsx b/src/pages/tasks/TaskAssigneeSelectorModal.tsx index 7a6ff74087de..4ebabbce350e 100644 --- a/src/pages/tasks/TaskAssigneeSelectorModal.tsx +++ b/src/pages/tasks/TaskAssigneeSelectorModal.tsx @@ -171,7 +171,7 @@ function TaskAssigneeSelectorModal({reports, task}: TaskAssigneeSelectorModalPro option?.login ?? '', option?.accountID ?? -1, report.reportID, - report, + null, // passing null as report because for editing task the report will be task details report page not the actual report where task was created OptionsListUtils.isCurrentUser({...option, accountID: option?.accountID ?? -1, login: option?.login ?? ''}), ); @@ -185,7 +185,7 @@ function TaskAssigneeSelectorModal({reports, task}: TaskAssigneeSelectorModalPro option?.login ?? '', option.accountID, task?.shareDestination ?? '', - report, + null, // passing null as report is null in this condition OptionsListUtils.isCurrentUser({...option, accountID: option?.accountID ?? -1, login: option?.login ?? undefined}), ); Navigation.goBack(ROUTES.NEW_TASK); diff --git a/src/pages/workspace/WorkspaceInitialPage.tsx b/src/pages/workspace/WorkspaceInitialPage.tsx index 6d67b4549f29..2e9094f565de 100644 --- a/src/pages/workspace/WorkspaceInitialPage.tsx +++ b/src/pages/workspace/WorkspaceInitialPage.tsx @@ -14,6 +14,7 @@ import OfflineWithFeedback from '@components/OfflineWithFeedback'; import ScreenWrapper from '@components/ScreenWrapper'; import ScrollView from '@components/ScrollView'; import useLocalize from '@hooks/useLocalize'; +import usePermissions from '@hooks/usePermissions'; import usePrevious from '@hooks/usePrevious'; import useSingleExecution from '@hooks/useSingleExecution'; import useThemeStyles from '@hooks/useThemeStyles'; @@ -69,6 +70,7 @@ function WorkspaceInitialPage({policyDraft, policy: policyProp, policyMembers, r const {singleExecution, isExecuting} = useSingleExecution(); const activeRoute = useNavigationState(getTopmostWorkspacesCentralPaneName); const {translate} = useLocalize(); + const {canUseAccountingIntegrations} = usePermissions(); const policyID = policy?.id ?? ''; const policyName = policy?.name ?? ''; @@ -198,6 +200,17 @@ function WorkspaceInitialPage({policyDraft, policy: policyProp, policyMembers, r }); } + if (policy?.areConnectionsEnabled && canUseAccountingIntegrations) { + protectedCollectPolicyMenuItems.push({ + translationKey: 'workspace.common.accounting', + icon: Expensicons.Sync, + action: singleExecution(waitForNavigate(() => Navigation.navigate(ROUTES.WORKSPACE_ACCOUNTING.getRoute(policyID)))), + // brickRoadIndicator should be set when API will be ready + brickRoadIndicator: undefined, + routeName: SCREENS.WORKSPACE.ACCOUNTING, + }); + } + protectedCollectPolicyMenuItems.push({ translationKey: 'workspace.common.moreFeatures', icon: Expensicons.Gear, diff --git a/src/pages/workspace/WorkspaceMembersPage.tsx b/src/pages/workspace/WorkspaceMembersPage.tsx index 9f210cb6d2ac..1a76eecb533f 100644 --- a/src/pages/workspace/WorkspaceMembersPage.tsx +++ b/src/pages/workspace/WorkspaceMembersPage.tsx @@ -289,7 +289,7 @@ function WorkspaceMembersPage({ } Policy.clearWorkspaceOwnerChangeFlow(policyID); - Navigation.navigate(ROUTES.WORKSPACE_MEMBER_DETAILS.getRoute(route.params.policyID, item.accountID, Navigation.getActiveRoute())); + Navigation.navigate(ROUTES.WORKSPACE_MEMBER_DETAILS.getRoute(route.params.policyID, item.accountID)); }, [isPolicyAdmin, policy, policyID, route.params.policyID], ); diff --git a/src/pages/workspace/WorkspaceResetBankAccountModal.js b/src/pages/workspace/WorkspaceResetBankAccountModal.tsx similarity index 63% rename from src/pages/workspace/WorkspaceResetBankAccountModal.js rename to src/pages/workspace/WorkspaceResetBankAccountModal.tsx index 4c4b022039ba..e7a8ce307816 100644 --- a/src/pages/workspace/WorkspaceResetBankAccountModal.js +++ b/src/pages/workspace/WorkspaceResetBankAccountModal.tsx @@ -1,40 +1,35 @@ -import lodashGet from 'lodash/get'; -import PropTypes from 'prop-types'; import React from 'react'; +import type {OnyxEntry} from 'react-native-onyx'; import {withOnyx} from 'react-native-onyx'; import ConfirmModal from '@components/ConfirmModal'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import BankAccount from '@libs/models/BankAccount'; -import * as ReimbursementAccountProps from '@pages/ReimbursementAccount/reimbursementAccountPropTypes'; import * as BankAccounts from '@userActions/BankAccounts'; import ONYXKEYS from '@src/ONYXKEYS'; +import type * as OnyxTypes from '@src/types/onyx'; -const propTypes = { - /** Reimbursement account data */ - reimbursementAccount: ReimbursementAccountProps.reimbursementAccountPropTypes.isRequired, - +type WorkspaceResetBankAccountModalOnyxProps = { /** Session info for the currently logged in user. */ - session: PropTypes.shape({ - /** Currently logged in user email */ - email: PropTypes.string, - }).isRequired, + session: OnyxEntry; - /** Information about the logged in user's account */ - user: PropTypes.shape({ - /** Whether or not the user is on a public domain email account or not */ - isFromPublicDomain: PropTypes.bool, - }).isRequired, + /** The user's data */ + user: OnyxEntry; +}; + +type WorkspaceResetBankAccountModalProps = WorkspaceResetBankAccountModalOnyxProps & { + /** Reimbursement account data */ + reimbursementAccount: OnyxEntry; }; -function WorkspaceResetBankAccountModal({reimbursementAccount, session, user}) { +function WorkspaceResetBankAccountModal({reimbursementAccount, session, user}: WorkspaceResetBankAccountModalProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); - const achData = lodashGet(reimbursementAccount, 'achData') || {}; - const isInOpenState = achData.state === BankAccount.STATE.OPEN; - const bankAccountID = achData.bankAccountID; - const bankShortName = `${achData.addressName || ''} ${(achData.accountNumber || '').slice(-4)}`; + const achData = reimbursementAccount?.achData; + const isInOpenState = achData?.state === BankAccount.STATE.OPEN; + const bankAccountID = achData?.bankAccountID; + const bankShortName = `${achData?.addressName ?? ''} ${(achData?.accountNumber ?? '').slice(-4)}`; return ( BankAccounts.resetFreePlanBankAccount(bankAccountID, session, achData.policyID, user)} + onConfirm={() => BankAccounts.resetFreePlanBankAccount(bankAccountID, session, achData?.policyID ?? '', user)} shouldShowCancelButton isVisible /> @@ -62,9 +57,8 @@ function WorkspaceResetBankAccountModal({reimbursementAccount, session, user}) { } WorkspaceResetBankAccountModal.displayName = 'WorkspaceResetBankAccountModal'; -WorkspaceResetBankAccountModal.propTypes = propTypes; -export default withOnyx({ +export default withOnyx({ session: { key: ONYXKEYS.SESSION, }, diff --git a/src/pages/workspace/WorkspacesListPage.tsx b/src/pages/workspace/WorkspacesListPage.tsx index 549d307b2a2f..3a24f22996c0 100755 --- a/src/pages/workspace/WorkspacesListPage.tsx +++ b/src/pages/workspace/WorkspacesListPage.tsx @@ -209,13 +209,14 @@ function WorkspacesListPage({policies, allPolicyMembers, reimbursementAccount, r layoutWidth={isLessThanMediumScreen ? CONST.LAYOUT_WIDTH.NARROW : CONST.LAYOUT_WIDTH.WIDE} brickRoadIndicator={item.brickRoadIndicator} shouldDisableThreeDotsMenu={item.disabled} + style={[item.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE ? styles.offlineFeedback.deleted : {}]} /> )} ); }, - [isLessThanMediumScreen, styles.mb3, styles.mh5, styles.ph5, styles.hoveredComponentBG, translate], + [isLessThanMediumScreen, styles.mb3, styles.mh5, styles.ph5, styles.hoveredComponentBG, translate, styles.offlineFeedback.deleted], ); const listHeaderComponent = useCallback(() => { diff --git a/src/pages/workspace/accounting/WorkspaceAccountingPage.tsx b/src/pages/workspace/accounting/WorkspaceAccountingPage.tsx new file mode 100644 index 000000000000..2c87e8803be6 --- /dev/null +++ b/src/pages/workspace/accounting/WorkspaceAccountingPage.tsx @@ -0,0 +1,238 @@ +import React, {useCallback, useMemo, useRef, useState} from 'react'; +import {ActivityIndicator, View} from 'react-native'; +// import ConnectToQuickbooksOnlineButton from './qboConnectionButton'; +import Button from '@components/Button'; +import ConfirmModal from '@components/ConfirmModal'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import * as Expensicons from '@components/Icon/Expensicons'; +import * as Illustrations from '@components/Icon/Illustrations'; +import type {MenuItemProps} from '@components/MenuItem'; +import MenuItemList from '@components/MenuItemList'; +import ScreenWrapper from '@components/ScreenWrapper'; +import ScrollView from '@components/ScrollView'; +import Section from '@components/Section'; +import ThreeDotsMenu from '@components/ThreeDotsMenu'; +import type ThreeDotsMenuProps from '@components/ThreeDotsMenu/types'; +import useLocalize from '@hooks/useLocalize'; +import useTheme from '@hooks/useTheme'; +import useThemeStyles from '@hooks/useThemeStyles'; +// import useWaitForNavigation from '@hooks/useWaitForNavigation'; +import useWindowDimensions from '@hooks/useWindowDimensions'; +import AdminPolicyAccessOrNotFoundWrapper from '@pages/workspace/AdminPolicyAccessOrNotFoundWrapper'; +import FeatureEnabledAccessOrNotFoundWrapper from '@pages/workspace/FeatureEnabledAccessOrNotFoundWrapper'; +import PaidPolicyAccessOrNotFoundWrapper from '@pages/workspace/PaidPolicyAccessOrNotFoundWrapper'; +import withPolicy from '@pages/workspace/withPolicy'; +import type {WithPolicyProps} from '@pages/workspace/withPolicy'; +import type {AnchorPosition} from '@styles/index'; +import CONST from '@src/CONST'; + +function WorkspaceAccountingPage({policy}: WithPolicyProps) { + const theme = useTheme(); + const styles = useThemeStyles(); + const {translate} = useLocalize(); + // const {environmentURL} = useEnvironment(); + // const waitForNavigate = useWaitForNavigation(); + const {isSmallScreenWidth, windowWidth} = useWindowDimensions(); + + const [threeDotsMenuPosition, setThreeDotsMenuPosition] = useState({horizontal: 0, vertical: 0}); + + // TODO + const [policyIsConnectedToAccountingSystem, setPolicyIsConnectedToAccountingSystem] = useState(false); + + // TODO + const [isSyncInProgress, setIsSyncInProgress] = useState(false); + + const [isDisconnectModalOpen, setIsDisconnectModalOpen] = useState(false); + const threeDotsMenuContainerRef = useRef(null); + + const policyID = policy?.id ?? ''; + + // TODO remove + // fake a QBO connection sync + const openQBOsync = useCallback(() => { + setIsSyncInProgress(true); + setTimeout(() => setIsSyncInProgress(false), 5000); + setPolicyIsConnectedToAccountingSystem(true); + }, []); + + const connectionsMenuItems: MenuItemProps[] = useMemo( + () => [ + { + icon: Expensicons.QBOSquare, + iconType: 'avatar', + interactive: false, + wrapperStyle: [styles.sectionMenuItemTopDescription], + shouldShowRightComponent: true, + title: translate('workspace.accounting.qbo'), + rightComponent: ( + // TODO use ConnectToQuickbooksOnlineButton instead + // + +