diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e5f5bdc..9e9acdc 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -18,6 +18,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 - run: npm install - run: npm test - run: npm run build diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 89e183a..c97f894 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -17,8 +17,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - fetch-depth: 0 + node-version: 20 - run: npm install - run: npm run lint - run: npm test diff --git a/.github/workflows/twitter-event.yml b/.github/workflows/twitter-event.yml deleted file mode 100644 index 36d7f44..0000000 --- a/.github/workflows/twitter-event.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Tweet an Event on Twitter - -on: - workflow_call: - inputs: - status: - type: string - required: true - secrets: - consumer-key: - required: true - consumer-secret: - required: true - access-token: - required: true - access-token-secret: - required: true - -jobs: - twitter: - runs-on: ubuntu-latest - steps: - - uses: ethomson/send-tweet-action@v1 - with: - status: ${{ inputs.status }} - consumer-key: ${{ secrets.consumer-key }} - consumer-secret: ${{ secrets.consumer-secret }} - access-token: ${{ secrets.access-token }} - access-token-secret: ${{ secrets.access-token-secret }} diff --git a/.gitignore b/.gitignore index 593a9aa..9e72cec 100644 --- a/.gitignore +++ b/.gitignore @@ -34,4 +34,5 @@ coverage *.tgz # dotenv environment variables file -.env \ No newline at end of file +.env +.tap \ No newline at end of file diff --git a/action.yml b/action.yml index 8e27481..6c683e6 100644 --- a/action.yml +++ b/action.yml @@ -4,5 +4,5 @@ branding: color: yellow icon: rss runs: - main: src/index.js - using: node16 + main: dist/index.js + using: node20 diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index 594e0c0..0000000 --- a/dist/index.js +++ /dev/null @@ -1,44632 +0,0 @@ -import './sourcemap-register.cjs' -import { createRequire as __WEBPACK_EXTERNAL_createRequire } from 'module' -/******/ var __webpack_modules__ = { - /***/ 7351: /***/ function ( - __unused_webpack_module, - exports, - __nccwpck_require__ - ) { - 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.issue = exports.issueCommand = void 0 - const os = __importStar(__nccwpck_require__(2037)) - const utils_1 = __nccwpck_require__(5278) - /** - * Commands - * - * Command Format: - * ::name key=value,key=value::message - * - * Examples: - * ::warning::This is the message - * ::set-env name=MY_VAR::some value - */ - function issueCommand(command, properties, message) { - const cmd = new Command(command, properties, message) - process.stdout.write(cmd.toString() + os.EOL) - } - exports.issueCommand = issueCommand - function issue(name, message = '') { - issueCommand(name, {}, message) - } - exports.issue = issue - const CMD_STRING = '::' - class Command { - constructor(command, properties, message) { - if (!command) { - command = 'missing.command' - } - this.command = command - this.properties = properties - this.message = message - } - toString() { - let cmdStr = CMD_STRING + this.command - if (this.properties && Object.keys(this.properties).length > 0) { - cmdStr += ' ' - let first = true - for (const key in this.properties) { - if (this.properties.hasOwnProperty(key)) { - const val = this.properties[key] - if (val) { - if (first) { - first = false - } else { - cmdStr += ',' - } - cmdStr += `${key}=${escapeProperty(val)}` - } - } - } - } - cmdStr += `${CMD_STRING}${escapeData(this.message)}` - return cmdStr - } - } - function escapeData(s) { - return utils_1 - .toCommandValue(s) - .replace(/%/g, '%25') - .replace(/\r/g, '%0D') - .replace(/\n/g, '%0A') - } - function escapeProperty(s) { - return utils_1 - .toCommandValue(s) - .replace(/%/g, '%25') - .replace(/\r/g, '%0D') - .replace(/\n/g, '%0A') - .replace(/:/g, '%3A') - .replace(/,/g, '%2C') - } - //# sourceMappingURL=command.js.map - - /***/ - }, - - /***/ 2186: /***/ function ( - __unused_webpack_module, - exports, - __nccwpck_require__ - ) { - 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.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) - /** - * The code to exit an action - */ - var ExitCode - ;(function (ExitCode) { - /** - * A code indicating that the action was successful - */ - ExitCode[(ExitCode['Success'] = 0)] = 'Success' - /** - * A code indicating that the action was a failure - */ - ExitCode[(ExitCode['Failure'] = 1)] = 'Failure' - })((ExitCode = exports.ExitCode || (exports.ExitCode = {}))) - //----------------------------------------------------------------------- - // Variables - //----------------------------------------------------------------------- - /** - * Sets env variable for this action and future actions in the job - * @param name the name of the variable to set - * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - function exportVariable(name, val) { - const convertedVal = utils_1.toCommandValue(val) - process.env[name] = convertedVal - const filePath = process.env['GITHUB_ENV'] || '' - if (filePath) { - return file_command_1.issueFileCommand( - 'ENV', - file_command_1.prepareKeyValueMessage(name, val) - ) - } - command_1.issueCommand('set-env', { name }, convertedVal) - } - exports.exportVariable = exportVariable - /** - * Registers a secret which will get masked from logs - * @param secret value of the secret - */ - function setSecret(secret) { - command_1.issueCommand('add-mask', {}, secret) - } - exports.setSecret = setSecret - /** - * Prepends inputPath to the PATH (for this action and future actions) - * @param inputPath - */ - function addPath(inputPath) { - const filePath = process.env['GITHUB_PATH'] || '' - if (filePath) { - file_command_1.issueFileCommand('PATH', inputPath) - } else { - command_1.issueCommand('add-path', {}, inputPath) - } - process.env[ - 'PATH' - ] = `${inputPath}${path.delimiter}${process.env['PATH']}` - } - exports.addPath = addPath - /** - * Gets the value of an input. - * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed. - * Returns an empty string if the value is not defined. - * - * @param name name of the input to get - * @param options optional. See InputOptions. - * @returns string - */ - function getInput(name, options) { - const val = - process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '' - if (options && options.required && !val) { - throw new Error(`Input required and not supplied: ${name}`) - } - if (options && options.trimWhitespace === false) { - return val - } - return val.trim() - } - exports.getInput = getInput - /** - * Gets the values of an multiline input. Each value is also trimmed. - * - * @param name name of the input to get - * @param options optional. See InputOptions. - * @returns string[] - * - */ - function getMultilineInput(name, options) { - const inputs = getInput(name, options) - .split('\n') - .filter((x) => x !== '') - if (options && options.trimWhitespace === false) { - return inputs - } - return inputs.map((input) => input.trim()) - } - exports.getMultilineInput = getMultilineInput - /** - * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification. - * Support boolean input list: `true | True | TRUE | false | False | FALSE` . - * The return value is also in boolean type. - * ref: https://yaml.org/spec/1.2/spec.html#id2804923 - * - * @param name name of the input to get - * @param options optional. See InputOptions. - * @returns boolean - */ - function getBooleanInput(name, options) { - const trueValue = ['true', 'True', 'TRUE'] - const falseValue = ['false', 'False', 'FALSE'] - const val = getInput(name, options) - if (trueValue.includes(val)) return true - if (falseValue.includes(val)) return false - throw new TypeError( - `Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` + - `Support boolean input list: \`true | True | TRUE | false | False | FALSE\`` - ) - } - exports.getBooleanInput = getBooleanInput - /** - * Sets the value of an output. - * - * @param name name of the output to set - * @param value value to store. Non-string values will be converted to a string via JSON.stringify - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - function setOutput(name, value) { - const filePath = process.env['GITHUB_OUTPUT'] || '' - if (filePath) { - return file_command_1.issueFileCommand( - 'OUTPUT', - file_command_1.prepareKeyValueMessage(name, value) - ) - } - process.stdout.write(os.EOL) - command_1.issueCommand( - 'set-output', - { name }, - utils_1.toCommandValue(value) - ) - } - exports.setOutput = setOutput - /** - * Enables or disables the echoing of commands into stdout for the rest of the step. - * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set. - * - */ - function setCommandEcho(enabled) { - command_1.issue('echo', enabled ? 'on' : 'off') - } - exports.setCommandEcho = setCommandEcho - //----------------------------------------------------------------------- - // Results - //----------------------------------------------------------------------- - /** - * Sets the action status to failed. - * When the action exits it will be with an exit code of 1 - * @param message add error issue message - */ - function setFailed(message) { - process.exitCode = ExitCode.Failure - error(message) - } - exports.setFailed = setFailed - //----------------------------------------------------------------------- - // Logging Commands - //----------------------------------------------------------------------- - /** - * Gets whether Actions Step Debug is on or not - */ - function isDebug() { - return process.env['RUNNER_DEBUG'] === '1' - } - exports.isDebug = isDebug - /** - * Writes debug message to user log - * @param message debug message - */ - function debug(message) { - command_1.issueCommand('debug', {}, message) - } - exports.debug = debug - /** - * Adds an error issue - * @param message error issue message. Errors will be converted to string via toString() - * @param properties optional properties to add to the annotation. - */ - function error(message, properties = {}) { - command_1.issueCommand( - 'error', - utils_1.toCommandProperties(properties), - message instanceof Error ? message.toString() : message - ) - } - exports.error = error - /** - * Adds a warning issue - * @param message warning issue message. Errors will be converted to string via toString() - * @param properties optional properties to add to the annotation. - */ - function warning(message, properties = {}) { - command_1.issueCommand( - 'warning', - utils_1.toCommandProperties(properties), - message instanceof Error ? message.toString() : message - ) - } - exports.warning = warning - /** - * Adds a notice issue - * @param message notice issue message. Errors will be converted to string via toString() - * @param properties optional properties to add to the annotation. - */ - function notice(message, properties = {}) { - command_1.issueCommand( - 'notice', - utils_1.toCommandProperties(properties), - message instanceof Error ? message.toString() : message - ) - } - exports.notice = notice - /** - * Writes info to log with console.log. - * @param message info message - */ - function info(message) { - process.stdout.write(message + os.EOL) - } - exports.info = info - /** - * Begin an output group. - * - * Output until the next `groupEnd` will be foldable in this group - * - * @param name The name of the output group - */ - function startGroup(name) { - command_1.issue('group', name) - } - exports.startGroup = startGroup - /** - * End an output group. - */ - function endGroup() { - command_1.issue('endgroup') - } - exports.endGroup = endGroup - /** - * Wrap an asynchronous function call in a group. - * - * Returns the same type as the function itself. - * - * @param name The name of the group - * @param fn The function to wrap in the group - */ - function group(name, fn) { - return __awaiter(this, void 0, void 0, function* () { - startGroup(name) - let result - try { - result = yield fn() - } finally { - endGroup() - } - return result - }) - } - exports.group = group - //----------------------------------------------------------------------- - // Wrapper action state - //----------------------------------------------------------------------- - /** - * Saves state for current action, the state can only be retrieved by this action's post job execution. - * - * @param name name of the state to store - * @param value value to store. Non-string values will be converted to a string via JSON.stringify - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - function saveState(name, value) { - const filePath = process.env['GITHUB_STATE'] || '' - if (filePath) { - return file_command_1.issueFileCommand( - 'STATE', - file_command_1.prepareKeyValueMessage(name, value) - ) - } - command_1.issueCommand( - 'save-state', - { name }, - utils_1.toCommandValue(value) - ) - } - exports.saveState = saveState - /** - * Gets the value of an state set by this action's main execution. - * - * @param name name of the state to get - * @returns string - */ - function getState(name) { - return process.env[`STATE_${name}`] || '' - } - exports.getState = getState - function getIDToken(aud) { - return __awaiter(this, void 0, void 0, function* () { - return yield oidc_utils_1.OidcClient.getIDToken(aud) - }) - } - exports.getIDToken = getIDToken - /** - * Summary exports - */ - var summary_1 = __nccwpck_require__(1327) - Object.defineProperty(exports, 'summary', { - enumerable: true, - get: function () { - return summary_1.summary - } - }) - /** - * @deprecated use core.summary - */ - var summary_2 = __nccwpck_require__(1327) - Object.defineProperty(exports, 'markdownSummary', { - enumerable: true, - get: function () { - return summary_2.markdownSummary - } - }) - /** - * Path exports - */ - var path_utils_1 = __nccwpck_require__(2981) - 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 - } - }) - //# sourceMappingURL=core.js.map - - /***/ - }, - - /***/ 717: /***/ function ( - __unused_webpack_module, - exports, - __nccwpck_require__ - ) { - // For internal use, subject to change. - 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.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) - function issueFileCommand(command, message) { - const filePath = process.env[`GITHUB_${command}`] - if (!filePath) { - throw new Error( - `Unable to find environment variable for file command ${command}` - ) - } - if (!fs.existsSync(filePath)) { - throw new Error(`Missing file at path: ${filePath}`) - } - fs.appendFileSync( - filePath, - `${utils_1.toCommandValue(message)}${os.EOL}`, - { - encoding: 'utf8' - } - ) - } - exports.issueFileCommand = issueFileCommand - function prepareKeyValueMessage(key, value) { - const delimiter = `ghadelimiter_${uuid_1.v4()}` - const convertedValue = utils_1.toCommandValue(value) - // These should realistically never happen, but just in case someone finds a - // way to exploit uuid generation let's not allow keys or values that contain - // the delimiter. - if (key.includes(delimiter)) { - throw new Error( - `Unexpected input: name should not contain the delimiter "${delimiter}"` - ) - } - if (convertedValue.includes(delimiter)) { - throw new Error( - `Unexpected input: value should not contain the delimiter "${delimiter}"` - ) - } - return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}` - } - exports.prepareKeyValueMessage = prepareKeyValueMessage - //# sourceMappingURL=file-command.js.map - - /***/ - }, - - /***/ 8041: /***/ function ( - __unused_webpack_module, - exports, - __nccwpck_require__ - ) { - 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.OidcClient = void 0 - const http_client_1 = __nccwpck_require__(6255) - const auth_1 = __nccwpck_require__(5526) - const core_1 = __nccwpck_require__(2186) - class OidcClient { - static createHttpClient(allowRetry = true, maxRetry = 10) { - const requestOptions = { - allowRetries: allowRetry, - maxRetries: maxRetry - } - return new http_client_1.HttpClient( - 'actions/oidc-client', - [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], - requestOptions - ) - } - static getRequestToken() { - const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN'] - if (!token) { - throw new Error( - 'Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable' - ) - } - return token - } - static getIDTokenUrl() { - const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL'] - if (!runtimeUrl) { - throw new Error( - 'Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable' - ) - } - return runtimeUrl - } - static getCall(id_token_url) { - var _a - return __awaiter(this, void 0, void 0, function* () { - const httpclient = OidcClient.createHttpClient() - const res = yield httpclient.getJson(id_token_url).catch((error) => { - throw new Error(`Failed to get ID Token. \n - Error Code : ${error.statusCode}\n - Error Message: ${error.result.message}`) - }) - const id_token = - (_a = res.result) === null || _a === void 0 ? void 0 : _a.value - if (!id_token) { - throw new Error('Response json body do not have ID Token field') - } - return id_token - }) - } - static getIDToken(audience) { - return __awaiter(this, void 0, void 0, function* () { - try { - // New ID Token is requested from action service - let id_token_url = OidcClient.getIDTokenUrl() - if (audience) { - const encodedAudience = encodeURIComponent(audience) - id_token_url = `${id_token_url}&audience=${encodedAudience}` - } - core_1.debug(`ID token url is ${id_token_url}`) - const id_token = yield OidcClient.getCall(id_token_url) - core_1.setSecret(id_token) - return id_token - } catch (error) { - throw new Error(`Error message: ${error.message}`) - } - }) - } - } - exports.OidcClient = OidcClient - //# sourceMappingURL=oidc-utils.js.map - - /***/ - }, - - /***/ 2981: /***/ function ( - __unused_webpack_module, - exports, - __nccwpck_require__ - ) { - 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.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0 - const path = __importStar(__nccwpck_require__(1017)) - /** - * toPosixPath converts the given path to the posix form. On Windows, \\ will be - * replaced with /. - * - * @param pth. Path to transform. - * @return string Posix path. - */ - function toPosixPath(pth) { - return pth.replace(/[\\]/g, '/') - } - exports.toPosixPath = toPosixPath - /** - * toWin32Path converts the given path to the win32 form. On Linux, / will be - * replaced with \\. - * - * @param pth. Path to transform. - * @return string Win32 path. - */ - function toWin32Path(pth) { - return pth.replace(/[/]/g, '\\') - } - exports.toWin32Path = toWin32Path - /** - * toPlatformPath converts the given path to a platform-specific path. It does - * this by replacing instances of / and \ with the platform-specific path - * separator. - * - * @param pth The path to platformize. - * @return string The platform-specific path. - */ - function toPlatformPath(pth) { - return pth.replace(/[/\\]/g, path.sep) - } - exports.toPlatformPath = toPlatformPath - //# sourceMappingURL=path-utils.js.map - - /***/ - }, - - /***/ 1327: /***/ function ( - __unused_webpack_module, - exports, - __nccwpck_require__ - ) { - 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.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 { 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' - class Summary { - constructor() { - this._buffer = '' - } - /** - * Finds the summary file path from the environment, rejects if env var is not found or file does not exist - * Also checks r/w permissions. - * - * @returns step summary file path - */ - filePath() { - return __awaiter(this, void 0, void 0, function* () { - if (this._filePath) { - return this._filePath - } - const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR] - if (!pathFromEnv) { - throw new Error( - `Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.` - ) - } - try { - yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK) - } catch (_a) { - throw new Error( - `Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.` - ) - } - this._filePath = pathFromEnv - return this._filePath - }) - } - /** - * Wraps content in an HTML tag, adding any HTML attributes - * - * @param {string} tag HTML tag to wrap - * @param {string | null} content content within the tag - * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add - * - * @returns {string} content wrapped in HTML element - */ - wrap(tag, content, attrs = {}) { - const htmlAttrs = Object.entries(attrs) - .map(([key, value]) => ` ${key}="${value}"`) - .join('') - if (!content) { - return `<${tag}${htmlAttrs}>` - } - return `<${tag}${htmlAttrs}>${content}` - } - /** - * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default. - * - * @param {SummaryWriteOptions} [options] (optional) options for write operation - * - * @returns {Promise} summary instance - */ - write(options) { - return __awaiter(this, void 0, void 0, function* () { - const overwrite = !!(options === null || options === void 0 - ? void 0 - : options.overwrite) - const filePath = yield this.filePath() - const writeFunc = overwrite ? writeFile : appendFile - yield writeFunc(filePath, this._buffer, { encoding: 'utf8' }) - return this.emptyBuffer() - }) - } - /** - * Clears the summary buffer and wipes the summary file - * - * @returns {Summary} summary instance - */ - clear() { - return __awaiter(this, void 0, void 0, function* () { - return this.emptyBuffer().write({ overwrite: true }) - }) - } - /** - * Returns the current summary buffer as a string - * - * @returns {string} string of summary buffer - */ - stringify() { - return this._buffer - } - /** - * If the summary buffer is empty - * - * @returns {boolen} true if the buffer is empty - */ - isEmptyBuffer() { - return this._buffer.length === 0 - } - /** - * Resets the summary buffer without writing to summary file - * - * @returns {Summary} summary instance - */ - emptyBuffer() { - this._buffer = '' - return this - } - /** - * Adds raw text to the summary buffer - * - * @param {string} text content to add - * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false) - * - * @returns {Summary} summary instance - */ - addRaw(text, addEOL = false) { - this._buffer += text - return addEOL ? this.addEOL() : this - } - /** - * Adds the operating system-specific end-of-line marker to the buffer - * - * @returns {Summary} summary instance - */ - addEOL() { - return this.addRaw(os_1.EOL) - } - /** - * Adds an HTML codeblock to the summary buffer - * - * @param {string} code content to render within fenced code block - * @param {string} lang (optional) language to syntax highlight code - * - * @returns {Summary} summary instance - */ - addCodeBlock(code, lang) { - const attrs = Object.assign({}, lang && { lang }) - const element = this.wrap('pre', this.wrap('code', code), attrs) - return this.addRaw(element).addEOL() - } - /** - * Adds an HTML list to the summary buffer - * - * @param {string[]} items list of items to render - * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false) - * - * @returns {Summary} summary instance - */ - addList(items, ordered = false) { - const tag = ordered ? 'ol' : 'ul' - const listItems = items.map((item) => this.wrap('li', item)).join('') - const element = this.wrap(tag, listItems) - return this.addRaw(element).addEOL() - } - /** - * Adds an HTML table to the summary buffer - * - * @param {SummaryTableCell[]} rows table rows - * - * @returns {Summary} summary instance - */ - addTable(rows) { - const tableBody = rows - .map((row) => { - const cells = row - .map((cell) => { - if (typeof cell === 'string') { - return this.wrap('td', cell) - } - const { header, data, colspan, rowspan } = cell - const tag = header ? 'th' : 'td' - const attrs = Object.assign( - Object.assign({}, colspan && { colspan }), - rowspan && { rowspan } - ) - return this.wrap(tag, data, attrs) - }) - .join('') - return this.wrap('tr', cells) - }) - .join('') - const element = this.wrap('table', tableBody) - return this.addRaw(element).addEOL() - } - /** - * Adds a collapsable HTML details element to the summary buffer - * - * @param {string} label text for the closed state - * @param {string} content collapsable content - * - * @returns {Summary} summary instance - */ - addDetails(label, content) { - const element = this.wrap( - 'details', - this.wrap('summary', label) + content - ) - return this.addRaw(element).addEOL() - } - /** - * Adds an HTML image tag to the summary buffer - * - * @param {string} src path to the image you to embed - * @param {string} alt text description of the image - * @param {SummaryImageOptions} options (optional) addition image attributes - * - * @returns {Summary} summary instance - */ - addImage(src, alt, options) { - const { width, height } = options || {} - const attrs = Object.assign( - Object.assign({}, width && { width }), - height && { height } - ) - const element = this.wrap( - 'img', - null, - Object.assign({ src, alt }, attrs) - ) - return this.addRaw(element).addEOL() - } - /** - * Adds an HTML section heading element - * - * @param {string} text heading text - * @param {number | string} [level=1] (optional) the heading level, default: 1 - * - * @returns {Summary} summary instance - */ - addHeading(text, level) { - const tag = `h${level}` - const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag) - ? tag - : 'h1' - const element = this.wrap(allowedTag, text) - return this.addRaw(element).addEOL() - } - /** - * Adds an HTML thematic break (
) to the summary buffer - * - * @returns {Summary} summary instance - */ - addSeparator() { - const element = this.wrap('hr', null) - return this.addRaw(element).addEOL() - } - /** - * Adds an HTML line break (
) to the summary buffer - * - * @returns {Summary} summary instance - */ - addBreak() { - const element = this.wrap('br', null) - return this.addRaw(element).addEOL() - } - /** - * Adds an HTML blockquote to the summary buffer - * - * @param {string} text quote text - * @param {string} cite (optional) citation url - * - * @returns {Summary} summary instance - */ - addQuote(text, cite) { - const attrs = Object.assign({}, cite && { cite }) - const element = this.wrap('blockquote', text, attrs) - return this.addRaw(element).addEOL() - } - /** - * Adds an HTML anchor tag to the summary buffer - * - * @param {string} text link text/content - * @param {string} href hyperlink - * - * @returns {Summary} summary instance - */ - addLink(text, href) { - const element = this.wrap('a', text, { href }) - return this.addRaw(element).addEOL() - } - } - const _summary = new Summary() - /** - * @deprecated use `core.summary` - */ - exports.markdownSummary = _summary - exports.summary = _summary - //# sourceMappingURL=summary.js.map - - /***/ - }, - - /***/ 5278: /***/ (__unused_webpack_module, exports) => { - // We use any as a valid input type - /* eslint-disable @typescript-eslint/no-explicit-any */ - Object.defineProperty(exports, '__esModule', { value: true }) - exports.toCommandProperties = exports.toCommandValue = void 0 - /** - * Sanitizes an input into a string so it can be passed into issueCommand safely - * @param input input to sanitize into a string - */ - function toCommandValue(input) { - if (input === null || input === undefined) { - return '' - } else if (typeof input === 'string' || input instanceof String) { - return input - } - return JSON.stringify(input) - } - exports.toCommandValue = toCommandValue - /** - * - * @param annotationProperties - * @returns The command properties to send with the actual annotation command - * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646 - */ - function toCommandProperties(annotationProperties) { - if (!Object.keys(annotationProperties).length) { - return {} - } - return { - title: annotationProperties.title, - file: annotationProperties.file, - line: annotationProperties.startLine, - endLine: annotationProperties.endLine, - col: annotationProperties.startColumn, - endColumn: annotationProperties.endColumn - } - } - exports.toCommandProperties = toCommandProperties - //# sourceMappingURL=utils.js.map - - /***/ - }, - - /***/ 4087: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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}` - ) - } - } - 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` - } - get issue() { - const payload = this.payload - return Object.assign(Object.assign({}, this.repo), { - number: (payload.issue || payload.pull_request || payload).number - }) - } - get repo() { - if (process.env.GITHUB_REPOSITORY) { - const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/') - return { owner, repo } - } - if (this.payload.repository) { - return { - owner: this.payload.repository.owner.login, - repo: this.payload.repository.name - } - } - throw new Error( - "context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'" - ) - } - } - exports.Context = Context - //# sourceMappingURL=context.js.map - - /***/ - }, - - /***/ 5438: /***/ function ( - __unused_webpack_module, - exports, - __nccwpck_require__ - ) { - 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.getOctokit = exports.context = void 0 - const Context = __importStar(__nccwpck_require__(4087)) - const utils_1 = __nccwpck_require__(3030) - exports.context = new Context.Context() - /** - * Returns a hydrated octokit ready to use for GitHub Actions - * - * @param token the repo PAT or GITHUB_TOKEN - * @param options other options to set - */ - function getOctokit(token, options, ...additionalPlugins) { - const GitHubWithPlugins = utils_1.GitHub.plugin(...additionalPlugins) - return new GitHubWithPlugins(utils_1.getOctokitOptions(token, options)) - } - exports.getOctokit = getOctokit - //# sourceMappingURL=github.js.map - - /***/ - }, - - /***/ 7914: /***/ function ( - __unused_webpack_module, - exports, - __nccwpck_require__ - ) { - 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' - ) - } - 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__ - ) { - 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__(6762) - const plugin_rest_endpoint_methods_1 = __nccwpck_require__(3044) - const plugin_paginate_rest_1 = __nccwpck_require__(4193) - exports.context = new Context.Context() - const baseUrl = Utils.getApiBaseUrl() - exports.defaults = { - baseUrl, - request: { - agent: Utils.getProxyAgent(baseUrl) - } - } - 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 - } - return opts - } - exports.getOctokitOptions = getOctokitOptions - //# sourceMappingURL=utils.js.map - - /***/ - }, - - /***/ 5526: /***/ function (__unused_webpack_module, exports) { - 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__ - ) { - /* 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) => { - 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 - - /***/ - }, - - /***/ 7541: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - var __webpack_unused_export__ - - __webpack_unused_export__ = { value: true } - - function _interopDefault(ex) { - return ex && typeof ex === 'object' && 'default' in ex - ? ex['default'] - : ex - } - - var universalUserAgent = __nccwpck_require__(5030) - var request = __nccwpck_require__(7052) - var authOauthApp = __nccwpck_require__(8459) - var deprecation = __nccwpck_require__(8932) - var universalGithubAppJwt = __nccwpck_require__(4419) - var LRU = _interopDefault(__nccwpck_require__(7129)) - var authOauthUser = __nccwpck_require__(1591) - - async function getAppAuthentication({ appId, privateKey, timeDifference }) { - try { - const appAuthentication = await universalGithubAppJwt.githubAppJwt({ - id: +appId, - privateKey, - now: timeDifference && Math.floor(Date.now() / 1000) + timeDifference - }) - return { - type: 'app', - token: appAuthentication.token, - appId: appAuthentication.appId, - expiresAt: new Date(appAuthentication.expiration * 1000).toISOString() - } - } catch (error) { - if (privateKey === '-----BEGIN RSA PRIVATE KEY-----') { - throw new Error( - "The 'privateKey` option contains only the first line '-----BEGIN RSA PRIVATE KEY-----'. If you are setting it using a `.env` file, make sure it is set on a single line with newlines replaced by '\n'" - ) - } else { - throw error - } - } - } - - // https://github.com/isaacs/node-lru-cache#readme - function getCache() { - return new LRU({ - // cache max. 15000 tokens, that will use less than 10mb memory - max: 15000, - // Cache for 1 minute less than GitHub expiry - maxAge: 1000 * 60 * 59 - }) - } - async function get(cache, options) { - const cacheKey = optionsToCacheKey(options) - const result = await cache.get(cacheKey) - if (!result) { - return - } - const [ - token, - createdAt, - expiresAt, - repositorySelection, - permissionsString, - singleFileName - ] = result.split('|') - const permissions = - options.permissions || - permissionsString.split(/,/).reduce((permissions, string) => { - if (/!$/.test(string)) { - permissions[string.slice(0, -1)] = 'write' - } else { - permissions[string] = 'read' - } - return permissions - }, {}) - return { - token, - createdAt, - expiresAt, - permissions, - repositoryIds: options.repositoryIds, - repositoryNames: options.repositoryNames, - singleFileName, - repositorySelection: repositorySelection - } - } - async function set(cache, options, data) { - const key = optionsToCacheKey(options) - const permissionsString = options.permissions - ? '' - : Object.keys(data.permissions) - .map( - (name) => - `${name}${data.permissions[name] === 'write' ? '!' : ''}` - ) - .join(',') - const value = [ - data.token, - data.createdAt, - data.expiresAt, - data.repositorySelection, - permissionsString, - data.singleFileName - ].join('|') - await cache.set(key, value) - } - function optionsToCacheKey({ - installationId, - permissions = {}, - repositoryIds = [], - repositoryNames = [] - }) { - const permissionsString = Object.keys(permissions) - .sort() - .map((name) => (permissions[name] === 'read' ? name : `${name}!`)) - .join(',') - const repositoryIdsString = repositoryIds.sort().join(',') - const repositoryNamesString = repositoryNames.join(',') - return [ - installationId, - repositoryIdsString, - repositoryNamesString, - permissionsString - ] - .filter(Boolean) - .join('|') - } - - function toTokenAuthentication({ - installationId, - token, - createdAt, - expiresAt, - repositorySelection, - permissions, - repositoryIds, - repositoryNames, - singleFileName - }) { - return Object.assign( - { - type: 'token', - tokenType: 'installation', - token, - installationId, - permissions, - createdAt, - expiresAt, - repositorySelection - }, - repositoryIds - ? { - repositoryIds - } - : null, - repositoryNames - ? { - repositoryNames - } - : null, - singleFileName - ? { - singleFileName - } - : null - ) - } - - async function getInstallationAuthentication( - state, - options, - customRequest - ) { - const installationId = Number( - options.installationId || state.installationId - ) - if (!installationId) { - throw new Error( - '[@octokit/auth-app] installationId option is required for installation authentication.' - ) - } - if (options.factory) { - const { type, factory, oauthApp, ...factoryAuthOptions } = { - ...state, - ...options - } - // @ts-expect-error if `options.factory` is set, the return type for `auth()` should be `Promise>` - return factory(factoryAuthOptions) - } - const optionsWithInstallationTokenFromState = Object.assign( - { - installationId - }, - options - ) - if (!options.refresh) { - const result = await get( - state.cache, - optionsWithInstallationTokenFromState - ) - if (result) { - const { - token, - createdAt, - expiresAt, - permissions, - repositoryIds, - repositoryNames, - singleFileName, - repositorySelection - } = result - return toTokenAuthentication({ - installationId, - token, - createdAt, - expiresAt, - permissions, - repositorySelection, - repositoryIds, - repositoryNames, - singleFileName - }) - } - } - const appAuthentication = await getAppAuthentication(state) - const request = customRequest || state.request - const { - data: { - token, - expires_at: expiresAt, - repositories, - permissions: permissionsOptional, - repository_selection: repositorySelectionOptional, - single_file: singleFileName - } - } = await request( - 'POST /app/installations/{installation_id}/access_tokens', - { - installation_id: installationId, - repository_ids: options.repositoryIds, - repositories: options.repositoryNames, - permissions: options.permissions, - mediaType: { - previews: ['machine-man'] - }, - headers: { - authorization: `bearer ${appAuthentication.token}` - } - } - ) - /* istanbul ignore next - permissions are optional per OpenAPI spec, but we think that is incorrect */ - const permissions = permissionsOptional || {} - /* istanbul ignore next - repositorySelection are optional per OpenAPI spec, but we think that is incorrect */ - const repositorySelection = repositorySelectionOptional || 'all' - const repositoryIds = repositories - ? repositories.map((r) => r.id) - : void 0 - const repositoryNames = repositories - ? repositories.map((repo) => repo.name) - : void 0 - const createdAt = new Date().toISOString() - await set(state.cache, optionsWithInstallationTokenFromState, { - token, - createdAt, - expiresAt, - repositorySelection, - permissions, - repositoryIds, - repositoryNames, - singleFileName - }) - return toTokenAuthentication({ - installationId, - token, - createdAt, - expiresAt, - repositorySelection, - permissions, - repositoryIds, - repositoryNames, - singleFileName - }) - } - - async function auth(state, authOptions) { - switch (authOptions.type) { - case 'app': - return getAppAuthentication(state) - // @ts-expect-error "oauth" is not supperted in types - case 'oauth': - state.log.warn( - // @ts-expect-error `log.warn()` expects string - new deprecation.Deprecation( - `[@octokit/auth-app] {type: "oauth"} is deprecated. Use {type: "oauth-app"} instead` - ) - ) - case 'oauth-app': - return state.oauthApp({ - type: 'oauth-app' - }) - case 'installation': - return getInstallationAuthentication(state, { - ...authOptions, - type: 'installation' - }) - case 'oauth-user': - // @ts-expect-error TODO: infer correct auth options type based on type. authOptions should be typed as "WebFlowAuthOptions | OAuthAppDeviceFlowAuthOptions | GitHubAppDeviceFlowAuthOptions" - return state.oauthApp(authOptions) - default: - // @ts-expect-error type is "never" at this point - throw new Error(`Invalid auth type: ${authOptions.type}`) - } - } - - const PATHS = [ - '/app', - '/app/hook/config', - '/app/hook/deliveries', - '/app/hook/deliveries/{delivery_id}', - '/app/hook/deliveries/{delivery_id}/attempts', - '/app/installations', - '/app/installations/{installation_id}', - '/app/installations/{installation_id}/access_tokens', - '/app/installations/{installation_id}/suspended', - '/marketplace_listing/accounts/{account_id}', - '/marketplace_listing/plan', - '/marketplace_listing/plans', - '/marketplace_listing/plans/{plan_id}/accounts', - '/marketplace_listing/stubbed/accounts/{account_id}', - '/marketplace_listing/stubbed/plan', - '/marketplace_listing/stubbed/plans', - '/marketplace_listing/stubbed/plans/{plan_id}/accounts', - '/orgs/{org}/installation', - '/repos/{owner}/{repo}/installation', - '/users/{username}/installation' - ] - // CREDIT: Simon Grondin (https://github.com/SGrondin) - // https://github.com/octokit/plugin-throttling.js/blob/45c5d7f13b8af448a9dbca468d9c9150a73b3948/lib/route-matcher.js - function routeMatcher(paths) { - // EXAMPLE. For the following paths: - /* [ - "/orgs/{org}/invitations", - "/repos/{owner}/{repo}/collaborators/{username}" - ] */ - const regexes = paths.map((p) => - p - .split('/') - .map((c) => (c.startsWith('{') ? '(?:.+?)' : c)) - .join('/') - ) - // 'regexes' would contain: - /* [ - '/orgs/(?:.+?)/invitations', - '/repos/(?:.+?)/(?:.+?)/collaborators/(?:.+?)' - ] */ - const regex = `^(?:${regexes.map((r) => `(?:${r})`).join('|')})[^/]*$` - // 'regex' would contain: - /* - ^(?:(?:\/orgs\/(?:.+?)\/invitations)|(?:\/repos\/(?:.+?)\/(?:.+?)\/collaborators\/(?:.+?)))[^\/]*$ - It may look scary, but paste it into https://www.debuggex.com/ - and it will make a lot more sense! - */ - return new RegExp(regex, 'i') - } - const REGEX = routeMatcher(PATHS) - function requiresAppAuth(url) { - return !!url && REGEX.test(url) - } - - const FIVE_SECONDS_IN_MS = 5 * 1000 - function isNotTimeSkewError(error) { - return !( - error.message.match( - /'Expiration time' claim \('exp'\) must be a numeric value representing the future time at which the assertion expires/ - ) || - error.message.match( - /'Issued at' claim \('iat'\) must be an Integer representing the time that the assertion was issued/ - ) - ) - } - async function hook(state, request, route, parameters) { - const endpoint = request.endpoint.merge(route, parameters) - const url = endpoint.url - // Do not intercept request to retrieve a new token - if (/\/login\/oauth\/access_token$/.test(url)) { - return request(endpoint) - } - if (requiresAppAuth(url.replace(request.endpoint.DEFAULTS.baseUrl, ''))) { - const { token } = await getAppAuthentication(state) - endpoint.headers.authorization = `bearer ${token}` - let response - try { - response = await request(endpoint) - } catch (error) { - // If there's an issue with the expiration, regenerate the token and try again. - // Otherwise rethrow the error for upstream handling. - if (isNotTimeSkewError(error)) { - throw error - } - // If the date header is missing, we can't correct the system time skew. - // Throw the error to be handled upstream. - if (typeof error.response.headers.date === 'undefined') { - throw error - } - const diff = Math.floor( - (Date.parse(error.response.headers.date) - - Date.parse(new Date().toString())) / - 1000 - ) - state.log.warn(error.message) - state.log.warn( - `[@octokit/auth-app] GitHub API time and system time are different by ${diff} seconds. Retrying request with the difference accounted for.` - ) - const { token } = await getAppAuthentication({ - ...state, - timeDifference: diff - }) - endpoint.headers.authorization = `bearer ${token}` - return request(endpoint) - } - return response - } - if (authOauthUser.requiresBasicAuth(url)) { - const authentication = await state.oauthApp({ - type: 'oauth-app' - }) - endpoint.headers.authorization = authentication.headers.authorization - return request(endpoint) - } - const { token, createdAt } = await getInstallationAuthentication( - state, - // @ts-expect-error TBD - {}, - request - ) - endpoint.headers.authorization = `token ${token}` - return sendRequestWithRetries(state, request, endpoint, createdAt) - } - /** - * Newly created tokens might not be accessible immediately after creation. - * In case of a 401 response, we retry with an exponential delay until more - * than five seconds pass since the creation of the token. - * - * @see https://github.com/octokit/auth-app.js/issues/65 - */ - async function sendRequestWithRetries( - state, - request, - options, - createdAt, - retries = 0 - ) { - const timeSinceTokenCreationInMs = +new Date() - +new Date(createdAt) - try { - return await request(options) - } catch (error) { - if (error.status !== 401) { - throw error - } - if (timeSinceTokenCreationInMs >= FIVE_SECONDS_IN_MS) { - if (retries > 0) { - error.message = `After ${retries} retries within ${ - timeSinceTokenCreationInMs / 1000 - }s of creating the installation access token, the response remains 401. At this point, the cause may be an authentication problem or a system outage. Please check https://www.githubstatus.com for status information` - } - throw error - } - ++retries - const awaitTime = retries * 1000 - state.log.warn( - `[@octokit/auth-app] Retrying after 401 response to account for token replication delay (retry: ${retries}, wait: ${ - awaitTime / 1000 - }s)` - ) - await new Promise((resolve) => setTimeout(resolve, awaitTime)) - return sendRequestWithRetries( - state, - request, - options, - createdAt, - retries - ) - } - } - - const VERSION = '4.0.9' - - function createAppAuth(options) { - if (!options.appId) { - throw new Error('[@octokit/auth-app] appId option is required') - } - if (!Number.isFinite(+options.appId)) { - throw new Error( - '[@octokit/auth-app] appId option must be a number or numeric string' - ) - } - if (!options.privateKey) { - throw new Error('[@octokit/auth-app] privateKey option is required') - } - if ('installationId' in options && !options.installationId) { - throw new Error( - '[@octokit/auth-app] installationId is set to a falsy value' - ) - } - const log = Object.assign( - { - warn: console.warn.bind(console) - }, - options.log - ) - const request$1 = - options.request || - request.request.defaults({ - headers: { - 'user-agent': `octokit-auth-app.js/${VERSION} ${universalUserAgent.getUserAgent()}` - } - }) - const state = Object.assign( - { - request: request$1, - cache: getCache() - }, - options, - options.installationId - ? { - installationId: Number(options.installationId) - } - : {}, - { - log, - oauthApp: authOauthApp.createOAuthAppAuth({ - clientType: 'github-app', - clientId: options.clientId || '', - clientSecret: options.clientSecret || '', - request: request$1 - }) - } - ) - // @ts-expect-error not worth the extra code to appease TS - return Object.assign(auth.bind(null, state), { - hook: hook.bind(null, state) - }) - } - - __webpack_unused_export__ = { - enumerable: true, - get: function () { - return authOauthUser.createOAuthUserAuth - } - } - exports.iq = createAppAuth - //# sourceMappingURL=index.js.map - - /***/ - }, - - /***/ 982: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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] - } - } - - 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('+') - ) - } - - 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, ']') - } - - 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(',')) - } - } - } - } else { - if (operator === ';') { - if (isDefined(value)) { - result.push(encodeUnreserved(key)) - } - } else if (value === '' && (operator === '&' || operator === '?')) { - result.push(encodeUnreserved(key) + '=') - } else if (value === '') { - result.push('') - } - } - - 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) - } - } - ) - } - - 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(',') - } - - 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 - } - } - } // 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 = '7.0.3' - - 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 - - /***/ - }, - - /***/ 5634: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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 - - /***/ - }, - - /***/ 7052: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - function _interopDefault(ex) { - return ex && typeof ex === 'object' && 'default' in ex - ? ex['default'] - : ex - } - - var endpoint = __nccwpck_require__(982) - var universalUserAgent = __nccwpck_require__(5030) - var isPlainObject = __nccwpck_require__(3287) - var nodeFetch = _interopDefault(__nccwpck_require__(467)) - var requestError = __nccwpck_require__(5634) - - const VERSION = '6.2.2' - - 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) || - globalThis.fetch || - /* istanbul ignore next */ - 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 - else if (error.name === 'AbortError') 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 - - /***/ - }, - - /***/ 8459: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - function _interopDefault(ex) { - return ex && typeof ex === 'object' && 'default' in ex - ? ex['default'] - : ex - } - - var universalUserAgent = __nccwpck_require__(5030) - var request = __nccwpck_require__(757) - var btoa = _interopDefault(__nccwpck_require__(2358)) - var authOauthUser = __nccwpck_require__(1591) - - async function auth(state, authOptions) { - if (authOptions.type === 'oauth-app') { - return { - type: 'oauth-app', - clientId: state.clientId, - clientSecret: state.clientSecret, - clientType: state.clientType, - headers: { - authorization: `basic ${btoa( - `${state.clientId}:${state.clientSecret}` - )}` - } - } - } - - if ('factory' in authOptions) { - const { type, ...options } = { ...authOptions, ...state } // @ts-expect-error TODO: `option` cannot be never, is this a bug? - - return authOptions.factory(options) - } - - const common = { - clientId: state.clientId, - clientSecret: state.clientSecret, - request: state.request, - ...authOptions - } // TS: Look what you made me do - - const userAuth = - state.clientType === 'oauth-app' - ? await authOauthUser.createOAuthUserAuth({ - ...common, - clientType: state.clientType - }) - : await authOauthUser.createOAuthUserAuth({ - ...common, - clientType: state.clientType - }) - return userAuth() - } - - async function hook(state, request, route, parameters) { - let endpoint = request.endpoint.merge(route, parameters) // Do not intercept OAuth Web/Device flow request - - if (/\/login\/(oauth\/access_token|device\/code)$/.test(endpoint.url)) { - return request(endpoint) - } - - if ( - state.clientType === 'github-app' && - !authOauthUser.requiresBasicAuth(endpoint.url) - ) { - throw new Error( - `[@octokit/auth-oauth-app] GitHub Apps cannot use their client ID/secret for basic authentication for endpoints other than "/applications/{client_id}/**". "${endpoint.method} ${endpoint.url}" is not supported.` - ) - } - - const credentials = btoa(`${state.clientId}:${state.clientSecret}`) - endpoint.headers.authorization = `basic ${credentials}` - - try { - return await request(endpoint) - } catch (error) { - /* istanbul ignore if */ - if (error.status !== 401) throw error - error.message = `[@octokit/auth-oauth-app] "${endpoint.method} ${endpoint.url}" does not support clientId/clientSecret basic authentication.` - throw error - } - } - - const VERSION = '5.0.4' - - function createOAuthAppAuth(options) { - const state = Object.assign( - { - request: request.request.defaults({ - headers: { - 'user-agent': `octokit-auth-oauth-app.js/${VERSION} ${universalUserAgent.getUserAgent()}` - } - }), - clientType: 'oauth-app' - }, - options - ) // @ts-expect-error not worth the extra code to appease TS - - return Object.assign(auth.bind(null, state), { - hook: hook.bind(null, state) - }) - } - - Object.defineProperty(exports, 'createOAuthUserAuth', { - enumerable: true, - get: function () { - return authOauthUser.createOAuthUserAuth - } - }) - exports.createOAuthAppAuth = createOAuthAppAuth - //# sourceMappingURL=index.js.map - - /***/ - }, - - /***/ 9378: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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] - } - } - - 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('+') - ) - } - - 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, ']') - } - - 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(',')) - } - } - } - } else { - if (operator === ';') { - if (isDefined(value)) { - result.push(encodeUnreserved(key)) - } - } else if (value === '' && (operator === '&' || operator === '?')) { - result.push(encodeUnreserved(key) + '=') - } else if (value === '') { - result.push('') - } - } - - 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) - } - } - ) - } - - 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(',') - } - - 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 - } - } - } // 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 = '7.0.3' - - 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 - - /***/ - }, - - /***/ 1213: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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 - - /***/ - }, - - /***/ 757: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - function _interopDefault(ex) { - return ex && typeof ex === 'object' && 'default' in ex - ? ex['default'] - : ex - } - - var endpoint = __nccwpck_require__(9378) - var universalUserAgent = __nccwpck_require__(5030) - var isPlainObject = __nccwpck_require__(3287) - var nodeFetch = _interopDefault(__nccwpck_require__(467)) - var requestError = __nccwpck_require__(1213) - - const VERSION = '6.2.2' - - 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) || - globalThis.fetch || - /* istanbul ignore next */ - 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 - else if (error.name === 'AbortError') 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 - - /***/ - }, - - /***/ 4344: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - var universalUserAgent = __nccwpck_require__(5030) - var request = __nccwpck_require__(4847) - var oauthMethods = __nccwpck_require__(8445) - - async function getOAuthAccessToken(state, options) { - const cachedAuthentication = getCachedAuthentication(state, options.auth) - if (cachedAuthentication) return cachedAuthentication // Step 1: Request device and user codes - // https://docs.github.com/en/developers/apps/authorizing-oauth-apps#step-1-app-requests-the-device-and-user-verification-codes-from-github - - const { data: verification } = await oauthMethods.createDeviceCode({ - clientType: state.clientType, - clientId: state.clientId, - request: options.request || state.request, - // @ts-expect-error the extra code to make TS happy is not worth it - scopes: options.auth.scopes || state.scopes - }) // Step 2: User must enter the user code on https://github.com/login/device - // See https://docs.github.com/en/developers/apps/authorizing-oauth-apps#step-2-prompt-the-user-to-enter-the-user-code-in-a-browser - - await state.onVerification(verification) // Step 3: Exchange device code for access token - // See https://docs.github.com/en/developers/apps/authorizing-oauth-apps#step-3-app-polls-github-to-check-if-the-user-authorized-the-device - - const authentication = await waitForAccessToken( - options.request || state.request, - state.clientId, - state.clientType, - verification - ) - state.authentication = authentication - return authentication - } - - function getCachedAuthentication(state, auth) { - if (auth.refresh === true) return false - if (!state.authentication) return false - - if (state.clientType === 'github-app') { - return state.authentication - } - - const authentication = state.authentication - const newScope = (('scopes' in auth && auth.scopes) || state.scopes).join( - ' ' - ) - const currentScope = authentication.scopes.join(' ') - return newScope === currentScope ? authentication : false - } - - async function wait(seconds) { - await new Promise((resolve) => setTimeout(resolve, seconds * 1000)) - } - - async function waitForAccessToken( - request, - clientId, - clientType, - verification - ) { - try { - const options = { - clientId, - request, - code: verification.device_code - } // WHY TYPESCRIPT WHY ARE YOU DOING THIS TO ME - - const { authentication } = - clientType === 'oauth-app' - ? await oauthMethods.exchangeDeviceCode({ - ...options, - clientType: 'oauth-app' - }) - : await oauthMethods.exchangeDeviceCode({ - ...options, - clientType: 'github-app' - }) - return { - type: 'token', - tokenType: 'oauth', - ...authentication - } - } catch (error) { - // istanbul ignore if - // @ts-ignore - if (!error.response) throw error // @ts-ignore - - const errorType = error.response.data.error - - if (errorType === 'authorization_pending') { - await wait(verification.interval) - return waitForAccessToken(request, clientId, clientType, verification) - } - - if (errorType === 'slow_down') { - await wait(verification.interval + 5) - return waitForAccessToken(request, clientId, clientType, verification) - } - - throw error - } - } - - async function auth(state, authOptions) { - return getOAuthAccessToken(state, { - auth: authOptions - }) - } - - async function hook(state, request, route, parameters) { - let endpoint = request.endpoint.merge(route, parameters) // Do not intercept request to retrieve codes or token - - if (/\/login\/(oauth\/access_token|device\/code)$/.test(endpoint.url)) { - return request(endpoint) - } - - const { token } = await getOAuthAccessToken(state, { - request, - auth: { - type: 'oauth' - } - }) - endpoint.headers.authorization = `token ${token}` - return request(endpoint) - } - - const VERSION = '4.0.3' - - function createOAuthDeviceAuth(options) { - const requestWithDefaults = - options.request || - request.request.defaults({ - headers: { - 'user-agent': `octokit-auth-oauth-device.js/${VERSION} ${universalUserAgent.getUserAgent()}` - } - }) - const { request: request$1 = requestWithDefaults, ...otherOptions } = - options - const state = - options.clientType === 'github-app' - ? { ...otherOptions, clientType: 'github-app', request: request$1 } - : { - ...otherOptions, - clientType: 'oauth-app', - request: request$1, - scopes: options.scopes || [] - } - - if (!options.clientId) { - throw new Error( - '[@octokit/auth-oauth-device] "clientId" option must be set (https://github.com/octokit/auth-oauth-device.js#usage)' - ) - } - - if (!options.onVerification) { - throw new Error( - '[@octokit/auth-oauth-device] "onVerification" option must be a function (https://github.com/octokit/auth-oauth-device.js#usage)' - ) - } // @ts-ignore too much for tsc / ts-jest ¯\_(ツ)_/¯ - - return Object.assign(auth.bind(null, state), { - hook: hook.bind(null, state) - }) - } - - exports.createOAuthDeviceAuth = createOAuthDeviceAuth - //# sourceMappingURL=index.js.map - - /***/ - }, - - /***/ 6152: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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] - } - } - - 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('+') - ) - } - - 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, ']') - } - - 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(',')) - } - } - } - } else { - if (operator === ';') { - if (isDefined(value)) { - result.push(encodeUnreserved(key)) - } - } else if (value === '' && (operator === '&' || operator === '?')) { - result.push(encodeUnreserved(key) + '=') - } else if (value === '') { - result.push('') - } - } - - 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) - } - } - ) - } - - 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(',') - } - - 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 - } - } - } // 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 = '7.0.3' - - 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 - - /***/ - }, - - /***/ 4384: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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 - - /***/ - }, - - /***/ 4847: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - function _interopDefault(ex) { - return ex && typeof ex === 'object' && 'default' in ex - ? ex['default'] - : ex - } - - var endpoint = __nccwpck_require__(6152) - var universalUserAgent = __nccwpck_require__(5030) - var isPlainObject = __nccwpck_require__(3287) - var nodeFetch = _interopDefault(__nccwpck_require__(467)) - var requestError = __nccwpck_require__(4384) - - const VERSION = '6.2.2' - - 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) || - globalThis.fetch || - /* istanbul ignore next */ - 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 - else if (error.name === 'AbortError') 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 - - /***/ - }, - - /***/ 1591: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - function _interopDefault(ex) { - return ex && typeof ex === 'object' && 'default' in ex - ? ex['default'] - : ex - } - - var universalUserAgent = __nccwpck_require__(5030) - var request = __nccwpck_require__(8608) - var authOauthDevice = __nccwpck_require__(4344) - var oauthMethods = __nccwpck_require__(8445) - var btoa = _interopDefault(__nccwpck_require__(2358)) - - const VERSION = '2.0.4' - - // @ts-nocheck there is only place for one of us in this file. And it's not you, TS - async function getAuthentication(state) { - // handle code exchange form OAuth Web Flow - if ('code' in state.strategyOptions) { - const { authentication } = await oauthMethods.exchangeWebFlowCode({ - clientId: state.clientId, - clientSecret: state.clientSecret, - clientType: state.clientType, - ...state.strategyOptions, - request: state.request - }) - return { - type: 'token', - tokenType: 'oauth', - ...authentication - } - } // handle OAuth device flow - - if ('onVerification' in state.strategyOptions) { - const deviceAuth = authOauthDevice.createOAuthDeviceAuth({ - clientType: state.clientType, - clientId: state.clientId, - ...state.strategyOptions, - request: state.request - }) - const authentication = await deviceAuth({ - type: 'oauth' - }) - return { - clientSecret: state.clientSecret, - ...authentication - } - } // use existing authentication - - if ('token' in state.strategyOptions) { - return { - type: 'token', - tokenType: 'oauth', - clientId: state.clientId, - clientSecret: state.clientSecret, - clientType: state.clientType, - ...state.strategyOptions - } - } - - throw new Error('[@octokit/auth-oauth-user] Invalid strategy options') - } - - async function auth(state, options = {}) { - if (!state.authentication) { - // This is what TS makes us do ¯\_(ツ)_/¯ - state.authentication = - state.clientType === 'oauth-app' - ? await getAuthentication(state) - : await getAuthentication(state) - } - - if (state.authentication.invalid) { - throw new Error('[@octokit/auth-oauth-user] Token is invalid') - } - - const currentAuthentication = state.authentication // (auto) refresh for user-to-server tokens - - if ('expiresAt' in currentAuthentication) { - if ( - options.type === 'refresh' || - new Date(currentAuthentication.expiresAt) < new Date() - ) { - const { authentication } = await oauthMethods.refreshToken({ - clientType: 'github-app', - clientId: state.clientId, - clientSecret: state.clientSecret, - refreshToken: currentAuthentication.refreshToken, - request: state.request - }) - state.authentication = { - tokenType: 'oauth', - type: 'token', - ...authentication - } - } - } // throw error for invalid refresh call - - if (options.type === 'refresh') { - if (state.clientType === 'oauth-app') { - throw new Error( - '[@octokit/auth-oauth-user] OAuth Apps do not support expiring tokens' - ) - } - - if (!currentAuthentication.hasOwnProperty('expiresAt')) { - throw new Error('[@octokit/auth-oauth-user] Refresh token missing') - } - } // check or reset token - - if (options.type === 'check' || options.type === 'reset') { - const method = - options.type === 'check' - ? oauthMethods.checkToken - : oauthMethods.resetToken - - try { - const { authentication } = await method({ - // @ts-expect-error making TS happy would require unnecessary code so no - clientType: state.clientType, - clientId: state.clientId, - clientSecret: state.clientSecret, - token: state.authentication.token, - request: state.request - }) - state.authentication = { - tokenType: 'oauth', - type: 'token', - // @ts-expect-error TBD - ...authentication - } - return state.authentication - } catch (error) { - // istanbul ignore else - if (error.status === 404) { - error.message = '[@octokit/auth-oauth-user] Token is invalid' // @ts-expect-error TBD - - state.authentication.invalid = true - } - - throw error - } - } // invalidate - - if (options.type === 'delete' || options.type === 'deleteAuthorization') { - const method = - options.type === 'delete' - ? oauthMethods.deleteToken - : oauthMethods.deleteAuthorization - - try { - await method({ - // @ts-expect-error making TS happy would require unnecessary code so no - clientType: state.clientType, - clientId: state.clientId, - clientSecret: state.clientSecret, - token: state.authentication.token, - request: state.request - }) - } catch (error) { - // istanbul ignore if - if (error.status !== 404) throw error - } - - state.authentication.invalid = true - return state.authentication - } - - return state.authentication - } - - /** - * The following endpoints require an OAuth App to authenticate using its client_id and client_secret. - * - * - [`POST /applications/{client_id}/token`](https://docs.github.com/en/rest/reference/apps#check-a-token) - Check a token - * - [`PATCH /applications/{client_id}/token`](https://docs.github.com/en/rest/reference/apps#reset-a-token) - Reset a token - * - [`POST /applications/{client_id}/token/scoped`](https://docs.github.com/en/rest/reference/apps#create-a-scoped-access-token) - Create a scoped access token - * - [`DELETE /applications/{client_id}/token`](https://docs.github.com/en/rest/reference/apps#delete-an-app-token) - Delete an app token - * - [`DELETE /applications/{client_id}/grant`](https://docs.github.com/en/rest/reference/apps#delete-an-app-authorization) - Delete an app authorization - * - * deprecated: - * - * - [`GET /applications/{client_id}/tokens/{access_token}`](https://docs.github.com/en/rest/reference/apps#check-an-authorization) - Check an authorization - * - [`POST /applications/{client_id}/tokens/{access_token}`](https://docs.github.com/en/rest/reference/apps#reset-an-authorization) - Reset an authorization - * - [`DELETE /applications/{client_id}/tokens/{access_token}`](https://docs.github.com/en/rest/reference/apps#revoke-an-authorization-for-an-application) - Revoke an authorization for an application - * - [`DELETE /applications/{client_id}/grants/{access_token}`](https://docs.github.com/en/rest/reference/apps#revoke-a-grant-for-an-application) - Revoke a grant for an application - */ - const ROUTES_REQUIRING_BASIC_AUTH = /\/applications\/[^/]+\/(token|grant)s?/ - function requiresBasicAuth(url) { - return url && ROUTES_REQUIRING_BASIC_AUTH.test(url) - } - - async function hook(state, request, route, parameters = {}) { - const endpoint = request.endpoint.merge(route, parameters) // Do not intercept OAuth Web/Device flow request - - if (/\/login\/(oauth\/access_token|device\/code)$/.test(endpoint.url)) { - return request(endpoint) - } - - if (requiresBasicAuth(endpoint.url)) { - const credentials = btoa(`${state.clientId}:${state.clientSecret}`) - endpoint.headers.authorization = `basic ${credentials}` - return request(endpoint) - } // TS makes us do this ¯\_(ツ)_/¯ - - const { token } = - state.clientType === 'oauth-app' - ? await auth({ ...state, request }) - : await auth({ ...state, request }) - endpoint.headers.authorization = 'token ' + token - return request(endpoint) - } - - function createOAuthUserAuth({ - clientId, - clientSecret, - clientType = 'oauth-app', - request: request$1 = request.request.defaults({ - headers: { - 'user-agent': `octokit-auth-oauth-app.js/${VERSION} ${universalUserAgent.getUserAgent()}` - } - }), - ...strategyOptions - }) { - const state = Object.assign({ - clientType, - clientId, - clientSecret, - strategyOptions, - request: request$1 - }) // @ts-expect-error not worth the extra code needed to appease TS - - return Object.assign(auth.bind(null, state), { - // @ts-expect-error not worth the extra code needed to appease TS - hook: hook.bind(null, state) - }) - } - createOAuthUserAuth.VERSION = VERSION - - exports.createOAuthUserAuth = createOAuthUserAuth - exports.requiresBasicAuth = requiresBasicAuth - //# sourceMappingURL=index.js.map - - /***/ - }, - - /***/ 7224: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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] - } - } - - 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('+') - ) - } - - 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, ']') - } - - 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(',')) - } - } - } - } else { - if (operator === ';') { - if (isDefined(value)) { - result.push(encodeUnreserved(key)) - } - } else if (value === '' && (operator === '&' || operator === '?')) { - result.push(encodeUnreserved(key) + '=') - } else if (value === '') { - result.push('') - } - } - - 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) - } - } - ) - } - - 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(',') - } - - 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 - } - } - } // 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 = '7.0.3' - - 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 - - /***/ - }, - - /***/ 7450: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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 - - /***/ - }, - - /***/ 8608: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - function _interopDefault(ex) { - return ex && typeof ex === 'object' && 'default' in ex - ? ex['default'] - : ex - } - - var endpoint = __nccwpck_require__(7224) - var universalUserAgent = __nccwpck_require__(5030) - var isPlainObject = __nccwpck_require__(3287) - var nodeFetch = _interopDefault(__nccwpck_require__(467)) - var requestError = __nccwpck_require__(7450) - - const VERSION = '6.2.2' - - 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) || - globalThis.fetch || - /* istanbul ignore next */ - 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 - else if (error.name === 'AbortError') 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 - - /***/ - }, - - /***/ 334: /***/ (__unused_webpack_module, exports) => { - 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 - } - } - - /** - * 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 - - /***/ - }, - - /***/ 6762: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - var universalUserAgent = __nccwpck_require__(5030) - var beforeAfterHook = __nccwpck_require__(3682) - var request = __nccwpck_require__(6234) - var graphql = __nccwpck_require__(8467) - var authToken = __nccwpck_require__(334) - - 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 - } - - if (options.previews) { - requestDefaults.mediaType.previews = options.previews - } - - if (options.timeZone) { - requestDefaults.headers['time-zone'] = options.timeZone - } - - 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' - }) - } 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 - - /***/ - }, - - /***/ 9440: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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] - } - } - - 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('+') - ) - } - - 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, ']') - } - - 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(',')) - } - } - } - } else { - if (operator === ';') { - if (isDefined(value)) { - result.push(encodeUnreserved(key)) - } - } else if (value === '' && (operator === '&' || operator === '?')) { - result.push(encodeUnreserved(key) + '=') - } else if (value === '') { - result.push('') - } - } - - 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) - } - } - ) - } - - 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(',') - } - - 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 - - /***/ - }, - - /***/ 8467: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - var request = __nccwpck_require__(6234) - 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 = {} - } - - 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) - } - - 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 - - /***/ - }, - - /***/ 2272: /***/ (__unused_webpack_module, exports) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - function oauthAuthorizationUrl(options) { - const clientType = options.clientType || 'oauth-app' - const baseUrl = options.baseUrl || 'https://github.com' - const result = { - clientType, - allowSignup: options.allowSignup === false ? false : true, - clientId: options.clientId, - login: options.login || null, - redirectUrl: options.redirectUrl || null, - state: options.state || Math.random().toString(36).substr(2), - url: '' - } - - if (clientType === 'oauth-app') { - const scopes = 'scopes' in options ? options.scopes : [] - result.scopes = - typeof scopes === 'string' - ? scopes.split(/[,\s]+/).filter(Boolean) - : scopes - } - - result.url = urlBuilderAuthorize( - `${baseUrl}/login/oauth/authorize`, - result - ) - return result - } - - function urlBuilderAuthorize(base, options) { - const map = { - allowSignup: 'allow_signup', - clientId: 'client_id', - login: 'login', - redirectUrl: 'redirect_uri', - scopes: 'scope', - state: 'state' - } - let url = base - Object.keys(map) // Filter out keys that are null and remove the url key - .filter((k) => options[k] !== null) // Filter out empty scopes array - .filter((k) => { - if (k !== 'scopes') return true - if (options.clientType === 'github-app') return false - return !Array.isArray(options[k]) || options[k].length > 0 - }) // Map Array with the proper URL parameter names and change the value to a string using template strings - // @ts-ignore - .map((key) => [map[key], `${options[key]}`]) // Finally, build the URL - .forEach(([key, value], index) => { - url += index === 0 ? `?` : '&' - url += `${key}=${encodeURIComponent(value)}` - }) - return url - } - - exports.oauthAuthorizationUrl = oauthAuthorizationUrl - //# sourceMappingURL=index.js.map - - /***/ - }, - - /***/ 8445: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - function _interopDefault(ex) { - return ex && typeof ex === 'object' && 'default' in ex - ? ex['default'] - : ex - } - - var oauthAuthorizationUrl = __nccwpck_require__(2272) - var request = __nccwpck_require__(3315) - var requestError = __nccwpck_require__(2434) - var btoa = _interopDefault(__nccwpck_require__(2358)) - - const VERSION = '2.0.4' - - function requestToOAuthBaseUrl(request) { - const endpointDefaults = request.endpoint.DEFAULTS - return /^https:\/\/(api\.)?github\.com$/.test(endpointDefaults.baseUrl) - ? 'https://github.com' - : endpointDefaults.baseUrl.replace('/api/v3', '') - } - async function oauthRequest(request, route, parameters) { - const withOAuthParameters = { - baseUrl: requestToOAuthBaseUrl(request), - headers: { - accept: 'application/json' - }, - ...parameters - } - const response = await request(route, withOAuthParameters) - if ('error' in response.data) { - const error = new requestError.RequestError( - `${response.data.error_description} (${response.data.error}, ${response.data.error_uri})`, - 400, - { - request: request.endpoint.merge(route, withOAuthParameters), - headers: response.headers - } - ) - // @ts-ignore add custom response property until https://github.com/octokit/request-error.js/issues/169 is resolved - error.response = response - throw error - } - return response - } - - function getWebFlowAuthorizationUrl({ - request: request$1 = request.request, - ...options - }) { - const baseUrl = requestToOAuthBaseUrl(request$1) - // @ts-expect-error TypeScript wants `clientType` to be set explicitly ¯\_(ツ)_/¯ - return oauthAuthorizationUrl.oauthAuthorizationUrl({ - ...options, - baseUrl - }) - } - - async function exchangeWebFlowCode(options) { - const request$1 = - options.request /* istanbul ignore next: we always pass a custom request in tests */ || - request.request - const response = await oauthRequest( - request$1, - 'POST /login/oauth/access_token', - { - client_id: options.clientId, - client_secret: options.clientSecret, - code: options.code, - redirect_uri: options.redirectUrl - } - ) - const authentication = { - clientType: options.clientType, - clientId: options.clientId, - clientSecret: options.clientSecret, - token: response.data.access_token, - scopes: response.data.scope.split(/\s+/).filter(Boolean) - } - if (options.clientType === 'github-app') { - if ('refresh_token' in response.data) { - const apiTimeInMs = new Date(response.headers.date).getTime() - ;(authentication.refreshToken = response.data.refresh_token), - (authentication.expiresAt = toTimestamp( - apiTimeInMs, - response.data.expires_in - )), - (authentication.refreshTokenExpiresAt = toTimestamp( - apiTimeInMs, - response.data.refresh_token_expires_in - )) - } - delete authentication.scopes - } - return { - ...response, - authentication - } - } - function toTimestamp(apiTimeInMs, expirationInSeconds) { - return new Date(apiTimeInMs + expirationInSeconds * 1000).toISOString() - } - - async function createDeviceCode(options) { - const request$1 = - options.request /* istanbul ignore next: we always pass a custom request in tests */ || - request.request - const parameters = { - client_id: options.clientId - } - if ('scopes' in options && Array.isArray(options.scopes)) { - parameters.scope = options.scopes.join(' ') - } - return oauthRequest(request$1, 'POST /login/device/code', parameters) - } - - async function exchangeDeviceCode(options) { - const request$1 = - options.request /* istanbul ignore next: we always pass a custom request in tests */ || - request.request - const response = await oauthRequest( - request$1, - 'POST /login/oauth/access_token', - { - client_id: options.clientId, - device_code: options.code, - grant_type: 'urn:ietf:params:oauth:grant-type:device_code' - } - ) - const authentication = { - clientType: options.clientType, - clientId: options.clientId, - token: response.data.access_token, - scopes: response.data.scope.split(/\s+/).filter(Boolean) - } - if ('clientSecret' in options) { - authentication.clientSecret = options.clientSecret - } - if (options.clientType === 'github-app') { - if ('refresh_token' in response.data) { - const apiTimeInMs = new Date(response.headers.date).getTime() - ;(authentication.refreshToken = response.data.refresh_token), - (authentication.expiresAt = toTimestamp$1( - apiTimeInMs, - response.data.expires_in - )), - (authentication.refreshTokenExpiresAt = toTimestamp$1( - apiTimeInMs, - response.data.refresh_token_expires_in - )) - } - delete authentication.scopes - } - return { - ...response, - authentication - } - } - function toTimestamp$1(apiTimeInMs, expirationInSeconds) { - return new Date(apiTimeInMs + expirationInSeconds * 1000).toISOString() - } - - async function checkToken(options) { - const request$1 = - options.request /* istanbul ignore next: we always pass a custom request in tests */ || - request.request - const response = await request$1('POST /applications/{client_id}/token', { - headers: { - authorization: `basic ${btoa( - `${options.clientId}:${options.clientSecret}` - )}` - }, - client_id: options.clientId, - access_token: options.token - }) - const authentication = { - clientType: options.clientType, - clientId: options.clientId, - clientSecret: options.clientSecret, - token: options.token, - scopes: response.data.scopes - } - if (response.data.expires_at) - authentication.expiresAt = response.data.expires_at - if (options.clientType === 'github-app') { - delete authentication.scopes - } - return { - ...response, - authentication - } - } - - async function refreshToken(options) { - const request$1 = - options.request /* istanbul ignore next: we always pass a custom request in tests */ || - request.request - const response = await oauthRequest( - request$1, - 'POST /login/oauth/access_token', - { - client_id: options.clientId, - client_secret: options.clientSecret, - grant_type: 'refresh_token', - refresh_token: options.refreshToken - } - ) - const apiTimeInMs = new Date(response.headers.date).getTime() - const authentication = { - clientType: 'github-app', - clientId: options.clientId, - clientSecret: options.clientSecret, - token: response.data.access_token, - refreshToken: response.data.refresh_token, - expiresAt: toTimestamp$2(apiTimeInMs, response.data.expires_in), - refreshTokenExpiresAt: toTimestamp$2( - apiTimeInMs, - response.data.refresh_token_expires_in - ) - } - return { - ...response, - authentication - } - } - function toTimestamp$2(apiTimeInMs, expirationInSeconds) { - return new Date(apiTimeInMs + expirationInSeconds * 1000).toISOString() - } - - async function scopeToken(options) { - const { - request: optionsRequest, - clientType, - clientId, - clientSecret, - token, - ...requestOptions - } = options - const request$1 = - optionsRequest /* istanbul ignore next: we always pass a custom request in tests */ || - request.request - const response = await request$1( - 'POST /applications/{client_id}/token/scoped', - { - headers: { - authorization: `basic ${btoa(`${clientId}:${clientSecret}`)}` - }, - client_id: clientId, - access_token: token, - ...requestOptions - } - ) - const authentication = Object.assign( - { - clientType, - clientId, - clientSecret, - token: response.data.token - }, - response.data.expires_at - ? { - expiresAt: response.data.expires_at - } - : {} - ) - return { - ...response, - authentication - } - } - - async function resetToken(options) { - const request$1 = - options.request /* istanbul ignore next: we always pass a custom request in tests */ || - request.request - const auth = btoa(`${options.clientId}:${options.clientSecret}`) - const response = await request$1( - 'PATCH /applications/{client_id}/token', - { - headers: { - authorization: `basic ${auth}` - }, - client_id: options.clientId, - access_token: options.token - } - ) - const authentication = { - clientType: options.clientType, - clientId: options.clientId, - clientSecret: options.clientSecret, - token: response.data.token, - scopes: response.data.scopes - } - if (response.data.expires_at) - authentication.expiresAt = response.data.expires_at - if (options.clientType === 'github-app') { - delete authentication.scopes - } - return { - ...response, - authentication - } - } - - async function deleteToken(options) { - const request$1 = - options.request /* istanbul ignore next: we always pass a custom request in tests */ || - request.request - const auth = btoa(`${options.clientId}:${options.clientSecret}`) - return request$1('DELETE /applications/{client_id}/token', { - headers: { - authorization: `basic ${auth}` - }, - client_id: options.clientId, - access_token: options.token - }) - } - - async function deleteAuthorization(options) { - const request$1 = - options.request /* istanbul ignore next: we always pass a custom request in tests */ || - request.request - const auth = btoa(`${options.clientId}:${options.clientSecret}`) - return request$1('DELETE /applications/{client_id}/grant', { - headers: { - authorization: `basic ${auth}` - }, - client_id: options.clientId, - access_token: options.token - }) - } - - exports.VERSION = VERSION - exports.checkToken = checkToken - exports.createDeviceCode = createDeviceCode - exports.deleteAuthorization = deleteAuthorization - exports.deleteToken = deleteToken - exports.exchangeDeviceCode = exchangeDeviceCode - exports.exchangeWebFlowCode = exchangeWebFlowCode - exports.getWebFlowAuthorizationUrl = getWebFlowAuthorizationUrl - exports.refreshToken = refreshToken - exports.resetToken = resetToken - exports.scopeToken = scopeToken - //# sourceMappingURL=index.js.map - - /***/ - }, - - /***/ 1301: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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] - } - } - - 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('+') - ) - } - - 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, ']') - } - - 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(',')) - } - } - } - } else { - if (operator === ';') { - if (isDefined(value)) { - result.push(encodeUnreserved(key)) - } - } else if (value === '' && (operator === '&' || operator === '?')) { - result.push(encodeUnreserved(key) + '=') - } else if (value === '') { - result.push('') - } - } - - 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) - } - } - ) - } - - 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(',') - } - - 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 - } - } - } // 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 = '7.0.3' - - 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 - - /***/ - }, - - /***/ 2434: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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 - - /***/ - }, - - /***/ 3315: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - function _interopDefault(ex) { - return ex && typeof ex === 'object' && 'default' in ex - ? ex['default'] - : ex - } - - var endpoint = __nccwpck_require__(1301) - var universalUserAgent = __nccwpck_require__(5030) - var isPlainObject = __nccwpck_require__(3287) - var nodeFetch = _interopDefault(__nccwpck_require__(467)) - var requestError = __nccwpck_require__(2434) - - const VERSION = '6.2.2' - - 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) || - globalThis.fetch || - /* istanbul ignore next */ - 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 - else if (error.name === 'AbortError') 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 - - /***/ - }, - - /***/ 4193: /***/ (__unused_webpack_module, exports) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - const VERSION = '2.19.0' - - 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: [] - } - } - } - } - }) - } - } - - 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}/actions/runners/downloads', - 'GET /enterprises/{enterprise}/actions/runners/{runner_id}/labels', - 'GET /enterprises/{enterprise}/secret-scanning/alerts', - '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 /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 /organizations/{organization_id}/custom_roles', - '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/runners/downloads', - 'GET /orgs/{org}/actions/runners/{runner_id}/labels', - 'GET /orgs/{org}/actions/secrets', - 'GET /orgs/{org}/actions/secrets/{secret_name}/repositories', - 'GET /orgs/{org}/blocks', - 'GET /orgs/{org}/code-scanning/alerts', - '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}/projects', - 'GET /orgs/{org}/public_members', - 'GET /orgs/{org}/repos', - 'GET /orgs/{org}/secret-scanning/alerts', - '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}/external-groups', - '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}/team-sync/group-mappings', - '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/runners', - 'GET /repos/{owner}/{repo}/actions/runners/downloads', - 'GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels', - '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}/autolinks', - '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}/branches-where-head', - '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}/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}/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}/tags/protection', - 'GET /repos/{owner}/{repo}/teams', - 'GET /repositories', - 'GET /repositories/{repository_id}/environments/{environment_name}/secrets', - 'GET /scim/v2/enterprises/{enterprise}/Groups', - 'GET /scim/v2/enterprises/{enterprise}/Users', - 'GET /scim/v2/organizations/{org}/Users', - '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}/team-sync/group-mappings', - 'GET /teams/{team_id}/teams', - 'GET /user/blocks', - 'GET /user/codespaces', - 'GET /user/codespaces/secrets', - 'GET /user/codespaces/secrets/{secret_name}/repositories', - '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/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 - - /***/ - }, - - /***/ 8883: /***/ (__unused_webpack_module, exports) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - const VERSION = '1.0.4' - - /** - * @param octokit Octokit instance - * @param options Options passed to Octokit constructor - */ - - function requestLog(octokit) { - octokit.hook.wrap('request', (request, options) => { - octokit.log.debug('request', options) - const start = Date.now() - const requestOptions = octokit.request.endpoint.parse(options) - const path = requestOptions.url.replace(options.baseUrl, '') - return request(options) - .then((response) => { - octokit.log.info( - `${requestOptions.method} ${path} - ${response.status} in ${ - Date.now() - start - }ms` - ) - return response - }) - .catch((error) => { - octokit.log.info( - `${requestOptions.method} ${path} - ${error.status} in ${ - Date.now() - start - }ms` - ) - throw error - }) - }) - } - requestLog.VERSION = VERSION - - exports.requestLog = requestLog - //# sourceMappingURL=index.js.map - - /***/ - }, - - /***/ 3044: /***/ (__unused_webpack_module, exports) => { - 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' - ], - 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' - ], - 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}' - ], - 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'], - 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' - ], - 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: { - 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.15.0' - - 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 - - /***/ - }, - - /***/ 537: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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 - - /***/ - }, - - /***/ 6234: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - function _interopDefault(ex) { - return ex && typeof ex === 'object' && 'default' in ex - ? ex['default'] - : ex - } - - var endpoint = __nccwpck_require__(9440) - var universalUserAgent = __nccwpck_require__(5030) - var isPlainObject = __nccwpck_require__(3287) - var nodeFetch = _interopDefault(__nccwpck_require__(467)) - var requestError = __nccwpck_require__(537) - - 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 - - /***/ - }, - - /***/ 5375: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - var __webpack_unused_export__ - - __webpack_unused_export__ = { value: true } - - var core = __nccwpck_require__(4952) - var pluginRequestLog = __nccwpck_require__(8883) - var pluginPaginateRest = __nccwpck_require__(606) - var pluginRestEndpointMethods = __nccwpck_require__(4923) - - const VERSION = '19.0.7' - - const Octokit = core.Octokit.plugin( - pluginRequestLog.requestLog, - pluginRestEndpointMethods.legacyRestEndpointMethods, - pluginPaginateRest.paginateRest - ).defaults({ - userAgent: `octokit-rest.js/${VERSION}` - }) - - exports.v = Octokit - //# sourceMappingURL=index.js.map - - /***/ - }, - - /***/ 7767: /***/ (__unused_webpack_module, exports) => { - 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 - } - } - - /** - * 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 - - /***/ - }, - - /***/ 4952: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - var universalUserAgent = __nccwpck_require__(5030) - var beforeAfterHook = __nccwpck_require__(3682) - var request = __nccwpck_require__(6206) - var graphql = __nccwpck_require__(7461) - var authToken = __nccwpck_require__(7767) - - const VERSION = '4.2.0' - - 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 - } - - if (options.previews) { - requestDefaults.mediaType.previews = options.previews - } - - if (options.timeZone) { - requestDefaults.headers['time-zone'] = options.timeZone - } - - 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' - }) - } else { - // (2) - const auth = authToken.createTokenAuth(options.auth) // @ts-ignore ¯\_(ツ)_/¯ - - hook.wrap('request', auth.hook) - this.auth = auth - } - } else { - const { authStrategy, ...otherOptions } = options - 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 - - /***/ - }, - - /***/ 6065: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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] - } - } - 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('+') - ) - } - 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, ']') - } - 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(',')) - } - } - } - } else { - if (operator === ';') { - if (isDefined(value)) { - result.push(encodeUnreserved(key)) - } - } else if (value === '' && (operator === '&' || operator === '?')) { - result.push(encodeUnreserved(key) + '=') - } else if (value === '') { - result.push('') - } - } - 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) - } - } - ) - } - - 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(',') - } - 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 - } - } - } - // 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 = '7.0.5' - - 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 - - /***/ - }, - - /***/ 7461: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - var request = __nccwpck_require__(6206) - var universalUserAgent = __nccwpck_require__(5030) - - const VERSION = '5.0.5' - - 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 = {} - } - 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) - } - return response.data.data - }) - } - - function withDefaults(request, newDefaults) { - const newRequest = request.defaults(newDefaults) - const newApi = (query, options) => { - return graphql(newRequest, query, options) - } - return Object.assign(newApi, { - defaults: withDefaults.bind(null, newRequest), - endpoint: newRequest.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 - - /***/ - }, - - /***/ 606: /***/ (__unused_webpack_module, exports) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - const VERSION = '6.0.0' - - /** - * 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 { - ...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: [] - } - } - } - } - }) - } - } - - 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 /enterprises/{enterprise}/actions/runner-groups', - 'GET /enterprises/{enterprise}/dependabot/alerts', - 'GET /enterprises/{enterprise}/secret-scanning/alerts', - '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/required_workflows', - '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}/actions/variables', - 'GET /orgs/{org}/actions/variables/{name}/repositories', - 'GET /orgs/{org}/blocks', - 'GET /orgs/{org}/code-scanning/alerts', - 'GET /orgs/{org}/codespaces', - 'GET /orgs/{org}/codespaces/secrets', - 'GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories', - 'GET /orgs/{org}/dependabot/alerts', - 'GET /orgs/{org}/dependabot/secrets', - 'GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories', - 'GET /orgs/{org}/events', - '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}/members/{username}/codespaces', - '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}/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/{org}/{repo}/actions/required_workflows', - 'GET /repos/{owner}/{repo}/actions/artifacts', - 'GET /repos/{owner}/{repo}/actions/caches', - 'GET /repos/{owner}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}/runs', - '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/variables', - '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/alerts', - '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}/environments/{environment_name}/deployment-branch-policies', - 'GET /repos/{owner}/{repo}/events', - 'GET /repos/{owner}/{repo}/forks', - '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}/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 /repositories/{repository_id}/environments/{environment_name}/variables', - '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/ssh_signing_keys', - '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}/ssh_signing_keys', - '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 - - /***/ - }, - - /***/ 4923: /***/ (__unused_webpack_module, exports) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - 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}' - ], - addSelectedRepoToOrgVariable: [ - 'PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}' - ], - addSelectedRepoToRequiredWorkflow: [ - 'PUT /orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories/{repository_id}' - ], - approveWorkflowRun: [ - 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve' - ], - cancelWorkflowRun: [ - 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel' - ], - createEnvironmentVariable: [ - 'POST /repositories/{repository_id}/environments/{environment_name}/variables' - ], - 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}' - ], - createOrgVariable: ['POST /orgs/{org}/actions/variables'], - 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' - ], - createRepoVariable: ['POST /repos/{owner}/{repo}/actions/variables'], - createRequiredWorkflow: ['POST /orgs/{org}/actions/required_workflows'], - 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}' - ], - deleteEnvironmentVariable: [ - 'DELETE /repositories/{repository_id}/environments/{environment_name}/variables/{name}' - ], - deleteOrgSecret: ['DELETE /orgs/{org}/actions/secrets/{secret_name}'], - deleteOrgVariable: ['DELETE /orgs/{org}/actions/variables/{name}'], - deleteRepoSecret: [ - 'DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}' - ], - deleteRepoVariable: [ - 'DELETE /repos/{owner}/{repo}/actions/variables/{name}' - ], - deleteRequiredWorkflow: [ - 'DELETE /orgs/{org}/actions/required_workflows/{required_workflow_id}' - ], - 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' - ], - 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}' - ], - getEnvironmentVariable: [ - 'GET /repositories/{repository_id}/environments/{environment_name}/variables/{name}' - ], - 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}'], - getOrgVariable: ['GET /orgs/{org}/actions/variables/{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' - ], - getRepoRequiredWorkflow: [ - 'GET /repos/{org}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}' - ], - getRepoRequiredWorkflowUsage: [ - 'GET /repos/{org}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}/timing' - ], - getRepoSecret: [ - 'GET /repos/{owner}/{repo}/actions/secrets/{secret_name}' - ], - getRepoVariable: ['GET /repos/{owner}/{repo}/actions/variables/{name}'], - getRequiredWorkflow: [ - 'GET /orgs/{org}/actions/required_workflows/{required_workflow_id}' - ], - 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' - ], - listEnvironmentVariables: [ - 'GET /repositories/{repository_id}/environments/{environment_name}/variables' - ], - 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'], - listOrgVariables: ['GET /orgs/{org}/actions/variables'], - listRepoRequiredWorkflows: [ - 'GET /repos/{org}/{repo}/actions/required_workflows' - ], - listRepoSecrets: ['GET /repos/{owner}/{repo}/actions/secrets'], - listRepoVariables: ['GET /repos/{owner}/{repo}/actions/variables'], - listRepoWorkflows: ['GET /repos/{owner}/{repo}/actions/workflows'], - listRequiredWorkflowRuns: [ - 'GET /repos/{owner}/{repo}/actions/required_workflows/{required_workflow_id_for_repo}/runs' - ], - listRequiredWorkflows: ['GET /orgs/{org}/actions/required_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' - ], - listSelectedReposForOrgVariable: [ - 'GET /orgs/{org}/actions/variables/{name}/repositories' - ], - listSelectedRepositoriesEnabledGithubActionsOrganization: [ - 'GET /orgs/{org}/actions/permissions/repositories' - ], - listSelectedRepositoriesRequiredWorkflow: [ - 'GET /orgs/{org}/actions/required_workflows/{required_workflow_id}/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}' - ], - removeSelectedRepoFromOrgVariable: [ - 'DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}' - ], - removeSelectedRepoFromRequiredWorkflow: [ - 'DELETE /orgs/{org}/actions/required_workflows/{required_workflow_id}/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' - ], - 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' - ], - setSelectedReposForOrgVariable: [ - 'PUT /orgs/{org}/actions/variables/{name}/repositories' - ], - setSelectedReposToRequiredWorkflow: [ - 'PUT /orgs/{org}/actions/required_workflows/{required_workflow_id}/repositories' - ], - setSelectedRepositoriesEnabledGithubActionsOrganization: [ - 'PUT /orgs/{org}/actions/permissions/repositories' - ], - setWorkflowAccessToRepository: [ - 'PUT /repos/{owner}/{repo}/actions/permissions/access' - ], - updateEnvironmentVariable: [ - 'PATCH /repositories/{repository_id}/environments/{environment_name}/variables/{name}' - ], - updateOrgVariable: ['PATCH /orgs/{org}/actions/variables/{name}'], - updateRepoVariable: [ - 'PATCH /repos/{owner}/{repo}/actions/variables/{name}' - ], - updateRequiredWorkflow: [ - 'PATCH /orgs/{org}/actions/required_workflows/{required_workflow_id}' - ] - }, - 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' - ], - 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}' - ], - getCodeqlDatabase: [ - 'GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}' - ], - 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'] - } - ], - listCodeqlDatabases: [ - 'GET /repos/{owner}/{repo}/code-scanning/codeql/databases' - ], - 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}' - ], - addSelectedRepoToOrgSecret: [ - 'PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}' - ], - codespaceMachinesForAuthenticatedUser: [ - 'GET /user/codespaces/{codespace_name}/machines' - ], - createForAuthenticatedUser: ['POST /user/codespaces'], - createOrUpdateOrgSecret: [ - 'PUT /orgs/{org}/codespaces/secrets/{secret_name}' - ], - 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}' - ], - deleteOrgSecret: [ - 'DELETE /orgs/{org}/codespaces/secrets/{secret_name}' - ], - deleteRepoSecret: [ - 'DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}' - ], - deleteSecretForAuthenticatedUser: [ - 'DELETE /user/codespaces/secrets/{secret_name}' - ], - exportForAuthenticatedUser: [ - 'POST /user/codespaces/{codespace_name}/exports' - ], - getCodespacesForUserInOrg: [ - 'GET /orgs/{org}/members/{username}/codespaces' - ], - getExportDetailsForAuthenticatedUser: [ - 'GET /user/codespaces/{codespace_name}/exports/{export_id}' - ], - getForAuthenticatedUser: ['GET /user/codespaces/{codespace_name}'], - getOrgPublicKey: ['GET /orgs/{org}/codespaces/secrets/public-key'], - getOrgSecret: ['GET /orgs/{org}/codespaces/secrets/{secret_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' - ], - listOrgSecrets: ['GET /orgs/{org}/codespaces/secrets'], - listRepoSecrets: ['GET /repos/{owner}/{repo}/codespaces/secrets'], - listRepositoriesForSecretForAuthenticatedUser: [ - 'GET /user/codespaces/secrets/{secret_name}/repositories' - ], - listSecretsForAuthenticatedUser: ['GET /user/codespaces/secrets'], - listSelectedReposForOrgSecret: [ - 'GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories' - ], - preFlightWithRepoForAuthenticatedUser: [ - 'GET /repos/{owner}/{repo}/codespaces/new' - ], - publishForAuthenticatedUser: [ - 'POST /user/codespaces/{codespace_name}/publish' - ], - removeRepositoryForSecretForAuthenticatedUser: [ - 'DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}' - ], - removeSelectedRepoFromOrgSecret: [ - 'DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}' - ], - repoMachinesForAuthenticatedUser: [ - 'GET /repos/{owner}/{repo}/codespaces/machines' - ], - setCodespacesBilling: ['PUT /orgs/{org}/codespaces/billing'], - setRepositoriesForSecretForAuthenticatedUser: [ - 'PUT /user/codespaces/secrets/{secret_name}/repositories' - ], - setSelectedReposForOrgSecret: [ - 'PUT /orgs/{org}/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}' - ], - getAlert: [ - 'GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}' - ], - 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}' - ], - listAlertsForEnterprise: [ - 'GET /enterprises/{enterprise}/dependabot/alerts' - ], - listAlertsForOrg: ['GET /orgs/{org}/dependabot/alerts'], - listAlertsForRepo: ['GET /repos/{owner}/{repo}/dependabot/alerts'], - 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' - ], - updateAlert: [ - 'PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}' - ] - }, - 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' - ], - enableSelectedOrganizationGithubActionsEnterprise: [ - 'PUT /enterprises/{enterprise}/actions/permissions/organizations/{org_id}' - ], - listLabelsForSelfHostedRunnerForEnterprise: [ - 'GET /enterprises/{enterprise}/actions/runners/{runner_id}/labels' - ] - }, - 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}' - ], - checkUserCanBeAssignedToIssue: [ - 'GET /repos/{owner}/{repo}/issues/{issue_number}/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'], - getAllVersions: ['GET /versions'], - 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: { - addSecurityManagerTeam: [ - 'PUT /orgs/{org}/security-managers/teams/{team_slug}' - ], - 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}'], - enableOrDisableSecurityProductOnAllOrgRepos: [ - 'POST /orgs/{org}/{security_product}/{enablement}' - ], - 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'], - 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'], - listSecurityManagerTeams: ['GET /orgs/{org}/security-managers'], - 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}' - ], - removeSecurityManagerTeam: [ - 'DELETE /orgs/{org}/security-managers/teams/{team_slug}' - ], - 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'], - createDeploymentBranchPolicy: [ - 'POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies' - ], - 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}' - ], - createPagesDeployment: ['POST /repos/{owner}/{repo}/pages/deployment'], - 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}' - ], - deleteDeploymentBranchPolicy: [ - 'DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_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}' - ], - getDeploymentBranchPolicy: [ - 'GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_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'], - listDeploymentBranchPolicies: [ - 'GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies' - ], - 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}' - ], - updateDeploymentBranchPolicy: [ - 'PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_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}' - ], - getSecurityAnalysisSettingsForEnterprise: [ - 'GET /enterprises/{enterprise}/code_security_and_analysis' - ], - 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' - ], - patchSecurityAnalysisSettingsForEnterprise: [ - 'PATCH /enterprises/{enterprise}/code_security_and_analysis' - ], - postSecurityProductEnablementForEnterprise: [ - 'POST /enterprises/{enterprise}/{security_product}/{enablement}' - ], - 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'], - createSshSigningKeyForAuthenticatedUser: [ - 'POST /user/ssh_signing_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}'], - deleteSshSigningKeyForAuthenticatedUser: [ - 'DELETE /user/ssh_signing_keys/{ssh_signing_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}'], - getSshSigningKeyForAuthenticatedUser: [ - 'GET /user/ssh_signing_keys/{ssh_signing_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'], - listSshSigningKeysForAuthenticatedUser: ['GET /user/ssh_signing_keys'], - listSshSigningKeysForUser: ['GET /users/{username}/ssh_signing_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 = '7.0.1' - - 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 { - ...api, - rest: api - } - } - legacyRestEndpointMethods.VERSION = VERSION - - exports.legacyRestEndpointMethods = legacyRestEndpointMethods - exports.restEndpointMethods = restEndpointMethods - //# sourceMappingURL=index.js.map - - /***/ - }, - - /***/ 6239: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - 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 - - /***/ - }, - - /***/ 6206: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - Object.defineProperty(exports, '__esModule', { value: true }) - - function _interopDefault(ex) { - return ex && typeof ex === 'object' && 'default' in ex - ? ex['default'] - : ex - } - - var endpoint = __nccwpck_require__(6065) - var universalUserAgent = __nccwpck_require__(5030) - var isPlainObject = __nccwpck_require__(3287) - var nodeFetch = _interopDefault(__nccwpck_require__(467)) - var requestError = __nccwpck_require__(6239) - - const VERSION = '6.2.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) || - globalThis.fetch || - /* istanbul ignore next */ 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 - else if (error.name === 'AbortError') 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 - - /***/ - }, - - /***/ 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) - } - - /***/ - }, - - /***/ 2358: /***/ (module) => { - module.exports = function btoa(str) { - return new Buffer(str).toString('base64') - } - - /***/ - }, - - /***/ 9239: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - /*jshint node:true */ - - var Buffer = __nccwpck_require__(4300).Buffer // browserify - var SlowBuffer = __nccwpck_require__(4300).SlowBuffer - - module.exports = bufferEq - - function bufferEq(a, b) { - // shortcutting on type is necessary for correctness - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - return false - } - - // buffer sizes should be well-known information, so despite this - // shortcutting, it doesn't leak any information about the *contents* of the - // buffers. - if (a.length !== b.length) { - return false - } - - var c = 0 - for (var i = 0; i < a.length; i++) { - /*jshint bitwise:false */ - c |= a[i] ^ b[i] // XOR - } - return c === 0 - } - - bufferEq.install = function () { - Buffer.prototype.equal = SlowBuffer.prototype.equal = function equal( - that - ) { - return bufferEq(this, that) - } - } - - var origBufEqual = Buffer.prototype.equal - var origSlowBufEqual = SlowBuffer.prototype.equal - bufferEq.restore = function () { - Buffer.prototype.equal = origBufEqual - SlowBuffer.prototype.equal = origSlowBufEqual - } - - /***/ - }, - - /***/ 8932: /***/ (__unused_webpack_module, exports) => { - 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 - - /***/ - }, - - /***/ 1728: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - var Buffer = __nccwpck_require__(1867).Buffer - - var getParamBytesForAlg = __nccwpck_require__(528) - - var MAX_OCTET = 0x80, - CLASS_UNIVERSAL = 0, - PRIMITIVE_BIT = 0x20, - TAG_SEQ = 0x10, - TAG_INT = 0x02, - ENCODED_TAG_SEQ = TAG_SEQ | PRIMITIVE_BIT | (CLASS_UNIVERSAL << 6), - ENCODED_TAG_INT = TAG_INT | (CLASS_UNIVERSAL << 6) - - function base64Url(base64) { - return base64.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_') - } - - function signatureAsBuffer(signature) { - if (Buffer.isBuffer(signature)) { - return signature - } else if ('string' === typeof signature) { - return Buffer.from(signature, 'base64') - } - - throw new TypeError('ECDSA signature must be a Base64 string or a Buffer') - } - - function derToJose(signature, alg) { - signature = signatureAsBuffer(signature) - var paramBytes = getParamBytesForAlg(alg) - - // the DER encoded param should at most be the param size, plus a padding - // zero, since due to being a signed integer - var maxEncodedParamLength = paramBytes + 1 - - var inputLength = signature.length - - var offset = 0 - if (signature[offset++] !== ENCODED_TAG_SEQ) { - throw new Error('Could not find expected "seq"') - } - - var seqLength = signature[offset++] - if (seqLength === (MAX_OCTET | 1)) { - seqLength = signature[offset++] - } - - if (inputLength - offset < seqLength) { - throw new Error( - '"seq" specified length of "' + - seqLength + - '", only "' + - (inputLength - offset) + - '" remaining' - ) - } - - if (signature[offset++] !== ENCODED_TAG_INT) { - throw new Error('Could not find expected "int" for "r"') - } - - var rLength = signature[offset++] - - if (inputLength - offset - 2 < rLength) { - throw new Error( - '"r" specified length of "' + - rLength + - '", only "' + - (inputLength - offset - 2) + - '" available' - ) - } - - if (maxEncodedParamLength < rLength) { - throw new Error( - '"r" specified length of "' + - rLength + - '", max of "' + - maxEncodedParamLength + - '" is acceptable' - ) - } - - var rOffset = offset - offset += rLength - - if (signature[offset++] !== ENCODED_TAG_INT) { - throw new Error('Could not find expected "int" for "s"') - } - - var sLength = signature[offset++] - - if (inputLength - offset !== sLength) { - throw new Error( - '"s" specified length of "' + - sLength + - '", expected "' + - (inputLength - offset) + - '"' - ) - } - - if (maxEncodedParamLength < sLength) { - throw new Error( - '"s" specified length of "' + - sLength + - '", max of "' + - maxEncodedParamLength + - '" is acceptable' - ) - } - - var sOffset = offset - offset += sLength - - if (offset !== inputLength) { - throw new Error( - 'Expected to consume entire buffer, but "' + - (inputLength - offset) + - '" bytes remain' - ) - } - - var rPadding = paramBytes - rLength, - sPadding = paramBytes - sLength - - var dst = Buffer.allocUnsafe(rPadding + rLength + sPadding + sLength) - - for (offset = 0; offset < rPadding; ++offset) { - dst[offset] = 0 - } - signature.copy( - dst, - offset, - rOffset + Math.max(-rPadding, 0), - rOffset + rLength - ) - - offset = paramBytes - - for (var o = offset; offset < o + sPadding; ++offset) { - dst[offset] = 0 - } - signature.copy( - dst, - offset, - sOffset + Math.max(-sPadding, 0), - sOffset + sLength - ) - - dst = dst.toString('base64') - dst = base64Url(dst) - - return dst - } - - function countPadding(buf, start, stop) { - var padding = 0 - while (start + padding < stop && buf[start + padding] === 0) { - ++padding - } - - var needsSign = buf[start + padding] >= MAX_OCTET - if (needsSign) { - --padding - } - - return padding - } - - function joseToDer(signature, alg) { - signature = signatureAsBuffer(signature) - var paramBytes = getParamBytesForAlg(alg) - - var signatureBytes = signature.length - if (signatureBytes !== paramBytes * 2) { - throw new TypeError( - '"' + - alg + - '" signatures must be "' + - paramBytes * 2 + - '" bytes, saw "' + - signatureBytes + - '"' - ) - } - - var rPadding = countPadding(signature, 0, paramBytes) - var sPadding = countPadding(signature, paramBytes, signature.length) - var rLength = paramBytes - rPadding - var sLength = paramBytes - sPadding - - var rsBytes = 1 + 1 + rLength + 1 + 1 + sLength - - var shortLength = rsBytes < MAX_OCTET - - var dst = Buffer.allocUnsafe((shortLength ? 2 : 3) + rsBytes) - - var offset = 0 - dst[offset++] = ENCODED_TAG_SEQ - if (shortLength) { - // Bit 8 has value "0" - // bits 7-1 give the length. - dst[offset++] = rsBytes - } else { - // Bit 8 of first octet has value "1" - // bits 7-1 give the number of additional length octets. - dst[offset++] = MAX_OCTET | 1 - // length, base 256 - dst[offset++] = rsBytes & 0xff - } - dst[offset++] = ENCODED_TAG_INT - dst[offset++] = rLength - if (rPadding < 0) { - dst[offset++] = 0 - offset += signature.copy(dst, offset, 0, paramBytes) - } else { - offset += signature.copy(dst, offset, rPadding, paramBytes) - } - dst[offset++] = ENCODED_TAG_INT - dst[offset++] = sLength - if (sPadding < 0) { - dst[offset++] = 0 - signature.copy(dst, offset, paramBytes) - } else { - signature.copy(dst, offset, paramBytes + sPadding) - } - - return dst - } - - module.exports = { - derToJose: derToJose, - joseToDer: joseToDer - } - - /***/ - }, - - /***/ 528: /***/ (module) => { - function getParamSize(keySize) { - var result = ((keySize / 8) | 0) + (keySize % 8 === 0 ? 0 : 1) - return result - } - - var paramBytesForAlg = { - ES256: getParamSize(256), - ES384: getParamSize(384), - ES512: getParamSize(521) - } - - function getParamBytesForAlg(alg) { - var paramBytes = paramBytesForAlg[alg] - if (paramBytes) { - return paramBytes - } - - throw new Error('Unknown algorithm "' + alg + '"') - } - - module.exports = getParamBytesForAlg - - /***/ - }, - - /***/ 3287: /***/ (__unused_webpack_module, exports) => { - 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 - - /***/ - }, - - /***/ 3359: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - var jws = __nccwpck_require__(4636) - - module.exports = function (jwt, options) { - options = options || {} - var decoded = jws.decode(jwt, options) - if (!decoded) { - return null - } - var payload = decoded.payload - - //try parse the payload - if (typeof payload === 'string') { - try { - var obj = JSON.parse(payload) - if (obj !== null && typeof obj === 'object') { - payload = obj - } - } catch (e) {} - } - - //return header if `complete` option is enabled. header includes claims - //such as `kid` and `alg` used to select the key within a JWKS needed to - //verify the signature - if (options.complete === true) { - return { - header: decoded.header, - payload: payload, - signature: decoded.signature - } - } - return payload - } - - /***/ - }, - - /***/ 7486: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - module.exports = { - verify: __nccwpck_require__(2327), - sign: __nccwpck_require__(2022), - JsonWebTokenError: __nccwpck_require__(405), - NotBeforeError: __nccwpck_require__(4383), - TokenExpiredError: __nccwpck_require__(6637) - } - - Object.defineProperty(module.exports, 'decode', { - enumerable: false, - value: __nccwpck_require__(3359) - }) - - /***/ - }, - - /***/ 405: /***/ (module) => { - var JsonWebTokenError = function (message, error) { - Error.call(this, message) - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor) - } - this.name = 'JsonWebTokenError' - this.message = message - if (error) this.inner = error - } - - JsonWebTokenError.prototype = Object.create(Error.prototype) - JsonWebTokenError.prototype.constructor = JsonWebTokenError - - module.exports = JsonWebTokenError - - /***/ - }, - - /***/ 4383: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - var JsonWebTokenError = __nccwpck_require__(405) - - var NotBeforeError = function (message, date) { - JsonWebTokenError.call(this, message) - this.name = 'NotBeforeError' - this.date = date - } - - NotBeforeError.prototype = Object.create(JsonWebTokenError.prototype) - - NotBeforeError.prototype.constructor = NotBeforeError - - module.exports = NotBeforeError - - /***/ - }, - - /***/ 6637: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - var JsonWebTokenError = __nccwpck_require__(405) - - var TokenExpiredError = function (message, expiredAt) { - JsonWebTokenError.call(this, message) - this.name = 'TokenExpiredError' - this.expiredAt = expiredAt - } - - TokenExpiredError.prototype = Object.create(JsonWebTokenError.prototype) - - TokenExpiredError.prototype.constructor = TokenExpiredError - - module.exports = TokenExpiredError - - /***/ - }, - - /***/ 7622: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - const semver = __nccwpck_require__(1383) - - module.exports = semver.satisfies(process.version, '>=15.7.0') - - /***/ - }, - - /***/ 9085: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - var semver = __nccwpck_require__(1383) - - module.exports = semver.satisfies(process.version, '^6.12.0 || >=8.0.0') - - /***/ - }, - - /***/ 5170: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - const semver = __nccwpck_require__(1383) - - module.exports = semver.satisfies(process.version, '>=16.9.0') - - /***/ - }, - - /***/ 6098: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - var ms = __nccwpck_require__(900) - - module.exports = function (time, iat) { - var timestamp = iat || Math.floor(Date.now() / 1000) - - if (typeof time === 'string') { - var milliseconds = ms(time) - if (typeof milliseconds === 'undefined') { - return - } - return Math.floor(timestamp + milliseconds / 1000) - } else if (typeof time === 'number') { - return timestamp + time - } else { - return - } - } - - /***/ - }, - - /***/ 7596: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - const ASYMMETRIC_KEY_DETAILS_SUPPORTED = __nccwpck_require__(7622) - const RSA_PSS_KEY_DETAILS_SUPPORTED = __nccwpck_require__(5170) - - const allowedAlgorithmsForKeys = { - ec: ['ES256', 'ES384', 'ES512'], - rsa: ['RS256', 'PS256', 'RS384', 'PS384', 'RS512', 'PS512'], - 'rsa-pss': ['PS256', 'PS384', 'PS512'] - } - - const allowedCurves = { - ES256: 'prime256v1', - ES384: 'secp384r1', - ES512: 'secp521r1' - } - - module.exports = function (algorithm, key) { - if (!algorithm || !key) return - - const keyType = key.asymmetricKeyType - if (!keyType) return - - const allowedAlgorithms = allowedAlgorithmsForKeys[keyType] - - if (!allowedAlgorithms) { - throw new Error(`Unknown key type "${keyType}".`) - } - - if (!allowedAlgorithms.includes(algorithm)) { - throw new Error( - `"alg" parameter for "${keyType}" key type must be one of: ${allowedAlgorithms.join( - ', ' - )}.` - ) - } - - /* - * Ignore the next block from test coverage because it gets executed - * conditionally depending on the Node version. Not ignoring it would - * prevent us from reaching the target % of coverage for versions of - * Node under 15.7.0. - */ - /* istanbul ignore next */ - if (ASYMMETRIC_KEY_DETAILS_SUPPORTED) { - switch (keyType) { - case 'ec': - const keyCurve = key.asymmetricKeyDetails.namedCurve - const allowedCurve = allowedCurves[algorithm] - - if (keyCurve !== allowedCurve) { - throw new Error( - `"alg" parameter "${algorithm}" requires curve "${allowedCurve}".` - ) - } - break - - case 'rsa-pss': - if (RSA_PSS_KEY_DETAILS_SUPPORTED) { - const length = parseInt(algorithm.slice(-3), 10) - const { hashAlgorithm, mgf1HashAlgorithm, saltLength } = - key.asymmetricKeyDetails - - if ( - hashAlgorithm !== `sha${length}` || - mgf1HashAlgorithm !== hashAlgorithm - ) { - throw new Error( - `Invalid key for this operation, its RSA-PSS parameters do not meet the requirements of "alg" ${algorithm}.` - ) - } - - if (saltLength !== undefined && saltLength > length >> 3) { - throw new Error( - `Invalid key for this operation, its RSA-PSS parameter saltLength does not meet the requirements of "alg" ${algorithm}.` - ) - } - } - break - } - } - } - - /***/ - }, - - /***/ 2022: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - const timespan = __nccwpck_require__(6098) - const PS_SUPPORTED = __nccwpck_require__(9085) - const validateAsymmetricKey = __nccwpck_require__(7596) - const jws = __nccwpck_require__(4636) - const { - includes, - isBoolean, - isInteger, - isNumber, - isPlainObject, - isString, - once - } = __nccwpck_require__(250) - const { KeyObject, createSecretKey, createPrivateKey } = - __nccwpck_require__(6113) - - const SUPPORTED_ALGS = [ - 'RS256', - 'RS384', - 'RS512', - 'ES256', - 'ES384', - 'ES512', - 'HS256', - 'HS384', - 'HS512', - 'none' - ] - if (PS_SUPPORTED) { - SUPPORTED_ALGS.splice(3, 0, 'PS256', 'PS384', 'PS512') - } - - const sign_options_schema = { - expiresIn: { - isValid: function (value) { - return isInteger(value) || (isString(value) && value) - }, - message: - '"expiresIn" should be a number of seconds or string representing a timespan' - }, - notBefore: { - isValid: function (value) { - return isInteger(value) || (isString(value) && value) - }, - message: - '"notBefore" should be a number of seconds or string representing a timespan' - }, - audience: { - isValid: function (value) { - return isString(value) || Array.isArray(value) - }, - message: '"audience" must be a string or array' - }, - algorithm: { - isValid: includes.bind(null, SUPPORTED_ALGS), - message: '"algorithm" must be a valid string enum value' - }, - header: { isValid: isPlainObject, message: '"header" must be an object' }, - encoding: { isValid: isString, message: '"encoding" must be a string' }, - issuer: { isValid: isString, message: '"issuer" must be a string' }, - subject: { isValid: isString, message: '"subject" must be a string' }, - jwtid: { isValid: isString, message: '"jwtid" must be a string' }, - noTimestamp: { - isValid: isBoolean, - message: '"noTimestamp" must be a boolean' - }, - keyid: { isValid: isString, message: '"keyid" must be a string' }, - mutatePayload: { - isValid: isBoolean, - message: '"mutatePayload" must be a boolean' - }, - allowInsecureKeySizes: { - isValid: isBoolean, - message: '"allowInsecureKeySizes" must be a boolean' - }, - allowInvalidAsymmetricKeyTypes: { - isValid: isBoolean, - message: '"allowInvalidAsymmetricKeyTypes" must be a boolean' - } - } - - const registered_claims_schema = { - iat: { - isValid: isNumber, - message: '"iat" should be a number of seconds' - }, - exp: { - isValid: isNumber, - message: '"exp" should be a number of seconds' - }, - nbf: { isValid: isNumber, message: '"nbf" should be a number of seconds' } - } - - function validate(schema, allowUnknown, object, parameterName) { - if (!isPlainObject(object)) { - throw new Error( - 'Expected "' + parameterName + '" to be a plain object.' - ) - } - Object.keys(object).forEach(function (key) { - const validator = schema[key] - if (!validator) { - if (!allowUnknown) { - throw new Error( - '"' + key + '" is not allowed in "' + parameterName + '"' - ) - } - return - } - if (!validator.isValid(object[key])) { - throw new Error(validator.message) - } - }) - } - - function validateOptions(options) { - return validate(sign_options_schema, false, options, 'options') - } - - function validatePayload(payload) { - return validate(registered_claims_schema, true, payload, 'payload') - } - - const options_to_payload = { - audience: 'aud', - issuer: 'iss', - subject: 'sub', - jwtid: 'jti' - } - - const options_for_objects = [ - 'expiresIn', - 'notBefore', - 'noTimestamp', - 'audience', - 'issuer', - 'subject', - 'jwtid' - ] - - module.exports = function (payload, secretOrPrivateKey, options, callback) { - if (typeof options === 'function') { - callback = options - options = {} - } else { - options = options || {} - } - - const isObjectPayload = - typeof payload === 'object' && !Buffer.isBuffer(payload) - - const header = Object.assign( - { - alg: options.algorithm || 'HS256', - typ: isObjectPayload ? 'JWT' : undefined, - kid: options.keyid - }, - options.header - ) - - function failure(err) { - if (callback) { - return callback(err) - } - throw err - } - - if (!secretOrPrivateKey && options.algorithm !== 'none') { - return failure(new Error('secretOrPrivateKey must have a value')) - } - - if ( - secretOrPrivateKey != null && - !(secretOrPrivateKey instanceof KeyObject) - ) { - try { - secretOrPrivateKey = createPrivateKey(secretOrPrivateKey) - } catch (_) { - try { - secretOrPrivateKey = createSecretKey( - typeof secretOrPrivateKey === 'string' - ? Buffer.from(secretOrPrivateKey) - : secretOrPrivateKey - ) - } catch (_) { - return failure( - new Error('secretOrPrivateKey is not valid key material') - ) - } - } - } - - if (header.alg.startsWith('HS') && secretOrPrivateKey.type !== 'secret') { - return failure( - new Error( - `secretOrPrivateKey must be a symmetric key when using ${header.alg}` - ) - ) - } else if (/^(?:RS|PS|ES)/.test(header.alg)) { - if (secretOrPrivateKey.type !== 'private') { - return failure( - new Error( - `secretOrPrivateKey must be an asymmetric key when using ${header.alg}` - ) - ) - } - if ( - !options.allowInsecureKeySizes && - !header.alg.startsWith('ES') && - secretOrPrivateKey.asymmetricKeyDetails !== undefined && //KeyObject.asymmetricKeyDetails is supported in Node 15+ - secretOrPrivateKey.asymmetricKeyDetails.modulusLength < 2048 - ) { - return failure( - new Error( - `secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}` - ) - ) - } - } - - if (typeof payload === 'undefined') { - return failure(new Error('payload is required')) - } else if (isObjectPayload) { - try { - validatePayload(payload) - } catch (error) { - return failure(error) - } - if (!options.mutatePayload) { - payload = Object.assign({}, payload) - } - } else { - const invalid_options = options_for_objects.filter(function (opt) { - return typeof options[opt] !== 'undefined' - }) - - if (invalid_options.length > 0) { - return failure( - new Error( - 'invalid ' + - invalid_options.join(',') + - ' option for ' + - typeof payload + - ' payload' - ) - ) - } - } - - if ( - typeof payload.exp !== 'undefined' && - typeof options.expiresIn !== 'undefined' - ) { - return failure( - new Error( - 'Bad "options.expiresIn" option the payload already has an "exp" property.' - ) - ) - } - - if ( - typeof payload.nbf !== 'undefined' && - typeof options.notBefore !== 'undefined' - ) { - return failure( - new Error( - 'Bad "options.notBefore" option the payload already has an "nbf" property.' - ) - ) - } - - try { - validateOptions(options) - } catch (error) { - return failure(error) - } - - if (!options.allowInvalidAsymmetricKeyTypes) { - try { - validateAsymmetricKey(header.alg, secretOrPrivateKey) - } catch (error) { - return failure(error) - } - } - - const timestamp = payload.iat || Math.floor(Date.now() / 1000) - - if (options.noTimestamp) { - delete payload.iat - } else if (isObjectPayload) { - payload.iat = timestamp - } - - if (typeof options.notBefore !== 'undefined') { - try { - payload.nbf = timespan(options.notBefore, timestamp) - } catch (err) { - return failure(err) - } - if (typeof payload.nbf === 'undefined') { - return failure( - new Error( - '"notBefore" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60' - ) - ) - } - } - - if ( - typeof options.expiresIn !== 'undefined' && - typeof payload === 'object' - ) { - try { - payload.exp = timespan(options.expiresIn, timestamp) - } catch (err) { - return failure(err) - } - if (typeof payload.exp === 'undefined') { - return failure( - new Error( - '"expiresIn" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60' - ) - ) - } - } - - Object.keys(options_to_payload).forEach(function (key) { - const claim = options_to_payload[key] - if (typeof options[key] !== 'undefined') { - if (typeof payload[claim] !== 'undefined') { - return failure( - new Error( - 'Bad "options.' + - key + - '" option. The payload already has an "' + - claim + - '" property.' - ) - ) - } - payload[claim] = options[key] - } - }) - - const encoding = options.encoding || 'utf8' - - if (typeof callback === 'function') { - callback = callback && once(callback) - - jws - .createSign({ - header: header, - privateKey: secretOrPrivateKey, - payload: payload, - encoding: encoding - }) - .once('error', callback) - .once('done', function (signature) { - // TODO: Remove in favor of the modulus length check before signing once node 15+ is the minimum supported version - if ( - !options.allowInsecureKeySizes && - /^(?:RS|PS)/.test(header.alg) && - signature.length < 256 - ) { - return callback( - new Error( - `secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}` - ) - ) - } - callback(null, signature) - }) - } else { - let signature = jws.sign({ - header: header, - payload: payload, - secret: secretOrPrivateKey, - encoding: encoding - }) - // TODO: Remove in favor of the modulus length check before signing once node 15+ is the minimum supported version - if ( - !options.allowInsecureKeySizes && - /^(?:RS|PS)/.test(header.alg) && - signature.length < 256 - ) { - throw new Error( - `secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}` - ) - } - return signature - } - } - - /***/ - }, - - /***/ 2327: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - const JsonWebTokenError = __nccwpck_require__(405) - const NotBeforeError = __nccwpck_require__(4383) - const TokenExpiredError = __nccwpck_require__(6637) - const decode = __nccwpck_require__(3359) - const timespan = __nccwpck_require__(6098) - const validateAsymmetricKey = __nccwpck_require__(7596) - const PS_SUPPORTED = __nccwpck_require__(9085) - const jws = __nccwpck_require__(4636) - const { KeyObject, createSecretKey, createPublicKey } = - __nccwpck_require__(6113) - - const PUB_KEY_ALGS = ['RS256', 'RS384', 'RS512'] - const EC_KEY_ALGS = ['ES256', 'ES384', 'ES512'] - const RSA_KEY_ALGS = ['RS256', 'RS384', 'RS512'] - const HS_ALGS = ['HS256', 'HS384', 'HS512'] - - if (PS_SUPPORTED) { - PUB_KEY_ALGS.splice(PUB_KEY_ALGS.length, 0, 'PS256', 'PS384', 'PS512') - RSA_KEY_ALGS.splice(RSA_KEY_ALGS.length, 0, 'PS256', 'PS384', 'PS512') - } - - module.exports = function ( - jwtString, - secretOrPublicKey, - options, - callback - ) { - if (typeof options === 'function' && !callback) { - callback = options - options = {} - } - - if (!options) { - options = {} - } - - //clone this object since we are going to mutate it. - options = Object.assign({}, options) - - let done - - if (callback) { - done = callback - } else { - done = function (err, data) { - if (err) throw err - return data - } - } - - if ( - options.clockTimestamp && - typeof options.clockTimestamp !== 'number' - ) { - return done(new JsonWebTokenError('clockTimestamp must be a number')) - } - - if ( - options.nonce !== undefined && - (typeof options.nonce !== 'string' || options.nonce.trim() === '') - ) { - return done(new JsonWebTokenError('nonce must be a non-empty string')) - } - - if ( - options.allowInvalidAsymmetricKeyTypes !== undefined && - typeof options.allowInvalidAsymmetricKeyTypes !== 'boolean' - ) { - return done( - new JsonWebTokenError( - 'allowInvalidAsymmetricKeyTypes must be a boolean' - ) - ) - } - - const clockTimestamp = - options.clockTimestamp || Math.floor(Date.now() / 1000) - - if (!jwtString) { - return done(new JsonWebTokenError('jwt must be provided')) - } - - if (typeof jwtString !== 'string') { - return done(new JsonWebTokenError('jwt must be a string')) - } - - const parts = jwtString.split('.') - - if (parts.length !== 3) { - return done(new JsonWebTokenError('jwt malformed')) - } - - let decodedToken - - try { - decodedToken = decode(jwtString, { complete: true }) - } catch (err) { - return done(err) - } - - if (!decodedToken) { - return done(new JsonWebTokenError('invalid token')) - } - - const header = decodedToken.header - let getSecret - - if (typeof secretOrPublicKey === 'function') { - if (!callback) { - return done( - new JsonWebTokenError( - 'verify must be called asynchronous if secret or public key is provided as a callback' - ) - ) - } - - getSecret = secretOrPublicKey - } else { - getSecret = function (header, secretCallback) { - return secretCallback(null, secretOrPublicKey) - } - } - - return getSecret(header, function (err, secretOrPublicKey) { - if (err) { - return done( - new JsonWebTokenError( - 'error in secret or public key callback: ' + err.message - ) - ) - } - - const hasSignature = parts[2].trim() !== '' - - if (!hasSignature && secretOrPublicKey) { - return done(new JsonWebTokenError('jwt signature is required')) - } - - if (hasSignature && !secretOrPublicKey) { - return done( - new JsonWebTokenError('secret or public key must be provided') - ) - } - - if (!hasSignature && !options.algorithms) { - return done( - new JsonWebTokenError( - 'please specify "none" in "algorithms" to verify unsigned tokens' - ) - ) - } - - if ( - secretOrPublicKey != null && - !(secretOrPublicKey instanceof KeyObject) - ) { - try { - secretOrPublicKey = createPublicKey(secretOrPublicKey) - } catch (_) { - try { - secretOrPublicKey = createSecretKey( - typeof secretOrPublicKey === 'string' - ? Buffer.from(secretOrPublicKey) - : secretOrPublicKey - ) - } catch (_) { - return done( - new JsonWebTokenError( - 'secretOrPublicKey is not valid key material' - ) - ) - } - } - } - - if (!options.algorithms) { - if (secretOrPublicKey.type === 'secret') { - options.algorithms = HS_ALGS - } else if ( - ['rsa', 'rsa-pss'].includes(secretOrPublicKey.asymmetricKeyType) - ) { - options.algorithms = RSA_KEY_ALGS - } else if (secretOrPublicKey.asymmetricKeyType === 'ec') { - options.algorithms = EC_KEY_ALGS - } else { - options.algorithms = PUB_KEY_ALGS - } - } - - if (options.algorithms.indexOf(decodedToken.header.alg) === -1) { - return done(new JsonWebTokenError('invalid algorithm')) - } - - if ( - header.alg.startsWith('HS') && - secretOrPublicKey.type !== 'secret' - ) { - return done( - new JsonWebTokenError( - `secretOrPublicKey must be a symmetric key when using ${header.alg}` - ) - ) - } else if ( - /^(?:RS|PS|ES)/.test(header.alg) && - secretOrPublicKey.type !== 'public' - ) { - return done( - new JsonWebTokenError( - `secretOrPublicKey must be an asymmetric key when using ${header.alg}` - ) - ) - } - - if (!options.allowInvalidAsymmetricKeyTypes) { - try { - validateAsymmetricKey(header.alg, secretOrPublicKey) - } catch (e) { - return done(e) - } - } - - let valid - - try { - valid = jws.verify( - jwtString, - decodedToken.header.alg, - secretOrPublicKey - ) - } catch (e) { - return done(e) - } - - if (!valid) { - return done(new JsonWebTokenError('invalid signature')) - } - - const payload = decodedToken.payload - - if (typeof payload.nbf !== 'undefined' && !options.ignoreNotBefore) { - if (typeof payload.nbf !== 'number') { - return done(new JsonWebTokenError('invalid nbf value')) - } - if (payload.nbf > clockTimestamp + (options.clockTolerance || 0)) { - return done( - new NotBeforeError('jwt not active', new Date(payload.nbf * 1000)) - ) - } - } - - if (typeof payload.exp !== 'undefined' && !options.ignoreExpiration) { - if (typeof payload.exp !== 'number') { - return done(new JsonWebTokenError('invalid exp value')) - } - if (clockTimestamp >= payload.exp + (options.clockTolerance || 0)) { - return done( - new TokenExpiredError('jwt expired', new Date(payload.exp * 1000)) - ) - } - } - - if (options.audience) { - const audiences = Array.isArray(options.audience) - ? options.audience - : [options.audience] - const target = Array.isArray(payload.aud) - ? payload.aud - : [payload.aud] - - const match = target.some(function (targetAudience) { - return audiences.some(function (audience) { - return audience instanceof RegExp - ? audience.test(targetAudience) - : audience === targetAudience - }) - }) - - if (!match) { - return done( - new JsonWebTokenError( - 'jwt audience invalid. expected: ' + audiences.join(' or ') - ) - ) - } - } - - if (options.issuer) { - const invalid_issuer = - (typeof options.issuer === 'string' && - payload.iss !== options.issuer) || - (Array.isArray(options.issuer) && - options.issuer.indexOf(payload.iss) === -1) - - if (invalid_issuer) { - return done( - new JsonWebTokenError( - 'jwt issuer invalid. expected: ' + options.issuer - ) - ) - } - } - - if (options.subject) { - if (payload.sub !== options.subject) { - return done( - new JsonWebTokenError( - 'jwt subject invalid. expected: ' + options.subject - ) - ) - } - } - - if (options.jwtid) { - if (payload.jti !== options.jwtid) { - return done( - new JsonWebTokenError( - 'jwt jwtid invalid. expected: ' + options.jwtid - ) - ) - } - } - - if (options.nonce) { - if (payload.nonce !== options.nonce) { - return done( - new JsonWebTokenError( - 'jwt nonce invalid. expected: ' + options.nonce - ) - ) - } - } - - if (options.maxAge) { - if (typeof payload.iat !== 'number') { - return done( - new JsonWebTokenError('iat required when maxAge is specified') - ) - } - - const maxAgeTimestamp = timespan(options.maxAge, payload.iat) - if (typeof maxAgeTimestamp === 'undefined') { - return done( - new JsonWebTokenError( - '"maxAge" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60' - ) - ) - } - if ( - clockTimestamp >= - maxAgeTimestamp + (options.clockTolerance || 0) - ) { - return done( - new TokenExpiredError( - 'maxAge exceeded', - new Date(maxAgeTimestamp * 1000) - ) - ) - } - } - - if (options.complete === true) { - const signature = decodedToken.signature - - return done(null, { - header: header, - payload: payload, - signature: signature - }) - } - - return done(null, payload) - }) - } - - /***/ - }, - - /***/ 6010: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - var bufferEqual = __nccwpck_require__(9239) - var Buffer = __nccwpck_require__(1867).Buffer - var crypto = __nccwpck_require__(6113) - var formatEcdsa = __nccwpck_require__(1728) - var util = __nccwpck_require__(3837) - - var MSG_INVALID_ALGORITHM = - '"%s" is not a valid algorithm.\n Supported algorithms are:\n "HS256", "HS384", "HS512", "RS256", "RS384", "RS512", "PS256", "PS384", "PS512", "ES256", "ES384", "ES512" and "none".' - var MSG_INVALID_SECRET = 'secret must be a string or buffer' - var MSG_INVALID_VERIFIER_KEY = 'key must be a string or a buffer' - var MSG_INVALID_SIGNER_KEY = 'key must be a string, a buffer or an object' - - var supportsKeyObjects = typeof crypto.createPublicKey === 'function' - if (supportsKeyObjects) { - MSG_INVALID_VERIFIER_KEY += ' or a KeyObject' - MSG_INVALID_SECRET += 'or a KeyObject' - } - - function checkIsPublicKey(key) { - if (Buffer.isBuffer(key)) { - return - } - - if (typeof key === 'string') { - return - } - - if (!supportsKeyObjects) { - throw typeError(MSG_INVALID_VERIFIER_KEY) - } - - if (typeof key !== 'object') { - throw typeError(MSG_INVALID_VERIFIER_KEY) - } - - if (typeof key.type !== 'string') { - throw typeError(MSG_INVALID_VERIFIER_KEY) - } - - if (typeof key.asymmetricKeyType !== 'string') { - throw typeError(MSG_INVALID_VERIFIER_KEY) - } - - if (typeof key.export !== 'function') { - throw typeError(MSG_INVALID_VERIFIER_KEY) - } - } - - function checkIsPrivateKey(key) { - if (Buffer.isBuffer(key)) { - return - } - - if (typeof key === 'string') { - return - } - - if (typeof key === 'object') { - return - } - - throw typeError(MSG_INVALID_SIGNER_KEY) - } - - function checkIsSecretKey(key) { - if (Buffer.isBuffer(key)) { - return - } - - if (typeof key === 'string') { - return key - } - - if (!supportsKeyObjects) { - throw typeError(MSG_INVALID_SECRET) - } - - if (typeof key !== 'object') { - throw typeError(MSG_INVALID_SECRET) - } - - if (key.type !== 'secret') { - throw typeError(MSG_INVALID_SECRET) - } - - if (typeof key.export !== 'function') { - throw typeError(MSG_INVALID_SECRET) - } - } - - function fromBase64(base64) { - return base64.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_') - } - - function toBase64(base64url) { - base64url = base64url.toString() - - var padding = 4 - (base64url.length % 4) - if (padding !== 4) { - for (var i = 0; i < padding; ++i) { - base64url += '=' - } - } - - return base64url.replace(/\-/g, '+').replace(/_/g, '/') - } - - function typeError(template) { - var args = [].slice.call(arguments, 1) - var errMsg = util.format.bind(util, template).apply(null, args) - return new TypeError(errMsg) - } - - function bufferOrString(obj) { - return Buffer.isBuffer(obj) || typeof obj === 'string' - } - - function normalizeInput(thing) { - if (!bufferOrString(thing)) thing = JSON.stringify(thing) - return thing - } - - function createHmacSigner(bits) { - return function sign(thing, secret) { - checkIsSecretKey(secret) - thing = normalizeInput(thing) - var hmac = crypto.createHmac('sha' + bits, secret) - var sig = (hmac.update(thing), hmac.digest('base64')) - return fromBase64(sig) - } - } - - function createHmacVerifier(bits) { - return function verify(thing, signature, secret) { - var computedSig = createHmacSigner(bits)(thing, secret) - return bufferEqual(Buffer.from(signature), Buffer.from(computedSig)) - } - } - - function createKeySigner(bits) { - return function sign(thing, privateKey) { - checkIsPrivateKey(privateKey) - thing = normalizeInput(thing) - // Even though we are specifying "RSA" here, this works with ECDSA - // keys as well. - var signer = crypto.createSign('RSA-SHA' + bits) - var sig = (signer.update(thing), signer.sign(privateKey, 'base64')) - return fromBase64(sig) - } - } - - function createKeyVerifier(bits) { - return function verify(thing, signature, publicKey) { - checkIsPublicKey(publicKey) - thing = normalizeInput(thing) - signature = toBase64(signature) - var verifier = crypto.createVerify('RSA-SHA' + bits) - verifier.update(thing) - return verifier.verify(publicKey, signature, 'base64') - } - } - - function createPSSKeySigner(bits) { - return function sign(thing, privateKey) { - checkIsPrivateKey(privateKey) - thing = normalizeInput(thing) - var signer = crypto.createSign('RSA-SHA' + bits) - var sig = - (signer.update(thing), - signer.sign( - { - key: privateKey, - padding: crypto.constants.RSA_PKCS1_PSS_PADDING, - saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST - }, - 'base64' - )) - return fromBase64(sig) - } - } - - function createPSSKeyVerifier(bits) { - return function verify(thing, signature, publicKey) { - checkIsPublicKey(publicKey) - thing = normalizeInput(thing) - signature = toBase64(signature) - var verifier = crypto.createVerify('RSA-SHA' + bits) - verifier.update(thing) - return verifier.verify( - { - key: publicKey, - padding: crypto.constants.RSA_PKCS1_PSS_PADDING, - saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST - }, - signature, - 'base64' - ) - } - } - - function createECDSASigner(bits) { - var inner = createKeySigner(bits) - return function sign() { - var signature = inner.apply(null, arguments) - signature = formatEcdsa.derToJose(signature, 'ES' + bits) - return signature - } - } - - function createECDSAVerifer(bits) { - var inner = createKeyVerifier(bits) - return function verify(thing, signature, publicKey) { - signature = formatEcdsa - .joseToDer(signature, 'ES' + bits) - .toString('base64') - var result = inner(thing, signature, publicKey) - return result - } - } - - function createNoneSigner() { - return function sign() { - return '' - } - } - - function createNoneVerifier() { - return function verify(thing, signature) { - return signature === '' - } - } - - module.exports = function jwa(algorithm) { - var signerFactories = { - hs: createHmacSigner, - rs: createKeySigner, - ps: createPSSKeySigner, - es: createECDSASigner, - none: createNoneSigner - } - var verifierFactories = { - hs: createHmacVerifier, - rs: createKeyVerifier, - ps: createPSSKeyVerifier, - es: createECDSAVerifer, - none: createNoneVerifier - } - var match = algorithm.match(/^(RS|PS|ES|HS)(256|384|512)$|^(none)$/i) - if (!match) throw typeError(MSG_INVALID_ALGORITHM, algorithm) - var algo = (match[1] || match[3]).toLowerCase() - var bits = match[2] - - return { - sign: signerFactories[algo](bits), - verify: verifierFactories[algo](bits) - } - } - - /***/ - }, - - /***/ 4636: /***/ (__unused_webpack_module, exports, __nccwpck_require__) => { - /*global exports*/ - var SignStream = __nccwpck_require__(3334) - var VerifyStream = __nccwpck_require__(5522) - - var ALGORITHMS = [ - 'HS256', - 'HS384', - 'HS512', - 'RS256', - 'RS384', - 'RS512', - 'PS256', - 'PS384', - 'PS512', - 'ES256', - 'ES384', - 'ES512' - ] - - exports.ALGORITHMS = ALGORITHMS - exports.sign = SignStream.sign - exports.verify = VerifyStream.verify - exports.decode = VerifyStream.decode - exports.isValid = VerifyStream.isValid - exports.createSign = function createSign(opts) { - return new SignStream(opts) - } - exports.createVerify = function createVerify(opts) { - return new VerifyStream(opts) - } - - /***/ - }, - - /***/ 1868: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - /*global module, process*/ - var Buffer = __nccwpck_require__(1867).Buffer - var Stream = __nccwpck_require__(2781) - var util = __nccwpck_require__(3837) - - function DataStream(data) { - this.buffer = null - this.writable = true - this.readable = true - - // No input - if (!data) { - this.buffer = Buffer.alloc(0) - return this - } - - // Stream - if (typeof data.pipe === 'function') { - this.buffer = Buffer.alloc(0) - data.pipe(this) - return this - } - - // Buffer or String - // or Object (assumedly a passworded key) - if (data.length || typeof data === 'object') { - this.buffer = data - this.writable = false - process.nextTick( - function () { - this.emit('end', data) - this.readable = false - this.emit('close') - }.bind(this) - ) - return this - } - - throw new TypeError('Unexpected data type (' + typeof data + ')') - } - util.inherits(DataStream, Stream) - - DataStream.prototype.write = function write(data) { - this.buffer = Buffer.concat([this.buffer, Buffer.from(data)]) - this.emit('data', data) - } - - DataStream.prototype.end = function end(data) { - if (data) this.write(data) - this.emit('end', data) - this.emit('close') - this.writable = false - this.readable = false - } - - module.exports = DataStream - - /***/ - }, - - /***/ 3334: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - /*global module*/ - var Buffer = __nccwpck_require__(1867).Buffer - var DataStream = __nccwpck_require__(1868) - var jwa = __nccwpck_require__(6010) - var Stream = __nccwpck_require__(2781) - var toString = __nccwpck_require__(5292) - var util = __nccwpck_require__(3837) - - function base64url(string, encoding) { - return Buffer.from(string, encoding) - .toString('base64') - .replace(/=/g, '') - .replace(/\+/g, '-') - .replace(/\//g, '_') - } - - function jwsSecuredInput(header, payload, encoding) { - encoding = encoding || 'utf8' - var encodedHeader = base64url(toString(header), 'binary') - var encodedPayload = base64url(toString(payload), encoding) - return util.format('%s.%s', encodedHeader, encodedPayload) - } - - function jwsSign(opts) { - var header = opts.header - var payload = opts.payload - var secretOrKey = opts.secret || opts.privateKey - var encoding = opts.encoding - var algo = jwa(header.alg) - var securedInput = jwsSecuredInput(header, payload, encoding) - var signature = algo.sign(securedInput, secretOrKey) - return util.format('%s.%s', securedInput, signature) - } - - function SignStream(opts) { - var secret = opts.secret || opts.privateKey || opts.key - var secretStream = new DataStream(secret) - this.readable = true - this.header = opts.header - this.encoding = opts.encoding - this.secret = this.privateKey = this.key = secretStream - this.payload = new DataStream(opts.payload) - this.secret.once( - 'close', - function () { - if (!this.payload.writable && this.readable) this.sign() - }.bind(this) - ) - - this.payload.once( - 'close', - function () { - if (!this.secret.writable && this.readable) this.sign() - }.bind(this) - ) - } - util.inherits(SignStream, Stream) - - SignStream.prototype.sign = function sign() { - try { - var signature = jwsSign({ - header: this.header, - payload: this.payload.buffer, - secret: this.secret.buffer, - encoding: this.encoding - }) - this.emit('done', signature) - this.emit('data', signature) - this.emit('end') - this.readable = false - return signature - } catch (e) { - this.readable = false - this.emit('error', e) - this.emit('close') - } - } - - SignStream.sign = jwsSign - - module.exports = SignStream - - /***/ - }, - - /***/ 5292: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - /*global module*/ - var Buffer = __nccwpck_require__(4300).Buffer - - module.exports = function toString(obj) { - if (typeof obj === 'string') return obj - if (typeof obj === 'number' || Buffer.isBuffer(obj)) return obj.toString() - return JSON.stringify(obj) - } - - /***/ - }, - - /***/ 5522: /***/ (module, __unused_webpack_exports, __nccwpck_require__) => { - /*global module*/ - var Buffer = __nccwpck_require__(1867).Buffer - var DataStream = __nccwpck_require__(1868) - var jwa = __nccwpck_require__(6010) - var Stream = __nccwpck_require__(2781) - var toString = __nccwpck_require__(5292) - var util = __nccwpck_require__(3837) - var JWS_REGEX = /^[a-zA-Z0-9\-_]+?\.[a-zA-Z0-9\-_]+?\.([a-zA-Z0-9\-_]+)?$/ - - function isObject(thing) { - return Object.prototype.toString.call(thing) === '[object Object]' - } - - function safeJsonParse(thing) { - if (isObject(thing)) return thing - try { - return JSON.parse(thing) - } catch (e) { - return undefined - } - } - - function headerFromJWS(jwsSig) { - var encodedHeader = jwsSig.split('.', 1)[0] - return safeJsonParse( - Buffer.from(encodedHeader, 'base64').toString('binary') - ) - } - - function securedInputFromJWS(jwsSig) { - return jwsSig.split('.', 2).join('.') - } - - function signatureFromJWS(jwsSig) { - return jwsSig.split('.')[2] - } - - function payloadFromJWS(jwsSig, encoding) { - encoding = encoding || 'utf8' - var payload = jwsSig.split('.')[1] - return Buffer.from(payload, 'base64').toString(encoding) - } - - function isValidJws(string) { - return JWS_REGEX.test(string) && !!headerFromJWS(string) - } - - function jwsVerify(jwsSig, algorithm, secretOrKey) { - if (!algorithm) { - var err = new Error('Missing algorithm parameter for jws.verify') - err.code = 'MISSING_ALGORITHM' - throw err - } - jwsSig = toString(jwsSig) - var signature = signatureFromJWS(jwsSig) - var securedInput = securedInputFromJWS(jwsSig) - var algo = jwa(algorithm) - return algo.verify(securedInput, signature, secretOrKey) - } - - function jwsDecode(jwsSig, opts) { - opts = opts || {} - jwsSig = toString(jwsSig) - - if (!isValidJws(jwsSig)) return null - - var header = headerFromJWS(jwsSig) - - if (!header) return null - - var payload = payloadFromJWS(jwsSig) - if (header.typ === 'JWT' || opts.json) - payload = JSON.parse(payload, opts.encoding) - - return { - header: header, - payload: payload, - signature: signatureFromJWS(jwsSig) - } - } - - function VerifyStream(opts) { - opts = opts || {} - var secretOrKey = opts.secret || opts.publicKey || opts.key - var secretStream = new DataStream(secretOrKey) - this.readable = true - this.algorithm = opts.algorithm - this.encoding = opts.encoding - this.secret = this.publicKey = this.key = secretStream - this.signature = new DataStream(opts.signature) - this.secret.once( - 'close', - function () { - if (!this.signature.writable && this.readable) this.verify() - }.bind(this) - ) - - this.signature.once( - 'close', - function () { - if (!this.secret.writable && this.readable) this.verify() - }.bind(this) - ) - } - util.inherits(VerifyStream, Stream) - VerifyStream.prototype.verify = function verify() { - try { - var valid = jwsVerify( - this.signature.buffer, - this.algorithm, - this.key.buffer - ) - var obj = jwsDecode(this.signature.buffer, this.encoding) - this.emit('done', valid, obj) - this.emit('data', valid) - this.emit('end') - this.readable = false - return valid - } catch (e) { - this.readable = false - this.emit('error', e) - this.emit('close') - } - } - - VerifyStream.decode = jwsDecode - VerifyStream.isValid = isValidJws - VerifyStream.verify = jwsVerify - - module.exports = VerifyStream - - /***/ - }, - - /***/ 250: /***/ function (module, exports, __nccwpck_require__) { - /* module decorator */ module = __nccwpck_require__.nmd(module) - /** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ - ;(function () { - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined - - /** Used as the semantic version number. */ - var VERSION = '4.17.21' - - /** Used as the size to enable large array optimizations. */ - var LARGE_ARRAY_SIZE = 200 - - /** Error message constants. */ - var CORE_ERROR_TEXT = - 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', - FUNC_ERROR_TEXT = 'Expected a function', - INVALID_TEMPL_VAR_ERROR_TEXT = - 'Invalid `variable` option passed into `_.template`' - - /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__lodash_hash_undefined__' - - /** Used as the maximum memoize cache size. */ - var MAX_MEMOIZE_SIZE = 500 - - /** Used as the internal argument placeholder. */ - var PLACEHOLDER = '__lodash_placeholder__' - - /** Used to compose bitmasks for cloning. */ - var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4 - - /** Used to compose bitmasks for value comparisons. */ - var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2 - - /** Used to compose bitmasks for function metadata. */ - var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_BOUND_FLAG = 4, - WRAP_CURRY_FLAG = 8, - WRAP_CURRY_RIGHT_FLAG = 16, - WRAP_PARTIAL_FLAG = 32, - WRAP_PARTIAL_RIGHT_FLAG = 64, - WRAP_ARY_FLAG = 128, - WRAP_REARG_FLAG = 256, - WRAP_FLIP_FLAG = 512 - - /** Used as default options for `_.truncate`. */ - var DEFAULT_TRUNC_LENGTH = 30, - DEFAULT_TRUNC_OMISSION = '...' - - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 800, - HOT_SPAN = 16 - - /** Used to indicate the type of lazy iteratees. */ - var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2, - LAZY_WHILE_FLAG = 3 - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991, - MAX_INTEGER = 1.7976931348623157e308, - NAN = 0 / 0 - - /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1 - - /** Used to associate wrap methods with their bit flags. */ - var wrapFlags = [ - ['ary', WRAP_ARY_FLAG], - ['bind', WRAP_BIND_FLAG], - ['bindKey', WRAP_BIND_KEY_FLAG], - ['curry', WRAP_CURRY_FLAG], - ['curryRight', WRAP_CURRY_RIGHT_FLAG], - ['flip', WRAP_FLIP_FLAG], - ['partial', WRAP_PARTIAL_FLAG], - ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], - ['rearg', WRAP_REARG_FLAG] - ] - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - asyncTag = '[object AsyncFunction]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - domExcTag = '[object DOMException]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - nullTag = '[object Null]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - undefinedTag = '[object Undefined]', - weakMapTag = '[object WeakMap]', - weakSetTag = '[object WeakSet]' - - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]' - - /** Used to match empty string literals in compiled template source. */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g - - /** Used to match HTML entities and HTML characters. */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, - reUnescapedHtml = /[&<>"']/g, - reHasEscapedHtml = RegExp(reEscapedHtml.source), - reHasUnescapedHtml = RegExp(reUnescapedHtml.source) - - /** Used to match template delimiters. */ - var reEscape = /<%-([\s\S]+?)%>/g, - reEvaluate = /<%([\s\S]+?)%>/g, - reInterpolate = /<%=([\s\S]+?)%>/g - - /** Used to match property names within property paths. */ - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - rePropName = - /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g - - /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source) - - /** Used to match leading whitespace. */ - var reTrimStart = /^\s+/ - - /** Used to match a single whitespace character. */ - var reWhitespace = /\s/ - - /** Used to match wrap detail comments. */ - var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, - reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, - reSplitDetails = /,? & / - - /** Used to match words composed of alphanumeric characters. */ - var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g - - /** - * Used to validate the `validate` option in `_.template` variable. - * - * Forbids characters which could potentially change the meaning of the function argument definition: - * - "()," (modification of function parameters) - * - "=" (default value) - * - "[]{}" (destructuring of function parameters) - * - "/" (beginning of a comment) - * - whitespace - */ - var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/ - - /** Used to match backslashes in property paths. */ - var reEscapeChar = /\\(\\)?/g - - /** - * Used to match - * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). - */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g - - /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/ - - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i - - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i - - /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/ - - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/ - - /** Used to match Latin Unicode letters (excluding mathematical operators). */ - var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g - - /** Used to ensure capturing order of template delimiters. */ - var reNoMatch = /($^)/ - - /** Used to match unescaped characters in compiled string literals. */ - var reUnescapedString = /['\n\r\u2028\u2029\\]/g - - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = - rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = - ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = - rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange - - /** Used to compose unicode capture groups. */ - var rsApos = "['\u2019]", - rsAstral = '[' + rsAstralRange + ']', - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = - '[^' + - rsAstralRange + - rsBreakRange + - rsDigits + - rsDingbatRange + - rsLowerRange + - rsUpperRange + - ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d' - - /** Used to compose unicode regexes. */ - var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', - rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = - '(?:' + - rsZWJ + - '(?:' + - [rsNonAstral, rsRegional, rsSurrPair].join('|') + - ')' + - rsOptVar + - reOptMod + - ')*', - rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', - rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = - '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, - rsSymbol = - '(?:' + - [ - rsNonAstral + rsCombo + '?', - rsCombo, - rsRegional, - rsSurrPair, - rsAstral - ].join('|') + - ')' - - /** Used to match apostrophes. */ - var reApos = RegExp(rsApos, 'g') - - /** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ - var reComboMark = RegExp(rsCombo, 'g') - - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reUnicode = RegExp( - rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, - 'g' - ) - - /** Used to match complex or compound words. */ - var reUnicodeWord = RegExp( - [ - rsUpper + - '?' + - rsLower + - '+' + - rsOptContrLower + - '(?=' + - [rsBreak, rsUpper, '$'].join('|') + - ')', - rsMiscUpper + - '+' + - rsOptContrUpper + - '(?=' + - [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + - ')', - rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, - rsUpper + '+' + rsOptContrUpper, - rsOrdUpper, - rsOrdLower, - rsDigits, - rsEmoji - ].join('|'), - 'g' - ) - - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasUnicode = RegExp( - '[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']' - ) - - /** Used to detect strings that need a more robust regexp to match words. */ - var reHasUnicodeWord = - /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/ - - /** Used to assign default `context` object properties. */ - var contextProps = [ - 'Array', - 'Buffer', - 'DataView', - 'Date', - 'Error', - 'Float32Array', - 'Float64Array', - 'Function', - 'Int8Array', - 'Int16Array', - 'Int32Array', - 'Map', - 'Math', - 'Object', - 'Promise', - 'RegExp', - 'Set', - 'String', - 'Symbol', - 'TypeError', - 'Uint8Array', - 'Uint8ClampedArray', - 'Uint16Array', - 'Uint32Array', - 'WeakMap', - '_', - 'clearTimeout', - 'isFinite', - 'parseInt', - 'setTimeout' - ] - - /** Used to make template sourceURLs easier to identify. */ - var templateCounter = -1 - - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {} - typedArrayTags[float32Tag] = - typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = - typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = - typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = - typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = - true - typedArrayTags[argsTag] = - typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = - typedArrayTags[boolTag] = - typedArrayTags[dataViewTag] = - typedArrayTags[dateTag] = - typedArrayTags[errorTag] = - typedArrayTags[funcTag] = - typedArrayTags[mapTag] = - typedArrayTags[numberTag] = - typedArrayTags[objectTag] = - typedArrayTags[regexpTag] = - typedArrayTags[setTag] = - typedArrayTags[stringTag] = - typedArrayTags[weakMapTag] = - false - - /** Used to identify `toStringTag` values supported by `_.clone`. */ - var cloneableTags = {} - cloneableTags[argsTag] = - cloneableTags[arrayTag] = - cloneableTags[arrayBufferTag] = - cloneableTags[dataViewTag] = - cloneableTags[boolTag] = - cloneableTags[dateTag] = - cloneableTags[float32Tag] = - cloneableTags[float64Tag] = - cloneableTags[int8Tag] = - cloneableTags[int16Tag] = - cloneableTags[int32Tag] = - cloneableTags[mapTag] = - cloneableTags[numberTag] = - cloneableTags[objectTag] = - cloneableTags[regexpTag] = - cloneableTags[setTag] = - cloneableTags[stringTag] = - cloneableTags[symbolTag] = - cloneableTags[uint8Tag] = - cloneableTags[uint8ClampedTag] = - cloneableTags[uint16Tag] = - cloneableTags[uint32Tag] = - true - cloneableTags[errorTag] = - cloneableTags[funcTag] = - cloneableTags[weakMapTag] = - false - - /** Used to map Latin Unicode letters to basic Latin letters. */ - var deburredLetters = { - // Latin-1 Supplement block. - '\xc0': 'A', - '\xc1': 'A', - '\xc2': 'A', - '\xc3': 'A', - '\xc4': 'A', - '\xc5': 'A', - '\xe0': 'a', - '\xe1': 'a', - '\xe2': 'a', - '\xe3': 'a', - '\xe4': 'a', - '\xe5': 'a', - '\xc7': 'C', - '\xe7': 'c', - '\xd0': 'D', - '\xf0': 'd', - '\xc8': 'E', - '\xc9': 'E', - '\xca': 'E', - '\xcb': 'E', - '\xe8': 'e', - '\xe9': 'e', - '\xea': 'e', - '\xeb': 'e', - '\xcc': 'I', - '\xcd': 'I', - '\xce': 'I', - '\xcf': 'I', - '\xec': 'i', - '\xed': 'i', - '\xee': 'i', - '\xef': 'i', - '\xd1': 'N', - '\xf1': 'n', - '\xd2': 'O', - '\xd3': 'O', - '\xd4': 'O', - '\xd5': 'O', - '\xd6': 'O', - '\xd8': 'O', - '\xf2': 'o', - '\xf3': 'o', - '\xf4': 'o', - '\xf5': 'o', - '\xf6': 'o', - '\xf8': 'o', - '\xd9': 'U', - '\xda': 'U', - '\xdb': 'U', - '\xdc': 'U', - '\xf9': 'u', - '\xfa': 'u', - '\xfb': 'u', - '\xfc': 'u', - '\xdd': 'Y', - '\xfd': 'y', - '\xff': 'y', - '\xc6': 'Ae', - '\xe6': 'ae', - '\xde': 'Th', - '\xfe': 'th', - '\xdf': 'ss', - // Latin Extended-A block. - '\u0100': 'A', - '\u0102': 'A', - '\u0104': 'A', - '\u0101': 'a', - '\u0103': 'a', - '\u0105': 'a', - '\u0106': 'C', - '\u0108': 'C', - '\u010a': 'C', - '\u010c': 'C', - '\u0107': 'c', - '\u0109': 'c', - '\u010b': 'c', - '\u010d': 'c', - '\u010e': 'D', - '\u0110': 'D', - '\u010f': 'd', - '\u0111': 'd', - '\u0112': 'E', - '\u0114': 'E', - '\u0116': 'E', - '\u0118': 'E', - '\u011a': 'E', - '\u0113': 'e', - '\u0115': 'e', - '\u0117': 'e', - '\u0119': 'e', - '\u011b': 'e', - '\u011c': 'G', - '\u011e': 'G', - '\u0120': 'G', - '\u0122': 'G', - '\u011d': 'g', - '\u011f': 'g', - '\u0121': 'g', - '\u0123': 'g', - '\u0124': 'H', - '\u0126': 'H', - '\u0125': 'h', - '\u0127': 'h', - '\u0128': 'I', - '\u012a': 'I', - '\u012c': 'I', - '\u012e': 'I', - '\u0130': 'I', - '\u0129': 'i', - '\u012b': 'i', - '\u012d': 'i', - '\u012f': 'i', - '\u0131': 'i', - '\u0134': 'J', - '\u0135': 'j', - '\u0136': 'K', - '\u0137': 'k', - '\u0138': 'k', - '\u0139': 'L', - '\u013b': 'L', - '\u013d': 'L', - '\u013f': 'L', - '\u0141': 'L', - '\u013a': 'l', - '\u013c': 'l', - '\u013e': 'l', - '\u0140': 'l', - '\u0142': 'l', - '\u0143': 'N', - '\u0145': 'N', - '\u0147': 'N', - '\u014a': 'N', - '\u0144': 'n', - '\u0146': 'n', - '\u0148': 'n', - '\u014b': 'n', - '\u014c': 'O', - '\u014e': 'O', - '\u0150': 'O', - '\u014d': 'o', - '\u014f': 'o', - '\u0151': 'o', - '\u0154': 'R', - '\u0156': 'R', - '\u0158': 'R', - '\u0155': 'r', - '\u0157': 'r', - '\u0159': 'r', - '\u015a': 'S', - '\u015c': 'S', - '\u015e': 'S', - '\u0160': 'S', - '\u015b': 's', - '\u015d': 's', - '\u015f': 's', - '\u0161': 's', - '\u0162': 'T', - '\u0164': 'T', - '\u0166': 'T', - '\u0163': 't', - '\u0165': 't', - '\u0167': 't', - '\u0168': 'U', - '\u016a': 'U', - '\u016c': 'U', - '\u016e': 'U', - '\u0170': 'U', - '\u0172': 'U', - '\u0169': 'u', - '\u016b': 'u', - '\u016d': 'u', - '\u016f': 'u', - '\u0171': 'u', - '\u0173': 'u', - '\u0174': 'W', - '\u0175': 'w', - '\u0176': 'Y', - '\u0177': 'y', - '\u0178': 'Y', - '\u0179': 'Z', - '\u017b': 'Z', - '\u017d': 'Z', - '\u017a': 'z', - '\u017c': 'z', - '\u017e': 'z', - '\u0132': 'IJ', - '\u0133': 'ij', - '\u0152': 'Oe', - '\u0153': 'oe', - '\u0149': "'n", - '\u017f': 's' - } - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - } - - /** Used to map HTML entities to characters. */ - var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" - } - - /** Used to escape characters for inclusion in compiled string literals. */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' - } - - /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat, - freeParseInt = parseInt - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = - typeof global == 'object' && - global && - global.Object === Object && - global - - /** Detect free variable `self`. */ - var freeSelf = - typeof self == 'object' && self && self.Object === Object && self - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')() - - /** Detect free variable `exports`. */ - var freeExports = true && exports && !exports.nodeType && exports - - /** Detect free variable `module`. */ - var freeModule = - freeExports && - 'object' == 'object' && - module && - !module.nodeType && - module - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports - - /** Detect free variable `process` from Node.js. */ - var freeProcess = moduleExports && freeGlobal.process - - /** Used to access faster Node.js helpers. */ - var nodeUtil = (function () { - try { - // Use `util.types` for Node.js 10+. - var types = - freeModule && freeModule.require && freeModule.require('util').types - - if (types) { - return types - } - - // Legacy `process.binding('util')` for Node.js < 10. - return ( - freeProcess && freeProcess.binding && freeProcess.binding('util') - ) - } catch (e) {} - })() - - /* Node.js helper references. */ - var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, - nodeIsDate = nodeUtil && nodeUtil.isDate, - nodeIsMap = nodeUtil && nodeUtil.isMap, - nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, - nodeIsSet = nodeUtil && nodeUtil.isSet, - nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray - - /*--------------------------------------------------------------------------*/ - - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - switch (args.length) { - case 0: - return func.call(thisArg) - case 1: - return func.call(thisArg, args[0]) - case 2: - return func.call(thisArg, args[0], args[1]) - case 3: - return func.call(thisArg, args[0], args[1], args[2]) - } - return func.apply(thisArg, args) - } - - /** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array == null ? 0 : array.length - - while (++index < length) { - var value = array[index] - setter(accumulator, value, iteratee(value), array) - } - return accumulator - } - - /** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break - } - } - return array - } - - /** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEachRight(array, iteratee) { - var length = array == null ? 0 : array.length - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break - } - } - return array - } - - /** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ - function arrayEvery(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false - } - } - return true - } - - /** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = [] - - while (++index < length) { - var value = array[index] - if (predicate(value, index, array)) { - result[resIndex++] = value - } - } - return result - } - - /** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length - return !!length && baseIndexOf(array, value, 0) > -1 - } - - /** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length - - while (++index < length) { - if (comparator(value, array[index])) { - return true - } - } - return false - } - - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length) - - while (++index < length) { - result[index] = iteratee(array[index], index, array) - } - return result - } - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length - - while (++index < length) { - array[offset + index] = values[index] - } - return array - } - - /** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length - - if (initAccum && length) { - accumulator = array[++index] - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array) - } - return accumulator - } - - /** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array == null ? 0 : array.length - if (initAccum && length) { - accumulator = array[--length] - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array) - } - return accumulator - } - - /** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true - } - } - return false - } - - /** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - var asciiSize = baseProperty('length') - - /** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function asciiToArray(string) { - return string.split('') - } - - /** - * Splits an ASCII `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function asciiWords(string) { - return string.match(reAsciiWord) || [] - } - - /** - * The base implementation of methods like `_.findKey` and `_.findLastKey`, - * without support for iteratee shorthands, which iterates over `collection` - * using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the found element or its key, else `undefined`. - */ - function baseFindKey(collection, predicate, eachFunc) { - var result - eachFunc(collection, function (value, key, collection) { - if (predicate(value, key, collection)) { - result = key - return false - } - }) - return result - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1) - - while (fromRight ? index-- : ++index < length) { - if (predicate(array[index], index, array)) { - return index - } - } - return -1 - } - - /** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - return value === value - ? strictIndexOf(array, value, fromIndex) - : baseFindIndex(array, baseIsNaN, fromIndex) - } - - /** - * This function is like `baseIndexOf` except that it accepts a comparator. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @param {Function} comparator The comparator invoked per element. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length - - while (++index < length) { - if (comparator(array[index], value)) { - return index - } - } - return -1 - } - - /** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ - function baseIsNaN(value) { - return value !== value - } - - /** - * The base implementation of `_.mean` and `_.meanBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the mean. - */ - function baseMean(array, iteratee) { - var length = array == null ? 0 : array.length - return length ? baseSum(array, iteratee) / length : NAN - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function (object) { - return object == null ? undefined : object[key] - } - } - - /** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyOf(object) { - return function (key) { - return object == null ? undefined : object[key] - } - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce( - collection, - iteratee, - accumulator, - initAccum, - eachFunc - ) { - eachFunc(collection, function (value, index, collection) { - accumulator = initAccum - ? ((initAccum = false), value) - : iteratee(accumulator, value, index, collection) - }) - return accumulator - } - - /** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ - function baseSortBy(array, comparer) { - var length = array.length - - array.sort(comparer) - while (length--) { - array[length] = array[length].value - } - return array - } - - /** - * The base implementation of `_.sum` and `_.sumBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ - function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length - - while (++index < length) { - var current = iteratee(array[index]) - if (current !== undefined) { - result = result === undefined ? current : result + current - } - } - return result - } - - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n) - - while (++index < n) { - result[index] = iteratee(index) - } - return result - } - - /** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the key-value pairs. - */ - function baseToPairs(object, props) { - return arrayMap(props, function (key) { - return [key, object[key]] - }) - } - - /** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ - function baseTrim(string) { - return string - ? string - .slice(0, trimmedEndIndex(string) + 1) - .replace(reTrimStart, '') - : string - } - - /** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ - function baseUnary(func) { - return function (value) { - return func(value) - } - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function (key) { - return object[key] - }) - } - - /** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function cacheHas(cache, key) { - return cache.has(key) - } - - /** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length - - while ( - ++index < length && - baseIndexOf(chrSymbols, strSymbols[index], 0) > -1 - ) {} - return index - } - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length - - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index - } - - /** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ - function countHolders(array, placeholder) { - var length = array.length, - result = 0 - - while (length--) { - if (array[length] === placeholder) { - ++result - } - } - return result - } - - /** - * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A - * letters to basic Latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ - var deburrLetter = basePropertyOf(deburredLetters) - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - var escapeHtmlChar = basePropertyOf(htmlEscapes) - - /** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeStringChar(chr) { - return '\\' + stringEscapes[chr] - } - - /** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function getValue(object, key) { - return object == null ? undefined : object[key] - } - - /** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ - function hasUnicode(string) { - return reHasUnicode.test(string) - } - - /** - * Checks if `string` contains a word composed of Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a word is found, else `false`. - */ - function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string) - } - - /** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ - function iteratorToArray(iterator) { - var data, - result = [] - - while (!(data = iterator.next()).done) { - result.push(data.value) - } - return result - } - - /** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ - function mapToArray(map) { - var index = -1, - result = Array(map.size) - - map.forEach(function (value, key) { - result[++index] = [key, value] - }) - return result - } - - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function (arg) { - return func(transform(arg)) - } - } - - /** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ - function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = [] - - while (++index < length) { - var value = array[index] - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER - result[resIndex++] = index - } - } - return result - } - - /** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ - function setToArray(set) { - var index = -1, - result = Array(set.size) - - set.forEach(function (value) { - result[++index] = value - }) - return result - } - - /** - * Converts `set` to its value-value pairs. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the value-value pairs. - */ - function setToPairs(set) { - var index = -1, - result = Array(set.size) - - set.forEach(function (value) { - result[++index] = [value, value] - }) - return result - } - - /** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length - - while (++index < length) { - if (array[index] === value) { - return index - } - } - return -1 - } - - /** - * A specialized version of `_.lastIndexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictLastIndexOf(array, value, fromIndex) { - var index = fromIndex + 1 - while (index--) { - if (array[index] === value) { - return index - } - } - return index - } - - /** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ - function stringSize(string) { - return hasUnicode(string) ? unicodeSize(string) : asciiSize(string) - } - - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string) - } - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ - function trimmedEndIndex(string) { - var index = string.length - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index - } - - /** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - var unescapeHtmlChar = basePropertyOf(htmlUnescapes) - - /** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - function unicodeSize(string) { - var result = (reUnicode.lastIndex = 0) - while (reUnicode.test(string)) { - ++result - } - return result - } - - /** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function unicodeToArray(string) { - return string.match(reUnicode) || [] - } - - /** - * Splits a Unicode `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function unicodeWords(string) { - return string.match(reUnicodeWord) || [] - } - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new pristine `lodash` function using the `context` object. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Util - * @param {Object} [context=root] The context object. - * @returns {Function} Returns a new `lodash` function. - * @example - * - * _.mixin({ 'foo': _.constant('foo') }); - * - * var lodash = _.runInContext(); - * lodash.mixin({ 'bar': lodash.constant('bar') }); - * - * _.isFunction(_.foo); - * // => true - * _.isFunction(_.bar); - * // => false - * - * lodash.isFunction(lodash.foo); - * // => false - * lodash.isFunction(lodash.bar); - * // => true - * - * // Create a suped-up `defer` in Node.js. - * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; - */ - var runInContext = function runInContext(context) { - context = - context == null - ? root - : _.defaults(root.Object(), context, _.pick(root, contextProps)) - - /** Built-in constructor references. */ - var Array = context.Array, - Date = context.Date, - Error = context.Error, - Function = context.Function, - Math = context.Math, - Object = context.Object, - RegExp = context.RegExp, - String = context.String, - TypeError = context.TypeError - - /** Used for built-in method references. */ - var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype - - /** Used to detect overreaching core-js shims. */ - var coreJsData = context['__core-js_shared__'] - - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty - - /** Used to generate unique IDs. */ - var idCounter = 0 - - /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function () { - var uid = /[^.]+$/.exec( - (coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO) || '' - ) - return uid ? 'Symbol(src)_1.' + uid : '' - })() - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString = objectProto.toString - - /** Used to infer the `Object` constructor. */ - var objectCtorString = funcToString.call(Object) - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._ - - /** Used to detect if a method is native. */ - var reIsNative = RegExp( - '^' + - funcToString - .call(hasOwnProperty) - .replace(reRegExpChar, '\\$&') - .replace( - /hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, - '$1.*?' - ) + - '$' - ) - - /** Built-in value references. */ - var Buffer = moduleExports ? context.Buffer : undefined, - Symbol = context.Symbol, - Uint8Array = context.Uint8Array, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, - getPrototype = overArg(Object.getPrototypeOf, Object), - objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - splice = arrayProto.splice, - spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, - symIterator = Symbol ? Symbol.iterator : undefined, - symToStringTag = Symbol ? Symbol.toStringTag : undefined - - var defineProperty = (function () { - try { - var func = getNative(Object, 'defineProperty') - func({}, '', {}) - return func - } catch (e) {} - })() - - /** Mocked built-ins. */ - var ctxClearTimeout = - context.clearTimeout !== root.clearTimeout && context.clearTimeout, - ctxNow = Date && Date.now !== root.Date.now && Date.now, - ctxSetTimeout = - context.setTimeout !== root.setTimeout && context.setTimeout - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeFloor = Math.floor, - nativeGetSymbols = Object.getOwnPropertySymbols, - nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, - nativeIsFinite = context.isFinite, - nativeJoin = arrayProto.join, - nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max, - nativeMin = Math.min, - nativeNow = Date.now, - nativeParseInt = context.parseInt, - nativeRandom = Math.random, - nativeReverse = arrayProto.reverse - - /* Built-in method references that are verified to be native. */ - var DataView = getNative(context, 'DataView'), - Map = getNative(context, 'Map'), - Promise = getNative(context, 'Promise'), - Set = getNative(context, 'Set'), - WeakMap = getNative(context, 'WeakMap'), - nativeCreate = getNative(Object, 'create') - - /** Used to store function metadata. */ - var metaMap = WeakMap && new WeakMap() - - /** Used to lookup unminified function names. */ - var realNames = {} - - /** Used to detect maps, sets, and weakmaps. */ - var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap) - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array and iteratees accept only - * one argument. The heuristic for whether a section qualifies for shortcut - * fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, - * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, - * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, - * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, - * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, - * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, - * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, - * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, - * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - if ( - isObjectLike(value) && - !isArray(value) && - !(value instanceof LazyWrapper) - ) { - if (value instanceof LodashWrapper) { - return value - } - if (hasOwnProperty.call(value, '__wrapped__')) { - return wrapperClone(value) - } - } - return new LodashWrapper(value) - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ - var baseCreate = (function () { - function object() {} - return function (proto) { - if (!isObject(proto)) { - return {} - } - if (objectCreate) { - return objectCreate(proto) - } - object.prototype = proto - var result = new object() - object.prototype = undefined - return result - } - })() - - /** - * The function whose prototype chain sequence wrappers inherit from. - * - * @private - */ - function baseLodash() { - // No operation performed. - } - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value - this.__actions__ = [] - this.__chain__ = !!chainAll - this.__index__ = 0 - this.__values__ = undefined - } - - /** - * By default, the template delimiters used by lodash are like those in - * embedded Ruby (ERB) as well as ES2015 template strings. Change the - * following template settings to use alternative delimiters. - * - * @static - * @memberOf _ - * @type {Object} - */ - lodash.templateSettings = { - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - escape: reEscape, - - /** - * Used to detect code to be evaluated. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - evaluate: reEvaluate, - - /** - * Used to detect `data` property values to inject. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - interpolate: reInterpolate, - - /** - * Used to reference the data object in the template text. - * - * @memberOf _.templateSettings - * @type {string} - */ - variable: '', - - /** - * Used to import variables into the compiled template. - * - * @memberOf _.templateSettings - * @type {Object} - */ - imports: { - /** - * A reference to the `lodash` function. - * - * @memberOf _.templateSettings.imports - * @type {Function} - */ - _: lodash - } - } - - // Ensure wrappers are instances of `baseLodash`. - lodash.prototype = baseLodash.prototype - lodash.prototype.constructor = lodash - - LodashWrapper.prototype = baseCreate(baseLodash.prototype) - LodashWrapper.prototype.constructor = LodashWrapper - - /*------------------------------------------------------------------------*/ - - /** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ - function LazyWrapper(value) { - this.__wrapped__ = value - this.__actions__ = [] - this.__dir__ = 1 - this.__filtered__ = false - this.__iteratees__ = [] - this.__takeCount__ = MAX_ARRAY_LENGTH - this.__views__ = [] - } - - /** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__) - result.__actions__ = copyArray(this.__actions__) - result.__dir__ = this.__dir__ - result.__filtered__ = this.__filtered__ - result.__iteratees__ = copyArray(this.__iteratees__) - result.__takeCount__ = this.__takeCount__ - result.__views__ = copyArray(this.__views__) - return result - } - - /** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this) - result.__dir__ = -1 - result.__filtered__ = true - } else { - result = this.clone() - result.__dir__ *= -1 - } - return result - } - - /** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ - function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : start - 1, - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__) - - if ( - !isArr || - (!isRight && arrLength == length && takeCount == length) - ) { - return baseWrapperValue(array, this.__actions__) - } - var result = [] - - outer: while (length-- && resIndex < takeCount) { - index += dir - - var iterIndex = -1, - value = array[index] - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value) - - if (type == LAZY_MAP_FLAG) { - value = computed - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer - } else { - break outer - } - } - } - result[resIndex++] = value - } - return result - } - - // Ensure `LazyWrapper` is an instance of `baseLodash`. - LazyWrapper.prototype = baseCreate(baseLodash.prototype) - LazyWrapper.prototype.constructor = LazyWrapper - - /*------------------------------------------------------------------------*/ - - /** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length - - this.clear() - while (++index < length) { - var entry = entries[index] - this.set(entry[0], entry[1]) - } - } - - /** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {} - this.size = 0 - } - - /** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key] - this.size -= result ? 1 : 0 - return result - } - - /** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function hashGet(key) { - var data = this.__data__ - if (nativeCreate) { - var result = data[key] - return result === HASH_UNDEFINED ? undefined : result - } - return hasOwnProperty.call(data, key) ? data[key] : undefined - } - - /** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function hashHas(key) { - var data = this.__data__ - return nativeCreate - ? data[key] !== undefined - : hasOwnProperty.call(data, key) - } - - /** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ - function hashSet(key, value) { - var data = this.__data__ - this.size += this.has(key) ? 0 : 1 - data[key] = - nativeCreate && value === undefined ? HASH_UNDEFINED : value - return this - } - - // Add methods to `Hash`. - Hash.prototype.clear = hashClear - Hash.prototype['delete'] = hashDelete - Hash.prototype.get = hashGet - Hash.prototype.has = hashHas - Hash.prototype.set = hashSet - - /*------------------------------------------------------------------------*/ - - /** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length - - this.clear() - while (++index < length) { - var entry = entries[index] - this.set(entry[0], entry[1]) - } - } - - /** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ - function listCacheClear() { - this.__data__ = [] - this.size = 0 - } - - /** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key) - - if (index < 0) { - return false - } - var lastIndex = data.length - 1 - if (index == lastIndex) { - data.pop() - } else { - splice.call(data, index, 1) - } - --this.size - return true - } - - /** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key) - - return index < 0 ? undefined : data[index][1] - } - - /** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1 - } - - /** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ - function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key) - - if (index < 0) { - ++this.size - data.push([key, value]) - } else { - data[index][1] = value - } - return this - } - - // Add methods to `ListCache`. - ListCache.prototype.clear = listCacheClear - ListCache.prototype['delete'] = listCacheDelete - ListCache.prototype.get = listCacheGet - ListCache.prototype.has = listCacheHas - ListCache.prototype.set = listCacheSet - - /*------------------------------------------------------------------------*/ - - /** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length - - this.clear() - while (++index < length) { - var entry = entries[index] - this.set(entry[0], entry[1]) - } - } - - /** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ - function mapCacheClear() { - this.size = 0 - this.__data__ = { - hash: new Hash(), - map: new (Map || ListCache)(), - string: new Hash() - } - } - - /** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key) - this.size -= result ? 1 : 0 - return result - } - - /** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function mapCacheGet(key) { - return getMapData(this, key).get(key) - } - - /** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function mapCacheHas(key) { - return getMapData(this, key).has(key) - } - - /** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ - function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size - - data.set(key, value) - this.size += data.size == size ? 0 : 1 - return this - } - - // Add methods to `MapCache`. - MapCache.prototype.clear = mapCacheClear - MapCache.prototype['delete'] = mapCacheDelete - MapCache.prototype.get = mapCacheGet - MapCache.prototype.has = mapCacheHas - MapCache.prototype.set = mapCacheSet - - /*------------------------------------------------------------------------*/ - - /** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ - function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length - - this.__data__ = new MapCache() - while (++index < length) { - this.add(values[index]) - } - } - - /** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED) - return this - } - - /** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ - function setCacheHas(value) { - return this.__data__.has(value) - } - - // Add methods to `SetCache`. - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd - SetCache.prototype.has = setCacheHas - - /*------------------------------------------------------------------------*/ - - /** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Stack(entries) { - var data = (this.__data__ = new ListCache(entries)) - this.size = data.size - } - - /** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ - function stackClear() { - this.__data__ = new ListCache() - this.size = 0 - } - - /** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key) - - this.size = data.size - return result - } - - /** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function stackGet(key) { - return this.__data__.get(key) - } - - /** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function stackHas(key) { - return this.__data__.has(key) - } - - /** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ - function stackSet(key, value) { - var data = this.__data__ - if (data instanceof ListCache) { - var pairs = data.__data__ - if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) { - pairs.push([key, value]) - this.size = ++data.size - return this - } - data = this.__data__ = new MapCache(pairs) - } - data.set(key, value) - this.size = data.size - return this - } - - // Add methods to `Stack`. - Stack.prototype.clear = stackClear - Stack.prototype['delete'] = stackDelete - Stack.prototype.get = stackGet - Stack.prototype.has = stackHas - Stack.prototype.set = stackSet - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length - - for (var key in value) { - if ( - (inherited || hasOwnProperty.call(value, key)) && - !( - skipIndexes && - // Safari 9 has enumerable `arguments.length` in strict mode. - (key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && - (key == 'buffer' || - key == 'byteLength' || - key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length)) - ) - ) { - result.push(key) - } - } - return result - } - - /** - * A specialized version of `_.sample` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @returns {*} Returns the random element. - */ - function arraySample(array) { - var length = array.length - return length ? array[baseRandom(0, length - 1)] : undefined - } - - /** - * A specialized version of `_.sampleSize` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)) - } - - /** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)) - } - - /** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignMergeValue(object, key, value) { - if ( - (value !== undefined && !eq(object[key], value)) || - (value === undefined && !(key in object)) - ) { - baseAssignValue(object, key, value) - } - } - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key] - if ( - !(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object)) - ) { - baseAssignValue(object, key, value) - } - } - - /** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function assocIndexOf(array, key) { - var length = array.length - while (length--) { - if (eq(array[length][0], key)) { - return length - } - } - return -1 - } - - /** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function (value, key, collection) { - setter(accumulator, value, iteratee(value), collection) - }) - return accumulator - } - - /** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object) - } - - /** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssignIn(object, source) { - return object && copyObject(source, keysIn(source), object) - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - configurable: true, - enumerable: true, - value: value, - writable: true - }) - } else { - object[key] = value - } - } - - /** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths to pick. - * @returns {Array} Returns the picked elements. - */ - function baseAt(object, paths) { - var index = -1, - length = paths.length, - result = Array(length), - skip = object == null - - while (++index < length) { - result[index] = skip ? undefined : get(object, paths[index]) - } - return result - } - - /** - * The base implementation of `_.clamp` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper - } - if (lower !== undefined) { - number = number >= lower ? number : lower - } - } - return number - } - - /** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG - - if (customizer) { - result = object - ? customizer(value, key, object, stack) - : customizer(value) - } - if (result !== undefined) { - return result - } - if (!isObject(value)) { - return value - } - var isArr = isArray(value) - if (isArr) { - result = initCloneArray(value) - if (!isDeep) { - return copyArray(value, result) - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag - - if (isBuffer(value)) { - return cloneBuffer(value, isDeep) - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = isFlat || isFunc ? {} : initCloneObject(value) - if (!isDeep) { - return isFlat - ? copySymbolsIn(value, baseAssignIn(result, value)) - : copySymbols(value, baseAssign(result, value)) - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {} - } - result = initCloneByTag(value, tag, isDeep) - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack()) - var stacked = stack.get(value) - if (stacked) { - return stacked - } - stack.set(value, result) - - if (isSet(value)) { - value.forEach(function (subValue) { - result.add( - baseClone(subValue, bitmask, customizer, subValue, value, stack) - ) - }) - } else if (isMap(value)) { - value.forEach(function (subValue, key) { - result.set( - key, - baseClone(subValue, bitmask, customizer, key, value, stack) - ) - }) - } - - var keysFunc = isFull - ? isFlat - ? getAllKeysIn - : getAllKeys - : isFlat - ? keysIn - : keys - - var props = isArr ? undefined : keysFunc(value) - arrayEach(props || value, function (subValue, key) { - if (props) { - key = subValue - subValue = value[key] - } - // Recursively populate clone (susceptible to call stack limits). - assignValue( - result, - key, - baseClone(subValue, bitmask, customizer, key, value, stack) - ) - }) - return result - } - - /** - * The base implementation of `_.conforms` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - */ - function baseConforms(source) { - var props = keys(source) - return function (object) { - return baseConformsTo(object, source, props) - } - } - - /** - * The base implementation of `_.conformsTo` which accepts `props` to check. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - */ - function baseConformsTo(object, source, props) { - var length = props.length - if (object == null) { - return !length - } - object = Object(object) - while (length--) { - var key = props[length], - predicate = source[key], - value = object[key] - - if ( - (value === undefined && !(key in object)) || - !predicate(value) - ) { - return false - } - } - return true - } - - /** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT) - } - return setTimeout(function () { - func.apply(undefined, args) - }, wait) - } - - /** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ - function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length - - if (!length) { - return result - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)) - } - if (comparator) { - includes = arrayIncludesWith - isCommon = false - } else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas - isCommon = false - values = new SetCache(values) - } - outer: while (++index < length) { - var value = array[index], - computed = iteratee == null ? value : iteratee(value) - - value = comparator || value !== 0 ? value : 0 - if (isCommon && computed === computed) { - var valuesIndex = valuesLength - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer - } - } - result.push(value) - } else if (!includes(values, computed, comparator)) { - result.push(value) - } - } - return result - } - - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn) - - /** - * The base implementation of `_.forEachRight` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEachRight = createBaseEach(baseForOwnRight, true) - - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true - baseEach(collection, function (value, index, collection) { - result = !!predicate(value, index, collection) - return result - }) - return result - } - - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length - - while (++index < length) { - var value = array[index], - current = iteratee(value) - - if ( - current != null && - (computed === undefined - ? current === current && !isSymbol(current) - : comparator(current, computed)) - ) { - var computed = current, - result = value - } - } - return result - } - - /** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ - function baseFill(array, value, start, end) { - var length = array.length - - start = toInteger(start) - if (start < 0) { - start = -start > length ? 0 : length + start - } - end = end === undefined || end > length ? length : toInteger(end) - if (end < 0) { - end += length - } - end = start > end ? 0 : toLength(end) - while (start < end) { - array[start++] = value - } - return array - } - - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = [] - baseEach(collection, function (value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value) - } - }) - return result - } - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length - - predicate || (predicate = isFlattenable) - result || (result = []) - - while (++index < length) { - var value = array[index] - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result) - } else { - arrayPush(result, value) - } - } else if (!isStrict) { - result[result.length] = value - } - } - return result - } - - /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor() - - /** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseForRight = createBaseFor(true) - - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys) - } - - /** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys) - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return arrayFilter(props, function (key) { - return isFunction(object[key]) - }) - } - - /** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ - function baseGet(object, path) { - path = castPath(path, object) - - var index = 0, - length = path.length - - while (object != null && index < length) { - object = object[toKey(path[index++])] - } - return index && index == length ? object : undefined - } - - /** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object) - return isArray(object) - ? result - : arrayPush(result, symbolsFunc(object)) - } - - /** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag - } - return symToStringTag && symToStringTag in Object(value) - ? getRawTag(value) - : objectToString(value) - } - - /** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other - } - - /** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key) - } - - /** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHasIn(object, key) { - return object != null && key in Object(object) - } - - /** - * The base implementation of `_.inRange` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to check. - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - */ - function baseInRange(number, start, end) { - return ( - number >= nativeMin(start, end) && number < nativeMax(start, end) - ) - } - - /** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ - function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = [] - - while (othIndex--) { - var array = arrays[othIndex] - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)) - } - maxLength = nativeMin(array.length, maxLength) - caches[othIndex] = - !comparator && - (iteratee || (length >= 120 && array.length >= 120)) - ? new SetCache(othIndex && array) - : undefined - } - array = arrays[0] - - var index = -1, - seen = caches[0] - - outer: while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value - - value = comparator || value !== 0 ? value : 0 - if ( - !(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator)) - ) { - othIndex = othLength - while (--othIndex) { - var cache = caches[othIndex] - if ( - !(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer - } - } - if (seen) { - seen.push(computed) - } - result.push(value) - } - } - return result - } - - /** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ - function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function (value, key, object) { - setter(accumulator, iteratee(value), key, object) - }) - return accumulator - } - - /** - * The base implementation of `_.invoke` without support for individual - * method arguments. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ - function baseInvoke(object, path, args) { - path = castPath(path, object) - object = parent(object, path) - var func = object == null ? object : object[toKey(last(path))] - return func == null ? undefined : apply(func, object, args) - } - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag - } - - /** - * The base implementation of `_.isArrayBuffer` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - */ - function baseIsArrayBuffer(value) { - return isObjectLike(value) && baseGetTag(value) == arrayBufferTag - } - - /** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ - function baseIsDate(value) { - return isObjectLike(value) && baseGetTag(value) == dateTag - } - - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true - } - if ( - value == null || - other == null || - (!isObjectLike(value) && !isObjectLike(other)) - ) { - return value !== value && other !== other - } - return baseIsEqualDeep( - value, - other, - bitmask, - customizer, - baseIsEqual, - stack - ) - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep( - object, - other, - bitmask, - customizer, - equalFunc, - stack - ) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = objIsArr ? arrayTag : getTag(object), - othTag = othIsArr ? arrayTag : getTag(other) - - objTag = objTag == argsTag ? objectTag : objTag - othTag = othTag == argsTag ? objectTag : othTag - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag - - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false - } - objIsArr = true - objIsObj = false - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack()) - return objIsArr || isTypedArray(object) - ? equalArrays( - object, - other, - bitmask, - customizer, - equalFunc, - stack - ) - : equalByTag( - object, - other, - objTag, - bitmask, - customizer, - equalFunc, - stack - ) - } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = - objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = - othIsObj && hasOwnProperty.call(other, '__wrapped__') - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other - - stack || (stack = new Stack()) - return equalFunc( - objUnwrapped, - othUnwrapped, - bitmask, - customizer, - stack - ) - } - } - if (!isSameTag) { - return false - } - stack || (stack = new Stack()) - return equalObjects( - object, - other, - bitmask, - customizer, - equalFunc, - stack - ) - } - - /** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ - function baseIsMap(value) { - return isObjectLike(value) && getTag(value) == mapTag - } - - /** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer - - if (object == null) { - return !length - } - object = Object(object) - while (index--) { - var data = matchData[index] - if ( - noCustomizer && data[2] - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false - } - } - while (++index < length) { - data = matchData[index] - var key = data[0], - objValue = object[key], - srcValue = data[1] - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false - } - } else { - var stack = new Stack() - if (customizer) { - var result = customizer( - objValue, - srcValue, - key, - object, - source, - stack - ) - } - if ( - !(result === undefined - ? baseIsEqual( - srcValue, - objValue, - COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, - customizer, - stack - ) - : result) - ) { - return false - } - } - } - return true - } - - /** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor - return pattern.test(toSource(value)) - } - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag - } - - /** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ - function baseIsSet(value) { - return isObjectLike(value) && getTag(value) == setTag - } - - /** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ - function baseIsTypedArray(value) { - return ( - isObjectLike(value) && - isLength(value.length) && - !!typedArrayTags[baseGetTag(value)] - ) - } - - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value - } - if (value == null) { - return identity - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value) - } - return property(value) - } - - /** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object) - } - var result = [] - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key) - } - } - return result - } - - /** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object) - } - var isProto = isPrototype(object), - result = [] - - for (var key in object) { - if ( - !( - key == 'constructor' && - (isProto || !hasOwnProperty.call(object, key)) - ) - ) { - result.push(key) - } - } - return result - } - - /** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ - function baseLt(value, other) { - return value < other - } - - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : [] - - baseEach(collection, function (value, key, collection) { - result[++index] = iteratee(value, key, collection) - }) - return result - } - - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatches(source) { - var matchData = getMatchData(source) - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]) - } - return function (object) { - return object === source || baseIsMatch(object, source, matchData) - } - } - - /** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue) - } - return function (object) { - var objValue = get(object, path) - return objValue === undefined && objValue === srcValue - ? hasIn(object, path) - : baseIsEqual( - srcValue, - objValue, - COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG - ) - } - } - - /** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return - } - baseFor( - source, - function (srcValue, key) { - stack || (stack = new Stack()) - if (isObject(srcValue)) { - baseMergeDeep( - object, - source, - key, - srcIndex, - baseMerge, - customizer, - stack - ) - } else { - var newValue = customizer - ? customizer( - safeGet(object, key), - srcValue, - key + '', - object, - source, - stack - ) - : undefined - - if (newValue === undefined) { - newValue = srcValue - } - assignMergeValue(object, key, newValue) - } - }, - keysIn - ) - } - - /** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMergeDeep( - object, - source, - key, - srcIndex, - mergeFunc, - customizer, - stack - ) { - var objValue = safeGet(object, key), - srcValue = safeGet(source, key), - stacked = stack.get(srcValue) - - if (stacked) { - assignMergeValue(object, key, stacked) - return - } - var newValue = customizer - ? customizer(objValue, srcValue, key + '', object, source, stack) - : undefined - - var isCommon = newValue === undefined - - if (isCommon) { - var isArr = isArray(srcValue), - isBuff = !isArr && isBuffer(srcValue), - isTyped = !isArr && !isBuff && isTypedArray(srcValue) - - newValue = srcValue - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue - } else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue) - } else if (isBuff) { - isCommon = false - newValue = cloneBuffer(srcValue, true) - } else if (isTyped) { - isCommon = false - newValue = cloneTypedArray(srcValue, true) - } else { - newValue = [] - } - } else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue - if (isArguments(objValue)) { - newValue = toPlainObject(objValue) - } else if (!isObject(objValue) || isFunction(objValue)) { - newValue = initCloneObject(srcValue) - } - } else { - isCommon = false - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue) - mergeFunc(newValue, srcValue, srcIndex, customizer, stack) - stack['delete'](srcValue) - } - assignMergeValue(object, key, newValue) - } - - /** - * The base implementation of `_.nth` which doesn't coerce arguments. - * - * @private - * @param {Array} array The array to query. - * @param {number} n The index of the element to return. - * @returns {*} Returns the nth element of `array`. - */ - function baseNth(array, n) { - var length = array.length - if (!length) { - return - } - n += n < 0 ? length : 0 - return isIndex(n, length) ? array[n] : undefined - } - - /** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ - function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = arrayMap(iteratees, function (iteratee) { - if (isArray(iteratee)) { - return function (value) { - return baseGet( - value, - iteratee.length === 1 ? iteratee[0] : iteratee - ) - } - } - return iteratee - }) - } else { - iteratees = [identity] - } - - var index = -1 - iteratees = arrayMap(iteratees, baseUnary(getIteratee())) - - var result = baseMap(collection, function (value, key, collection) { - var criteria = arrayMap(iteratees, function (iteratee) { - return iteratee(value) - }) - return { criteria: criteria, index: ++index, value: value } - }) - - return baseSortBy(result, function (object, other) { - return compareMultiple(object, other, orders) - }) - } - - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, paths) { - return basePickBy(object, paths, function (value, path) { - return hasIn(object, path) - }) - } - - /** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ - function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {} - - while (++index < length) { - var path = paths[index], - value = baseGet(object, path) - - if (predicate(value, path)) { - baseSet(result, castPath(path, object), value) - } - } - return result - } - - /** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyDeep(path) { - return function (object) { - return baseGet(object, path) - } - } - - /** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - */ - function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array - - if (array === values) { - values = copyArray(values) - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)) - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value - - while ( - (fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1 - ) { - if (seen !== array) { - splice.call(seen, fromIndex, 1) - } - splice.call(array, fromIndex, 1) - } - } - return array - } - - /** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1 - - while (length--) { - var index = indexes[length] - if (length == lastIndex || index !== previous) { - var previous = index - if (isIndex(index)) { - splice.call(array, index, 1) - } else { - baseUnset(array, index) - } - } - } - return array - } - - /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)) - } - - /** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length) - - while (length--) { - result[fromRight ? length : ++index] = start - start += step - } - return result - } - - /** - * The base implementation of `_.repeat` which doesn't coerce arguments. - * - * @private - * @param {string} string The string to repeat. - * @param {number} n The number of times to repeat the string. - * @returns {string} Returns the repeated string. - */ - function baseRepeat(string, n) { - var result = '' - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string - } - n = nativeFloor(n / 2) - if (n) { - string += string - } - } while (n) - - return result - } - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + '') - } - - /** - * The base implementation of `_.sample`. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - */ - function baseSample(collection) { - return arraySample(values(collection)) - } - - /** - * The base implementation of `_.sampleSize` without param guards. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function baseSampleSize(collection, n) { - var array = values(collection) - return shuffleSelf(array, baseClamp(n, 0, array.length)) - } - - /** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object - } - path = castPath(path, object) - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object - - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value - - if ( - key === '__proto__' || - key === 'constructor' || - key === 'prototype' - ) { - return object - } - - if (index != lastIndex) { - var objValue = nested[key] - newValue = customizer - ? customizer(objValue, key, nested) - : undefined - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : isIndex(path[index + 1]) - ? [] - : {} - } - } - assignValue(nested, key, newValue) - nested = nested[key] - } - return object - } - - /** - * The base implementation of `setData` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var baseSetData = !metaMap - ? identity - : function (func, data) { - metaMap.set(func, data) - return func - } - - /** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var baseSetToString = !defineProperty - ? identity - : function (func, string) { - return defineProperty(func, 'toString', { - configurable: true, - enumerable: false, - value: constant(string), - writable: true - }) - } - - /** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function baseShuffle(collection) { - return shuffleSelf(values(collection)) - } - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length - - if (start < 0) { - start = -start > length ? 0 : length + start - } - end = end > length ? length : end - if (end < 0) { - end += length - } - length = start > end ? 0 : (end - start) >>> 0 - start >>>= 0 - - var result = Array(length) - while (++index < length) { - result[index] = array[index + start] - } - return result - } - - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result - - baseEach(collection, function (value, index, collection) { - result = predicate(value, index, collection) - return !result - }) - return !!result - } - - /** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array == null ? low : array.length - - if ( - typeof value == 'number' && - value === value && - high <= HALF_MAX_ARRAY_LENGTH - ) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid] - - if ( - computed !== null && - !isSymbol(computed) && - (retHighest ? computed <= value : computed < value) - ) { - low = mid + 1 - } else { - high = mid - } - } - return high - } - return baseSortedIndexBy(array, value, identity, retHighest) - } - - /** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndexBy(array, value, iteratee, retHighest) { - var low = 0, - high = array == null ? 0 : array.length - if (high === 0) { - return 0 - } - - value = iteratee(value) - var valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed) - - if (valIsNaN) { - var setLow = retHighest || othIsReflexive - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined) - } else if (valIsNull) { - setLow = - othIsReflexive && othIsDefined && (retHighest || !othIsNull) - } else if (valIsSymbol) { - setLow = - othIsReflexive && - othIsDefined && - !othIsNull && - (retHighest || !othIsSymbol) - } else if (othIsNull || othIsSymbol) { - setLow = false - } else { - setLow = retHighest ? computed <= value : computed < value - } - if (setLow) { - low = mid + 1 - } else { - high = mid - } - } - return nativeMin(high, MAX_ARRAY_INDEX) - } - - /** - * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseSortedUniq(array, iteratee) { - var index = -1, - length = array.length, - resIndex = 0, - result = [] - - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value - - if (!index || !eq(computed, seen)) { - var seen = computed - result[resIndex++] = value === 0 ? 0 : value - } - } - return result - } - - /** - * The base implementation of `_.toNumber` which doesn't ensure correct - * conversions of binary, hexadecimal, or octal string values. - * - * @private - * @param {*} value The value to process. - * @returns {number} Returns the number. - */ - function baseToNumber(value) { - if (typeof value == 'number') { - return value - } - if (isSymbol(value)) { - return NAN - } - return +value - } - - /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + '' - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : '' - } - var result = value + '' - return result == '0' && 1 / value == -INFINITY ? '-0' : result - } - - /** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result - - if (comparator) { - isCommon = false - includes = arrayIncludesWith - } else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array) - if (set) { - return setToArray(set) - } - isCommon = false - includes = cacheHas - seen = new SetCache() - } else { - seen = iteratee ? [] : result - } - outer: while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value - - value = comparator || value !== 0 ? value : 0 - if (isCommon && computed === computed) { - var seenIndex = seen.length - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer - } - } - if (iteratee) { - seen.push(computed) - } - result.push(value) - } else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed) - } - result.push(value) - } - } - return result - } - - /** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The property path to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ - function baseUnset(object, path) { - path = castPath(path, object) - object = parent(object, path) - return object == null || delete object[toKey(last(path))] - } - - /** - * The base implementation of `_.update`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to update. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseUpdate(object, path, updater, customizer) { - return baseSet( - object, - path, - updater(baseGet(object, path)), - customizer - ) - } - - /** - * The base implementation of methods like `_.dropWhile` and `_.takeWhile` - * without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. - */ - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1 - - while ( - (fromRight ? index-- : ++index < length) && - predicate(array[index], index, array) - ) {} - - return isDrop - ? baseSlice( - array, - fromRight ? 0 : index, - fromRight ? index + 1 : length - ) - : baseSlice( - array, - fromRight ? index + 1 : 0, - fromRight ? length : index - ) - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value - if (result instanceof LazyWrapper) { - result = result.value() - } - return arrayReduce( - actions, - function (result, action) { - return action.func.apply( - action.thisArg, - arrayPush([result], action.args) - ) - }, - result - ) - } - - /** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - */ - function baseXor(arrays, iteratee, comparator) { - var length = arrays.length - if (length < 2) { - return length ? baseUniq(arrays[0]) : [] - } - var index = -1, - result = Array(length) - - while (++index < length) { - var array = arrays[index], - othIndex = -1 - - while (++othIndex < length) { - if (othIndex != index) { - result[index] = baseDifference( - result[index] || array, - arrays[othIndex], - iteratee, - comparator - ) - } - } - } - return baseUniq(baseFlatten(result, 1), iteratee, comparator) - } - - /** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ - function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {} - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined - assignFunc(result, props[index], value) - } - return result - } - - /** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ - function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : [] - } - - /** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ - function castFunction(value) { - return typeof value == 'function' ? value : identity - } - - /** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ - function castPath(value, object) { - if (isArray(value)) { - return value - } - return isKey(value, object) ? [value] : stringToPath(toString(value)) - } - - /** - * A `baseRest` alias which can be replaced with `identity` by module - * replacement plugins. - * - * @private - * @type {Function} - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - var castRest = baseRest - - /** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ - function castSlice(array, start, end) { - var length = array.length - end = end === undefined ? length : end - return !start && end >= length ? array : baseSlice(array, start, end) - } - - /** - * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). - * - * @private - * @param {number|Object} id The timer id or timeout object of the timer to clear. - */ - var clearTimeout = - ctxClearTimeout || - function (id) { - return root.clearTimeout(id) - } - - /** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice() - } - var length = buffer.length, - result = allocUnsafe - ? allocUnsafe(length) - : new buffer.constructor(length) - - buffer.copy(result) - return result - } - - /** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ - function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength) - new Uint8Array(result).set(new Uint8Array(arrayBuffer)) - return result - } - - /** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ - function cloneDataView(dataView, isDeep) { - var buffer = isDeep - ? cloneArrayBuffer(dataView.buffer) - : dataView.buffer - return new dataView.constructor( - buffer, - dataView.byteOffset, - dataView.byteLength - ) - } - - /** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ - function cloneRegExp(regexp) { - var result = new regexp.constructor( - regexp.source, - reFlags.exec(regexp) - ) - result.lastIndex = regexp.lastIndex - return result - } - - /** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ - function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {} - } - - /** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep - ? cloneArrayBuffer(typedArray.buffer) - : typedArray.buffer - return new typedArray.constructor( - buffer, - typedArray.byteOffset, - typedArray.length - ) - } - - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value) - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = isSymbol(other) - - if ( - (!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && - othIsDefined && - othIsReflexive && - !othIsNull && - !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive - ) { - return 1 - } - if ( - (!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && - valIsDefined && - valIsReflexive && - !valIsNull && - !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive - ) { - return -1 - } - } - return 0 - } - - /** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ - function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length - - while (++index < length) { - var result = compareAscending( - objCriteria[index], - othCriteria[index] - ) - if (result) { - if (index >= ordersLength) { - return result - } - var order = orders[index] - return result * (order == 'desc' ? -1 : 1) - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index - } - - /** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex] - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex] - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++] - } - return result - } - - /** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex] - } - var offset = argsIndex - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex] - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++] - } - } - return result - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length - - array || (array = Array(length)) - while (++index < length) { - array[index] = source[index] - } - return array - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object - object || (object = {}) - - var index = -1, - length = props.length - - while (++index < length) { - var key = props[index] - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined - - if (newValue === undefined) { - newValue = source[key] - } - if (isNew) { - baseAssignValue(object, key, newValue) - } else { - assignValue(object, key, newValue) - } - } - return object - } - - /** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object) - } - - /** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbolsIn(source, object) { - return copyObject(source, getSymbolsIn(source), object) - } - - /** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ - function createAggregator(setter, initializer) { - return function (collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {} - - return func( - collection, - setter, - getIteratee(iteratee, 2), - accumulator - ) - } - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function (object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined - - customizer = - assigner.length > 3 && typeof customizer == 'function' - ? (length--, customizer) - : undefined - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer - length = 1 - } - object = Object(object) - while (++index < length) { - var source = sources[index] - if (source) { - assigner(object, source, index, customizer) - } - } - return object - }) - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function (collection, iteratee) { - if (collection == null) { - return collection - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee) - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection) - - while (fromRight ? index-- : ++index < length) { - if (iteratee(iterable[index], index, iterable) === false) { - break - } - } - return collection - } - } - - /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function (object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length - - while (length--) { - var key = props[fromRight ? length : ++index] - if (iteratee(iterable[key], key, iterable) === false) { - break - } - } - return object - } - } - - /** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createBind(func, bitmask, thisArg) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func) - - function wrapper() { - var fn = - this && this !== root && this instanceof wrapper ? Ctor : func - return fn.apply(isBind ? thisArg : this, arguments) - } - return wrapper - } - - /** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ - function createCaseFirst(methodName) { - return function (string) { - string = toString(string) - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined - - var chr = strSymbols ? strSymbols[0] : string.charAt(0) - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1) - - return chr[methodName]() + trailing - } - } - - /** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ - function createCompounder(callback) { - return function (string) { - return arrayReduce( - words(deburr(string).replace(reApos, '')), - callback, - '' - ) - } - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtor(Ctor) { - return function () { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments - switch (args.length) { - case 0: - return new Ctor() - case 1: - return new Ctor(args[0]) - case 2: - return new Ctor(args[0], args[1]) - case 3: - return new Ctor(args[0], args[1], args[2]) - case 4: - return new Ctor(args[0], args[1], args[2], args[3]) - case 5: - return new Ctor(args[0], args[1], args[2], args[3], args[4]) - case 6: - return new Ctor( - args[0], - args[1], - args[2], - args[3], - args[4], - args[5] - ) - case 7: - return new Ctor( - args[0], - args[1], - args[2], - args[3], - args[4], - args[5], - args[6] - ) - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args) - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding - } - } - - /** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func) - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper) - - while (index--) { - args[index] = arguments[index] - } - var holders = - length < 3 && - args[0] !== placeholder && - args[length - 1] !== placeholder - ? [] - : replaceHolders(args, placeholder) - - length -= holders.length - if (length < arity) { - return createRecurry( - func, - bitmask, - createHybrid, - wrapper.placeholder, - undefined, - args, - holders, - undefined, - undefined, - arity - length - ) - } - var fn = - this && this !== root && this instanceof wrapper ? Ctor : func - return apply(fn, this, args) - } - return wrapper - } - - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function (collection, predicate, fromIndex) { - var iterable = Object(collection) - if (!isArrayLike(collection)) { - var iteratee = getIteratee(predicate, 3) - collection = keys(collection) - predicate = function (key) { - return iteratee(iterable[key], key, iterable) - } - } - var index = findIndexFunc(collection, predicate, fromIndex) - return index > -1 - ? iterable[iteratee ? collection[index] : index] - : undefined - } - } - - /** - * Creates a `_.flow` or `_.flowRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. - */ - function createFlow(fromRight) { - return flatRest(function (funcs) { - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru - - if (fromRight) { - funcs.reverse() - } - while (index--) { - var func = funcs[index] - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT) - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true) - } - } - index = wrapper ? index : length - while (++index < length) { - func = funcs[index] - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined - - if ( - data && - isLaziable(data[0]) && - data[1] == - (WRAP_ARY_FLAG | - WRAP_CURRY_FLAG | - WRAP_PARTIAL_FLAG | - WRAP_REARG_FLAG) && - !data[4].length && - data[9] == 1 - ) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]) - } else { - wrapper = - func.length == 1 && isLaziable(func) - ? wrapper[funcName]() - : wrapper.thru(func) - } - } - return function () { - var args = arguments, - value = args[0] - - if (wrapper && args.length == 1 && isArray(value)) { - return wrapper.plant(value).value() - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value - - while (++index < length) { - result = funcs[index].call(this, result) - } - return result - } - }) - } - - /** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createHybrid( - func, - bitmask, - thisArg, - partials, - holders, - partialsRight, - holdersRight, - argPos, - ary, - arity - ) { - var isAry = bitmask & WRAP_ARY_FLAG, - isBind = bitmask & WRAP_BIND_FLAG, - isBindKey = bitmask & WRAP_BIND_KEY_FLAG, - isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), - isFlip = bitmask & WRAP_FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtor(func) - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length - - while (index--) { - args[index] = arguments[index] - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder) - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried) - } - if (partialsRight) { - args = composeArgsRight( - args, - partialsRight, - holdersRight, - isCurried - ) - } - length -= holdersCount - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder) - return createRecurry( - func, - bitmask, - createHybrid, - wrapper.placeholder, - thisArg, - args, - newHolders, - argPos, - ary, - arity - length - ) - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func - - length = args.length - if (argPos) { - args = reorder(args, argPos) - } else if (isFlip && length > 1) { - args.reverse() - } - if (isAry && ary < length) { - args.length = ary - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn) - } - return fn.apply(thisBinding, args) - } - return wrapper - } - - /** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ - function createInverter(setter, toIteratee) { - return function (object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}) - } - } - - /** - * Creates a function that performs a mathematical operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @param {number} [defaultValue] The value used for `undefined` arguments. - * @returns {Function} Returns the new mathematical operation function. - */ - function createMathOperation(operator, defaultValue) { - return function (value, other) { - var result - if (value === undefined && other === undefined) { - return defaultValue - } - if (value !== undefined) { - result = value - } - if (other !== undefined) { - if (result === undefined) { - return other - } - if (typeof value == 'string' || typeof other == 'string') { - value = baseToString(value) - other = baseToString(other) - } else { - value = baseToNumber(value) - other = baseToNumber(other) - } - result = operator(value, other) - } - return result - } - } - - /** - * Creates a function like `_.over`. - * - * @private - * @param {Function} arrayFunc The function to iterate over iteratees. - * @returns {Function} Returns the new over function. - */ - function createOver(arrayFunc) { - return flatRest(function (iteratees) { - iteratees = arrayMap(iteratees, baseUnary(getIteratee())) - return baseRest(function (args) { - var thisArg = this - return arrayFunc(iteratees, function (iteratee) { - return apply(iteratee, thisArg, args) - }) - }) - }) - } - - /** - * Creates the padding for `string` based on `length`. The `chars` string - * is truncated if the number of characters exceeds `length`. - * - * @private - * @param {number} length The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padding for `string`. - */ - function createPadding(length, chars) { - chars = chars === undefined ? ' ' : baseToString(chars) - - var charsLength = chars.length - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars - } - var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))) - return hasUnicode(chars) - ? castSlice(stringToArray(result), 0, length).join('') - : result.slice(0, length) - } - - /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func) - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = - this && this !== root && this instanceof wrapper ? Ctor : func - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex] - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex] - } - return apply(fn, isBind ? thisArg : this, args) - } - return wrapper - } - - /** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ - function createRange(fromRight) { - return function (start, end, step) { - if ( - step && - typeof step != 'number' && - isIterateeCall(start, end, step) - ) { - end = step = undefined - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start) - if (end === undefined) { - end = start - start = 0 - } else { - end = toFinite(end) - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step) - return baseRange(start, end, step, fromRight) - } - } - - /** - * Creates a function that performs a relational operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new relational operation function. - */ - function createRelationalOperation(operator) { - return function (value, other) { - if (!(typeof value == 'string' && typeof other == 'string')) { - value = toNumber(value) - other = toNumber(other) - } - return operator(value, other) - } - } - - /** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createRecurry( - func, - bitmask, - wrapFunc, - placeholder, - thisArg, - partials, - holders, - argPos, - ary, - arity - ) { - var isCurry = bitmask & WRAP_CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials - - bitmask |= isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG - bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG) - - if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { - bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG) - } - var newData = [ - func, - bitmask, - thisArg, - newPartials, - newHolders, - newPartialsRight, - newHoldersRight, - argPos, - ary, - arity - ] - - var result = wrapFunc.apply(undefined, newData) - if (isLaziable(func)) { - setData(result, newData) - } - result.placeholder = placeholder - return setWrapToString(result, func, bitmask) - } - - /** - * Creates a function like `_.round`. - * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. - */ - function createRound(methodName) { - var func = Math[methodName] - return function (number, precision) { - number = toNumber(number) - precision = - precision == null ? 0 : nativeMin(toInteger(precision), 292) - if (precision && nativeIsFinite(number)) { - // Shift with exponential notation to avoid floating-point issues. - // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)) - - pair = (toString(value) + 'e').split('e') - return +(pair[0] + 'e' + (+pair[1] - precision)) - } - return func(number) - } - } - - /** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ - var createSet = !(Set && 1 / setToArray(new Set([, -0]))[1] == INFINITY) - ? noop - : function (values) { - return new Set(values) - } - - /** - * Creates a `_.toPairs` or `_.toPairsIn` function. - * - * @private - * @param {Function} keysFunc The function to get the keys of a given object. - * @returns {Function} Returns the new pairs function. - */ - function createToPairs(keysFunc) { - return function (object) { - var tag = getTag(object) - if (tag == mapTag) { - return mapToArray(object) - } - if (tag == setTag) { - return setToPairs(object) - } - return baseToPairs(object, keysFunc(object)) - } - } - - /** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createWrap( - func, - bitmask, - thisArg, - partials, - holders, - argPos, - ary, - arity - ) { - var isBindKey = bitmask & WRAP_BIND_KEY_FLAG - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT) - } - var length = partials ? partials.length : 0 - if (!length) { - bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG) - partials = holders = undefined - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0) - arity = arity === undefined ? arity : toInteger(arity) - length -= holders ? holders.length : 0 - - if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders - - partials = holders = undefined - } - var data = isBindKey ? undefined : getData(func) - - var newData = [ - func, - bitmask, - thisArg, - partials, - holders, - partialsRight, - holdersRight, - argPos, - ary, - arity - ] - - if (data) { - mergeData(newData, data) - } - func = newData[0] - bitmask = newData[1] - thisArg = newData[2] - partials = newData[3] - holders = newData[4] - arity = newData[9] = - newData[9] === undefined - ? isBindKey - ? 0 - : func.length - : nativeMax(newData[9] - length, 0) - - if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { - bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG) - } - if (!bitmask || bitmask == WRAP_BIND_FLAG) { - var result = createBind(func, bitmask, thisArg) - } else if ( - bitmask == WRAP_CURRY_FLAG || - bitmask == WRAP_CURRY_RIGHT_FLAG - ) { - result = createCurry(func, bitmask, arity) - } else if ( - (bitmask == WRAP_PARTIAL_FLAG || - bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && - !holders.length - ) { - result = createPartial(func, bitmask, thisArg, partials) - } else { - result = createHybrid.apply(undefined, newData) - } - var setter = data ? baseSetData : setData - return setWrapToString(setter(result, newData), func, bitmask) - } - - /** - * Used by `_.defaults` to customize its `_.assignIn` use to assign properties - * of source objects to the destination object for all destination properties - * that resolve to `undefined`. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ - function customDefaultsAssignIn(objValue, srcValue, key, object) { - if ( - objValue === undefined || - (eq(objValue, objectProto[key]) && - !hasOwnProperty.call(object, key)) - ) { - return srcValue - } - return objValue - } - - /** - * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source - * objects into destination objects that are passed thru. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - * @returns {*} Returns the value to assign. - */ - function customDefaultsMerge( - objValue, - srcValue, - key, - object, - source, - stack - ) { - if (isObject(objValue) && isObject(srcValue)) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, objValue) - baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack) - stack['delete'](srcValue) - } - return objValue - } - - /** - * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain - * objects. - * - * @private - * @param {*} value The value to inspect. - * @param {string} key The key of the property to inspect. - * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. - */ - function customOmitClone(value) { - return isPlainObject(value) ? undefined : value - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays( - array, - other, - bitmask, - customizer, - equalFunc, - stack - ) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array) - var othStacked = stack.get(other) - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array - } - var index = -1, - result = true, - seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined - - stack.set(array, other) - stack.set(other, array) - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index] - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack) - } - if (compared !== undefined) { - if (compared) { - continue - } - result = false - break - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if ( - !arraySome(other, function (othValue, othIndex) { - if ( - !cacheHas(seen, othIndex) && - (arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack)) - ) { - return seen.push(othIndex) - } - }) - ) { - result = false - break - } - } else if ( - !( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - ) - ) { - result = false - break - } - } - stack['delete'](array) - stack['delete'](other) - return result - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag( - object, - other, - tag, - bitmask, - customizer, - equalFunc, - stack - ) { - switch (tag) { - case dataViewTag: - if ( - object.byteLength != other.byteLength || - object.byteOffset != other.byteOffset - ) { - return false - } - object = object.buffer - other = other.buffer - - case arrayBufferTag: - if ( - object.byteLength != other.byteLength || - !equalFunc(new Uint8Array(object), new Uint8Array(other)) - ) { - return false - } - return true - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other) - - case errorTag: - return ( - object.name == other.name && object.message == other.message - ) - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == other + '' - - case mapTag: - var convert = mapToArray - - case setTag: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG - convert || (convert = setToArray) - - if (object.size != other.size && !isPartial) { - return false - } - // Assume cyclic values are equal. - var stacked = stack.get(object) - if (stacked) { - return stacked == other - } - bitmask |= COMPARE_UNORDERED_FLAG - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other) - var result = equalArrays( - convert(object), - convert(other), - bitmask, - customizer, - equalFunc, - stack - ) - stack['delete'](object) - return result - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other) - } - } - return false - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects( - object, - other, - bitmask, - customizer, - equalFunc, - stack - ) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - objProps = getAllKeys(object), - objLength = objProps.length, - othProps = getAllKeys(other), - othLength = othProps.length - - if (objLength != othLength && !isPartial) { - return false - } - var index = objLength - while (index--) { - var key = objProps[index] - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false - } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object) - var othStacked = stack.get(other) - if (objStacked && othStacked) { - return objStacked == other && othStacked == object - } - var result = true - stack.set(object, other) - stack.set(other, object) - - var skipCtor = isPartial - while (++index < objLength) { - key = objProps[index] - var objValue = object[key], - othValue = other[key] - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack) - } - // Recursively compare objects (susceptible to call stack limits). - if ( - !(compared === undefined - ? objValue === othValue || - equalFunc(objValue, othValue, bitmask, customizer, stack) - : compared) - ) { - result = false - break - } - skipCtor || (skipCtor = key == 'constructor') - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor - - // Non `Object` object instances with different constructors are not equal. - if ( - objCtor != othCtor && - 'constructor' in object && - 'constructor' in other && - !( - typeof objCtor == 'function' && - objCtor instanceof objCtor && - typeof othCtor == 'function' && - othCtor instanceof othCtor - ) - ) { - result = false - } - } - stack['delete'](object) - stack['delete'](other) - return result - } - - /** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + '') - } - - /** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols) - } - - /** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn) - } - - /** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ - var getData = !metaMap - ? noop - : function (func) { - return metaMap.get(func) - } - - /** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ - function getFuncName(func) { - var result = func.name + '', - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0 - - while (length--) { - var data = array[length], - otherFunc = data.func - if (otherFunc == null || otherFunc == func) { - return data.name - } - } - return result - } - - /** - * Gets the argument placeholder value for `func`. - * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. - */ - function getHolder(func) { - var object = hasOwnProperty.call(lodash, 'placeholder') - ? lodash - : func - return object.placeholder - } - - /** - * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, - * this function returns the custom method, otherwise it returns `baseIteratee`. - * If arguments are provided, the chosen function is invoked with them and - * its result is returned. - * - * @private - * @param {*} [value] The value to convert to an iteratee. - * @param {number} [arity] The arity of the created iteratee. - * @returns {Function} Returns the chosen function or its result. - */ - function getIteratee() { - var result = lodash.iteratee || iteratee - result = result === iteratee ? baseIteratee : result - return arguments.length ? result(arguments[0], arguments[1]) : result - } - - /** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ - function getMapData(map, key) { - var data = map.__data__ - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map - } - - /** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ - function getMatchData(object) { - var result = keys(object), - length = result.length - - while (length--) { - var key = result[length], - value = object[key] - - result[length] = [key, value, isStrictComparable(value)] - } - return result - } - - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = getValue(object, key) - return baseIsNative(value) ? value : undefined - } - - /** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ - function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag] - - try { - value[symToStringTag] = undefined - var unmasked = true - } catch (e) {} - - var result = nativeObjectToString.call(value) - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag - } else { - delete value[symToStringTag] - } - } - return result - } - - /** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbols = !nativeGetSymbols - ? stubArray - : function (object) { - if (object == null) { - return [] - } - object = Object(object) - return arrayFilter(nativeGetSymbols(object), function (symbol) { - return propertyIsEnumerable.call(object, symbol) - }) - } - - /** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbolsIn = !nativeGetSymbols - ? stubArray - : function (object) { - var result = [] - while (object) { - arrayPush(result, getSymbols(object)) - object = getPrototype(object) - } - return result - } - - /** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - var getTag = baseGetTag - - // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. - if ( - (DataView && - getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map()) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set()) != setTag) || - (WeakMap && getTag(new WeakMap()) != weakMapTag) - ) { - getTag = function (value) { - var result = baseGetTag(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : '' - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: - return dataViewTag - case mapCtorString: - return mapTag - case promiseCtorString: - return promiseTag - case setCtorString: - return setTag - case weakMapCtorString: - return weakMapTag - } - } - return result - } - } - - /** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ - function getView(start, end, transforms) { - var index = -1, - length = transforms.length - - while (++index < length) { - var data = transforms[index], - size = data.size - - switch (data.type) { - case 'drop': - start += size - break - case 'dropRight': - end -= size - break - case 'take': - end = nativeMin(end, start + size) - break - case 'takeRight': - start = nativeMax(start, end - size) - break - } - } - return { start: start, end: end } - } - - /** - * Extracts wrapper details from the `source` body comment. - * - * @private - * @param {string} source The source to inspect. - * @returns {Array} Returns the wrapper details. - */ - function getWrapDetails(source) { - var match = source.match(reWrapDetails) - return match ? match[1].split(reSplitDetails) : [] - } - - /** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ - function hasPath(object, path, hasFunc) { - path = castPath(path, object) - - var index = -1, - length = path.length, - result = false - - while (++index < length) { - var key = toKey(path[index]) - if (!(result = object != null && hasFunc(object, key))) { - break - } - object = object[key] - } - if (result || ++index != length) { - return result - } - length = object == null ? 0 : object.length - return ( - !!length && - isLength(length) && - isIndex(key, length) && - (isArray(object) || isArguments(object)) - ) - } - - /** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ - function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length) - - // Add properties assigned by `RegExp#exec`. - if ( - length && - typeof array[0] == 'string' && - hasOwnProperty.call(array, 'index') - ) { - result.index = array.index - result.input = array.input - } - return result - } - - /** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneObject(object) { - return typeof object.constructor == 'function' && !isPrototype(object) - ? baseCreate(getPrototype(object)) - : {} - } - - /** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object) - - case boolTag: - case dateTag: - return new Ctor(+object) - - case dataViewTag: - return cloneDataView(object, isDeep) - - case float32Tag: - case float64Tag: - case int8Tag: - case int16Tag: - case int32Tag: - case uint8Tag: - case uint8ClampedTag: - case uint16Tag: - case uint32Tag: - return cloneTypedArray(object, isDeep) - - case mapTag: - return new Ctor() - - case numberTag: - case stringTag: - return new Ctor(object) - - case regexpTag: - return cloneRegExp(object) - - case setTag: - return new Ctor() - - case symbolTag: - return cloneSymbol(object) - } - } - - /** - * Inserts wrapper `details` in a comment at the top of the `source` body. - * - * @private - * @param {string} source The source to modify. - * @returns {Array} details The details to insert. - * @returns {string} Returns the modified source. - */ - function insertWrapDetails(source, details) { - var length = details.length - if (!length) { - return source - } - var lastIndex = length - 1 - details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex] - details = details.join(length > 2 ? ', ' : ' ') - return source.replace( - reWrapComment, - '{\n/* [wrapped with ' + details + '] */\n' - ) - } - - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return ( - isArray(value) || - isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]) - ) - } - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - var type = typeof value - length = length == null ? MAX_SAFE_INTEGER : length - - return ( - !!length && - (type == 'number' || (type != 'symbol' && reIsUint.test(value))) && - value > -1 && - value % 1 == 0 && - value < length - ) - } - - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false - } - var type = typeof index - if ( - type == 'number' - ? isArrayLike(object) && isIndex(index, object.length) - : type == 'string' && index in object - ) { - return eq(object[index], value) - } - return false - } - - /** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ - function isKey(value, object) { - if (isArray(value)) { - return false - } - var type = typeof value - if ( - type == 'number' || - type == 'symbol' || - type == 'boolean' || - value == null || - isSymbol(value) - ) { - return true - } - return ( - reIsPlainProp.test(value) || - !reIsDeepProp.test(value) || - (object != null && value in Object(object)) - ) - } - - /** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ - function isKeyable(value) { - var type = typeof value - return type == 'string' || - type == 'number' || - type == 'symbol' || - type == 'boolean' - ? value !== '__proto__' - : value === null - } - - /** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, - * else `false`. - */ - function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName] - - if ( - typeof other != 'function' || - !(funcName in LazyWrapper.prototype) - ) { - return false - } - if (func === other) { - return true - } - var data = getData(other) - return !!data && func === data[0] - } - - /** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ - function isMasked(func) { - return !!maskSrcKey && maskSrcKey in func - } - - /** - * Checks if `func` is capable of being masked. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `func` is maskable, else `false`. - */ - var isMaskable = coreJsData ? isFunction : stubFalse - - /** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto - - return value === proto - } - - /** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ - function isStrictComparable(value) { - return value === value && !isObject(value) - } - - /** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function matchesStrictComparable(key, srcValue) { - return function (object) { - if (object == null) { - return false - } - return ( - object[key] === srcValue && - (srcValue !== undefined || key in Object(object)) - ) - } - } - - /** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ - function memoizeCapped(func) { - var result = memoize(func, function (key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear() - } - return key - }) - - var cache = result.cache - return result - } - - /** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and - * `_.rearg` modify function arguments, making the order in which they are - * executed important, preventing the merging of metadata. However, we make - * an exception for a safe combined case where curried functions have `_.ary` - * and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ - function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = - newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG) - - var isCombo = - (srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_CURRY_FLAG) || - (srcBitmask == WRAP_ARY_FLAG && - bitmask == WRAP_REARG_FLAG && - data[7].length <= source[8]) || - (srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG) && - source[7].length <= source[8] && - bitmask == WRAP_CURRY_FLAG) - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data - } - // Use source `thisArg` if available. - if (srcBitmask & WRAP_BIND_FLAG) { - data[2] = source[2] - // Set when currying a bound function. - newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG - } - // Compose partial arguments. - var value = source[3] - if (value) { - var partials = data[3] - data[3] = partials ? composeArgs(partials, value, source[4]) : value - data[4] = partials - ? replaceHolders(data[3], PLACEHOLDER) - : source[4] - } - // Compose partial right arguments. - value = source[5] - if (value) { - partials = data[5] - data[5] = partials - ? composeArgsRight(partials, value, source[6]) - : value - data[6] = partials - ? replaceHolders(data[5], PLACEHOLDER) - : source[6] - } - // Use source `argPos` if available. - value = source[7] - if (value) { - data[7] = value - } - // Use source `ary` if it's smaller. - if (srcBitmask & WRAP_ARY_FLAG) { - data[8] = - data[8] == null ? source[8] : nativeMin(data[8], source[8]) - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9] - } - // Use source `func` and merge bitmasks. - data[0] = source[0] - data[1] = newBitmask - - return data - } - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = [] - if (object != null) { - for (var key in Object(object)) { - result.push(key) - } - } - return result - } - - /** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ - function objectToString(value) { - return nativeObjectToString.call(value) - } - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax(start === undefined ? func.length - 1 : start, 0) - return function () { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length) - - while (++index < length) { - array[index] = args[start + index] - } - index = -1 - var otherArgs = Array(start + 1) - while (++index < start) { - otherArgs[index] = args[index] - } - otherArgs[start] = transform(array) - return apply(func, this, otherArgs) - } - } - - /** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ - function parent(object, path) { - return path.length < 2 - ? object - : baseGet(object, baseSlice(path, 0, -1)) - } - - /** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ - function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array) - - while (length--) { - var index = indexes[length] - array[length] = isIndex(index, arrLength) - ? oldArray[index] - : undefined - } - return array - } - - /** - * Gets the value at `key`, unless `key` is "__proto__" or "constructor". - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function safeGet(object, key) { - if (key === 'constructor' && typeof object[key] === 'function') { - return - } - - if (key == '__proto__') { - return - } - - return object[key] - } - - /** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity - * function to avoid garbage collection pauses in V8. See - * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var setData = shortOut(baseSetData) - - /** - * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @returns {number|Object} Returns the timer id or timeout object. - */ - var setTimeout = - ctxSetTimeout || - function (func, wait) { - return root.setTimeout(func, wait) - } - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = shortOut(baseSetToString) - - /** - * Sets the `toString` method of `wrapper` to mimic the source of `reference` - * with wrapper details in a comment at the top of the source body. - * - * @private - * @param {Function} wrapper The function to modify. - * @param {Function} reference The reference function. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Function} Returns `wrapper`. - */ - function setWrapToString(wrapper, reference, bitmask) { - var source = reference + '' - return setToString( - wrapper, - insertWrapDetails( - source, - updateWrapDetails(getWrapDetails(source), bitmask) - ) - ) - } - - /** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ - function shortOut(func) { - var count = 0, - lastCalled = 0 - - return function () { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled) - - lastCalled = stamp - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0] - } - } else { - count = 0 - } - return func.apply(undefined, arguments) - } - } - - /** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ - function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1 - - size = size === undefined ? length : size - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand] - - array[rand] = array[index] - array[index] = value - } - array.length = size - return array - } - - /** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ - var stringToPath = memoizeCapped(function (string) { - var result = [] - if (string.charCodeAt(0) === 46 /* . */) { - result.push('') - } - string.replace( - rePropName, - function (match, number, quote, subString) { - result.push( - quote ? subString.replace(reEscapeChar, '$1') : number || match - ) - } - ) - return result - }) - - /** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ - function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value - } - var result = value + '' - return result == '0' && 1 / value == -INFINITY ? '-0' : result - } - - /** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ - function toSource(func) { - if (func != null) { - try { - return funcToString.call(func) - } catch (e) {} - try { - return func + '' - } catch (e) {} - } - return '' - } - - /** - * Updates wrapper `details` based on `bitmask` flags. - * - * @private - * @returns {Array} details The details to modify. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Array} Returns `details`. - */ - function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function (pair) { - var value = '_.' + pair[0] - if (bitmask & pair[1] && !arrayIncludes(details, value)) { - details.push(value) - } - }) - return details.sort() - } - - /** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone() - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__) - result.__actions__ = copyArray(wrapper.__actions__) - result.__index__ = wrapper.__index__ - result.__values__ = wrapper.__values__ - return result - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the new array of chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ - function chunk(array, size, guard) { - if (guard ? isIterateeCall(array, size, guard) : size === undefined) { - size = 1 - } else { - size = nativeMax(toInteger(size), 0) - } - var length = array == null ? 0 : array.length - if (!length || size < 1) { - return [] - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)) - - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)) - } - return result - } - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = [] - - while (++index < length) { - var value = array[index] - if (value) { - result[resIndex++] = value - } - } - return result - } - - /** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ - function concat() { - var length = arguments.length - if (!length) { - return [] - } - var args = Array(length - 1), - array = arguments[0], - index = length - - while (index--) { - args[index - 1] = arguments[index] - } - return arrayPush( - isArray(array) ? copyArray(array) : [array], - baseFlatten(args, 1) - ) - } - - /** - * Creates an array of `array` values not included in the other given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * **Note:** Unlike `_.pullAll`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.without, _.xor - * @example - * - * _.difference([2, 1], [2, 3]); - * // => [1] - */ - var difference = baseRest(function (array, values) { - return isArrayLikeObject(array) - ? baseDifference( - array, - baseFlatten(values, 1, isArrayLikeObject, true) - ) - : [] - }) - - /** - * This method is like `_.difference` except that it accepts `iteratee` which - * is invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * **Note:** Unlike `_.pullAllBy`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2] - * - * // The `_.property` iteratee shorthand. - * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var differenceBy = baseRest(function (array, values) { - var iteratee = last(values) - if (isArrayLikeObject(iteratee)) { - iteratee = undefined - } - return isArrayLikeObject(array) - ? baseDifference( - array, - baseFlatten(values, 1, isArrayLikeObject, true), - getIteratee(iteratee, 2) - ) - : [] - }) - - /** - * This method is like `_.difference` except that it accepts `comparator` - * which is invoked to compare elements of `array` to `values`. The order and - * references of result values are determined by the first array. The comparator - * is invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.pullAllWith`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * - * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); - * // => [{ 'x': 2, 'y': 1 }] - */ - var differenceWith = baseRest(function (array, values) { - var comparator = last(values) - if (isArrayLikeObject(comparator)) { - comparator = undefined - } - return isArrayLikeObject(array) - ? baseDifference( - array, - baseFlatten(values, 1, isArrayLikeObject, true), - undefined, - comparator - ) - : [] - }) - - /** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function drop(array, n, guard) { - var length = array == null ? 0 : array.length - if (!length) { - return [] - } - n = guard || n === undefined ? 1 : toInteger(n) - return baseSlice(array, n < 0 ? 0 : n, length) - } - - /** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function dropRight(array, n, guard) { - var length = array == null ? 0 : array.length - if (!length) { - return [] - } - n = guard || n === undefined ? 1 : toInteger(n) - n = length - n - return baseSlice(array, 0, n < 0 ? 0 : n) - } - - /** - * Creates a slice of `array` excluding elements dropped from the end. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.dropRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney'] - * - * // The `_.matches` iteratee shorthand. - * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropRightWhile(users, ['active', false]); - * // => objects for ['barney'] - * - * // The `_.property` iteratee shorthand. - * _.dropRightWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropRightWhile(array, predicate) { - return array && array.length - ? baseWhile(array, getIteratee(predicate, 3), true, true) - : [] - } - - /** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.dropWhile(users, function(o) { return !o.active; }); - * // => objects for ['pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.dropWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropWhile(users, ['active', false]); - * // => objects for ['pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.dropWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropWhile(array, predicate) { - return array && array.length - ? baseWhile(array, getIteratee(predicate, 3), true) - : [] - } - - /** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8, 10], '*', 1, 3); - * // => [4, '*', '*', 10] - */ - function fill(array, value, start, end) { - var length = array == null ? 0 : array.length - if (!length) { - return [] - } - if ( - start && - typeof start != 'number' && - isIterateeCall(array, value, start) - ) { - start = 0 - end = length - } - return baseFill(array, value, start, end) - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length - if (!length) { - return -1 - } - var index = fromIndex == null ? 0 : toInteger(fromIndex) - if (index < 0) { - index = nativeMax(length + index, 0) - } - return baseFindIndex(array, getIteratee(predicate, 3), index) - } - - /** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ - function findLastIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length - if (!length) { - return -1 - } - var index = length - 1 - if (fromIndex !== undefined) { - index = toInteger(fromIndex) - index = - fromIndex < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1) - } - return baseFindIndex(array, getIteratee(predicate, 3), index, true) - } - - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array == null ? 0 : array.length - return length ? baseFlatten(array, 1) : [] - } - - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array == null ? 0 : array.length - return length ? baseFlatten(array, INFINITY) : [] - } - - /** - * Recursively flatten `array` up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Array - * @param {Array} array The array to flatten. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * var array = [1, [2, [3, [4]], 5]]; - * - * _.flattenDepth(array, 1); - * // => [1, 2, [3, [4]], 5] - * - * _.flattenDepth(array, 2); - * // => [1, 2, 3, [4], 5] - */ - function flattenDepth(array, depth) { - var length = array == null ? 0 : array.length - if (!length) { - return [] - } - depth = depth === undefined ? 1 : toInteger(depth) - return baseFlatten(array, depth) - } - - /** - * The inverse of `_.toPairs`; this method returns an object composed - * from key-value `pairs`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} pairs The key-value pairs. - * @returns {Object} Returns the new object. - * @example - * - * _.fromPairs([['a', 1], ['b', 2]]); - * // => { 'a': 1, 'b': 2 } - */ - function fromPairs(pairs) { - var index = -1, - length = pairs == null ? 0 : pairs.length, - result = {} - - while (++index < length) { - var pair = pairs[index] - result[pair[0]] = pair[1] - } - return result - } - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return array && array.length ? array[0] : undefined - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length - if (!length) { - return -1 - } - var index = fromIndex == null ? 0 : toInteger(fromIndex) - if (index < 0) { - index = nativeMax(length + index, 0) - } - return baseIndexOf(array, value, index) - } - - /** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ - function initial(array) { - var length = array == null ? 0 : array.length - return length ? baseSlice(array, 0, -1) : [] - } - - /** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersection([2, 1], [2, 3]); - * // => [2] - */ - var intersection = baseRest(function (arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject) - return mapped.length && mapped[0] === arrays[0] - ? baseIntersection(mapped) - : [] - }) - - /** - * This method is like `_.intersection` except that it accepts `iteratee` - * which is invoked for each element of each `arrays` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [2.1] - * - * // The `_.property` iteratee shorthand. - * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }] - */ - var intersectionBy = baseRest(function (arrays) { - var iteratee = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject) - - if (iteratee === last(mapped)) { - iteratee = undefined - } else { - mapped.pop() - } - return mapped.length && mapped[0] === arrays[0] - ? baseIntersection(mapped, getIteratee(iteratee, 2)) - : [] - }) - - /** - * This method is like `_.intersection` except that it accepts `comparator` - * which is invoked to compare elements of `arrays`. The order and references - * of result values are determined by the first array. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.intersectionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }] - */ - var intersectionWith = baseRest(function (arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject) - - comparator = typeof comparator == 'function' ? comparator : undefined - if (comparator) { - mapped.pop() - } - return mapped.length && mapped[0] === arrays[0] - ? baseIntersection(mapped, undefined, comparator) - : [] - }) - - /** - * Converts all elements in `array` into a string separated by `separator`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to convert. - * @param {string} [separator=','] The element separator. - * @returns {string} Returns the joined string. - * @example - * - * _.join(['a', 'b', 'c'], '~'); - * // => 'a~b~c' - */ - function join(array, separator) { - return array == null ? '' : nativeJoin.call(array, separator) - } - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array == null ? 0 : array.length - return length ? array[length - 1] : undefined - } - - /** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // Search from the `fromIndex`. - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - */ - function lastIndexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length - if (!length) { - return -1 - } - var index = length - if (fromIndex !== undefined) { - index = toInteger(fromIndex) - index = - index < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1) - } - return value === value - ? strictLastIndexOf(array, value, index) - : baseFindIndex(array, baseIsNaN, index, true) - } - - /** - * Gets the element at index `n` of `array`. If `n` is negative, the nth - * element from the end is returned. - * - * @static - * @memberOf _ - * @since 4.11.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=0] The index of the element to return. - * @returns {*} Returns the nth element of `array`. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * - * _.nth(array, 1); - * // => 'b' - * - * _.nth(array, -2); - * // => 'c'; - */ - function nth(array, n) { - return array && array.length - ? baseNth(array, toInteger(n)) - : undefined - } - - /** - * Removes all given values from `array` using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` - * to remove elements from an array by predicate. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...*} [values] The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pull(array, 'a', 'c'); - * console.log(array); - * // => ['b', 'b'] - */ - var pull = baseRest(pullAll) - - /** - * This method is like `_.pull` except that it accepts an array of values to remove. - * - * **Note:** Unlike `_.difference`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pullAll(array, ['a', 'c']); - * console.log(array); - * // => ['b', 'b'] - */ - function pullAll(array, values) { - return array && array.length && values && values.length - ? basePullAll(array, values) - : array - } - - /** - * This method is like `_.pullAll` except that it accepts `iteratee` which is - * invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The iteratee is invoked with one argument: (value). - * - * **Note:** Unlike `_.differenceBy`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; - * - * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); - * console.log(array); - * // => [{ 'x': 2 }] - */ - function pullAllBy(array, values, iteratee) { - return array && array.length && values && values.length - ? basePullAll(array, values, getIteratee(iteratee, 2)) - : array - } - - /** - * This method is like `_.pullAll` except that it accepts `comparator` which - * is invoked to compare elements of `array` to `values`. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.differenceWith`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; - * - * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); - * console.log(array); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] - */ - function pullAllWith(array, values, comparator) { - return array && array.length && values && values.length - ? basePullAll(array, values, undefined, comparator) - : array - } - - /** - * Removes elements from `array` corresponding to `indexes` and returns an - * array of removed elements. - * - * **Note:** Unlike `_.at`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...(number|number[])} [indexes] The indexes of elements to remove. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * var pulled = _.pullAt(array, [1, 3]); - * - * console.log(array); - * // => ['a', 'c'] - * - * console.log(pulled); - * // => ['b', 'd'] - */ - var pullAt = flatRest(function (array, indexes) { - var length = array == null ? 0 : array.length, - result = baseAt(array, indexes) - - basePullAt( - array, - arrayMap(indexes, function (index) { - return isIndex(index, length) ? +index : index - }).sort(compareAscending) - ) - - return result - }) - - /** - * Removes all elements from `array` that `predicate` returns truthy for - * and returns an array of the removed elements. The predicate is invoked - * with three arguments: (value, index, array). - * - * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` - * to pull elements from an array by value. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = [1, 2, 3, 4]; - * var evens = _.remove(array, function(n) { - * return n % 2 == 0; - * }); - * - * console.log(array); - * // => [1, 3] - * - * console.log(evens); - * // => [2, 4] - */ - function remove(array, predicate) { - var result = [] - if (!(array && array.length)) { - return result - } - var index = -1, - indexes = [], - length = array.length - - predicate = getIteratee(predicate, 3) - while (++index < length) { - var value = array[index] - if (predicate(value, index, array)) { - result.push(value) - indexes.push(index) - } - } - basePullAt(array, indexes) - return result - } - - /** - * Reverses `array` so that the first element becomes the last, the second - * element becomes the second to last, and so on. - * - * **Note:** This method mutates `array` and is based on - * [`Array#reverse`](https://mdn.io/Array/reverse). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.reverse(array); - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function reverse(array) { - return array == null ? array : nativeReverse.call(array) - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of - * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are - * returned. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array == null ? 0 : array.length - if (!length) { - return [] - } - if ( - end && - typeof end != 'number' && - isIterateeCall(array, start, end) - ) { - start = 0 - end = length - } else { - start = start == null ? 0 : toInteger(start) - end = end === undefined ? length : toInteger(end) - } - return baseSlice(array, start, end) - } - - /** - * Uses a binary search to determine the lowest index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedIndex([30, 50], 40); - * // => 1 - */ - function sortedIndex(array, value) { - return baseSortedIndex(array, value) - } - - /** - * This method is like `_.sortedIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); - * // => 0 - */ - function sortedIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)) - } - - /** - * This method is like `_.indexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedIndexOf([4, 5, 5, 5, 6], 5); - * // => 1 - */ - function sortedIndexOf(array, value) { - var length = array == null ? 0 : array.length - if (length) { - var index = baseSortedIndex(array, value) - if (index < length && eq(array[index], value)) { - return index - } - } - return -1 - } - - /** - * This method is like `_.sortedIndex` except that it returns the highest - * index at which `value` should be inserted into `array` in order to - * maintain its sort order. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedLastIndex([4, 5, 5, 5, 6], 5); - * // => 4 - */ - function sortedLastIndex(array, value) { - return baseSortedIndex(array, value, true) - } - - /** - * This method is like `_.sortedLastIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 1 - * - * // The `_.property` iteratee shorthand. - * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); - * // => 1 - */ - function sortedLastIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true) - } - - /** - * This method is like `_.lastIndexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); - * // => 3 - */ - function sortedLastIndexOf(array, value) { - var length = array == null ? 0 : array.length - if (length) { - var index = baseSortedIndex(array, value, true) - 1 - if (eq(array[index], value)) { - return index - } - } - return -1 - } - - /** - * This method is like `_.uniq` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniq([1, 1, 2]); - * // => [1, 2] - */ - function sortedUniq(array) { - return array && array.length ? baseSortedUniq(array) : [] - } - - /** - * This method is like `_.uniqBy` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); - * // => [1.1, 2.3] - */ - function sortedUniqBy(array, iteratee) { - return array && array.length - ? baseSortedUniq(array, getIteratee(iteratee, 2)) - : [] - } - - /** - * Gets all but the first element of `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.tail([1, 2, 3]); - * // => [2, 3] - */ - function tail(array) { - var length = array == null ? 0 : array.length - return length ? baseSlice(array, 1, length) : [] - } - - /** - * Creates a slice of `array` with `n` elements taken from the beginning. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.take([1, 2, 3]); - * // => [1] - * - * _.take([1, 2, 3], 2); - * // => [1, 2] - * - * _.take([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.take([1, 2, 3], 0); - * // => [] - */ - function take(array, n, guard) { - if (!(array && array.length)) { - return [] - } - n = guard || n === undefined ? 1 : toInteger(n) - return baseSlice(array, 0, n < 0 ? 0 : n) - } - - /** - * Creates a slice of `array` with `n` elements taken from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.takeRight([1, 2, 3]); - * // => [3] - * - * _.takeRight([1, 2, 3], 2); - * // => [2, 3] - * - * _.takeRight([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.takeRight([1, 2, 3], 0); - * // => [] - */ - function takeRight(array, n, guard) { - var length = array == null ? 0 : array.length - if (!length) { - return [] - } - n = guard || n === undefined ? 1 : toInteger(n) - n = length - n - return baseSlice(array, n < 0 ? 0 : n, length) - } - - /** - * Creates a slice of `array` with elements taken from the end. Elements are - * taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.takeRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeRightWhile(users, ['active', false]); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.takeRightWhile(users, 'active'); - * // => [] - */ - function takeRightWhile(array, predicate) { - return array && array.length - ? baseWhile(array, getIteratee(predicate, 3), false, true) - : [] - } - - /** - * Creates a slice of `array` with elements taken from the beginning. Elements - * are taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.takeWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matches` iteratee shorthand. - * _.takeWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeWhile(users, ['active', false]); - * // => objects for ['barney', 'fred'] - * - * // The `_.property` iteratee shorthand. - * _.takeWhile(users, 'active'); - * // => [] - */ - function takeWhile(array, predicate) { - return array && array.length - ? baseWhile(array, getIteratee(predicate, 3)) - : [] - } - - /** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ - var union = baseRest(function (arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)) - }) - - /** - * This method is like `_.union` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which uniqueness is computed. Result values are chosen from the first - * array in which the value occurs. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.unionBy([2.1], [1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - var unionBy = baseRest(function (arrays) { - var iteratee = last(arrays) - if (isArrayLikeObject(iteratee)) { - iteratee = undefined - } - return baseUniq( - baseFlatten(arrays, 1, isArrayLikeObject, true), - getIteratee(iteratee, 2) - ) - }) - - /** - * This method is like `_.union` except that it accepts `comparator` which - * is invoked to compare elements of `arrays`. Result values are chosen from - * the first array in which the value occurs. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.unionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var unionWith = baseRest(function (arrays) { - var comparator = last(arrays) - comparator = typeof comparator == 'function' ? comparator : undefined - return baseUniq( - baseFlatten(arrays, 1, isArrayLikeObject, true), - undefined, - comparator - ) - }) - - /** - * Creates a duplicate-free version of an array, using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons, in which only the first occurrence of each element - * is kept. The order of result values is determined by the order they occur - * in the array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniq([2, 1, 2]); - * // => [2, 1] - */ - function uniq(array) { - return array && array.length ? baseUniq(array) : [] - } - - /** - * This method is like `_.uniq` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * uniqueness is computed. The order of result values is determined by the - * order they occur in the array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniqBy([2.1, 1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - function uniqBy(array, iteratee) { - return array && array.length - ? baseUniq(array, getIteratee(iteratee, 2)) - : [] - } - - /** - * This method is like `_.uniq` except that it accepts `comparator` which - * is invoked to compare elements of `array`. The order of result values is - * determined by the order they occur in the array.The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.uniqWith(objects, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] - */ - function uniqWith(array, comparator) { - comparator = typeof comparator == 'function' ? comparator : undefined - return array && array.length - ? baseUniq(array, undefined, comparator) - : [] - } - - /** - * This method is like `_.zip` except that it accepts an array of grouped - * elements and creates an array regrouping the elements to their pre-zip - * configuration. - * - * @static - * @memberOf _ - * @since 1.2.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - * - * _.unzip(zipped); - * // => [['a', 'b'], [1, 2], [true, false]] - */ - function unzip(array) { - if (!(array && array.length)) { - return [] - } - var length = 0 - array = arrayFilter(array, function (group) { - if (isArrayLikeObject(group)) { - length = nativeMax(group.length, length) - return true - } - }) - return baseTimes(length, function (index) { - return arrayMap(array, baseProperty(index)) - }) - } - - /** - * This method is like `_.unzip` except that it accepts `iteratee` to specify - * how regrouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @param {Function} [iteratee=_.identity] The function to combine - * regrouped values. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip([1, 2], [10, 20], [100, 200]); - * // => [[1, 10, 100], [2, 20, 200]] - * - * _.unzipWith(zipped, _.add); - * // => [3, 30, 300] - */ - function unzipWith(array, iteratee) { - if (!(array && array.length)) { - return [] - } - var result = unzip(array) - if (iteratee == null) { - return result - } - return arrayMap(result, function (group) { - return apply(iteratee, undefined, group) - }) - } - - /** - * Creates an array excluding all given values using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.pull`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...*} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.xor - * @example - * - * _.without([2, 1, 2, 3], 1, 2); - * // => [3] - */ - var without = baseRest(function (array, values) { - return isArrayLikeObject(array) ? baseDifference(array, values) : [] - }) - - /** - * Creates an array of unique values that is the - * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) - * of the given arrays. The order of result values is determined by the order - * they occur in the arrays. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.without - * @example - * - * _.xor([2, 1], [2, 3]); - * // => [1, 3] - */ - var xor = baseRest(function (arrays) { - return baseXor(arrayFilter(arrays, isArrayLikeObject)) - }) - - /** - * This method is like `_.xor` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which by which they're compared. The order of result values is determined - * by the order they occur in the arrays. The iteratee is invoked with one - * argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2, 3.4] - * - * // The `_.property` iteratee shorthand. - * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var xorBy = baseRest(function (arrays) { - var iteratee = last(arrays) - if (isArrayLikeObject(iteratee)) { - iteratee = undefined - } - return baseXor( - arrayFilter(arrays, isArrayLikeObject), - getIteratee(iteratee, 2) - ) - }) - - /** - * This method is like `_.xor` except that it accepts `comparator` which is - * invoked to compare elements of `arrays`. The order of result values is - * determined by the order they occur in the arrays. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.xorWith(objects, others, _.isEqual); - * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var xorWith = baseRest(function (arrays) { - var comparator = last(arrays) - comparator = typeof comparator == 'function' ? comparator : undefined - return baseXor( - arrayFilter(arrays, isArrayLikeObject), - undefined, - comparator - ) - }) - - /** - * Creates an array of grouped elements, the first of which contains the - * first elements of the given arrays, the second of which contains the - * second elements of the given arrays, and so on. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - */ - var zip = baseRest(unzip) - - /** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ - function zipObject(props, values) { - return baseZipObject(props || [], values || [], assignValue) - } - - /** - * This method is like `_.zipObject` except that it supports property paths. - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); - * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } - */ - function zipObjectDeep(props, values) { - return baseZipObject(props || [], values || [], baseSet) - } - - /** - * This method is like `_.zip` except that it accepts `iteratee` to specify - * how grouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @param {Function} [iteratee=_.identity] The function to combine - * grouped values. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { - * return a + b + c; - * }); - * // => [111, 222] - */ - var zipWith = baseRest(function (arrays) { - var length = arrays.length, - iteratee = length > 1 ? arrays[length - 1] : undefined - - iteratee = - typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined - return unzipWith(arrays, iteratee) - }) - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value) - result.__chain__ = true - return result - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain sequence in order to modify intermediate results. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value) - return value - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain sequence. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value) - } - - /** - * This method is the wrapper version of `_.at`. - * - * @name at - * @memberOf _ - * @since 1.0.0 - * @category Seq - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _(object).at(['a[0].b.c', 'a[1]']).value(); - * // => [3, 4] - */ - var wrapperAt = flatRest(function (paths) { - var length = paths.length, - start = length ? paths[0] : 0, - value = this.__wrapped__, - interceptor = function (object) { - return baseAt(object, paths) - } - - if ( - length > 1 || - this.__actions__.length || - !(value instanceof LazyWrapper) || - !isIndex(start) - ) { - return this.thru(interceptor) - } - value = value.slice(start, +start + (length ? 1 : 0)) - value.__actions__.push({ - func: thru, - args: [interceptor], - thisArg: undefined - }) - return new LodashWrapper(value, this.__chain__).thru(function ( - array - ) { - if (length && !array.length) { - array.push(undefined) - } - return array - }) - }) - - /** - * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. - * - * @name chain - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this) - } - - /** - * Executes the chain sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__) - } - - /** - * Gets the next value on a wrapped object following the - * [iterator protocol](https://mdn.io/iteration_protocols#iterator). - * - * @name next - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the next iterator value. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped.next(); - * // => { 'done': false, 'value': 1 } - * - * wrapped.next(); - * // => { 'done': false, 'value': 2 } - * - * wrapped.next(); - * // => { 'done': true, 'value': undefined } - */ - function wrapperNext() { - if (this.__values__ === undefined) { - this.__values__ = toArray(this.value()) - } - var done = this.__index__ >= this.__values__.length, - value = done ? undefined : this.__values__[this.__index__++] - - return { done: done, value: value } - } - - /** - * Enables the wrapper to be iterable. - * - * @name Symbol.iterator - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the wrapper object. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped[Symbol.iterator]() === wrapped; - * // => true - * - * Array.from(wrapped); - * // => [1, 2] - */ - function wrapperToIterator() { - return this - } - - /** - * Creates a clone of the chain sequence planting `value` as the wrapped value. - * - * @name plant - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @param {*} value The value to plant. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2]).map(square); - * var other = wrapped.plant([3, 4]); - * - * other.value(); - * // => [9, 16] - * - * wrapped.value(); - * // => [1, 4] - */ - function wrapperPlant(value) { - var result, - parent = this - - while (parent instanceof baseLodash) { - var clone = wrapperClone(parent) - clone.__index__ = 0 - clone.__values__ = undefined - if (result) { - previous.__wrapped__ = clone - } else { - result = clone - } - var previous = clone - parent = parent.__wrapped__ - } - previous.__wrapped__ = value - return result - } - - /** - * This method is the wrapper version of `_.reverse`. - * - * **Note:** This method mutates the wrapped array. - * - * @name reverse - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2, 3]; - * - * _(array).reverse().value() - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function wrapperReverse() { - var value = this.__wrapped__ - if (value instanceof LazyWrapper) { - var wrapped = value - if (this.__actions__.length) { - wrapped = new LazyWrapper(this) - } - wrapped = wrapped.reverse() - wrapped.__actions__.push({ - func: thru, - args: [reverse], - thisArg: undefined - }) - return new LodashWrapper(wrapped, this.__chain__) - } - return this.thru(reverse) - } - - /** - * Executes the chain sequence to resolve the unwrapped value. - * - * @name value - * @memberOf _ - * @since 0.1.0 - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__) - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the number of times the key was returned by `iteratee`. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': 1, '6': 2 } - * - * // The `_.property` iteratee shorthand. - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - var countBy = createAggregator(function (result, value, key) { - if (hasOwnProperty.call(result, key)) { - ++result[key] - } else { - baseAssignValue(result, key, 1) - } - }) - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined - } - return func(collection, getIteratee(predicate, 3)) - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - * - * // Combining several predicates using `_.overEvery` or `_.overSome`. - * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); - * // => objects for ['fred', 'barney'] - */ - function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter - return func(collection, getIteratee(predicate, 3)) - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - var find = createFind(findIndex) - - /** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=collection.length-1] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ - var findLast = createFind(findLastIndex) - - /** - * Creates a flattened array of values by running each element in `collection` - * thru `iteratee` and flattening the mapped results. The iteratee is invoked - * with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _.flatMap([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1) - } - - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDeep([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY) - } - - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDepth([1, 2], duplicate, 2); - * // => [[1, 1], [2, 2]] - */ - function flatMapDepth(collection, iteratee, depth) { - depth = depth === undefined ? 1 : toInteger(depth) - return baseFlatten(map(collection, iteratee), depth) - } - - /** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach - return func(collection, getIteratee(iteratee, 3)) - } - - /** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @alias eachRight - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEach - * @example - * - * _.forEachRight([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `2` then `1`. - */ - function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight - return func(collection, getIteratee(iteratee, 3)) - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function (result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value) - } else { - baseAssignValue(result, key, [value]) - } - }) - - /** - * Checks if `value` is in `collection`. If `collection` is a string, it's - * checked for a substring of `value`, otherwise - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * is used for equality comparisons. If `fromIndex` is negative, it's used as - * the offset from the end of `collection`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {boolean} Returns `true` if `value` is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'a': 1, 'b': 2 }, 1); - * // => true - * - * _.includes('abcd', 'bc'); - * // => true - */ - function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection) - fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0 - - var length = collection.length - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0) - } - return isString(collection) - ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 - : !!length && baseIndexOf(collection, value, fromIndex) > -1 - } - - /** - * Invokes the method at `path` of each element in `collection`, returning - * an array of the results of each invoked method. Any additional arguments - * are provided to each invoked method. If `path` is a function, it's invoked - * for, and `this` bound to, each element in `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|string} path The path of the method to invoke or - * the function invoked per iteration. - * @param {...*} [args] The arguments to invoke each method with. - * @returns {Array} Returns the array of results. - * @example - * - * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invokeMap([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ - var invokeMap = baseRest(function (collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - result = isArrayLike(collection) ? Array(collection.length) : [] - - baseEach(collection, function (value) { - result[++index] = isFunc - ? apply(path, value, args) - : baseInvoke(value, path, args) - }) - return result - }) - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the last element responsible for generating the key. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var array = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.keyBy(array, function(o) { - * return String.fromCharCode(o.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.keyBy(array, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - */ - var keyBy = createAggregator(function (result, value, key) { - baseAssignValue(result, key, value) - }) - - /** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - var func = isArray(collection) ? arrayMap : baseMap - return func(collection, getIteratee(iteratee, 3)) - } - - /** - * This method is like `_.sortBy` except that it allows specifying the sort - * orders of the iteratees to sort by. If `orders` is unspecified, all values - * are sorted in ascending order. Otherwise, specify an order of "desc" for - * descending or "asc" for ascending sort order of corresponding values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] - * The iteratees to sort by. - * @param {string[]} [orders] The sort orders of `iteratees`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 34 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 36 } - * ]; - * - * // Sort by `user` in ascending order and by `age` in descending order. - * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - */ - function orderBy(collection, iteratees, orders, guard) { - if (collection == null) { - return [] - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees] - } - orders = guard ? undefined : orders - if (!isArray(orders)) { - orders = orders == null ? [] : [orders] - } - return baseOrderBy(collection, iteratees, orders) - } - - /** - * Creates an array of elements split into two groups, the first of which - * contains elements `predicate` returns truthy for, the second of which - * contains elements `predicate` returns falsey for. The predicate is - * invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the array of grouped elements. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true }, - * { 'user': 'pebbles', 'age': 1, 'active': false } - * ]; - * - * _.partition(users, function(o) { return o.active; }); - * // => objects for [['fred'], ['barney', 'pebbles']] - * - * // The `_.matches` iteratee shorthand. - * _.partition(users, { 'age': 1, 'active': false }); - * // => objects for [['pebbles'], ['barney', 'fred']] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.partition(users, ['active', false]); - * // => objects for [['barney', 'pebbles'], ['fred']] - * - * // The `_.property` iteratee shorthand. - * _.partition(users, 'active'); - * // => objects for [['fred'], ['barney', 'pebbles']] - */ - var partition = createAggregator( - function (result, value, key) { - result[key ? 0 : 1].push(value) - }, - function () { - return [[], []] - } - ) - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, - initAccum = arguments.length < 3 - - return func( - collection, - getIteratee(iteratee, 4), - accumulator, - initAccum, - baseEach - ) - } - - /** - * This method is like `_.reduce` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduce - * @example - * - * var array = [[0, 1], [2, 3], [4, 5]]; - * - * _.reduceRight(array, function(flattened, other) { - * return flattened.concat(other); - * }, []); - * // => [4, 5, 2, 3, 0, 1] - */ - function reduceRight(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduceRight : baseReduce, - initAccum = arguments.length < 3 - - return func( - collection, - getIteratee(iteratee, 4), - accumulator, - initAccum, - baseEachRight - ) - } - - /** - * The opposite of `_.filter`; this method returns the elements of `collection` - * that `predicate` does **not** return truthy for. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.filter - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true } - * ]; - * - * _.reject(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.reject(users, { 'age': 40, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.reject(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.reject(users, 'active'); - * // => objects for ['barney'] - */ - function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter - return func(collection, negate(getIteratee(predicate, 3))) - } - - /** - * Gets a random element from `collection`. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - */ - function sample(collection) { - var func = isArray(collection) ? arraySample : baseSample - return func(collection) - } - - /** - * Gets `n` random elements at unique keys from `collection` up to the - * size of `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @param {number} [n=1] The number of elements to sample. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the random elements. - * @example - * - * _.sampleSize([1, 2, 3], 2); - * // => [3, 1] - * - * _.sampleSize([1, 2, 3], 4); - * // => [2, 3, 1] - */ - function sampleSize(collection, n, guard) { - if (guard ? isIterateeCall(collection, n, guard) : n === undefined) { - n = 1 - } else { - n = toInteger(n) - } - var func = isArray(collection) ? arraySampleSize : baseSampleSize - return func(collection, n) - } - - /** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ - function shuffle(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle - return func(collection) - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0 - } - if (isArrayLike(collection)) { - return isString(collection) - ? stringSize(collection) - : collection.length - } - var tag = getTag(collection) - if (tag == mapTag || tag == setTag) { - return collection.size - } - return baseKeys(collection).length - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined - } - return func(collection, getIteratee(predicate, 3)) - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 30 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] - */ - var sortBy = baseRest(function (collection, iteratees) { - if (collection == null) { - return [] - } - var length = iteratees.length - if ( - length > 1 && - isIterateeCall(collection, iteratees[0], iteratees[1]) - ) { - iteratees = [] - } else if ( - length > 2 && - isIterateeCall(iteratees[0], iteratees[1], iteratees[2]) - ) { - iteratees = [iteratees[0]] - } - return baseOrderBy(collection, baseFlatten(iteratees, 1), []) - }) - - /*------------------------------------------------------------------------*/ - - /** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ - var now = - ctxNow || - function () { - return root.Date.now() - } - - /*------------------------------------------------------------------------*/ - - /** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it's called `n` or more times. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => Logs 'done saving!' after the two async saves have completed. - */ - function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT) - } - n = toInteger(n) - return function () { - if (--n < 1) { - return func.apply(this, arguments) - } - } - } - - /** - * Creates a function that invokes `func`, with up to `n` arguments, - * ignoring any additional arguments. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @param {number} [n=func.length] The arity cap. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.ary(parseInt, 1)); - * // => [6, 8, 10] - */ - function ary(func, n, guard) { - n = guard ? undefined : n - n = func && n == null ? func.length : n - return createWrap( - func, - WRAP_ARY_FLAG, - undefined, - undefined, - undefined, - undefined, - n - ) - } - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ - function before(n, func) { - var result - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT) - } - n = toInteger(n) - return function () { - if (--n > 0) { - result = func.apply(this, arguments) - } - if (n <= 1) { - func = undefined - } - return result - } - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = baseRest(function (func, thisArg, partials) { - var bitmask = WRAP_BIND_FLAG - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)) - bitmask |= WRAP_PARTIAL_FLAG - } - return createWrap(func, bitmask, thisArg, partials, holders) - }) - - /** - * Creates a function that invokes the method at `object[key]` with `partials` - * prepended to the arguments it receives. - * - * This method differs from `_.bind` by allowing bound functions to reference - * methods that may be redefined or don't yet exist. See - * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) - * for more details. - * - * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Function - * @param {Object} object The object to invoke the method on. - * @param {string} key The key of the method. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'user': 'fred', - * 'greet': function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * }; - * - * var bound = _.bindKey(object, 'greet', 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * object.greet = function(greeting, punctuation) { - * return greeting + 'ya ' + this.user + punctuation; - * }; - * - * bound('!'); - * // => 'hiya fred!' - * - * // Bound with placeholders. - * var bound = _.bindKey(object, 'greet', _, '!'); - * bound('hi'); - * // => 'hiya fred!' - */ - var bindKey = baseRest(function (object, key, partials) { - var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)) - bitmask |= WRAP_PARTIAL_FLAG - } - return createWrap(key, bitmask, object, partials, holders) - }) - - /** - * Creates a function that accepts arguments of `func` and either invokes - * `func` returning its result, if at least `arity` number of arguments have - * been provided, or returns a function that accepts the remaining `func` - * arguments, and so on. The arity of `func` may be specified if `func.length` - * is not sufficient. - * - * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curry(abc); - * - * curried(1)(2)(3); - * // => [1, 2, 3] - * - * curried(1, 2)(3); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(1)(_, 3)(2); - * // => [1, 2, 3] - */ - function curry(func, arity, guard) { - arity = guard ? undefined : arity - var result = createWrap( - func, - WRAP_CURRY_FLAG, - undefined, - undefined, - undefined, - undefined, - undefined, - arity - ) - result.placeholder = curry.placeholder - return result - } - - /** - * This method is like `_.curry` except that arguments are applied to `func` - * in the manner of `_.partialRight` instead of `_.partial`. - * - * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curryRight(abc); - * - * curried(3)(2)(1); - * // => [1, 2, 3] - * - * curried(2, 3)(1); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(3)(1, _)(2); - * // => [1, 2, 3] - */ - function curryRight(func, arity, guard) { - arity = guard ? undefined : arity - var result = createWrap( - func, - WRAP_CURRY_RIGHT_FLAG, - undefined, - undefined, - undefined, - undefined, - undefined, - arity - ) - result.placeholder = curryRight.placeholder - return result - } - - /** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ - function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT) - } - wait = toNumber(wait) || 0 - if (isObject(options)) { - leading = !!options.leading - maxing = 'maxWait' in options - maxWait = maxing - ? nativeMax(toNumber(options.maxWait) || 0, wait) - : maxWait - trailing = 'trailing' in options ? !!options.trailing : trailing - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis - - lastArgs = lastThis = undefined - lastInvokeTime = time - result = func.apply(thisArg, args) - return result - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait) - // Invoke the leading edge. - return leading ? invokeFunc(time) : result - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - timeWaiting = wait - timeSinceLastCall - - return maxing - ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) - : timeWaiting - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return ( - lastCallTime === undefined || - timeSinceLastCall >= wait || - timeSinceLastCall < 0 || - (maxing && timeSinceLastInvoke >= maxWait) - ) - } - - function timerExpired() { - var time = now() - if (shouldInvoke(time)) { - return trailingEdge(time) - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)) - } - - function trailingEdge(time) { - timerId = undefined - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time) - } - lastArgs = lastThis = undefined - return result - } - - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId) - } - lastInvokeTime = 0 - lastArgs = lastCallTime = lastThis = timerId = undefined - } - - function flush() { - return timerId === undefined ? result : trailingEdge(now()) - } - - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time) - - lastArgs = arguments - lastThis = this - lastCallTime = time - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime) - } - if (maxing) { - // Handle invocations in a tight loop. - clearTimeout(timerId) - timerId = setTimeout(timerExpired, wait) - return invokeFunc(lastCallTime) - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait) - } - return result - } - debounced.cancel = cancel - debounced.flush = flush - return debounced - } - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ - var defer = baseRest(function (func, args) { - return baseDelay(func, 1, args) - }) - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ - var delay = baseRest(function (func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args) - }) - - /** - * Creates a function that invokes `func` with arguments reversed. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to flip arguments for. - * @returns {Function} Returns the new flipped function. - * @example - * - * var flipped = _.flip(function() { - * return _.toArray(arguments); - * }); - * - * flipped('a', 'b', 'c', 'd'); - * // => ['d', 'c', 'b', 'a'] - */ - function flip(func) { - return createWrap(func, WRAP_FLIP_FLAG) - } - - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `clear`, `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ - function memoize(func, resolver) { - if ( - typeof func != 'function' || - (resolver != null && typeof resolver != 'function') - ) { - throw new TypeError(FUNC_ERROR_TEXT) - } - var memoized = function () { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache - - if (cache.has(key)) { - return cache.get(key) - } - var result = func.apply(this, args) - memoized.cache = cache.set(key, result) || cache - return result - } - memoized.cache = new (memoize.Cache || MapCache)() - return memoized - } - - // Expose `MapCache`. - memoize.Cache = MapCache - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT) - } - return function () { - var args = arguments - switch (args.length) { - case 0: - return !predicate.call(this) - case 1: - return !predicate.call(this, args[0]) - case 2: - return !predicate.call(this, args[0], args[1]) - case 3: - return !predicate.call(this, args[0], args[1], args[2]) - } - return !predicate.apply(this, args) - } - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // => `createApplication` is invoked once - */ - function once(func) { - return before(2, func) - } - - /** - * Creates a function that invokes `func` with its arguments transformed. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Function - * @param {Function} func The function to wrap. - * @param {...(Function|Function[])} [transforms=[_.identity]] - * The argument transforms. - * @returns {Function} Returns the new function. - * @example - * - * function doubled(n) { - * return n * 2; - * } - * - * function square(n) { - * return n * n; - * } - * - * var func = _.overArgs(function(x, y) { - * return [x, y]; - * }, [square, doubled]); - * - * func(9, 3); - * // => [81, 6] - * - * func(10, 5); - * // => [100, 10] - */ - var overArgs = castRest(function (func, transforms) { - transforms = - transforms.length == 1 && isArray(transforms[0]) - ? arrayMap(transforms[0], baseUnary(getIteratee())) - : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())) - - var funcsLength = transforms.length - return baseRest(function (args) { - var index = -1, - length = nativeMin(args.length, funcsLength) - - while (++index < length) { - args[index] = transforms[index].call(this, args[index]) - } - return apply(func, this, args) - }) - }) - - /** - * Creates a function that invokes `func` with `partials` prepended to the - * arguments it receives. This method is like `_.bind` except it does **not** - * alter the `this` binding. - * - * The `_.partial.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 0.2.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * function greet(greeting, name) { - * return greeting + ' ' + name; - * } - * - * var sayHelloTo = _.partial(greet, 'hello'); - * sayHelloTo('fred'); - * // => 'hello fred' - * - * // Partially applied with placeholders. - * var greetFred = _.partial(greet, _, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - */ - var partial = baseRest(function (func, partials) { - var holders = replaceHolders(partials, getHolder(partial)) - return createWrap( - func, - WRAP_PARTIAL_FLAG, - undefined, - partials, - holders - ) - }) - - /** - * This method is like `_.partial` except that partially applied arguments - * are appended to the arguments it receives. - * - * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * function greet(greeting, name) { - * return greeting + ' ' + name; - * } - * - * var greetFred = _.partialRight(greet, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - * - * // Partially applied with placeholders. - * var sayHelloTo = _.partialRight(greet, 'hello', _); - * sayHelloTo('fred'); - * // => 'hello fred' - */ - var partialRight = baseRest(function (func, partials) { - var holders = replaceHolders(partials, getHolder(partialRight)) - return createWrap( - func, - WRAP_PARTIAL_RIGHT_FLAG, - undefined, - partials, - holders - ) - }) - - /** - * Creates a function that invokes `func` with arguments arranged according - * to the specified `indexes` where the argument value at the first index is - * provided as the first argument, the argument value at the second index is - * provided as the second argument, and so on. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to rearrange arguments for. - * @param {...(number|number[])} indexes The arranged argument indexes. - * @returns {Function} Returns the new function. - * @example - * - * var rearged = _.rearg(function(a, b, c) { - * return [a, b, c]; - * }, [2, 0, 1]); - * - * rearged('b', 'c', 'a') - * // => ['a', 'b', 'c'] - */ - var rearg = flatRest(function (func, indexes) { - return createWrap( - func, - WRAP_REARG_FLAG, - undefined, - undefined, - undefined, - indexes - ) - }) - - /** - * Creates a function that invokes `func` with the `this` binding of the - * created function and arguments from `start` and beyond provided as - * an array. - * - * **Note:** This method is based on the - * [rest parameter](https://mdn.io/rest_parameters). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.rest(function(what, names) { - * return what + ' ' + _.initial(names).join(', ') + - * (_.size(names) > 1 ? ', & ' : '') + _.last(names); - * }); - * - * say('hello', 'fred', 'barney', 'pebbles'); - * // => 'hello fred, barney, & pebbles' - */ - function rest(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT) - } - start = start === undefined ? start : toInteger(start) - return baseRest(func, start) - } - - /** - * Creates a function that invokes `func` with the `this` binding of the - * create function and an array of arguments much like - * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). - * - * **Note:** This method is based on the - * [spread operator](https://mdn.io/spread_operator). - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Function - * @param {Function} func The function to spread arguments over. - * @param {number} [start=0] The start position of the spread. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.spread(function(who, what) { - * return who + ' says ' + what; - * }); - * - * say(['fred', 'hello']); - * // => 'fred says hello' - * - * var numbers = Promise.all([ - * Promise.resolve(40), - * Promise.resolve(36) - * ]); - * - * numbers.then(_.spread(function(x, y) { - * return x + y; - * })); - * // => a Promise of 76 - */ - function spread(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT) - } - start = start == null ? 0 : nativeMax(toInteger(start), 0) - return baseRest(function (args) { - var array = args[start], - otherArgs = castSlice(args, 0, start) - - if (array) { - arrayPush(otherArgs, array) - } - return apply(func, this, otherArgs) - }) - } - - /** - * Creates a throttled function that only invokes `func` at most once per - * every `wait` milliseconds. The throttled function comes with a `cancel` - * method to cancel delayed `func` invocations and a `flush` method to - * immediately invoke them. Provide `options` to indicate whether `func` - * should be invoked on the leading and/or trailing edge of the `wait` - * timeout. The `func` is invoked with the last arguments provided to the - * throttled function. Subsequent calls to the throttled function return the - * result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the throttled function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.throttle` and `_.debounce`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to throttle. - * @param {number} [wait=0] The number of milliseconds to throttle invocations to. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=true] - * Specify invoking on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // Avoid excessively updating the position while scrolling. - * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); - * - * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. - * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); - * jQuery(element).on('click', throttled); - * - * // Cancel the trailing throttled invocation. - * jQuery(window).on('popstate', throttled.cancel); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT) - } - if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading - trailing = 'trailing' in options ? !!options.trailing : trailing - } - return debounce(func, wait, { - leading: leading, - maxWait: wait, - trailing: trailing - }) - } - - /** - * Creates a function that accepts up to one argument, ignoring any - * additional arguments. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.unary(parseInt)); - * // => [6, 8, 10] - */ - function unary(func) { - return ary(func, 1) - } - - /** - * Creates a function that provides `value` to `wrapper` as its first - * argument. Any additional arguments provided to the function are appended - * to those provided to the `wrapper`. The wrapper is invoked with the `this` - * binding of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {*} value The value to wrap. - * @param {Function} [wrapper=identity] The wrapper function. - * @returns {Function} Returns the new function. - * @example - * - * var p = _.wrap(_.escape, function(func, text) { - * return '

' + func(text) + '

'; - * }); - * - * p('fred, barney, & pebbles'); - * // => '

fred, barney, & pebbles

' - */ - function wrap(value, wrapper) { - return partial(castFunction(wrapper), value) - } - - /*------------------------------------------------------------------------*/ - - /** - * Casts `value` as an array if it's not one. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Lang - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast array. - * @example - * - * _.castArray(1); - * // => [1] - * - * _.castArray({ 'a': 1 }); - * // => [{ 'a': 1 }] - * - * _.castArray('abc'); - * // => ['abc'] - * - * _.castArray(null); - * // => [null] - * - * _.castArray(undefined); - * // => [undefined] - * - * _.castArray(); - * // => [] - * - * var array = [1, 2, 3]; - * console.log(_.castArray(array) === array); - * // => true - */ - function castArray() { - if (!arguments.length) { - return [] - } - var value = arguments[0] - return isArray(value) ? value : [value] - } - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - return baseClone(value, CLONE_SYMBOLS_FLAG) - } - - /** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined`, - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @see _.cloneDeepWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ - function cloneWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined - return baseClone(value, CLONE_SYMBOLS_FLAG, customizer) - } - - /** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ - function cloneDeep(value) { - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG) - } - - /** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ - function cloneDeepWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined - return baseClone( - value, - CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, - customizer - ) - } - - /** - * Checks if `object` conforms to `source` by invoking the predicate - * properties of `source` with the corresponding property values of `object`. - * - * **Note:** This method is equivalent to `_.conforms` when `source` is - * partially applied. - * - * @static - * @memberOf _ - * @since 4.14.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); - * // => true - * - * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); - * // => false - */ - function conformsTo(object, source) { - return source == null || baseConformsTo(object, source, keys(source)) - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other) - } - - /** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - * @see _.lt - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ - var gt = createRelationalOperation(baseGt) - - /** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to - * `other`, else `false`. - * @see _.lte - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ - var gte = createRelationalOperation(function (value, other) { - return value >= other - }) - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments( - (function () { - return arguments - })() - ) - ? baseIsArguments - : function (value) { - return ( - isObjectLike(value) && - hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee') - ) - } - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray - - /** - * Checks if `value` is classified as an `ArrayBuffer` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - * @example - * - * _.isArrayBuffer(new ArrayBuffer(2)); - * // => true - * - * _.isArrayBuffer(new Array(2)); - * // => false - */ - var isArrayBuffer = nodeIsArrayBuffer - ? baseUnary(nodeIsArrayBuffer) - : baseIsArrayBuffer - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value) - } - - /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value) - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return ( - value === true || - value === false || - (isObjectLike(value) && baseGetTag(value) == boolTag) - ) - } - - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = nativeIsBuffer || stubFalse - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate - - /** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ - function isElement(value) { - return ( - isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value) - ) - } - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (value == null) { - return true - } - if ( - isArrayLike(value) && - (isArray(value) || - typeof value == 'string' || - typeof value.splice == 'function' || - isBuffer(value) || - isTypedArray(value) || - isArguments(value)) - ) { - return !value.length - } - var tag = getTag(value) - if (tag == mapTag || tag == setTag) { - return !value.size - } - if (isPrototype(value)) { - return !baseKeys(value).length - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false - } - } - return true - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are compared by strict equality, i.e. `===`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other) - } - - /** - * This method is like `_.isEqual` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with up to - * six arguments: (objValue, othValue [, index|key, object, other, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, othValue) { - * if (isGreeting(objValue) && isGreeting(othValue)) { - * return true; - * } - * } - * - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqualWith(array, other, customizer); - * // => true - */ - function isEqualWith(value, other, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined - var result = customizer ? customizer(value, other) : undefined - return result === undefined - ? baseIsEqual(value, other, undefined, customizer) - : !!result - } - - /** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ - function isError(value) { - if (!isObjectLike(value)) { - return false - } - var tag = baseGetTag(value) - return ( - tag == errorTag || - tag == domExcTag || - (typeof value.message == 'string' && - typeof value.name == 'string' && - !isPlainObject(value)) - ) - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value) - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - if (!isObject(value)) { - return false - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value) - return ( - tag == funcTag || - tag == genTag || - tag == asyncTag || - tag == proxyTag - ) - } - - /** - * Checks if `value` is an integer. - * - * **Note:** This method is based on - * [`Number.isInteger`](https://mdn.io/Number/isInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an integer, else `false`. - * @example - * - * _.isInteger(3); - * // => true - * - * _.isInteger(Number.MIN_VALUE); - * // => false - * - * _.isInteger(Infinity); - * // => false - * - * _.isInteger('3'); - * // => false - */ - function isInteger(value) { - return typeof value == 'number' && value == toInteger(value) - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return ( - typeof value == 'number' && - value > -1 && - value % 1 == 0 && - value <= MAX_SAFE_INTEGER - ) - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value - return value != null && (type == 'object' || type == 'function') - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object' - } - - /** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ - var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap - - /** - * Performs a partial deep comparison between `object` and `source` to - * determine if `object` contains equivalent property values. - * - * **Note:** This method is equivalent to `_.matches` when `source` is - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.isMatch(object, { 'b': 2 }); - * // => true - * - * _.isMatch(object, { 'b': 1 }); - * // => false - */ - function isMatch(object, source) { - return ( - object === source || - baseIsMatch(object, source, getMatchData(source)) - ) - } - - /** - * This method is like `_.isMatch` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with five - * arguments: (objValue, srcValue, index|key, object, source). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, srcValue) { - * if (isGreeting(objValue) && isGreeting(srcValue)) { - * return true; - * } - * } - * - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatchWith(object, source, customizer); - * // => true - */ - function isMatchWith(object, source, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined - return baseIsMatch(object, source, getMatchData(source), customizer) - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value - } - - /** - * Checks if `value` is a pristine native function. - * - * **Note:** This method can't reliably detect native functions in the presence - * of the core-js package because core-js circumvents this kind of detection. - * Despite multiple requests, the core-js maintainer has made it clear: any - * attempt to fix the detection will be obstructed. As a result, we're left - * with little choice but to throw an error. Unfortunately, this also affects - * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), - * which rely on core-js. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ - function isNative(value) { - if (isMaskable(value)) { - throw new Error(CORE_ERROR_TEXT) - } - return baseIsNative(value) - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null - } - - /** - * Checks if `value` is `null` or `undefined`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is nullish, else `false`. - * @example - * - * _.isNil(null); - * // => true - * - * _.isNil(void 0); - * // => true - * - * _.isNil(NaN); - * // => false - */ - function isNil(value) { - return value == null - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return ( - typeof value == 'number' || - (isObjectLike(value) && baseGetTag(value) == numberTag) - ) - } - - /** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ - function isPlainObject(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag) { - return false - } - var proto = getPrototype(value) - if (proto === null) { - return true - } - var Ctor = - hasOwnProperty.call(proto, 'constructor') && proto.constructor - return ( - typeof Ctor == 'function' && - Ctor instanceof Ctor && - funcToString.call(Ctor) == objectCtorString - ) - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp - - /** - * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 - * double precision number which isn't the result of a rounded unsafe integer. - * - * **Note:** This method is based on - * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. - * @example - * - * _.isSafeInteger(3); - * // => true - * - * _.isSafeInteger(Number.MIN_VALUE); - * // => false - * - * _.isSafeInteger(Infinity); - * // => false - * - * _.isSafeInteger('3'); - * // => false - */ - function isSafeInteger(value) { - return ( - isInteger(value) && - value >= -MAX_SAFE_INTEGER && - value <= MAX_SAFE_INTEGER - ) - } - - /** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ - var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return ( - typeof value == 'string' || - (!isArray(value) && - isObjectLike(value) && - baseGetTag(value) == stringTag) - ) - } - - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return ( - typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag) - ) - } - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - var isTypedArray = nodeIsTypedArray - ? baseUnary(nodeIsTypedArray) - : baseIsTypedArray - - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined - } - - /** - * Checks if `value` is classified as a `WeakMap` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. - * @example - * - * _.isWeakMap(new WeakMap); - * // => true - * - * _.isWeakMap(new Map); - * // => false - */ - function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag - } - - /** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ - function isWeakSet(value) { - return isObjectLike(value) && baseGetTag(value) == weakSetTag - } - - /** - * Checks if `value` is less than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - * @see _.gt - * @example - * - * _.lt(1, 3); - * // => true - * - * _.lt(3, 3); - * // => false - * - * _.lt(3, 1); - * // => false - */ - var lt = createRelationalOperation(baseLt) - - /** - * Checks if `value` is less than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than or equal to - * `other`, else `false`. - * @see _.gte - * @example - * - * _.lte(1, 3); - * // => true - * - * _.lte(3, 3); - * // => true - * - * _.lte(3, 1); - * // => false - */ - var lte = createRelationalOperation(function (value, other) { - return value <= other - }) - - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!value) { - return [] - } - if (isArrayLike(value)) { - return isString(value) ? stringToArray(value) : copyArray(value) - } - if (symIterator && value[symIterator]) { - return iteratorToArray(value[symIterator]()) - } - var tag = getTag(value), - func = - tag == mapTag ? mapToArray : tag == setTag ? setToArray : values - - return func(value) - } - - /** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0 - } - value = toNumber(value) - if (value === INFINITY || value === -INFINITY) { - var sign = value < 0 ? -1 : 1 - return sign * MAX_INTEGER - } - return value === value ? value : 0 - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - function toInteger(value) { - var result = toFinite(value), - remainder = result % 1 - - return result === result - ? remainder - ? result - remainder - : result - : 0 - } - - /** - * Converts `value` to an integer suitable for use as the length of an - * array-like object. - * - * **Note:** This method is based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toLength(3.2); - * // => 3 - * - * _.toLength(Number.MIN_VALUE); - * // => 0 - * - * _.toLength(Infinity); - * // => 4294967295 - * - * _.toLength('3.2'); - * // => 3 - */ - function toLength(value) { - return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0 - } - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - function toNumber(value) { - if (typeof value == 'number') { - return value - } - if (isSymbol(value)) { - return NAN - } - if (isObject(value)) { - var other = - typeof value.valueOf == 'function' ? value.valueOf() : value - value = isObject(other) ? other + '' : other - } - if (typeof value != 'string') { - return value === 0 ? value : +value - } - value = baseTrim(value) - var isBinary = reIsBinary.test(value) - return isBinary || reIsOctal.test(value) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : reIsBadHex.test(value) - ? NAN - : +value - } - - /** - * Converts `value` to a plain object flattening inherited enumerable string - * keyed properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ - function toPlainObject(value) { - return copyObject(value, keysIn(value)) - } - - /** - * Converts `value` to a safe integer. A safe integer can be compared and - * represented correctly. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toSafeInteger(3.2); - * // => 3 - * - * _.toSafeInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toSafeInteger(Infinity); - * // => 9007199254740991 - * - * _.toSafeInteger('3.2'); - * // => 3 - */ - function toSafeInteger(value) { - return value - ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) - : value === 0 - ? value - : 0 - } - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - return value == null ? '' : baseToString(value) - } - - /*------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ - var assign = createAssigner(function (object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object) - return - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]) - } - } - }) - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function (object, source) { - copyObject(source, keysIn(source), object) - }) - - /** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignInWith = createAssigner(function ( - object, - source, - srcIndex, - customizer - ) { - copyObject(source, keysIn(source), object, customizer) - }) - - /** - * This method is like `_.assign` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignInWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignWith = createAssigner(function ( - object, - source, - srcIndex, - customizer - ) { - copyObject(source, keys(source), object, customizer) - }) - - /** - * Creates an array of values corresponding to `paths` of `object`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Array} Returns the picked values. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _.at(object, ['a[0].b.c', 'a[1]']); - * // => [3, 4] - */ - var at = flatRest(baseAt) - - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype) - return properties == null ? result : baseAssign(result, properties) - } - - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var defaults = baseRest(function (object, sources) { - object = Object(object) - - var index = -1 - var length = sources.length - var guard = length > 2 ? sources[2] : undefined - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - length = 1 - } - - while (++index < length) { - var source = sources[index] - var props = keysIn(source) - var propsIndex = -1 - var propsLength = props.length - - while (++propsIndex < propsLength) { - var key = props[propsIndex] - var value = object[key] - - if ( - value === undefined || - (eq(value, objectProto[key]) && - !hasOwnProperty.call(object, key)) - ) { - object[key] = source[key] - } - } - } - - return object - }) - - /** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaults - * @example - * - * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); - * // => { 'a': { 'b': 2, 'c': 3 } } - */ - var defaultsDeep = baseRest(function (args) { - args.push(undefined, customDefaultsMerge) - return apply(mergeWith, undefined, args) - }) - - /** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ - function findKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwn) - } - - /** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ - function findLastKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight) - } - - /** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ - function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, getIteratee(iteratee, 3), keysIn) - } - - /** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forIn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. - */ - function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, getIteratee(iteratee, 3), keysIn) - } - - /** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forOwn(object, iteratee) { - return object && baseForOwn(object, getIteratee(iteratee, 3)) - } - - /** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. - */ - function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, getIteratee(iteratee, 3)) - } - - /** - * Creates an array of function property names from own enumerable properties - * of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functionsIn - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functions(new Foo); - * // => ['a', 'b'] - */ - function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)) - } - - /** - * Creates an array of function property names from own and inherited - * enumerable properties of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functions - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functionsIn(new Foo); - * // => ['a', 'b', 'c'] - */ - function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)) - } - - /** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ - function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path) - return result === undefined ? defaultValue : result - } - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasPath(object, path, baseHas) - } - - /** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ - function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn) - } - - /** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ - var invert = createInverter(function (result, value, key) { - if (value != null && typeof value.toString != 'function') { - value = nativeObjectToString.call(value) - } - - result[value] = key - }, constant(identity)) - - /** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` thru `iteratee`. The - * corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Object - * @param {Object} object The object to invert. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ - var invertBy = createInverter(function (result, value, key) { - if (value != null && typeof value.toString != 'function') { - value = nativeObjectToString.call(value) - } - - if (hasOwnProperty.call(result, value)) { - result[value].push(key) - } else { - result[value] = [key] - } - }, getIteratee) - - /** - * Invokes the method at `path` of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - * @example - * - * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; - * - * _.invoke(object, 'a[0].b.c.slice', 1, 3); - * // => [2, 3] - */ - var invoke = baseRest(baseInvoke) - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object) - } - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - return isArrayLike(object) - ? arrayLikeKeys(object, true) - : baseKeysIn(object) - } - - /** - * The opposite of `_.mapValues`; this method creates an object with the - * same values as `object` and keys generated by running each own enumerable - * string keyed property of `object` thru `iteratee`. The iteratee is invoked - * with three arguments: (value, key, object). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapValues - * @example - * - * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { - * return key + value; - * }); - * // => { 'a1': 1, 'b2': 2 } - */ - function mapKeys(object, iteratee) { - var result = {} - iteratee = getIteratee(iteratee, 3) - - baseForOwn(object, function (value, key, object) { - baseAssignValue(result, iteratee(value, key, object), value) - }) - return result - } - - /** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ - function mapValues(object, iteratee) { - var result = {} - iteratee = getIteratee(iteratee, 3) - - baseForOwn(object, function (value, key, object) { - baseAssignValue(result, key, iteratee(value, key, object)) - }) - return result - } - - /** - * This method is like `_.assign` except that it recursively merges own and - * inherited enumerable string keyed properties of source objects into the - * destination object. Source properties that resolve to `undefined` are - * skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var object = { - * 'a': [{ 'b': 2 }, { 'd': 4 }] - * }; - * - * var other = { - * 'a': [{ 'c': 3 }, { 'e': 5 }] - * }; - * - * _.merge(object, other); - * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } - */ - var merge = createAssigner(function (object, source, srcIndex) { - baseMerge(object, source, srcIndex) - }) - - /** - * This method is like `_.merge` except that it accepts `customizer` which - * is invoked to produce the merged values of the destination and source - * properties. If `customizer` returns `undefined`, merging is handled by the - * method instead. The `customizer` is invoked with six arguments: - * (objValue, srcValue, key, object, source, stack). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} customizer The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * function customizer(objValue, srcValue) { - * if (_.isArray(objValue)) { - * return objValue.concat(srcValue); - * } - * } - * - * var object = { 'a': [1], 'b': [2] }; - * var other = { 'a': [3], 'b': [4] }; - * - * _.mergeWith(object, other, customizer); - * // => { 'a': [1, 3], 'b': [2, 4] } - */ - var mergeWith = createAssigner(function ( - object, - source, - srcIndex, - customizer - ) { - baseMerge(object, source, srcIndex, customizer) - }) - - /** - * The opposite of `_.pick`; this method creates an object composed of the - * own and inherited enumerable property paths of `object` that are not omitted. - * - * **Note:** This method is considerably slower than `_.pick`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to omit. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omit(object, ['a', 'c']); - * // => { 'b': '2' } - */ - var omit = flatRest(function (object, paths) { - var result = {} - if (object == null) { - return result - } - var isDeep = false - paths = arrayMap(paths, function (path) { - path = castPath(path, object) - isDeep || (isDeep = path.length > 1) - return path - }) - copyObject(object, getAllKeysIn(object), result) - if (isDeep) { - result = baseClone( - result, - CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, - customOmitClone - ) - } - var length = paths.length - while (length--) { - baseUnset(result, paths[length]) - } - return result - }) - - /** - * The opposite of `_.pickBy`; this method creates an object composed of - * the own and inherited enumerable string keyed properties of `object` that - * `predicate` doesn't return truthy for. The predicate is invoked with two - * arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omitBy(object, _.isNumber); - * // => { 'b': '2' } - */ - function omitBy(object, predicate) { - return pickBy(object, negate(getIteratee(predicate))) - } - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = flatRest(function (object, paths) { - return object == null ? {} : basePick(object, paths) - }) - - /** - * Creates an object composed of the `object` properties `predicate` returns - * truthy for. The predicate is invoked with two arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pickBy(object, _.isNumber); - * // => { 'a': 1, 'c': 3 } - */ - function pickBy(object, predicate) { - if (object == null) { - return {} - } - var props = arrayMap(getAllKeysIn(object), function (prop) { - return [prop] - }) - predicate = getIteratee(predicate) - return basePickBy(object, props, function (value, path) { - return predicate(value, path[0]) - }) - } - - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - path = castPath(path, object) - - var index = -1, - length = path.length - - // Ensure the loop is entered when path is empty. - if (!length) { - length = 1 - object = undefined - } - while (++index < length) { - var value = object == null ? undefined : object[toKey(path[index])] - if (value === undefined) { - index = length - value = defaultValue - } - object = isFunction(value) ? value.call(object) : value - } - return object - } - - /** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, ['x', '0', 'y', 'z'], 5); - * console.log(object.x[0].y.z); - * // => 5 - */ - function set(object, path, value) { - return object == null ? object : baseSet(object, path, value) - } - - /** - * This method is like `_.set` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.setWith(object, '[0][1]', 'a', Object); - * // => { '0': { '1': 'a' } } - */ - function setWith(object, path, value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined - return object == null - ? object - : baseSet(object, path, value, customizer) - } - - /** - * Creates an array of own enumerable string keyed-value pairs for `object` - * which can be consumed by `_.fromPairs`. If `object` is a map or set, its - * entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entries - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairs(new Foo); - * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) - */ - var toPairs = createToPairs(keys) - - /** - * Creates an array of own and inherited enumerable string keyed-value pairs - * for `object` which can be consumed by `_.fromPairs`. If `object` is a map - * or set, its entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entriesIn - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairsIn(new Foo); - * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) - */ - var toPairsIn = createToPairs(keysIn) - - /** - * An alternative to `_.reduce`; this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own - * enumerable string keyed properties thru `iteratee`, with each invocation - * potentially mutating the `accumulator` object. If `accumulator` is not - * provided, a new object with the same `[[Prototype]]` will be used. The - * iteratee is invoked with four arguments: (accumulator, value, key, object). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @returns {*} Returns the accumulated value. - * @example - * - * _.transform([2, 3, 4], function(result, n) { - * result.push(n *= n); - * return n % 2 == 0; - * }, []); - * // => [4, 9] - * - * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } - */ - function transform(object, iteratee, accumulator) { - var isArr = isArray(object), - isArrLike = isArr || isBuffer(object) || isTypedArray(object) - - iteratee = getIteratee(iteratee, 4) - if (accumulator == null) { - var Ctor = object && object.constructor - if (isArrLike) { - accumulator = isArr ? new Ctor() : [] - } else if (isObject(object)) { - accumulator = isFunction(Ctor) - ? baseCreate(getPrototype(object)) - : {} - } else { - accumulator = {} - } - } - ;(isArrLike ? arrayEach : baseForOwn)( - object, - function (value, index, object) { - return iteratee(accumulator, value, index, object) - } - ) - return accumulator - } - - /** - * Removes the property at `path` of `object`. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 7 } }] }; - * _.unset(object, 'a[0].b.c'); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - * - * _.unset(object, ['a', '0', 'b', 'c']); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - */ - function unset(object, path) { - return object == null ? true : baseUnset(object, path) - } - - /** - * This method is like `_.set` except that accepts `updater` to produce the - * value to set. Use `_.updateWith` to customize `path` creation. The `updater` - * is invoked with one argument: (value). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.update(object, 'a[0].b.c', function(n) { return n * n; }); - * console.log(object.a[0].b.c); - * // => 9 - * - * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); - * console.log(object.x[0].y.z); - * // => 0 - */ - function update(object, path, updater) { - return object == null - ? object - : baseUpdate(object, path, castFunction(updater)) - } - - /** - * This method is like `_.update` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.updateWith(object, '[0][1]', _.constant('a'), Object); - * // => { '0': { '1': 'a' } } - */ - function updateWith(object, path, updater, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined - return object == null - ? object - : baseUpdate(object, path, castFunction(updater), customizer) - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object == null ? [] : baseValues(object, keys(object)) - } - - /** - * Creates an array of the own and inherited enumerable string keyed property - * values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.valuesIn(new Foo); - * // => [1, 2, 3] (iteration order is not guaranteed) - */ - function valuesIn(object) { - return object == null ? [] : baseValues(object, keysIn(object)) - } - - /*------------------------------------------------------------------------*/ - - /** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ - function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower - lower = undefined - } - if (upper !== undefined) { - upper = toNumber(upper) - upper = upper === upper ? upper : 0 - } - if (lower !== undefined) { - lower = toNumber(lower) - lower = lower === lower ? lower : 0 - } - return baseClamp(toNumber(number), lower, upper) - } - - /** - * Checks if `n` is between `start` and up to, but not including, `end`. If - * `end` is not specified, it's set to `start` with `start` then set to `0`. - * If `start` is greater than `end` the params are swapped to support - * negative ranges. - * - * @static - * @memberOf _ - * @since 3.3.0 - * @category Number - * @param {number} number The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - * @see _.range, _.rangeRight - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - * - * _.inRange(-3, -2, -6); - * // => true - */ - function inRange(number, start, end) { - start = toFinite(start) - if (end === undefined) { - end = start - start = 0 - } else { - end = toFinite(end) - } - number = toNumber(number) - return baseInRange(number, start, end) - } - - /** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(lower, upper, floating) { - if ( - floating && - typeof floating != 'boolean' && - isIterateeCall(lower, upper, floating) - ) { - upper = floating = undefined - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper - upper = undefined - } else if (typeof lower == 'boolean') { - floating = lower - lower = undefined - } - } - if (lower === undefined && upper === undefined) { - lower = 0 - upper = 1 - } else { - lower = toFinite(lower) - if (upper === undefined) { - upper = lower - lower = 0 - } else { - upper = toFinite(upper) - } - } - if (lower > upper) { - var temp = lower - lower = upper - upper = temp - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom() - return nativeMin( - lower + - rand * - (upper - - lower + - freeParseFloat('1e-' + ((rand + '').length - 1))), - upper - ) - } - return baseRandom(lower, upper) - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' - * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' - */ - var camelCase = createCompounder(function (result, word, index) { - word = word.toLowerCase() - return result + (index ? capitalize(word) : word) - }) - - /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()) - } - - /** - * Deburrs `string` by converting - * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) - * letters to basic Latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ - function deburr(string) { - string = toString(string) - return ( - string && - string.replace(reLatin, deburrLetter).replace(reComboMark, '') - ) - } - - /** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search up to. - * @returns {boolean} Returns `true` if `string` ends with `target`, - * else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ - function endsWith(string, target, position) { - string = toString(string) - target = baseToString(target) - - var length = string.length - position = - position === undefined - ? length - : baseClamp(toInteger(position), 0, length) - - var end = position - position -= target.length - return position >= 0 && string.slice(position, end) == target - } - - /** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string) - return string && reHasUnescapedHtml.test(string) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string - } - - /** - * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", - * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https://lodash\.com/\)' - */ - function escapeRegExp(string) { - string = toString(string) - return string && reHasRegExpChar.test(string) - ? string.replace(reRegExpChar, '\\$&') - : string - } - - /** - * Converts `string` to - * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example - * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' - * - * _.kebabCase('fooBar'); - * // => 'foo-bar' - * - * _.kebabCase('__FOO_BAR__'); - * // => 'foo-bar' - */ - var kebabCase = createCompounder(function (result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase() - }) - - /** - * Converts `string`, as space separated words, to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the lower cased string. - * @example - * - * _.lowerCase('--Foo-Bar--'); - * // => 'foo bar' - * - * _.lowerCase('fooBar'); - * // => 'foo bar' - * - * _.lowerCase('__FOO_BAR__'); - * // => 'foo bar' - */ - var lowerCase = createCompounder(function (result, word, index) { - return result + (index ? ' ' : '') + word.toLowerCase() - }) - - /** - * Converts the first character of `string` to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.lowerFirst('Fred'); - * // => 'fred' - * - * _.lowerFirst('FRED'); - * // => 'fRED' - */ - var lowerFirst = createCaseFirst('toLowerCase') - - /** - * Pads `string` on the left and right sides if it's shorter than `length`. - * Padding characters are truncated if they can't be evenly divided by `length`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.pad('abc', 8); - * // => ' abc ' - * - * _.pad('abc', 8, '_-'); - * // => '_-abc_-_' - * - * _.pad('abc', 3); - * // => 'abc' - */ - function pad(string, length, chars) { - string = toString(string) - length = toInteger(length) - - var strLength = length ? stringSize(string) : 0 - if (!length || strLength >= length) { - return string - } - var mid = (length - strLength) / 2 - return ( - createPadding(nativeFloor(mid), chars) + - string + - createPadding(nativeCeil(mid), chars) - ) - } - - /** - * Pads `string` on the right side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padEnd('abc', 6); - * // => 'abc ' - * - * _.padEnd('abc', 6, '_-'); - * // => 'abc_-_' - * - * _.padEnd('abc', 3); - * // => 'abc' - */ - function padEnd(string, length, chars) { - string = toString(string) - length = toInteger(length) - - var strLength = length ? stringSize(string) : 0 - return length && strLength < length - ? string + createPadding(length - strLength, chars) - : string - } - - /** - * Pads `string` on the left side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padStart('abc', 6); - * // => ' abc' - * - * _.padStart('abc', 6, '_-'); - * // => '_-_abc' - * - * _.padStart('abc', 3); - * // => 'abc' - */ - function padStart(string, length, chars) { - string = toString(string) - length = toInteger(length) - - var strLength = length ? stringSize(string) : 0 - return length && strLength < length - ? createPadding(length - strLength, chars) + string - : string - } - - /** - * Converts `string` to an integer of the specified radix. If `radix` is - * `undefined` or `0`, a `radix` of `10` is used unless `value` is a - * hexadecimal, in which case a `radix` of `16` is used. - * - * **Note:** This method aligns with the - * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category String - * @param {string} string The string to convert. - * @param {number} [radix=10] The radix to interpret `value` by. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {number} Returns the converted integer. - * @example - * - * _.parseInt('08'); - * // => 8 - * - * _.map(['6', '08', '10'], _.parseInt); - * // => [6, 8, 10] - */ - function parseInt(string, radix, guard) { - if (guard || radix == null) { - radix = 0 - } else if (radix) { - radix = +radix - } - return nativeParseInt( - toString(string).replace(reTrimStart, ''), - radix || 0 - ) - } - - /** - * Repeats the given string `n` times. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to repeat. - * @param {number} [n=1] The number of times to repeat the string. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {string} Returns the repeated string. - * @example - * - * _.repeat('*', 3); - * // => '***' - * - * _.repeat('abc', 2); - * // => 'abcabc' - * - * _.repeat('abc', 0); - * // => '' - */ - function repeat(string, n, guard) { - if (guard ? isIterateeCall(string, n, guard) : n === undefined) { - n = 1 - } else { - n = toInteger(n) - } - return baseRepeat(toString(string), n) - } - - /** - * Replaces matches for `pattern` in `string` with `replacement`. - * - * **Note:** This method is based on - * [`String#replace`](https://mdn.io/String/replace). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to modify. - * @param {RegExp|string} pattern The pattern to replace. - * @param {Function|string} replacement The match replacement. - * @returns {string} Returns the modified string. - * @example - * - * _.replace('Hi Fred', 'Fred', 'Barney'); - * // => 'Hi Barney' - */ - function replace() { - var args = arguments, - string = toString(args[0]) - - return args.length < 3 ? string : string.replace(args[1], args[2]) - } - - /** - * Converts `string` to - * [snake case](https://en.wikipedia.org/wiki/Snake_case). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the snake cased string. - * @example - * - * _.snakeCase('Foo Bar'); - * // => 'foo_bar' - * - * _.snakeCase('fooBar'); - * // => 'foo_bar' - * - * _.snakeCase('--FOO-BAR--'); - * // => 'foo_bar' - */ - var snakeCase = createCompounder(function (result, word, index) { - return result + (index ? '_' : '') + word.toLowerCase() - }) - - /** - * Splits `string` by `separator`. - * - * **Note:** This method is based on - * [`String#split`](https://mdn.io/String/split). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to split. - * @param {RegExp|string} separator The separator pattern to split by. - * @param {number} [limit] The length to truncate results to. - * @returns {Array} Returns the string segments. - * @example - * - * _.split('a-b-c', '-', 2); - * // => ['a', 'b'] - */ - function split(string, separator, limit) { - if ( - limit && - typeof limit != 'number' && - isIterateeCall(string, separator, limit) - ) { - separator = limit = undefined - } - limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0 - if (!limit) { - return [] - } - string = toString(string) - if ( - string && - (typeof separator == 'string' || - (separator != null && !isRegExp(separator))) - ) { - separator = baseToString(separator) - if (!separator && hasUnicode(string)) { - return castSlice(stringToArray(string), 0, limit) - } - } - return string.split(separator, limit) - } - - /** - * Converts `string` to - * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). - * - * @static - * @memberOf _ - * @since 3.1.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the start cased string. - * @example - * - * _.startCase('--foo-bar--'); - * // => 'Foo Bar' - * - * _.startCase('fooBar'); - * // => 'Foo Bar' - * - * _.startCase('__FOO_BAR__'); - * // => 'FOO BAR' - */ - var startCase = createCompounder(function (result, word, index) { - return result + (index ? ' ' : '') + upperFirst(word) - }) - - /** - * Checks if `string` starts with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=0] The position to search from. - * @returns {boolean} Returns `true` if `string` starts with `target`, - * else `false`. - * @example - * - * _.startsWith('abc', 'a'); - * // => true - * - * _.startsWith('abc', 'b'); - * // => false - * - * _.startsWith('abc', 'b', 1); - * // => true - */ - function startsWith(string, target, position) { - string = toString(string) - position = - position == null - ? 0 - : baseClamp(toInteger(position), 0, string.length) - - target = baseToString(target) - return string.slice(position, position + target.length) == target - } - - /** - * Creates a compiled template function that can interpolate data properties - * in "interpolate" delimiters, HTML-escape interpolated data properties in - * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data - * properties may be accessed as free variables in the template. If a setting - * object is given, it takes precedence over `_.templateSettings` values. - * - * **Note:** In the development build `_.template` utilizes - * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) - * for easier debugging. - * - * For more information on precompiling templates see - * [lodash's custom builds documentation](https://lodash.com/custom-builds). - * - * For more information on Chrome extension sandboxes see - * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The template string. - * @param {Object} [options={}] The options object. - * @param {RegExp} [options.escape=_.templateSettings.escape] - * The HTML "escape" delimiter. - * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] - * The "evaluate" delimiter. - * @param {Object} [options.imports=_.templateSettings.imports] - * An object to import into the template as free variables. - * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] - * The "interpolate" delimiter. - * @param {string} [options.sourceURL='lodash.templateSources[n]'] - * The sourceURL of the compiled template. - * @param {string} [options.variable='obj'] - * The data object variable name. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the compiled template function. - * @example - * - * // Use the "interpolate" delimiter to create a compiled template. - * var compiled = _.template('hello <%= user %>!'); - * compiled({ 'user': 'fred' }); - * // => 'hello fred!' - * - * // Use the HTML "escape" delimiter to escape data property values. - * var compiled = _.template('<%- value %>'); - * compiled({ 'value': '